안녕세계
Spring Bean은 Spring IoC Container에 의해 관리되는 객체를 의미합니다. Spring IoC Container가 생성, 의존성 주입, 초기화, 사용, 소멸 과정을 책임지게 되는데, 이때 Spring Bean Life Cycle은 다음과 같습니다. 1. 객체 생성: IoC Continaer가 Bean을 생성2. 의존성 주입: Bean 의존성 주입3. 초기화: Bean을 사용 가능한 상태로 초기화 작업 실행4. 사용: 애플리케이션에서 Bean을 사용5. 소멸: 애플리케이션이 종료되거나 Bean 수명이 끝나면 소멸 작업 실행1. 객체 생성Spring IoC Container는 애플리케이션의 Bean 정의에 따라 객체를 생성합니다. Bean 정의 방법은 (1) XML Config, (2)..
Life수영 배우기올해 처음으로 수영을 배웠습니다. 작년에 친구들과 베트남 여행에서 저만 수영을 못해 물놀이를 제대로 즐기지 못한 아쉬움이 남아, 새해 계획으로 수영을 배우기로 결심했습니다. 마침 집 근처에 수영장이 있어 주 3회 새벽 6시에 수영을 다녔습니다. 와이프와 함께 시작했던 덕분에 서로 독려하며 꾸준히 이어갈 수 있었습니다.반 년 동안 발차기부터 시작해 접영까지 배울 수 있어 의미있는 시간이었습니다. (완벽한 접영이라기보다는 흉내에 가까웠지만) 물에 뜨는 방법조차 몰랐던 제가 네 가지 영법(자유형, 배영, 평영, 접영)을 배웠다는 사실이 아직도 신기합니다. 특히 자유형과 평영이 배워가는 재미가 컸고, 매일 조금씩 성장하는 스스로를 보며 자존감도 많이 올랐습니다.수영을 통해 체중도 자연스럽게 줄..
헥사고날 아키턱처란?헥사고날 아키텍처는 애플리케이션 코어(비즈니스 로직)와 외부 요소(예: 웹, 데이터베이스, 외부 시스템)를 분리하기 위해 설계된 아키텍처입니다. 헥사고날 아키텍처는 시스템을 애플리케이션 코어와 외부 요소로 나누고, 포트(Ports)와 어댑터(Adapters)를 통해 애플리케이션 코어와 외부 요소를 연결합니다. 따라서, 포트와 어댑터 아키텍처(ports-and-adapters architecture)라고도 불립니다.계층형 아키텍처와 헥사고날 아키텍처계층형 아키텍처(Layered Architecture)계층형 아키텍처는 웹, 도메인, 영속성 계층으로 구성된 애플리케이션 구조를 의미합니다. 계층형 아키텍처는 의존성이 상위 계층에서 하위 계층으로만 흐릅니다. 즉, 웹 계층은 도메인 계층에 의..
ArchUnit이란?보통 팀마다 정해져있는 아키텍처가 문서로 작성되어 있거나 기존 코드의 아키텍처를 참조해가며, 개발을 진행하는 경우가 많을 것 입니다. 아키텍처에 위배되는 개발이 되는 것을 미연에 방지하기 위해서는 어떤 방법이 좋을까요? 팀에서 정의한 아키텍처를 위배했을때 코드리뷰를 통해서 잘못된 아키텍처를 바로 잡을 수도 있겠지만, 코드리뷰에서는 비즈니스 로직에 대한 검증을 중점적으로 하고 아키텍처와 관련된 부분은 자동화하는 편이 더 효율적일 것입니다. ArchUnit은 Java 애플리케이션의 아키텍처 규칙을 코드로 정의하고 테스트할 수 있게 해주는 오픈 소스 라이브러리입니다. 애플리케이션의 아키텍처가 복잡해지고 방대해질수록 각 계층 간의 의존성을 유지하고 코드의 일관성을 보장하는 것이 중요해집니다...
글또를 시작하며지난 글또 8기를 시작으로, 글또 9기 그리고 마지막 10기까지 참여하게 되었습니다. 글또라는 커뮤니티를 통해서 글쓰는 습관을 만들 수 있었고, 이 계기로 우아한형제들 기수블로그에 WMS 재고 이관을 위한 분산 락 사용기를 기고할 수 있었다고 생각합니다. 그래서 이제는 아는 것을 글로 정리하고 공유하는 것이 조금은 익숙해진 것 같습니다. 글또를 시작한지 2023년 2월 이니, 꾸준히 글을 쓴지 곧 2년이 되어지만 익숙해진 것 뿐 글쓰기라는 것은 여전히 참 어려운 것 같습니다.글또를 돌아보며10기에서는 지난 8기/9기 활동에서 얻은 것 외에도 다양한 소모임 활동과 새로운 분들을 만나 뵙도록 노력하고자 합니다. 8기에서는 글쓰기 급급했던 것 같고, 9기는 운영진 활동과 회사 업무를 병행하다보니..
@PostPersist와 @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)는 모두 Spring에서 트랜잭션 관련 이벤트를 처리하는데 사용됩니다. 두 어노테이션은 동작 시점과 사용 용도가 다르므로 차이를 이해하고 사용해야합니다. 본 포스팅에서는 두 어노테이션의 차이점에 대해 알아봅니다. @PostPersist동작 시점엔티티가 영속성 컨텍스트에 저장된 직후 호출됩니다. 즉, persist 메서드가 호출된 후를 의미합니다.데이터베이스에 INSERT 연산이 수행된 후 호출되며, 트랜잭션 commit이 되기 전에 호출됩니다.fun main() { val emf: EntityManagerFactory = Persistence.createEn..
2023년 12월 10일부터 2024년 5월 12일까지 약 6개월 간의 글또 9기 활동을 마무리하며 KTP 회고 글을 작성해 봅니다.Keep글또 9기를 마무리하며 앞으로도 유지하고 싶은 것은?글또 8기에 이어서 9기 활동을하면서 벌써 1년이 넘는 시간 동안 매달 1회 이상의 글을 작성했습니다. 지난 기수부터 활동한 덕분에 꾸준히 글 쓰는 습관을 유지할 수 있었고, 이제는 글을 쓰지 않으면 조금은 어색한 시점이 다가 온 것 같습니다. 앞으로도 글을 쓰는 활동을 이어가려고 합니다. 다만, IT 관련된 글이 아닌 다양한 주제의 글을 작성하고자 합니다. 이번 기수에서 발행한 글들이 모두 기술과 관련된 글이었다는 점은 조금 아쉬웠던 것 같습니다. IT 관련된 글이 아니더라도, 글을 쓴다는 행위 자체가 제 스스로에..
MDC란? MDC(Mapped Diagnostic Context)는 스레드 단위로 데이터를 읽고 쓸 수 있는 기능입니다. MDC를 사용하면 멀티 스레드 환경에서 각 스레드의 실행 컨텍스트를 구분할 수 있어서 모니터링시 추적에 용이합니다. 예를 들어 멀티 스레드 환경에서는 요청 순서대로 로그가 찍히지 않고, 로그가 섞여서 쌓이게 되므로 동일한 스레드의 컨텍스트를 추적하기 위해 MDC를 사용합니다. 스레드 로컬에 대해 알고 계시는 분들은 MDC와 스레드 로컬의 차이점이 무엇인지 궁금하실 수 있을 것 같습니다. 사실, MDC는 내부적으로 스레드 로컬을 사용하고 있어서 별도로 스레드 로컬을 선언할 필요없이 MDC를 바로 사용하면 됩니다. // MDC 내부 public class MDC { static final..