본문 바로가기

전체 글73

feign client 파헤쳐보기 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 지금까지 feign client를 많이 사용해 왔지만 제대로 알고 사용하고 있다는 생각이 안 들어서 한번 파헤쳐봐야겠다는 생각이 들었다. feign client 동작에 대한 핵심적인 흐름은 SynchronousMethodHandler의 invoke 메서드와 executeAndDecode 메서드를 보면 알 수 있다. 그전에 먼저 SynchronousMethodHandler에 정의된 필드들을 살펴보자. private final MethodMetadata metadata; private final Target target; private final Client client; private final Retryer r.. 2023. 6. 10.
[Kotlin in Action] 7.5: by 키워드를 통해 위임 프로퍼티 우아하게 구현하기 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 코틀린이 지원하는 위임 프로퍼티는 말 그대로 프로퍼티가 하는 일인 값을 저장하고(setter) 가져오는(getter) 역할을 다른 누군가(객체)에게 위임하는 것을 말한다. 이렇게 프로퍼티가 하는 일을 다른 객체에 위임함으로써 얻을 수 있는 이익이 무엇일까? 우선 이 질문에 공감하기 위해 한 가지 예시를 들어보겠다. 위임프로퍼티 예시: 특정 프로퍼티의 변경을 감지해 이벤트를 발행하고 핸들러에서 이를 처리해야 하는 요구사항이 있다고 가정해 보자 예를 들어, 어떤 객체를 UI에 표시해야 하는 경우 객체가 바뀌면 자동으로 UI도 바뀌어야 한다. 이를 코틀린이 지원하는 키워드 없이 그냥 구현하면 아래와 같이 구현할 수 .. 2023. 5. 29.
Jpa @PrePersist & @PreUpdate 사용해서 Entity 부가정보와 도메인 관심사 분리하기 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. Spring Data Jpa 환경에서 엔티티는 비즈니스 영역의 핵심 도메인이면서 데이터베이스 테이블과 메핑 되는 역할을 한다. 즉, 도메인(비즈니스영역) 관점으로 엔티티를 바라볼 수도 있고 데이터 관점으로 바라볼 수도 있다. 프로젝트를 진행하면서 엔티티는 최대한 데이터 관점이 아니라 도메인 관점으로 바라보고 싶었다. 하지만 데이터에 대한 변경 이력을 남기는 것이 때로는 필요한 테이블이 존재했고, 이러한 관심사는 도메인의 관심사라기보단 데이터나 모니터링의 관심사로 생각되었다. 엔티티의 생성 & 변경에 대한 관리를 수용하면서도 도메인영역(비즈니스로직)에서 이를 노출하지 않는 구조를 고민하던 중 Jpa의 @PrePe.. 2023. 5. 1.
Java HashMap 동작원리와 Hibernate 영속성 컨텍스트의 엔티티 관리 방식 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. JPA를 사용하면서 흔하게 듣는 이야기 중 하나로 엔티티를 작성할 때 equals & hashcode를 id 기반으로 재정의 하라는 말이 있다. 엔티티는 자바 객체이기도 하지만 데이터베이스의 레코드로 보는 것이 좀 더 본질적인 접근일 수 있고 그러한 접근으로 바라봤을 때 id를 기준으로 동등성을 정의하는 게 맞다는 이야기이다. (예를 들어 데이터베이스 입장에서 pk 가 1인 레코드에 대해 자바 객체 인스턴스가 2개가 만들어지면 이 두 인스턴스는 동등하다고 보는 게 자연스럽다.) 위 이야기에 대해 납득을 했고 모든 엔티티에 equals & hashcode 를 재정의 하던 중 한 가지 의문이 들었다. 내가 재정의 .. 2023. 4. 17.