Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[이진우] sprint12 #87

Open
wants to merge 99 commits into
base: express-이진우
Choose a base branch
from

Conversation

ajantang
Copy link
Collaborator

@ajantang ajantang commented Nov 21, 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/await와 done 콜백을 사용하여 비동기 코드의 완료를 테스트하세요.
  • Mock, Spy와 같은 테스트 더블을 사용하여 외부 서비스와의 상호 작용을 테스트하세요.
  • describe와 test 블록을 사용하여 테스트 케이스를 그룹화하고 정리하세요.

심화

테스트 구현

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

상품 이미지 업로드

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

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

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

주요 변경사항

스크린샷

image

멘토에게

  • jest를 이용한 유닛 테스트에 의미를 못 찾겠습니다. (특히 mock을 이용한 테스트)
  • 무료 티어를 사용하지 못해(기존에 AWS를 사용해옴). 테스트 과정에서만 인스턴스를 생성해 진행하였습니다.

ts 적용을 위합 파일 삭제
추가 라이브러리 설치
기본적인 템플릿(파일 구조) 추가
sign-up, sign-in input 정보 유효성 검사 미들웨어 추가
argon2를 이용한 비밀번호 암복호화 함수 추가

참고 : bcrypt 설치 중 연관 라이브러리 지원 경고가 싫어서 argon2 사용
참고 : 커스텀 에러로 변경해야되는 부분을 임시 코드로 작성
auth controller 코드 추가

참고 : 커스텀 에러 적용 예정
참고 : 토큰 함수 추가 예정
토큰 생성 함수 추가
access token refresh API 추가
sign in API에 토큰 로직 추가
에러 메세지 단일 출력하도록 수정
express-validator 함수 적용

참고 : 해당 기능을 커스텀 에러 처리하는 미들웨어를 추가하면서 수정 예정
express-validator에 커스텀 에러 코드 적용
error handling middleware 추가

참고 : validator로 처리하는 에러를 error handling middleware 하나로 처리하고 싶었지만, 데이터를 전달하는 방식에서 너무 많은 수정이 들어가 비효율적이라 판단. 원복
임시로 만들어둔 에러 코드 교체
error handling middleware에 prisma error용 코드 추가
기본 함수 추가(로직 없음)

참고 : 검증 미들웨어 추가를 위해 커밋
access token 검증 middleware 추가(임시 코드 포함)
gitignore에 js용 폴더 추가
게시판, 상품 관련 error info 추가
게시판, 상품 관련 검즌 middleware 추가
validate middleware에 잘못 적용된 상수 수정
불필요한 코드 삭제
클린 코드를 위한 interface 분리
클린 코드를 위한 interface 분리
post용 select object 추가
prisma의 일부 소문자 -> 대문자 변경

참고 : 빌드에 문제되는 미완성 코드 주석 처리
post service 기본 함수 코드 추가
post column 이름 변경

참고 : 기본 함수 코드에 select와 favorite repo 함수 추가 예정
임시로 post API용 mapper 코드 적용
service에서 리턴 타입을 추론으로 사용하고 있어서, 수정 필요
post service 함수 적용
권한 확인 middleware 추가
post 용 type 수정
테스트 코드 추가
@ajantang ajantang added the 진행중 아직 스프린트 미션 제출일이 아닙니다. 새로 커밋된 내용에 대해 코드리뷰 해주세요! label Nov 21, 2024
Copy link
Collaborator

@wildCodingWarrior wildCodingWarrior left a comment

Choose a reason for hiding this comment

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

코드를 변경했을때 기존 기능이 제대로 동작하는 지에 대한 의미가 있죠.

일부 기능의 변경이 있을 때 모든 기능이 동작하는 지 확인하고 배포할 수는 없으니까요.

다른 코드들은 이전 코드에서 타입스크립트 파일 변환, 컨벤션 변환으로 보이네요! 고생하셨습니다!

Copy link
Collaborator

@wildCodingWarrior wildCodingWarrior left a comment

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
진행중 아직 스프린트 미션 제출일이 아닙니다. 새로 커밋된 내용에 대해 코드리뷰 해주세요!
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants