본문 바로가기

전체264

영속성 처리하는 Method에 @transactional는 항상 붙이는게 맞을까? 문제 오늘 회사에서 특정 기능을 배포하자마자 문제가 발생했다. 핀포인트에서 발생하고 스택 트레이스는 다음과 같았다. > lazyinitializationexception could not initialize proxy Spring Boot, JPA 활용하는 개발자에게는 흔히 발생되는 예외중 하나이다. 이 예외가 발생하게된 이유는 무엇일까? 코드를 통해 이해해보자. @Entity public class Order { private long id; @OneToMany(mappedBy = "order", fetch = FetchType.LAZY) private List orderItems; } public interface OrderRepository extends JpaRepository { } @Servi.. 2024. 4. 20.
왜 서비스로더(ServiceLoader)를 알아야 하는가? java docs 에서 Service Loader 를 다음과 같은 한줄로 정의한다. A facility to load implementations of a service. 서비스 구현을 로드하는 기능입니다. 서비스 구현을 로드하는 기능이 왜 필요한지 부터 이해할 필요가 있을 것 같다. (여기서 서비스 구현의 의미는 비지니스 로직이 담겨진 구체적 클래스를 의미한다.) 우리가 라면을 만드는 코딩을 한다고 가정해보자. public class 신라면제조 { public void make() { pourWater(); boilWater(); putNoodle(); boilNoodle(); putSoup(); putVegetable(); } public static void main(String[] args) { .. 2024. 3. 21.
잘 알아보고 사용하자 Java Annotation(주석) 오픈소스를 개발하면서 @AggregateId 라는 필드를 추가할 적이였다. Id 에 대해서 자동생성시키기 위한 @AggregateId(assignStrategy=AUTO or MANUAL) 같이 만들고자 했으나, 그렇게 하면 안될 것 같다는 피드백을 받았다. 왜일까? Java 에서 쓰이는 Annotation 은 무엇인가? 위키 백과 따르면 다음과 같다. 자바 애너테이션(Java Annotation)은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. 보통 @ 기호를 앞에 붙여서 사용한다. JDK 1.5 버전 이상에서 사용 가능하다. 자바 애너테이션은 클래스 파일에 임베디드되어 컴파일러에 의해 생성된 후 자바 가상머신에 포함되어 작동한다. 여기서 말하는 메타데이터는 무엇일까? 메타데이터(m.. 2024. 3. 10.
[특강] 도메인 주도 설계의 사실과 오해 2부 소프트웨어는 도메인에 관련된 문제를 해결하는 것에 초점이 맞춰져 있다. 함께 개발하는 것. 원칙적으로는 그렇다. 도메인 주도 설계의 맥락에서 도메인 모델 = 코드 해결해야할 두 가지 연관된 문제 요구사항에 적합한 모습으로 도메인을 어떻게 모델링할 것인가? 도메인을 반영한 코드를 어떻게 개발할 것인가? = 올바른 모델이 찾는 것이 아니라, 유용한(수정하기 좋은/변경하기 좋은/코드짜기 좋은) 모델을 찾아야 한다. DDD 는 위 두가지를 계속 이야기한다. 도메인을 잘 분석하면 코드로 연결해주는 것을 도와주는 부분이 파트 2에서의 내용 도메인을 분석해서 넣는게 좋은 블록들이 ASSOCIATION / VALUE OBJECT / ENTITY / SERVICE / MODULE 이렇게 해놓고 실제로 동작하는 기능을 만.. 2024. 3. 7.
이벤트스토밍을 처음 주도해보니... 근무중인 팀에서 '이벤트스토밍'이라는 단어는 '낯선' 용어이다. 나에게는 '익숙한' 용어이다. 스타트업 재직 당시 어떤 기획이든 이벤트 스토밍을 우선으로 진행했다. 코딩을 작성하는 코더로서의 역할은 최대한 지연시키고, 개발하고자 하는 것이 무엇인지, 나의 이해관계자들은 무엇이 가치가 있는지 탐구하는 것을 첫번째 목표로 했다. 나와 함께 해준 프론트엔드 개발자 1인, PM 1인. 두 분 모두 이벤트스토밍이라는 것 자체가 처음이라고 나에게 말씀하셨다. 부담감 현재 회사로 이직하고 난 뒤에 대부분의 업무는 1인 1기능 개발 프로세스였다. 그래서 업무가 할당되면 혼자 이벤트스토밍하고 UML, 시퀀스 다이어그램등 다양한 방법을 활용해왔다. 어느 정도 익숙하다고 판단해 점진적으로 팀에 전파하고 싶었던 마음에 함께.. 2024. 1. 19.
2023년 나는 무엇을 했으며, 앞으로 무엇을 성취할 것인가? 폭설이 내리는 2023년 12월 30일 우리 집앞 나의 첫 질문은 이거였다. 22년도와 23년의 가장 큰 변화점은 무엇일까? 이제 이 질문에 대한 대답을 찾아가보자. 2023년도의 나는 다음과 같은 행위를 했다. 어떤 책을 읽었고 무엇을 느꼈는가? 1. 린치핀 - 세스 고딘 2. 심플한 소프트웨어를 진심으로 고민해본 적이 있나요? - 심플 소프트웨어 3. 도메인 주도 개발 시작하기: DDD 핵심 개념 정리부터 구현까지 4. 일에 대해서 - 이게 무슨 일이야 5. 성장에 대해서 - 개발자 원칙 6. 우리 모두는 브랜딩이 될 수 있다 - [오늘부터 나는 브랜드가 되기로 했다] 책을 읽고 7. 어디서 살 것인가? - 유현준 8. 레거시 코드 활용 전략 - Github Link 9. 자바 I/O & NIO 네트.. 2023. 12. 30.
Java 에 Enum Circular Dependency 이라는 말을 들어봤나요? 문제 어느 날과 다르지 않는 기능 개발 중에 이상한 상황을 마주쳤습니다. 코드부터 살펴보겠습니다. enum DisplayType { DISPLAY_1("1", ServiceType.SERVICE_A), DISPLAY_2("2", ServiceType.SERVICE_A), DISPLAY_3("3", ServiceType.SERVICE_B), DISPLAY_4("4", ServiceType.SERVICE_B); private final String name; private final ServiceType serviceType; DisplayType(String name, ServiceType serviceType) { this.name = name; this.serviceType = serviceType; .. 2023. 12. 16.
제멋대로 고집쟁이 개발자가 읽어본 데일 카네기의 인간관계론 이 책은 3~4년 전에 한 번 읽고 덮었던 책이다. 그때는 그냥 자기계발서네? 너무 당연한 이야기를 하는거 아니야?라고 생각했다. 지금와서 이 책을 나는 다시 읽으려고 했던 이유는 무엇이였을까? 무엇보다도 생각흐름이 변화됨을 느꼈다. 과거에는 나 자신에서부터 내 주변으로. 그러니까 안에서 밖으로 향했다면. 시간이 지남에 따라 내 주변보단 나 자신을 먼저 생각하게 되는. 밖에서 안으로 생각흐름이 흘러 간다는 것을 느꼈다. 이 생각흐름은 문제일까? 문제다. 과거의 나는 나보다 내 주변 모든 사람을 더 챙기려고 노력했었다. 그러다보니 어느 시점에는 가까운 나의 친구들보다 최근에 사귄 친구를 더 챙기는 일도 있었고, 내가 해야 될 일을 제대로 해내지 못하면서 사람 만나는 일에 치중 했던 적이 빈번했다. 하지만.. 2023. 11. 11.
매일 약속시간에 늦더라도 프로는 프로다. 나는 상가주택/단독주택이 모여있는 동네에 산다. 그리고 우리집 또한 지하 1층부터 2층까지 있는 상가주택이다. 건물의 나이가 나랑 비슷하니까, 대략 30년이 넘는다. 건물의 나이만큼 주변 동네에는 집수리를 해주는 설비집이 약 200m 간격으로 즐비하다. 오늘 이야기하려는 것은 우리가 매번 수리를 요청하는 설비집 사장님이 있는데 가게명은 '삼정건축'이다. 이 사장님을 보고 있노라면, 맨날 약속시간 정하면 그 시간을 지키지 않지만 프로는 프로구나 라는 생각이 든다. 왜 내가 이런 생각이 들었는지 이야기해보려 한다. 배경 상가주택/단독주택은 집을 지을때, 땅에 흐르는 지하수가 많을 경우 집수정이라는 것을 설치한다. 여기서 집주정이란? 지하수와 각종 슬러시가 모이는 곳을 만든 것이다. 이렇게 물이 모이게 되면 .. 2023. 10. 5.
왜 코드 리팩토링을 수행해야 될까? 지극히 개인적인 생각으로 다른분들과 생각이 다를 수 있습니다. 들어가기 개발을 하면서 코드가 '다소 객체지향적이지 않다'는 느낌의 코드 나래비를 목격하는 경우가 더러 있다. 그럼 우리는 이따금씩 이런 생각이 든다. '이거 내가 좀더 객체지향스럽게 디자인패턴이나 적절한 메소드나 용어를 활용하여 고칠 수 있을 것 같은데?' 라고 말이다. 그리곤 코드를 수정한다. 그리고 배포한다. 과연 이 의식의 흐름대로 행동하는 것이 맞을까? 개발하고 있는 서비스에서 유사한 일이 나에게 반복적으로 발생했다. 이것은 과연 문제일까? 아닐까? 개발자로서 장인정신에 입각하여 당연히 해야되는 것은 아닐까? 나는 리팩토링을 통해 무엇을 얻고 싶었던 걸까? 어떤 코드를 보고 위에서 언급한 것처럼 의식의 흐름으로 고치던 리팩토링을 어느.. 2023. 9. 26.
도메인 이벤트 기반 아키텍처의 이벤트란? 매주 일요일 밤 10시마다 지인과 함께 도메인 이벤트 기반 아키텍처를 이해하는 연습을 하고 있습니다. 도메인 이벤트 기반 아키텍처을 이야기하면 대부분 Event Souring 과 CQRS 가 가장 먼저 언급되곤 합니다. 이 모든 단어의 한 가운데에 있는 것은 바로 이벤트입니다. 아래는 과거에 작성했던 이벤트 관련 블로그 글입니다. 앞으로 이야기 할 부분에 대해서 관련있는 내용이라 읽기를 추천드립니다. 메세지와 이벤트의 차이점은 무엇인가? 들어가기 트레바리에서는 도메인주도설계를 실천하고 있습니다. 도메인주도설계라는 것은 말 그대로 도메인을 중심으로 복수의 도메인이 책임,역할, 협력을 할 수 있도록 개발하는 것을 말합 happy-coding-day.tistory.com 이벤트 스토어(?) 이벤트 소싱(?) .. 2023. 8. 28.
Intellij 북마크 기능(스타 부대지정 같은) / 이전 단어 재사용하기 Intellij 를 활용하면서 자주 사용하려고 했으나 사용할 때마다 단축어를 찾는 2가지 케이스가 있습니다. 바로 북마크 기능과 이전 단어 재사용하기 북마크 기능은 스타크레프트를 했던 사람이라면 친숙한 부대 지정과 비슷합니다. ⌥ F3 또는 Ctrl+F11 – 연상 기호 북마크 추가 일단 눌러보면 다음과 같은 화면이 뜹니다. 여기서 사용하고자 하는 단축키를 선택한다. 만약 1을 누르면 다음과 같이 코드 옆에 지정한 숫자 또는 문자를 찾을 수 있다. ^(MacOs) 또는 Ctrl(Windows)을 누른 상태에서 키보드에 지정된 숫자나 문자를 누르면 북마크로 이동할 수 있습니다. 최종 사용하는 모습 2. ⌥ + / - 이전 단어 재사용 2023. 8. 22.
[회고] 인프콘2023 에서의 발표를 마무리하며 들어가기 올해 저의 버킷리스트 중 하나가 바로 인프콘과 같이 큰 행사에서 발표를 해보는 것이였습니다. 작년 인프콘2022의 경우에는 참여권이 있음에도 다리를 다쳤어서 가지 못했는데, 이번에는 참여할 수 있게 되서 다행이였습니다. 그것도 참여자로서 말이죠. 물론 그 과정이 순탄치 않았습니다. 왜 순탄치 않았을까요? 인프콘2023은 8월 15일날 진행되었는데, 발표자로 선정되었던 날이 5월 24일이였으니, 준비기간까지 포함하면 약 3달간의 마라톤을 달린 셈이 되겠네요. 장장 3개월간 천천히 달리기도 하고 때론 빠르게 달리기도 했던 준비과정에서 대해서 이야기해보려 합니다. 준비&과정 이번에 발표했던 주제는 '오늘도 여러분의 API는 안녕하신가요?' 라는 주제로 발표했었지만, 이전 직장이였던 트레바리에서 만들었.. 2023. 8. 20.
[특강] 도메인주도설계의 사실과 오해 후기 - 조영호 우리가 아는 '객체지향의 사실과 오해' 책에서 말하는 형식의 '도메인 주도 설계의 사실과 오해'가 아니다. 오늘의 특강 핵심 주제는 '도메인 주도 설계'가 어떻게 등장하게 되었는지에 대한 히스토리와 도메인 주도 설계와 객체 지향 프로그래밍에 대한 차이점 에 대해서 포문을 열었다. 우리가 말하는 도메인 주도 설계란? 무엇일까? 조영호님이 말씀하셨던 오해는 '대부분 우리가 말하는 도메인 주도 설계를 한다면?' 값객체, 엔티티, 팩토리, 애그리게이트 와 같은 것을 사용해야지만 도메인 주도 설계를 한다고 생각한다. 하지만 도메인 주도 설계란? 그렇지 어떤 기술적인/기법적인 것에 의존하는 것이 아니다. 그렇다면 도메인주도 설계란 무엇일까? 조영호님이 장표를 사전허가 없이 첨부할 수 없어 비슷하게 만들었습니다. 도.. 2023. 8. 18.
코드가 부채다. - 일주일간 작성한 코드를 오늘 삭제했다. 들어가기 최근에 아주 조금 내가 성장했다고 느낀 계기가 있었다. 최근 회사에서 개발자의 유후 시간이 약 한 달정도 주어졌다. 이 기간동안에는 직군별로 미쳐 시간이 없어 하지 못했던 작업을 할 수 있는 시간이 주어졌다. 기술부채로 쌓여있던 해야될 것을 나열하며 그 중 하나로서 '콘텐츠 슬롯 A/B 테스트 가능한 구조 적용하기' 가 나의 미션이였다. 무엇인지 문장만 보고 이해할 때는 말 그대로 'A/B 테스트가 가능한 구조'를 만드는게 우선이지 않을까? 라는 생각을 하며 동작하는 코드를 살펴보니 실제 동작도 하드 코딩으로서 A/B 테스트를 처리하고 있었다. 여기서 A/B 테스트란? 사용자를 A/B 군집으로 나누어 비지니스 로직/UI 등을 다르게 전달하여 더 나은 선택지를 데이터로서 찾기 위한 수단이다. 하드.. 2023. 7. 31.
Lombok 동작 원리 이해하기(with. Annotation Processor) - 1 들어가기 Java 진영에서 Lombok 은 프로젝트 개발시 Must have Item 처럼 사용되곤한다. 그렇게 된 결정적인 이유는 Java 에서 관례적으로 주로 사용되는 Getter/Setter 를 애노테이션으로 쉽게 해결할 수 있기 때문이다. 그렇다면, Lombok 에서 자주 사용되는 Annotation 은 어떻게 동작하는 걸까? 그리고 Java의 Annotation 은 무엇일까? 엔지니어로 살아온 꽤 긴 시간동안 함께했지만, 깊게 살펴보지 못했던 Lombok 의 Annotation 동작 원리를 이해해보자. Annotation 이란? Java Annotation 은 Lombok 처럼 사용되기 위해 만들어진 것은 아니였다. wiki 를 살펴보면 다음과 같다. In the Java computer pro.. 2023. 7. 29.
산만함, 산만함, 산만함 [도둑맞은 집중력] 책을 읽고 제목부터 인상적인 이 책은 근래에 꾸준히 고민중이던 부분과 맞닿아 있었기 때문에 좀더 고개를 끄덕이면서 읽었다. 비판보다는 공감에 가까웠던 것 같다. '집중력'이 과거보다 짦아짐을 느낀적이 몇번 있다. 핸드폰에 울리는 알림으로 하던 작업을 멈추고 확인하는 행위의 반복, 깊게 고민하는 행위를 하지 않는 행위 등. 그래서 일까? 어느 시점부터 특정 작업을 할 때 핸드폰을 내눈에 띄지 않는 곳에 숨겨두곤 했다. 동시에 맥북의 방해 금지 모드를 켜놓고 작업한다. '도둑맞은 집중력'은 짫은 집중력이 나에게 잠재적 문제일 수 있었던 경고 수준에서 심각한 문제라 정의할 수 있도록 도와주었다. 이제 나도 인정해야 한다는 관점으로 바라보게 된다. 이 책에서 말하는 문제를 사회병이라 간주한다. 여기서 말하는 문제는 자연.. 2023. 6. 18.
다형성과 OCP(Open Closed Principle)은 무슨 관계일까? [리팩토링] 다형성을 이용한 IF 문 제거하기 들어가며 코드를 통해 본격적으로 다형성을 이용한 IF 문 제거하기 를 들어가기 앞서, 왜 IF문을 제거해야 하는지 부터 이해해보자. IF 문을 제거해야 하는 이유로 2가지를 말할 수 있을 것 같다. happy-coding-day.tistory.com 해당 포스팅을에 대한 지인이 피드백을 주셨는데, 몇가지 생각해볼만 부분이 있었고, 관련해서 이야기해보려 합니다. 2가지 맥락으로 이야기할 수 있으며, 다음과 같습니다. 1. Handler 클래스는 여전히 OCP 를 해결 할 수 없다. 2. 다형성과 IF 문을 제거하는 것은 서로 다른 것으로 결이 다른 두 개이다. 언급한 포스팅을 살펴보면, IF 문을 제거하기 전, IF 문의 단점으로 언급한 OCP가 있습니다. 그.. 2023. 5. 27.
[리팩토링] 다형성을 이용한 IF 문 제거하기 들어가며 코드를 통해 본격적으로 다형성을 이용한 IF 문 제거하기 를 들어가기 앞서, 왜 IF문을 제거해야 하는지 부터 이해해보자. IF 문을 제거해야 하는 이유로 2가지를 말할 수 있을 것 같다. 인지 과부하 OCP(Open closed principle) 인지 과부하 IF 라는 키워드를 사용하게 되면, 필연적으로 우리의 두뇌는 IF ELSE 을 고민하게 된다. if(...) { // do Something A } else { // do Something A else... } if 가 한 개일때는 우리의 두뇌는 문제 되지 않는다. 2가지의 경우의 수만 고민하면 된다. 여기에 if문을 중복으로 추가하게 되면 어떻게 될까? if(...) { // do Something A if (...) { // do S.. 2023. 5. 21.
일에 대해서-[이게 무슨일이야] 책을 읽고 이 책을 선정했던 배경에 대해서 말하면서 서두를 열고 싶다. 내가 배민 개발자이기에 이 책을 선정한 것은 아니다. 나의 개발자 인생 중 그동안 지나쳐 온 회사는 인턴기간과 배민을 포함해 총 6곳의 (브릴리언트앤컴퍼니/벅시/카닥/다우기술/트레바리/배민) 회사가 된다. 결코 적은 숫자의 회사가 아니다. 이 회사 중 배민이 가장 인상깊었다. > 첫 출근날, 컬쳐 캠프, 팀장과의 대화, 테크HR과의 대화 등이 있었다. 회사를 이직할 때 경력직이라 따지는 것도 많고, 재는 것도 정말 많았다. 불평불만 많을 시기임에도 '인상깊었다' 라고 말할 수 있는 회사였기에, 배민의 일하는 본질적인 부분에 접근해보고 싶었다. 본질적인 부분에 접근하기 위해, 직접 의장을 만날 수는 없으니, 이 책을 선택하게 되었다. 결론부터 .. 2023. 5. 7.