전체 글

MBA + 프로그래밍 공부를 하고 있는 기영이 누나의 개발 일기장
𝑫𝑰𝑨𝑹𝒀

초보 개발자의 오픈소스 기여 (별 거 없음 주의)

배경 사실 이전에 간단한 개발 문서 번역 등 오픈 소스에 기여를 한 적은 있었다. 문서 번역은 크게 어려운 작업이 아니기 때문에 간단하게 작업했었는데, 그 결과물이 웹사이트에 게시된 경험이 있다. 처음 PR을 보내고 머지되기 전까지, 나의 작은 기여가 다른 사람에게 도움이 된다는 것에 즐거움을 느껴 긍정적인 마음을 가지고 있었다. 하지만 사실 단순한 문서 번역이 아닌, 코드 자체에 기여를 하는 것은 그 오픈 소스 자체에 상당한 이해를 필요로 했기 때문에, 쉽게 도전하기에는 어려움이 있었다. 그러던 와중, 개인적으로 게시판을 만들다가 기존의 클래스 검색에 DB 데이터를 꺼내오도록 하는 것보다 검색 성능 향상을 위해 Elastic Search를 이용하면 훨씬 간단하게 사용할 수 있을 것이라 기대하게 되었다 ..

𝑷𝒓𝒐𝒈𝒓𝒂𝒎𝒎𝒊𝒏𝒈/𝐽𝐴𝑉𝐴

[JAVA / 모던 자바 인 액션] 람다 표현식

Modern Java in action이라는 책의 스터디를 시작했다! 첫번째 주제로 나는 세번째 챕터였던 람다 표현식을 선택했다. 왜냐하면 람다 표현식은 막상 어렵다고 느껴져서인지 잘 안쓰게 되더라... 오늘 이 정리를 계기로 람다 표현식을 더 자주 사용할 수 있었으면 좋겠다. 3.1 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다. 즉, 함수(메서드)를 간단한 식(expression)으로 표현하는 방법이다. 람다의 특징 익명 : 보통의 메서드와 달리 이름이 없는 함수이므로 익명이라 표현 int max(int a, int b){return a > b ? a : b;} (a, b) -> a > b ? a : b 처럼 이름이 없다. 함수 : 특정 클래스에 종속되지 않으므..

𝑾𝑬𝑩/𝑆𝑃𝑅𝐼𝑁𝐺

[프로젝트] 빌드 관리 도구 선택 - Maven VS Gradle

이전에 스프링부트 프로젝트를 진행할 때, Maven을 사용하여 개발했었다. Maven과 Gradle이 대표적인 JAVA의 빌드 관리 도구라는 것은 알고 있었지만, 그 둘의 정확한 차이는 무엇인지, 뭐가 다른 건지 궁금해졌다. 오늘 포스팅에서는 Maven과 Gradle, 그리고 그 둘의 차이점을 비교해보고 새로 시작하는 프로젝트에서 어떤 빌드 관리 도구를 선택하는 게 이로울지 정리해보는 시간을 가지도록 하자! 빌드란 무엇일까? 먼저, 빌드(Build)의 단어 뜻은 '짓다'라는 뜻으로 모두가 알고 있을 것이다. 건물을 짓는다고 생각을 해볼 때, 우리는 설계도가 필요하고, 기초 공사를 하고, 철근을 세우고, 벽을 세우고... 등 다양한 과정들을 거쳐 완성하게 된다. 프로그래밍에서도 마찬가지이다. 빌드란 소스코..

𝑷𝒓𝒐𝒈𝒓𝒂𝒎𝒎𝒊𝒏𝒈/𝐽𝐴𝑉𝐴

[JAVA] Optional 개념 및 사용법

REST API 코드리뷰에서 받은 피드백 중, get() 사용 시 NoSuchElementException이 발생할 수 있어 orElseThrow를 사용해보라는 피드백을 받았다. 코드를 수정하면서 Optional의 주의사항을 간단히 찾아보았는데, 블로그에 정리를 하면 좋을 것 같다고 생각이 되어 글을 작성하게 되었다! Optional 이란? 먼저 공식문서에서 정의하는 Optional은 위와 같다. 해석하자면, Optional은 non-null값을 가지고 있을 수도 있고 가지고 있지 않을 수도 있는 컨테이너 객체이다. 만약 값이 존재한다면 isPresent() 메소드 사용 시, true를 리턴하게 된다. 반면 값이 존재하지 않는다면, 객체는 비어있는 것(empty)으로 여겨지고, isPresent() 메소..

𝑾𝑬𝑩/𝑃𝑟𝑜𝑗𝑒𝑐𝑡

[프로젝트] 데이터베이스 선택 - RDBMS VS NoSQL

6개월 전 진행한 라스트프레시라는 프로젝트에 대해 기술적으로 아쉬움이 많이 남는다... 지금도 많이 부족한 나지만, 다시 코드를 보면 부족한 점이 정말 많이 보인다... ㅠㅠ 공부를 할 수록 어떤 점에서 개선이 필요한지 눈에 보이기 시작하고, '이건 이렇게 할 걸' 하는 후회가 들어, 다음 진행할 프로젝트에 대해서는 무언가를 결정할 때 이유를 생각해보고 정리하면 좋겠다는 생각이 들었다. 그래서 오늘 새롭게 생성한 Project 카테고리에서는, 내가 추후 프로젝트를 진행하면서 생각하고 도입 및 개선한 내용 등을 기록할 예정이다! 다시 본론인 데이터베이스로 돌아와서, 여태 한 프로젝트들도 그렇고 DB에서 MySQL을 사용했었다. 사실 토이 프로젝트를 하면서 Oracle도 사용해 본 적이 있지만, 항상 프로젝..

𝑷𝒓𝒐𝒈𝒓𝒂𝒎𝒎𝒊𝒏𝒈/𝐶𝑆

[알고리즘] 시간 복잡도, 빅오 표기법(Big-O notation)

코딩테스트 풀이를 풀다보면 굉장히 많이 다루게 되는 시간 복잡도. 블로그에도 몇 번 언급한 적이 있는데, 어렴풋이 알고있는 개념이지만 오늘 예제를 통해 더 자세히 알아보도록 하자! 시간 복잡도란? 먼저 시간 복잡도란 무엇일까? 컴퓨터 공학에서는 알고리즘의 기본 동작을 실행할 때 특정한 시간이 소요된다고 추정한다. 그리고 시간 복잡도란, 이러한 알고리즘의 동작들을 실행하는 데에 총 소요된 시간을 나타낸 것이다. 쉽게 설명하면 알고리즘 수행에 필요한 단계의 수가 알고리즘의 효율성을 결정하는 주된 요인이라는 것이다. 당연하게 들릴 수 있지만, 알고리즘은 연산이 많아질 수록 그 연산 속도가 오래걸린다. 즉, 시간 복잡도는 알고리즘 내 연산 단계의 횟수의 영향을 받는다. 빅 오 표기법 (Big O notation..

𝑪𝒐𝒅𝒊𝒏𝒈 𝑻𝒆𝒔𝒕

[프로그래머스] 주식 가격 (이중 for문, Stack)

# 문제 https://school.programmers.co.kr/learn/courses/30/lessons/42584 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. prices의 각 가격은 1 이상 10,000 이하인 자연수입니다. prices의 길이는 2 이상 100,000 이하입니다. 입출력 예 prices return [1, 2, 3, 2, 3] [4, 3, 1, 1, 0]..

𝑷𝒓𝒐𝒈𝒓𝒂𝒎𝒎𝒊𝒏𝒈/𝐽𝐴𝑉𝐴

[JAVA] Stream API 살펴보기 - findFirst() vs findAny() + 병렬 처리

REST API를 공부하는데, 한 아이디에 관련된 Task를 가져오는 getTask 메소드를 만들었고, Task를 가져오기 위해 stream() 을 사용해 해당 id를 필터링 후 findFirst() 메소드를 사용하였다. 그런데 findAny()를 사용하지 않은 이유에 대해 질문이 들어왔고, 이에 대해 공부한 내용을 정리하고자 한다. findFirst() stream에서 가장 첫번째 값의 Optional을 반환하고, stream이 비어있을 경우에는 empty Optional을 반환한다. 만약 stream에 따로 순서가 없을 경우에는 무작위의 (any element) Optional을 리턴한다. findAny() stream의 '일부' 요소를 기술하는 Optional 값을 반환하고, stream이 비어있는..

기누
기영이 누나의 개발일기