Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Dockerfile 작성
[ x ] Amazon Corretto 17 이미지를 베이스 이미지로 사용하세요.
[ x ] 작업 디렉토리를 설정하세요. (/app)
[ x ] 프로젝트 파일을 컨테이너로 복사하세요. 단, 불필요한 파일은 .dockerignore를 활용해 제외하세요.
[ x ] Gradle Wrapper를 사용하여 애플리케이션을 빌드하세요.
[ x ] 80 포트를 노출하도록 설정하세요.
[ x ] 프로젝트 정보를 환경 변수로 설정하세요.
실행할 jar 파일의 이름을 추론하는데 활용됩니다.
PROJECT_NAME: discodeit
PROJECT_VERSION: 1.2-M8
[ x ] JVM 옵션을 환경 변수로 설정하세요.
JVM_OPTS: 기본값은 빈 문자열로 정의
[ x ] 애플리케이션 실행 명령어를 설정하세요. 이때 환경변수로 정의한 프로젝트 정보를 활용하세요.
이미지 빌드 및 실행 테스트
[ x ] Docker 이미지를 빌드하고 태그(local)를 지정하세요.
[ x ] 빌드된 이미지를 활용해서 컨테이너를 실행하고 애플리케이션을 테스트하세요.
[ x ] prod 프로필로 실행하세요.
[ x ] 데이터베이스는 로컬 환경에서 구동 중인 PostgreSQL 서버를 활용하세요.
[ x ] http://localhost:8081로 접속 가능하도록 포트를 매핑하세요.
Docker Compose 구성
개발 환경용 docker-compose.yml 파일을 작성합니다.
[ x ] 애플리케이션과 PostgreSQL 서비스를 포함하세요.
[ x ] 각 서비스에 필요한 모든 환경 변수를 설정하세요.
.env 파일을 활용하되, .env는 형상관리에서 제외하여 보안을 유지하세요.
[ x ] 애플리케이션 서비스를 로컬 Dockerfile에서 빌드하도록 구성하세요.
[ x ] 애플리케이션 볼륨을 구성하여 컨테이너가 재시작되어도 BinaryContentStorage 데이터가 유지되도록 하세요.
[ x ] PostgreSQL 볼륨을 구성하여 컨테이너가 재시작되어도 데이터가 유지되도록 하세요.
[ x ] PostgreSQL 서비스 실행 후 schema.sql이 자동으로 실행되도록 구성하세요.
[ x ] 서비스 간 의존성을 설정하세요(depends_on).
[ x ] 필요한 포트 매핑을 구성하세요.
[ ] Docker Compose를 사용하여 서비스를 시작하고 테스트하세요.
--build 플래그를 사용하여 서비스 시작 전에 이미지를 빌드하도록 합니다.
BinaryContentStorage 고도화 (AWS S3)
AWS S3 버킷 구성
[ x ] AWS S3 버킷을 생성하세요.
AWS S3 접근을 위한 IAM 구성
[ x ] S3 버킷에 접근하기 위한 IAM 사용자(discodeit)를 생성하세요.
[ x ] AmazonS3FullAccess 권한을 할당하고, 사용자 생성을 완료하세요.
[ x ] 생성된 사용자에 엑세스 키를 생성하세요.
[ x ] 발급받은 키를 포함해서 AWS 관련 정보는 .env 파일에 추가합니다.
AWS S3 테스트
[ x ] AWS S3 SDK 의존성을 추가하세요.
implementation 'software.amazon.awssdk:s3:2.31.7'
[ ] S3 API를 간단하게 테스트하세요.
AWS S3를 활용한 BinaryContentStroage 고도화
[ x ] 앞서 작성한 테스트 메소드를 참고해 S3BinaryContentStorage를 구현하세요.
[ x ] discodeit.storage.type 값이 s3인 경우에만 Bean으로 등록되어야 합니다.
[ x ] S3BinaryContentStorageTest를 함께 작성하면서 구현하세요.
[ x ] BinaryContentStorage 설정을 유연하게 제어할 수 있도록 application.yaml을 수정하세요.
[ x ] download 메소드는 PresignedUrl을 활용해 리다이렉트하는 방식으로 구현하세요.
*** 테스트 관련 코드 전부 test 폴더로 옮겨야함
AWS RDS 구성
[ x ] AWS RDS PostgreSQL 인스턴스를 생성하세요.
[ x ] 과금이 발생할 수 있으니 다음 항목은 항번 더 확인해주세요.
[ x ] SSH 터널링을 통해 개발 환경에서 접근할 수 있도록 EC2를 구성하세요.
[ x ] EC2 인스턴스를 생성하세요.
이외 설정은 기본값을 유지하세요.
[ x ] 보안 그룹에서 인바운드 규칙을 편집하세요.
[ ] DataGrip을 통해 연결 후 데이터베이스와 사용자, 테이블을 초기화하세요.
데이터 소스 추가 시 SSH/SSL > Use SSH tunnel 설정을 활성화하세요. 이때 이전에 다운로드한 .pem 파일을 활용하세요.
연결이 성공하면 데이터베이스와 사용자, 테이블을 초기화하세요.
구성이 완료되면 rds-ssh 인스턴스는 완전히 삭제하여 과금에 유의하세요.
AWS ECR 구성
[ ] 이미지를 배포할 퍼블릭 레포지토리(discodeit)를 생성하세요.
[ ] AWS CLI를 설치하세요.
[ ] aws configure 실행 후 앞서 생성한 discodeit IAM 사용자 정보를 입력하세요.
[ ] discodeit IAM 사용자가 ECR에 접근할 수 있도록 다음 권한을 부여하세요.
[ ] Docker 클라이언트를 배포할 레지스트리에 대해 인증합니다.
[ ] 멀티플랫폼을 지원하도록 애플리케이션 이미지를 빌드하고, discodeit 레포지토리에 push 하세요.
[ ] AWS 콘솔에서 푸시된 이미지를 확인하세요.
AWS ECS 구성
[ ] 배포 환경에서 컨테이너 실행 간 사용할 환경 변수를 정의하고, S3에 업로드하세요.
discodeit.env 파일을 만들어 다음의 내용을 작성하세요.
이 파일을 S3에 업로드하세요.
이 파일은 형상관리되지 않도록 주의하세요.
[ ] AWS ECS 콘솔에서 클러스터를 생성하세요.
[ ] 태스크를 정의하세요.
이외 설정은 기본값을 유지하세요.
태스크 생성 후 태스크 실행 역할에 S3 관련 권한을 추가하세요.
[ ] discodeit 클러스터 상세 화면에서 서비스를 생성하세요
[ ] 태스크의 EC2 보안 그룹의 인바운드 규칙을 설정하여 어디서든 접근할 수 있도록 하세요.
[ ] 태스크 실행이 완료되면 해당 EC2의 퍼블릭 IP에 접속해보세요.
정리를 안하고 그냥 올려뒀습니다.
주요 변경사항
스크린샷
멘토에게