개발
@TransactionalEventListener 파헤치기
@TransactionalEventListener 란? 개요 이미지 엔티티를 DB 에 저장/삭제하는 것과 S3 에 업로드/삭제하는 것의 생명주기를 같게 하고 싶었습니다. 쉽게 말하자면, DB 저장/삭제가 성공한다면 S3 업로드/삭제도 함께 성공하고, 실패한다면 함께 실패해야하는 것입니다. 이런 경우 보통 트랜잭션을 이용하는 것을 쉽게 떠올릴 수 있지만 S3 는 트랜잭션과는 연관이 없으므로 어떻게 해결해야할까 찾아보다가 @TransactionalEventListener 를 공부하고 사용해보게 되었습니다. 참고로 @TransactionalEventListener 와 비슷한 @EventListener 의 경우 event 를 pulish 하는 코드 시점에 event 가 발행됩니다. event 를 발행하는 트랜잭..
Let's Encrypt 로 HTTPS 를 적용해보자
SSL 인증서는 '도메인(or 서브도메인)' 에 대한 발급입니다. SSL 발급 신청서의 도메인은 DNS 서버에 설정 후, 전세계 어디에서나 공개 조회되고 있는 상태이어야 힙니다. (조회가 되지 않으면, 발급 신청서 작성 불가) 그리하여 구매하거나 얻은 도메인을 연결하는 것부터 진행해보겠습니다. AWS Routing 53 과 ACM 을 이용하면 쉽게 할 수 있지만, 사용하지 않고 해보기로 하였습니다. 도메인 연결 여러 도메인 업체가 있지만 저는 무료로 도메인을 제공해주는 “내 도메인 한국”을 이용하였습니다.. 일반 도메인에 원하는 도메인 명을 입력하고 검색 버튼을 누른 후, 하단에 도메인 검색 결과 중 하나를 선택하여 등록하기 버튼을 누릅니다. 제가 heycake.kro.kr 를 이미 선택하여서 등록불가라..
Facade 레이어를 도입해보자
그동안 과제를 해오면서 다른 데브코스 일원들이 Facade 레이어를 도입하는 것을 보았었지만, 저는 그동안 필요성을 느끼지 못해서 미뤄왔었는데, 이번 프로젝트에서 처음으로 Facade 레이어를 도입해보았습니다. 뮤지컬을 등록하기 위해서 서비스에서 위와 같이 많은 Repository 에 의존성을 갖게 됩니다. 한 메서드 안에서 각 repository 를 사용하는 로직들을 다 수행해줘야 했기에 너무 많은 책임을 갖고 있고, 그에 따라 유지보수도 어렵고 응집성도 떨어지는 코드가 되었습니다. 테스트를 작성할 때도 하나의 메서드 테스트 안에서 너무 방대한 테스트가 될 것 같다는 생각에 구조를 수정해야한다는 필요성을 느끼게 되었습니다. 이렇게 각 Service 들은 각 Repository 하나의 의존성만 갖도록 해..