분류 전체보기

    docker-compose 로 개발 환경의 DB 구축하기

    개요 개인 프로젝트이고 자신만 그 코드를 실행시킨다면 굳이 docker 를 이용할 필요가 없다. 어차피 같은 환경에서만 실행할 것이니깐. 하지만, 여러 사람이 다루게 된다면 여러 환경에서 코드가 실행되어지게 되고 이때 docker 를 이용하면 구축하려는 것이 여러 환경에서 동일함이 보장되니 참 편하다. 다만, 개인 프로젝트라 하더라도 docker 로 환경을 구축하고, 여러 컨테이너들을 실행할 떄마다 매번 명령어들을 적어줘야하는 상당히 귀찮다. 순서를 틀리거나, 빼먹을 위험도 있다. 이런 불편함을 docker-compose 를 이용하면 쉽게 해결할 수 있다. docker-compose.yml 속성들 알아보기 docker-compose.yml 파일은 앞서 말했던 명령어들을 적어놓은 스크립트라고 보면 된다. ..

    spring.config.import 설정으로 env 파일을 읽을 때 생길 수 있는 오류

    spring: config: import: - optional:file:env/dev-db.env datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: ${DB_URL} username: ${DB_USERNAME} password: ${DB_PASSWORD} jpa: database: mysql database-platform: org.hibernate.dialect.MySQL8Dialect open-in-view: false properties: hibernate: show_sql: true format_sql: true 위와 같이 env 파일을 읽어와서 사용하려고 하였는데 아래와 같은 에러가 발생했다. Caused by: java.lang.Ill..

    plugin id: 'org.asciidoctor.convert' version: '2.2.1' was not found in any of the following sources 해결법

    Spring Initializr 이용하여서 의존성으로 Spring REST DOCS 를 추가하고 프로젝트를 빌드하였는데 plugin id: 'org.asciidoctor.convert' version: '2.2.1' was not found in any of the following sources 이런 예외가 뜨면서 빌드가 되지 않았다. Gradle 7 부터는 org.asciidoctor.convert 가 아닌 org.asciidoctor.jvm.convert 를 사용해야한다. 참고로 이 플러그인은 adoc 파일 변환, build 디렉토리에 복사하기 위한 역할을 한다. 가장 최신 버전인 3.3.2 버전을 적용해주었다. Spring Initializr 가 왜 옛날 버전을 자동으로 넣어주는걸까

    @Modifying 의 flushAutomatically 속성을 명시해야 하는 이유

    개요 @Modifying 어노테이션을 사용하다가 생긴 이슈를 해결하며 얻은 지식을 작성해보고자 합니다. 일단 먼저 정답부터 이야기하자면, hibernate 의 FlushModeType 설정의 기본 값인 Auto 일 때, JPQL 실행 전에 모든 쓰기 지연 저장소의 쿼리들이 flush 되는 줄로 잘못 알고 있어서 발생한 이슈입니다. JPQL 실행 전에 쓰기 지연 저장소에 있는 쿼리 중 JPQL 과 관련된 엔티티에 대해서만 flush 합니다. 더 자세한 설명은 아래에서 이어서 하도록 하겠습니다. @Modifying 이란 @Modifying 이 무엇인지부터 먼저 알아보겠습니다. @Modifying 어노테이션은 @Query를 이용하여 INSERT, UPDATE, DELETE쿼리를 작성할 경우 사용해줘야하는 어노..

    스케줄링, 배치로 S3 이미지 삭제 처리

    개요 현재 제가 진행하고 있는 프로젝트에서는 이미지 삭제를 hard delete 로 처리하고 있습니다. 주문글, 댓글 등 다른 엔티티들은 모두 soft delete로 처리하는데 이미지만 hard delete 를 하고 있는 이유가 무엇일까요? 우선 soft delete를 사용하는 이유는 삭제된 데이터를 복구해야 할 일이 생길 수도 있고, 데이터 자체를 활용하여 추후 기능 개발에 활용할 수도 있기 때문입니다. 즉, 데이터가 서비스의 자산이기 때문입니다. 현재 제 프로젝트에서는 이미지를 독립적인 엔티티로 관리하고 있는데, 이미지를 soft delete 를 해야하는 이유가 크게 없습니다. S3와 같은 스토리지에서는 삭제를 하고 DB 에서는 soft delete 된 상태로 놓아 두는 것은 의미가 없고, S3 에서..