Skip to content

[윤대호] 풀스택-BE-mission12#13

Open
aowjarkwk wants to merge 60 commits intocodeit-bootcamp-nodejs:풀스택-BEfrom
aowjarkwk:풀스택-BE-mission12

Hidden character warning

The head ref may contain hidden characters: "\ud480\uc2a4\ud0dd-BE-mission12"
Open

[윤대호] 풀스택-BE-mission12#13
aowjarkwk wants to merge 60 commits intocodeit-bootcamp-nodejs:풀스택-BEfrom
aowjarkwk:풀스택-BE-mission12

Conversation

@aowjarkwk
Copy link
Collaborator

@aowjarkwk aowjarkwk commented Jun 6, 2024

주요 변경사항

요구사항

기본 요구사항

공통

  • AWS 루트 유저 계정을 생성하세요. 이미 생성된 계정이 있다면 해당 계정을 활용해주세요.
  • AWS Free Tier 제공 범위를 파악한 후, 해당 서비스를 적극 활용하세요.
    • 인스턴스의 중지 및 종료 과정을 꼭 숙지해야합니다. EC2 과금 정책에 주의하여 프리 티어 한도 내에서 사용해주세요.
  • 리전은 아시아 태평양(서울)’으로 설정하세요.

백엔드 배포

프로젝트 구조 및 환경 설정

  • 배포에 적합한 프로젝트 구조를 설정합니다.
  • 개발(development) 및 배포(production) 환경 설정을 구분하고, 환경 변수를 사용해 관리합니다.

AWS S3를 이용한 파일 업로드 시스템 구축

  • AWS S3 버킷을 생성하고, 파일 업로드를 위한 설정을 완료합니다.
  • multer-s3 라이브러리를 사용하여 이미지 업로드 미들웨어를 S3로 변경합니다.
  • S3에 이미지 업로드가 정상적으로 작동하는지 확인합니다.

AWS RDS를 사용한 데이터베이스 관리

  • AWS RDS 인스턴스를 설정하고, 프로젝트 데이터베이스와 연결합니다.
  • RDS에서 데이터베이스의 초기화 및 CRUD 작업을 테스트합니다.

AWS EC2에서의 애플리케이션 운영

  • AWS EC2 인스턴스를 생성합니다. 프리티어에 해당하는 인스턴스 타입과 운영 체제(OS)를 선택하세요.
  • EC2 인스턴스에 대한 보안 그룹을 설정합니다. HTTP(포트 80), HTTPS(포트 443), SSH(포트 22) 등 필요한 포트를 열어 네트워크 연결을 구성하세요.
  • 프로세스 매니저 pm2를 사용하여 애플리케이션을 백그라운드에서 실행시킵니다.
  • Nginx를 이용한 리버스 프록시 설정을 구축하고, 외부 접속을 관리합니다.

AWS Route 53을 활용한 도메인 관리

  • AWS Route 53을 사용하여 도메인을 구매하거나 기존 도메인을 연결합니다.
  • Route 53에서 DNS 설정을 관리하고, EC2 인스턴스와 연결합니다.
  • 도메인을 통한 애플리케이션 접속 및 운영을 테스트합니다.

테스트 구현

  • Jest 설정 파일(jest.config.js)을 만들고 기본 설정을 하세요.
  • 상품 CRUD 연산에 대한 유닛 테스트를 작성합니다. 각 CRUD 연산에 대해 적절한 입력과 예상 출력을 정의하여 테스트 코드를 구현하세요.
    • 사용자의 접근 권한 검증을 고려하여 상품 CRUD 연산에 대한 시나리오를 테스트해 주세요.
  • 회원가입, 로그인에 대한 유닛 테스트를 작성합니다.
  • API 요청이나 데이터베이스 작업 등 비동기 코드에 대한 테스트를 작성하세요. async/awaitdone 콜백을 사용하여 비동기 코드의 완료를 테스트하세요.
  • Mock, Spy와 같은 테스트 더블을 사용하여 외부 서비스와의 상호 작용을 테스트하세요.
  • describetest 블록을 사용하여 테스트 케이스를 그룹화하고 정리하세요.

심화 요구사항

공통

  • 프로젝트 참여 팀원 별로 IAM 계정을 생성하고, 각자의 역할에 맞는 권한을 설정해보세요. 각 팀원의 역할에 따른 권한 설정은 다음과 같이 할 수 있습니다:
    1. 개발자: EC2, RDS, S3에 대한 접근 권한을 부여하여 서버 인스턴스, 데이터베이스, 스토리지 관리를 가능하게 합니다. 필요에 따라 Lambda, API Gateway 등의 추가 서비스 접근 권한도 부여합니다.
    2. 데이터베이스 관리자: RDS와 DynamoDB에 대한 전체 권한과 CloudWatch를 통한 데이터베이스 모니터링 권한을 부여합니다.
    3. 시스템 관리자: EC2, VPC, Route 53에 대한 접근 권한을 부여하여 네트워크 설정, 도메인 관리 및 서버 관리를 담당합니다. 또한 IAM을 통한 사용자 및 권한 관리 권한을 부여합니다.

테스트 구현

  • Jest의 테스트 커버리지 도구를 사용해 코드 커버리지를 분석하고 결과를 확인하세요.
  • 커버리지 결과를 바탕으로 누락된 테스트 케이스를 추가합니다. 커버리지 보고서를 검토하여 테스트되지 않은 코드 영역을 찾아내고 적절한 테스트를 추가하세요.

상품 이미지 업로드

  • AWS S3의 Presigned URL 기능을 활용하여 상품 이미지 업로드 기능을 구현합니다.

SSL 인증서를 통한 HTTPS 연결 구현

  • SSL 인증서를 설정하여 EC2 인스턴스에서 HTTPS 연결을 구현합니다.
    • SSL 인증서는 AWS Certificate Manager(ACM)를 사용하여 무료로 생성하거나, 외부 인증 기관에서 구매할 수 있습니다.

기타

  • article과 product 조회 시 images 필드가 문자열 배열로 반환되도록 수정했습니다.

배포 주소
https://panda-market.net/api-docs/

QA 의견

  • Route 53에서 도메인을 구매할 때 요금이 발생한다는 안내가 있으면 좋을 것 같습니다.
  • SSL 인증서를 설정할 때 EC2 로드밸런서의 대상 그룹으로 전달 시 포트를 설정하는 부분에서 많이 헤맸습니다. HTTP 포트를 80, HTTPS 포트를 443으로 설정하고, 대상 그룹에서 HTTP와 HTTPS 요청 모두를 포트 80으로 리디렉션한 후, Nginx에서 포트 80으로 들어오는 요청을 3000으로 변경하여 해결했습니다.
  • 컨트롤러의 HTTP 요청을 테스트하는 과정에서 여러 번의 타입 에러가 발생해 어려움을 겪었습니다.
  • AWS Presigned URL 관련 테스트를 진행할 때 타입을 찾는 것이 어려웠습니다.
    구글링 중 AWS SDK v3 Client mock을 발견해서 이를 활용해 구현했습니다.
  • 6주차의 중고마켓 상품 목록 조회 API 구현 시 베스트 상품을 불러오는 부분이 없는데, 피그마 디자인에는 베스트 상품이 존재합니다.
  • 12주차의 로그인 페이지 모바일 디자인에서 로그인 버튼이 오른쪽으로 치우쳐져 있습니다.
    12주차 로그인 페이지
  • 테스트 코드의 Stmts는 100%를 맞췄지만, import문이나 단순 if문 등 일부 라인은 건너뛰었습니다. 이번에도 구글링과 챗지피티를 활용해 구현했기 때문에, 의도하신 대로 구현됐는지 확신이 서지 않습니다. 🥲
    테스트 커버리지

aowjarkwk added 30 commits May 21, 2024 20:17
- 상품 목록 조회 페이지네이션 추가
- 상품 목록 조회
- 상품 상세 조회
- http, mock 데이터 위치 변경
- 상품 수정, 삭제
- 상품 댓글 등록, 수정, 삭제
aowjarkwk added 21 commits May 28, 2024 13:37
- 서버 코드를 MVC 패턴으로 리팩토링
- 이미지 업로드 기능 테스트를 위해 CORS 미들웨어 추가
- 구글 OAuth 로그인 후 JWT 토큰 생성 구현
- 유저 기능에 MVC 패턴 적용
- Article 관련 로직을 타입스크립트로 수정
- Auth 관련 로직을 타입스크립트로 수정
- Product, Article, Comment 모델의 User필드를 필수값으로 변경
- auth 관련 로직 테스트의 커버리지를 높임
- product controller 관련 로직 테스트 추가
- 원활한 테스트를 위해 asyncHandler를 route에서 controller로 이동
- 테스트 코드 수정
- Swagger 문서에서 images 필드 타입 수정
@aowjarkwk aowjarkwk requested a review from a user June 6, 2024 23:12
@aowjarkwk aowjarkwk self-assigned this Jun 6, 2024
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.

1 participant