덕토피아

회사 프로젝트 중에 멀티모듈을 사용하는 레포가 있습니다. gradle 의존성을 정리하던 와중 공통 모듈의 의존성을 포함하지 못하는 이슈가 생겼습니다. 이번에는 해당 이슈를 트러블슈팅한 경험을 소개하겠습니다. 프로젝트 구조 프로젝트 구조는 다음과 같습니다. example-common이라는 이름의 공통 모듈이 하나, example-common을 import 하는 example-service 서비스가 있습니다. example-common (공통모듈) example-service (서비스) example-common 모듈의 build.gradle 내용은 다음과 같습니다. 전체는 아니고 일부만 가져왔습니다. dependencies { implementation 'org.elasticsearch.client:ela..
· 레퍼런스
스프링 부트 애플리케이션인 lombok과 자바 14에서 출시된 새로운 기능인 record 클래스, 두 가지를 비교해 봅시다. 이 둘의 차이점과 어떤 것을 사용하는 것이 더 나은지 논의하기 전에, record와 lombok에 대해 간단하게 알아보겠습니다. Project Lombok Lombok은 에디터와 빌드 도구에 자동으로 연결되어 자바 개발 속도를 높여주는 자바 라이브러리입니다. getter와 equals 메서드를 작성할 필요가 없습니다. 어노테이션 하나만 추가하면 완전한 기능을 추가할 수 있으니까요. 자바로 개발하면서 매번 클래스에 getter/setter를 선언하는 것은 매우 고통스러운 일이었습니다. 새로운 클래스가 생성될 때마다 모든 빈에 대해 동일한 단계를 추가하는 것은 나쁜 디자인일 겁니다. ..
엘라스틱서치는 검색에 뛰어난 성능을 보이기 때문에 지원하는 쿼리의 종류도 많습니다. 구글링을 통해 손쉽게 사용할 수 있지만 어떤 상황에 어떤 쿼리를 사용해야 할지 미리 알고 있다면 찾는 수고로움도 줄어들 것입니다. 이번에는 엘라스틱서치의 기본 쿼리에 대해 알아보겠습니다. 1. 검색 대상 지정 엘라스틱서치는 다양한 종류의 검색 쿼리를 제공하지만, 그중 어떤 쿼리를 사용해도 동일한 검색 API를 사용합니다. 사용되는 API는 다음과 같습니다. GET [인덱스 이름]/_search POST [인덱스 이름]/_search GET _search POST _search 인덱스 이름을 지정하지 않으면 전체 인덱스에 대해서 검색합니다. 성능적인 부담이 되므로 인덱스 이름을 지정해서 쿼리를 날리는 것을 권장합니다. 인덱..
· 이것저것
작년 겨울에 시작했던 우아한 스터디가 12월 말에 끝나게 되어서, 후기를 작성해 볼까 합니다. 총 두달동안 진행되었고, 스터디 대상 책은 "엘라스틱서치 바이블"이었습니다. 스터디 신청하기 전에 잠깐 목차를 훑어보았었는데, 엘라스틱서치를 공부해보고자 하는 사람에게 걸맞아 보였습니다. 저 역시 검색 팀에 있었기에 스터디에 흥미를 가지고 참가 신청을 하게 되었습니다. 스터디 참가는 구글 폼으로 내야 했었습니다. 이름과 휴대폰 번호, 직무 및 경력, 소속 등 간단하게 적을 수 있는 것들을 적고 나니 가장 중요한 질문인 '본 스터디를 참가하는 이유'가 나왔습니다. 아마 이 답변으로 스터디에 참가할 사람을 선발하는 거라고 생각했기에, 꽤나 공을 들여서 작성했습니다. 답변 전문을 올리지는 못하겠지만(부끄럽기도 하고)..
· 이것저것
벌써 2023년이 하루도 남지 않았습니다. 미루어왔던 올해 회고 글을 작성하면서 내년의 계획도 세워보고자 합니다. 좋았던 점은 파란색으로, 아쉬웠던 점은 빨간색으로 표시하겠습니다. 2023년 회고 [ 개발 공부에 집중하기 ] [리뷰] 개발자를 위한 글쓰기 가이드 [리뷰] 좋은 코드, 나쁜 코드 [리뷰] 객체지향의 사실과 오해 [리뷰] 프로그래머의 길, 멘토에게 묻다 [리뷰] 육각형 개발자 [리뷰] 스트리트 코더 [리뷰] 필독! 개발자 온보딩 가이드 [강의] 유데미 기술블로그로 알아보는 테크니컬 라이팅 수강 후기 올해는 관심 있는 분야의 다양한 개발서적과 강의를 보았습니다. 읽었지만 아직 리뷰를 쓰지 않은 것들도 있어서 이만하면 꽤나 선방했다고 할 수 있겠네요. 조금 아쉬운 것은 리뷰 포스팅을 미룬 것입니..
· 이것저것
"기술"이라는 특정한 주제로 글을 작성하는 데 어려움을 느꼈다면 추천드리고 싶은 강의가 있습니다. 바로 유데미의 기술블로그로 알아보는 테크니컬 라이팅 강의입니다. 총 강의 시간도 약 2시간으로 부담 없이 들어볼 수 있고, 저도 바로 그런 점에서 끌려 수강을 시작하였습니다. 결과는 대만족. 시간을 들여서 완강할만한 강의라는 판단이 들었습니다. 오늘 포스팅에서는 강의를 들으며 습득한 정보를 조금이나마 풀어보겠습니다. 더 많은 정보를 자세하게 얻고 싶다면 역시 강의를 직접 듣는 것이 가장 좋은 선택이겠죠? 테크니컬 라이팅이란 기술 글쓰기로, 풀어 쓰자면 특정 독자를 대상으로 특정 목적을 갖고 특정 정보를 전달하는 글쓰기입니다. 여기서 "특정"이라는 단어가 많이 나왔는데요. 그만큼 일반 문학과 테크니컬 라이팅에..
· 개발서적
언제 한 번 서점에 들렀을 때 우연히 발견한 책이었는데요. 내용을 살짝 훑어보니 유용한 내용이 많은 것 같아 시간이 나면 읽어봐야지 하고 벼르고 있었습니다. 근데 운 좋게 예전에 책 검수에 기여했던 일의 보상으로 책만 출판사의 책을 한 권 고를 수 있게 되어 냉큼 이 책을 골랐습니다. 총 14장으로 되어있고 한 장 한 장 모두 알찬 내용들로 담겨 있었습니다. 목차를 나열하면 다음과 같습니다. 1장. 여정을 시작하며 2장. 역량을 높이는 의식적 노력 3장. 코드와 함께 춤을 4장. 운영 환경을 고려한 코드 작성 5장. 피할 수 없는 코드 의존성의 관리 6장. 테스트! 개발자의 든든한 지원군 7장. 올바로 주고받는 코드 리뷰 8장. 고객 앞으로! 소프트웨어 전달 9장. 긴급대응 온콜 업무 10장. 견고한 소..
· 레퍼런스
처음 컬리에 입사했을 때 팀 내에서는 Java/Spring 스택으로 백엔드 개발을 진행하고 있었습니다. 이전 회사에서도 같은 스택을 사용해서 적응하기에 별 무리 없겠구나~ 했는데 웬걸, 프로젝트 구조가 그동안 봐왔던 것과는 상이했던 거였죠. 원래는 계층형 아키텍처를 사용하였습니다. 흔히 백엔드 개발을 시작하면 배우게 되는 그 Controller/Service/Repository 구조입니다. 가장 단순하고 이해하기 쉬운 구조여서 그런지 학생들을 가르칠 때도 많이 사용하죠. 저도 예외는 아니었습니다. 그러나 마주친 것은 이름조차도 낯선 헥사고날 아키텍처(Hexagonal Architecture)였습니다. 어댑터, 유스케이스, 포트 등 현란한 용어들 사이에서 저는 정신을 차릴 수가 없었습니다. 헥사고날 아키텍..
· 개발서적
길벗 출판사에서 IT 도서 리뷰 요청 제의가 들어왔습니다. 한 달이라는 기한을 잡았는데, 차일피일 미루고 급한 작업이 생기다 보니(변명이겠죠) 마감일을 꽉 채워서 포스팅을 쓰게 되었습니다. 스트리트 코더(Street Coder)란, '이 바닥'에서 여러 시행착오를 겪으며 배웠다는 뜻입니다. 독학으로 마이크로소프트 엔지니어가 된 저자가 시행착오를 겪으며 몸소 깨달은 생존 법칙과 노하우를 집필하였습니다. 실무 경험에 뿌리를 둔 현실적인 조언을 하는 책으로, 주니어 ~ 시니어 모두 읽기 좋은 책입니다. 특히 실무 경험이 없는 신입이 학교에서는 배울 수 없는 노하우로 시야를 넓히고 경험의 차이를 좁힐 수 있을 것입니다. 개발자로 살아가며 저희가 알아가는 중요한 이론들이 있죠. 컴퓨터 과학, 알고리즘, 클린 코드..
자바 언어로 개발하다 보면, 다양한 어노테이션을 활용할 때가 많습니다. 도대체 내부가 어떻게 되어있는지 궁금해서 들어가 보면, 알 수 없는 이상한 코드들과 마주칩니다. 어노테이션을 직접 생성하거나 유심히 공부해보지 않았다면 처음 보는 코드가 많을 겁니다. 비교적 자주 사용하는 @Getter 어노테이션인데도, 내부를 까보면 마치 외계어처럼 낯설기만 합니다. 이번 포스팅에서는 어노테이션이 무엇인지, 종류에는 어떤 것이 있는지, 그리고 샘플 코드를 통해 어노테이션을 조금 더 깊게 알아봅시다. 끝에는 이 낯선 @Getter 코드도 조금은 이해할 수 있을 것입니다. 어노테이션이란? 어노테이션이란 과연 무엇일까요? 단순히 앞에 골뱅이(@) 기호를 붙인 것일까요? 사용법으로는 맞지만, 우리가 원하는 어노테이션의 정의..
둘기덕
'분류 전체보기' 카테고리의 글 목록 (5 Page)