초기 멀티모듈 프로젝트에서 main class has not configured 초기 스프링 멀티모듈 프로젝트에서 gradlew build 시에 아래와 같은 문제가 발생할 때가 있습니다. Task :bootJar FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':bootJar'. > Main class name has not been configured and it could not be resolved main class 지정 에러 메시지를 보면 Main class name이 지정되지 않았다고 하는데요. 빌드 시에 진입지점을 찾지 못해서 그렇습니다. 이럴 때는 다음과 같..
실행 계획? 최적의 방법을 찾아내기 위해 수많은 데이터에서 내가 원하는 데이터를 뽑아내기 위한 방법은 정말 다양할 수 있다. 그렇기에 우리는 어떤 방법이 최적이고 최소의 비용이 소모될지 결정해야 한다. 여행 계획을 세부적으로 따져가면서 세우듯이, DBMS에서도 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장되어 있는지 통계 정보를 참조하고, 최적의 실행계획을 수립한다. 옵티마이저가 이런 작업을 담당한다. MySQL에서는 EXPLAIN이라는 키워드로 실행 계획을 확인할 수 있다. 따라서 통계 정보는 실행 계획에서 상당히 중요한데, 레코드 건수가 많지 않으면 통계 정보가 부정확하여 엉뚱한 실행 계획이 도출될 수 있음을 늘 염두에 두고 있어야 한다. 필요에 따라 ANALYZE 명령어로 통..
Sourcetree 안녕하세요! 이번 포스팅에서는 간단하게, git을 GUI 환경에서 사용할 수 있게 해주는 Sourcetree(소스트리)로 rebase와 merge하는 법을 알아보겠습니다. 개인 프로젝트를 할 때나 교육을 받고 있을 때에는 터미널에서 git을 사용했었는데요. 몇 안되는 브랜치를 관리하는 데 있어서는 터미널로 작업하는 것이 공부도 많이 되고 뭔가 더 있어보이고 좋지만, 실제 실무에서는 목적에 따라, 또 하나의 프로젝트에서 개발하는 인원이 많음에 따라 다수의 브랜치를 관리해야 하기 때문에 터미널로 작업하는 것은 부담도 되고, 실수할 여지가 있습니다. 그래서 저도 많은 분들이 애용하시고, 또 지금 팀에서 활용하고 있는 Sourcetree로 넘어와서 조금씩 익숙해지고 있는 중입니다. Sourc..
인덱스란? 색인 (찾아보기) 보통 인덱스는 책 끝에 있는 색인으로 많이 비유가 된다. 색인의 내용을 통해 실제 데이터(책의 내용)을 찾아가게 되는데, 인덱스도 이와 유사하다. 테이블 칼럼의 값을 키로, 실제 데이터가 있는 곳의 주소를 값으로 하여 인덱스를 만들어두면, 빠르게 원하는 컬럼만을 찾아가서 조회할 수 있다. 여기서 가장 중요한 것이 바로 정렬이다. 책의 색인과 마찬가지로, 인덱스도 데이터를 최대한 빠르게 찾아갈 수 있게 칼럼의 값을 주어진 순서로 미리 정렬해서 보관한다. SortedList VS. ArrayList 프로그래밍 언어의 자료구조로 말하자면, 인덱스는 SortedList와, 일반적인 데이터 파일은 ArrayList와 유사하다고 볼 수 있다. ArrayList는 데이터가 저장되는 순서대..
이 글은 우아한형제들 기술블로그에 기고한 글과 동일한 글입니다. 안녕하세요-! 우아한형제들 정산시스템팀 신입 개발자 박우빈입니다. 예전부터 계속 눈팅만 하면서 구경하던 우아한형제들 기술블로그에 제가 지금 localhost:4000을 띄우고 글을 작성하고 있다니 쉽게 믿기지 않네요ㅎㅎ 오늘은 제가 입사한 후 팀 내에서 진행했던 정산 어드민 파일럿 프로젝트에 대해 나눠보려고 합니다. 많은 분들이 이미 잘 아시는 내용이겠지만, 주니어 개발자의 성장기라고 생각하면서 읽어주시면 감사하겠습니다 :-) 입사 전... 팀이 정해지고 나서 제 앞에 놓여진 것은 두 선배님들의 파일럿 프로젝트 블로그 글이었습니다. 나중에 제 돌보미가 되신 갓보미 갓갓보미 세희님의 글과 늘 모두의 편인 멋남 개발자 태현님의 글. 그리고 눈에..
Entity에서 일급 컬렉션을? 최근 프로젝트를 진행하던 중 두 Entity를 양방향으로 묶고, 로직을 추가하던 중에 @OneToMany 부분의 List를 가공해야 하는 일이 생겼습니다. 컬렉션을 가공할 일이 생기면 가장 먼저 떠오르는 것은 일급 컬렉션인데요. 지금까지 그럴 일이 없어서인지 한번도 엔티티 안에서 일급 컬렉션을 사용해 본 적이 없었다는 것을 깨달았습니다. 도메인 레이어를 풍성하게 상황은 다음과 같았습니다. @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class Orders extends BaseEntity { // ... @OneToMany(mappedBy = "orders", cascade = Casc..
시작의 설렘 프리코스 첫 기억은 간절한 마음으로 한 달이라는 시간을 보냈던 프리코스부터 시작한다. 1차 지원을 합격한 후 3월 말부터 4월 초까지 3주 간의 프리코스에 매진했다. 당시에 국비지원 학원을 다니고 있었는데, 원하던 교육 분위기와 달라 나에게 잘 맞지 않는 수업과 여러모로 힘들었던 팀 프로젝트는 테크코스가 아니면 안될 것 같다는 간절한 마음을 더욱 강하게 만들어주었다. 밥을 급히 먹고 나서도 10분 밖에 남지 않는 짧은 점심시간에 청계천을 매일 같이 산책했다. 산책하면서 끊임없이 되뇌었다. 테크코스..테크코스.. 주어진 미션에 나의 최대와 최선을 담아내기 위해 수십 번을 고민했다. 어떻게 하면 채점하시는 분들이 코드를 통해 나를 가감 없이 읽을 수 있을까? 지금 다시 찾아보니 매번 이메일로 제..
Table Of Contents 왜 나만 없어 TOC 블로그를 티스토리로 이전하고 나서, 마크다운 편집기 빼고 다 좋은데 다른 블로그들이 부러웠던 점은 바로 글 옆에 생기는 소제목 목차였습니다. 많은 분들과 마찬가지로, 작성의 편리함과 비교적 빠른 생산성 때문에 마크다운으로 글을 자주 작성하는 편인데요. 소제목들을 쭉 모아서 만든 글 목차는 휑한 블로그 사이드 바도 채워주고, 지금 사용자가 글의 어디쯤을 읽고 있는지, 얼마나 이 재미없는 글이 많이 남았는지 알려주는 좋은 기능이라 생각했습니다. 클릭하면 해당 위치로 글 이동도 손쉽게 할 수 있구요. 다른 블로그 플랫폼들을 보면, github.io에도 이런게 종종 보이고, velog에도 보이고, 세상 모두가 다 가지고 있는데 티스토리만 없는 겁니다. 찾다보..