Skip to content

[전승현] spring8#178

Open
seunghyeonjeon57-dot wants to merge 35 commits into
codeit-bootcamp-spring:전승현from
seunghyeonjeon57-dot:aws/전승현

Hidden character warning

The head ref may contain hidden characters: "aws/\uc804\uc2b9\ud604"
Open

[전승현] spring8#178
seunghyeonjeon57-dot wants to merge 35 commits into
codeit-bootcamp-spring:전승현from
seunghyeonjeon57-dot:aws/전승현

Conversation

@seunghyeonjeon57-dot
Copy link
Copy Markdown
Collaborator

요구사항

기본

  • 애플리케이션 컨테이너화 진행
  • 이미지 빌드및 컨테이너 실행 / Docker Compose 구성
  • Aws S3 버킷 구성 및 접근을 위한 IAM 구성
  • S3를 활용한 BinaryContentStorage고도화
  • AWS RDS 구성 및 ssh 터널링
  • EC2 인스턴스 생성 후 DataGrip을 통해 초기화 후 삭제
  • ECR 및 ECS 구성

심화

  • 이미지 최적화 -> 멀티 스테이지 빌드 활용
  • github actions를 통한 CI/CD 파이프라인 구축

주요 변경사항

스크린샷

.env
스크린샷 2026-04-10 오전 9 20 08
l)
RDS
스크린샷 2026-04-10 오전 9 24 07
최종 베포후 RDS 테스트 성공
스크린샷 2026-04-10 오전 9 25 04
ECR 푸시된 이미지가 보이는 AWS콘솔 페이지
스크린샷 2026-04-10 오전 9 26 13
ECS 실행중인 테스크 구성정보가 표시된 AWS콘솔 페이지 및 엔드포인트 이미지
<img width="710" height="520" alt="스크린샷 2026-04-10 오전 9 28 54" src="https://github.com/user-attachments/assets/0167cfba-10bd-4c8e-bb7d-4005ec7396
스크린샷 2026-04-10 오전 10 02 43

VPC - 보안 그룹의 인바운드 규칙을 확인할수 있는 페이지
스크린샷 2026-04-10 오전 9 35 03
IAM 사용자권한 정책이 표시된 AWS콘솔 페이지 스크린샷
<img width="665" height="377" alt="스크린샷 2026-04-10 오전 9 36 02" src="https://github.com/user-attachments/assets/a23c1591-3fe3-4948-a54c-261f
스크린샷 2026-04-10 오전 9 36 18
4d4c5609" />

멘토에게

-15.165.45.3 ->public ip입니다.

  • 처음 저희는 발급받은 키를 포함해서 .env파일을 작성햇습니다 또한 조건을 따라 application.yaml에서 .env파일에 작성된 값을 임포트 하는 방식으로 설정했습니다 여기서 궁금한건 .env파일을 작성을 해서 필요한부분에 직접 넣어주면 될거같은데 (예를 들어 @ConditionalOnProperty(name = "STORAGE.TYPE", havingValue = "s3") 이런식으로) 왜 굳이 yaml에 .env작성 값을 임포트해서 주입 받는지 궁금합니다.
  • RDS 연결 방식을 보면 SSH터널링 방식으로 했는데 이 방식을 유도한 이유가 궁금하며 실무에서는 어떻게 적용하시는지 궁금합니다
  • read.md파일에 codecov보면 53퍼라고 되어잇습니다. 이건 저번 미션 요구사항에 따라 일부분만 테스트해서 이런결과가 나왔습니다 . 이게 협업이나 개인 작업에서 끼치는영향이 있는지 궁금하고 현업에서는 이러한 테스트 커버리지 확인 방법을 어떻게 하시는지 궁금합니다
  • CI/CD를 위한 워크플로우 생성부분에서 관련 파일을 생성할땐 AI의 도움을 좀 많이 받았습니다. 어떤식으로 작성해야하는지 멘토님께서는 어떤식으로 작성하시는지 그에대한 팁이나 제가 알아야할게 있는지 궁금합니다.
  • 직전 미션 리뷰에서 브랜치 병합이 잘못됐다고 하셨는데 이번에 수정했습니다 확인 부탁드립니다 -> 파일개수를 보니 해결이 된지 안된건지긴가민가해서 확인후 리뷰 부탁드리겟습니다!
  • 배포후 테스트를 진행하다가 이미지파일 전송하는 부분에서 S3경로로 못읽고 local경로로 자꾸 읽는 문제가잇엇습니다 해결은 본래 prod.yaml에discodeit:
    storage:
    type: ${STORAGE_TYPE}
    local:
    root-path: /app/storage 이렇게 경로를 주입햇지만 경로를 읽지못해 .env에 경로를 직접 주입해서 해결햇습니다 제가 궁금한건 이런식으로 해결하는 방식이 맞는지 아님 다른 좋은 방법이있는지 궁금합니다.
    -iam유저 권한부여부분에서 첫번쨰 두번쨰는 fullaccess를 부여햇지만 진행하면할수록 fullaccess를 부여하는건 혹여나 iam유저가 털렸을때 모든 권한을 부여받아 노출되는부분이 많을수도잇다고 생각해 마지막은 커스텀 정책을 부여했습니다 이런식의 관리를 멘토님께서는 어떻게하시는지궁금합니다

@eedys1234
Copy link
Copy Markdown
Collaborator

처음 저희는 발급받은 키를 포함해서 .env파일을 작성햇습니다 또한 조건을 따라 application.yaml에서 .env파일에 작성된 값을 임포트 하는 방식으로 설정했습니다 여기서 궁금한건 .env파일을 작성을 해서 필요한부분에 직접 넣어주면 될거같은데 (예를 들어 @ConditionalOnProperty(name = "STORAGE.TYPE", havingValue = "s3") 이런식으로) 왜 굳이 yaml에 .env작성 값을 임포트해서 주입 받는지 궁금합니다.

현업에서는 보안문제로 AWS Parameter Store 또는 Secret Manager와 같은 솔루션을 활용하여 .env 파일을 작성하여 임포트하는 방식을 사용하지 않습니다.
위 솔루션들을 사용하지 않는다면, yaml 파일에 직접적으로 기재하는 방식을 사용합니다. (.env import X)

RDS 연결 방식을 보면 SSH터널링 방식으로 했는데 이 방식을 유도한 이유가 궁금하며 실무에서는 어떻게 적용하시는지 궁금합니다
read.md파일에 codecov보면 53퍼라고 되어잇습니다. 이건 저번 미션 요구사항에 따라 일부분만 테스트해서 이런결과가 나왔습니다 . 이게 협업이나 개인 작업에서 끼치는영향이 있는지 궁금하고 현업에서는 이러한 테스트 커버리지 확인 방법을 어떻게 하시는지 궁금합니다

보통 RDS가 속해있는 subnet를 private subnet으로 설정하기 때문에 로컬 및 개발자 PC에서 RDS에 직접적으로 접근이 어렵습니다.
이럴 때 Bastion Server와 SSH 터널링 방식을 활용하여 private subnet에 존재하는 RDS에 접근합니다.
실무에서도 SSH 터널링을 활용해서 동일하게 적용하고 있습니다.

Jacoco 같은 경우에는 테스트 커버리지 비율을 HTML 리포트 형태로 시각화해서 보여줍니다. 해당 파일이 생성되면 바로 S3에 업로드해서 보는 방식등 다양한 방식으로 파이프라인을 구축합니다.
테스트 커버리지는 커버리지 일 뿐 이라 속한 팀에 따라 다르며, 어떤 팀은 60% 임계치를 설정하여 임계치를 넘지 못할 경우 배포를 막아두기도 합니다.

CI/CD를 위한 워크플로우 생성부분에서 관련 파일을 생성할땐 AI의 도움을 좀 많이 받았습니다. 어떤식으로 작성해야하는지 멘토님께서는 어떤식으로 작성하시는지 그에대한 팁이나 제가 알아야할게 있는지 궁금합니다.
직전 미션 리뷰에서 브랜치 병합이 잘못됐다고 하셨는데 이번에 수정했습니다 확인 부탁드립니다 -> 파일개수를 보니 해결이 된지 안된건지긴가민가해서 확인후 리뷰 부탁드리겟습니다!

이전과 같았으면 Github Document를 참고하여 workflow를 작성하는 방식으로 진행하지만, AI 시대에서는 많은 시간이 소요되는 방식이라 지금과 같이 AI의 도움을 받아 진행하면 좋을 것 같습니다.
다만 workflow 상 모르는 부분이 있다면 하나씩 AI와 질문하거나 해당 부분만 공식 Document를 통해 확인하는 방식으로 지식을 쌓아가면 좋을 것 같습니다.
추가적으로 PR의 사이즈가 너무 클 경우 리뷰해주는 사람이 정확하게 리뷰를 해주지 못하는 경우가 존재합니다.
미션이 진행될 때마다 이전 미션에서 진행했던 코드들을 merge 한 후 merge된 브랜치에서 미션 브랜치를 생성하여 진행하시는 방법을 추천드립니다.

배포후 테스트를 진행하다가 이미지파일 전송하는 부분에서 S3경로로 못읽고 local경로로 자꾸 읽는 문제가잇엇습니다 해결은 본래 prod.yaml에discodeit:
storage:
type: ${STORAGE_TYPE}
local:
root-path: /app/storage 이렇게 경로를 주입햇지만 경로를 읽지못해 .env에 경로를 직접 주입해서 해결햇습니다 제가 궁금한건 이런식으로 해결하는 방식이 맞는지 아님 다른 좋은 방법이있는지 궁금합니다.

해결하신 방식으로 진행하시면 될 것 같습니다.

iam유저 권한부여부분에서 첫번쨰 두번쨰는 fullaccess를 부여햇지만 진행하면할수록 fullaccess를 부여하는건 혹여나 iam유저가 털렸을때 모든 권한을 부여받아 노출되는부분이 많을수도잇다고 생각해 마지막은 커스텀 정책을 부여했습니다 이런식의 관리를 멘토님께서는 어떻게하시는지궁금합니다

네 고민하신 부분이 맞습니다.
보안적으로는 최소 권한의 원칙을 가져야하기 때문에 필요한 부분들만 가진 커스텀 정책을 부여하시는게 좋다고 저는 생각합니다.

- name: Configure AWS credentials for ECS
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_S3_ACCESS_KEY }}
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AWS AccessKey를 활용할 경우 보안적으로 취약하기 때문에 현업에서는 Role 방식을 사용하는 편입니다.
참고 부탁드려요.


on:
push:
branches: [ "aws/전승현" ]
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

브랜치명에는 가급적 한글을 포함해주지 않아주세요.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

앗 저희미션브랜치가 한글이라 한글로햇던거같습니다

Comment thread docker-compose.yml
POSTGRES_USER: ${SPRING_DATASOURCE_USERNAME}
POSTGRES_PASSWORD: ${SPRING_DATASOURCE_PASSWORD}
ports:
- "54332:5432"
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

혹시 포트롤 54332하신건 의도하신걸까요?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넵 맞습니다 5432포트를 사용중이라서 변경했습니다

Comment thread .gitignore
# 3. 설정 및 민감 정보 (아이디/비번 보호)
.idea/
.vscode/
.env
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍👍👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants