전체 글

Better than yesterday

    AWS S3 에서 이미지를 관리해보자

    우선 S3 에서 자주 사용하는 버킷과 객체라는 간단한 개념에 대해 먼저 알아보고 가겠습니다. 버킷 특징 객체를 저장하고 관리하는 역할 Amazon S3에서 생성되는 최상위의 디렉토리이며, Amazon S3에 저장된 객체의 컨테이너 이다. S3 상의 모든 객체는 버킷에 포함된다. 버킷의 이름은 S3에서 유일해야 한다. 즉, 전세계에 어디에도 중복된 이름이 존재 할 수 없다. 객체 특징 객체는 데이터와 메타 데이터를 구성하고 있는 저장 단위 객체는 키를 통해서 버킷에서 유일한 것으로 식별되고, 버킷에 존재하는 모든 객체는 단 하나의 키를 지닌다. S3 내에서 버킷, 키, 버전 id를 통해서 특정 객체를 파악할 수 있다. S3 서비스를 위한 코드는 정말 간단합니다. 일단 우선 AWS 와 연결을 해주기 위해 아..

    ubuntu 22.04 패키지 의존성 설치 에러 문제

    apt 도구로 패키지를 설치 시 E: Unmet dependencies. Try 'apt-get --fix-broken install' with no packages (or specify a solution). 와 같은 에러가 발생할 때가 있다. 분명 명령어를 잘 쳤는데 설치가 안되는 경우이다. 이유는 이전 패키지 설치 시 패키지 의존성을 무시하고 설치하여 패키지 의존성이 깨져서 그렇다. 해결 방법은 단순하다. 패키지 의존성을 복구해주면 된다. 복구해 주는 방법은 아래 명령을 실행해 주면 된다. apt-get --fix-broken install

    @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 하나의 의존성만 갖도록 해..