스프링에서 싱글톤으로 관리하는 빈의 생성주기

스프링 빈 생성주기에 대해서 배웠다. 정확히는 스프링에서 싱글톤으로 관리하는 빈에 대한 생성주기였다. 스프링 컨테이너 생성 스프링 컨테이너의 생성은 말 그대로 Application Context(이하 스프링 컨테이너)의 생성이다. 빈 객체 등록 스프링 컨테이너가 생성되면 빈 객체 등록이 이뤄진다. 이때, 빈이 생성자 주입을 사용하도록 되어있다면, 필요한 의존관계가 빈 객체등록 시점에서 이뤄진다. 의존관계 주입 만약 모든 의존관계가 다 생성자 등록이라면 빈 객체등록이 끝나는 시점에 의존관계 주입도 이미 끝나있을 것이다. 이 의존관계 주입단계에서는 수정자 주입이나, 필드주입을 받는 빈이 주입을 받는다. 초기화 콜백 위 단계에서 의존관계가 주입된 빈들은 초기화 콜백이 수행된다. 초기화 콜백은 Initializ..

Spring 2023.01.26 0

트랜잭션후 메시지 전송을 보장하는 방법, How to guarantee to send events after Transaction

이 글에서 다루는 내용 이 글은 MSA 환경에서 로컬 트랜잭션의 커밋이후 메시지 전송을 보장하는 방법에 대해서 다룹니다. 내용을 다루기 위해서 예시와 함께 작성되었습니다. https://microservices.io/patterns/data/transactional-outbox.html Microservices Pattern: Pattern: Transactional outbox First, write the message/event to a database OUTBOX table as part of the transaction that updates business objects, and then publish it to a message broker. microservices.io 목차 트랜잭션의 커..

Web 2024.04.22 0

MSA에서 다른 서비스의 트랜잭션이 실패된다면 어떻게 해야할까?, Saga

이 글은 MSA 환경에서 다른 서비스의 트랜잭션 Fail으로 인한 보상로직을 작성하는 방법에 대해서 다루는 글입니다. 이 글을 쓰는 이유 최근에 MSA하다가 A 컴포턴트에서 트랜잭션을 마치고, B 컴포넌트에 이벤트를 던져두었더니, B 컴포넌트가 제대로 처리를 못하면 어떻게 해야하나라는 질문을 받았습니다. 그래서 해결책을 찾아보다가 이 해결책으로 Saga pattern을 알게 되었고, Saga pattern에 대해서 공유하고자 글을 씁니다. https://microservices.io/patterns/data/saga.html Microservices Pattern: Pattern: Saga Implement transactions using a saga, which is sequence of local ..

Web 2024.04.13 0

private 함수를 테스트하고 싶을때

이 글을 쓰는 목적 이 글은 private 함수를 테스트하고 싶은 분을 위해 작성된 코드입니다. 이 글에서 다루는 내용 이 글을 테스트 프레임워크를 통해서 private 함수를 테스트하는 내용이 아닙니다. private 함수를 public으로 바꾸기는 애매하고, private 상태로 테스트하자니 테스트 픽스쳐를 다수 만들어서 코드를 짜야할 것 같은 상황에 있는 사람. 그리고 그런 상황으로 인해서 미래 코드의 순 서가 변경되거나 테스트의 순서가 변경될까봐 다른 방법을 찾아보고 있는 분을 위해서 작성하는 글입니다. 본문 우선 이 글을 보고 계신 분이라면 이미 private 함수를 public으로 오픈해보는 방법에 대해서는 고민해보셨을 것 같습니다. 하지만 오픈하지 않으시는 이유가 있다면 해당 클래스에서 은닉..

Kotlin 2024.03.20 0

MockKInjects 및 Lateinit 사용을 통한 Kotlin 테스트 이슈 해결하기

글을 쓰게 된 이유 이번 블로그 글에서는 Kotlin 테스트를 진행하면서, 특히 MockKInjects를 사용하면서 마주친 이슈를 공유하려 합니다. 이 문제는 테스트 클래스 생성자의 실행과 Injectmock에서 발생하는 버그와 관련이 있습니다. 디버깅하면서 봤던 코드들을 공유하면 다른 분들이 보기에 좋겠다 생각이 들어서 공유하기 위해 글을 씁니다. 문제 상황 MockKInjects를 작업하는 동안 테스트 클래스 생성자를 호출하면 Injectmock와 관련된 오류가 발생하는 걸 봤습니다. 오류 메시지는 다음과 같았습니다: No ParameterResolver registered for parameter [%s] in %s [%s]. injectmocks에 주입해줄 파라미터들을 못찾는 이슈였는데, 저같은 ..

Kotlin 2023.12.13 0