아카이브/dev-camp (8) 썸네일형 리스트형 dev-camp Day7 : 쿠폰 적용법 및 Admin만 쿠폰 관련 API 접근 0. 쿠폰은 선택 적용? 최대 할인율 자동 적용? 정액제와 정률제 쿠폰을 함께 생성하는 경우 적용 방법에 따라 할인 가격이 달라질 수 있다. 현재 최대의 자동 적용되는 할인율이 있다고 해도 다른 강의 적용하고 싶을 수 있으므로 내 생각에는 선택 적용으로 하고 내가 가진 쿠폰을 모두 조회하는 API의 응답값으로 최고 할인율 조합을 알려주면 좋을 것 같다. 1. Admin만 쿠폰을 생성할 수 있어야 한다. - AuthGuard 의 CanActivate를 이용해서 Custom decorator를 생성 - 특정 Role을 가진 회원(admin)만 쿠폰 생성 API에 접근 가능하게 함. 2. 찾아낸 개선점 Custom decorator가 구현되어 있지 않은데, 해당 기능을 구현하여 user의 role별로 접근을 .. dev-camp Day6 코드 뜯어보고 개선점 찾고 계획 세우기 1. 코드 개선점 찾기 [SQL point 매핑 테이블 대신 Redis 사용] point라는 SQL 매핑 테이블 내의 컬럼이 아닌 Redis를 이용해 총 포인트 수를 저장하여 공간복잡도와 시간복잡도를 줄일 수 있을 것 같습니다. Point Log 테이블에는 User 테이블을 userId를 이용해 1:N 관계를 맺습니다. 포인트에 변동이 있을 때 마다 총 포인트 수를 포인트 로그 테이블에서 계산하여 저장합니다. Redis는 메모리 내에서 작동하기 때문에 읽기/쓰기 속도가 빠릅니다. 데이터 베이스 테이블을 1개 절약 할 수 있습니다. [regNo] User 엔티티에서 createdAt 을 Base Entity로 상속 받는다면 createdAt 기준으로 sort 하면 되기 때문에 User 테이블에서 regNo.. dev-camp Day 5: CD 구축과 고민 CD : 자동 배포 (Github Actions, CodeDeploy) 1. master 브랜치에 push. 2. github Actions를 통해 자동으로 빌드. 3. 빌드된 파일을 압축하여 S3 버킷에 올림. 4. CodeDeploy를 이용하여 사용하는 EC2에서 S3버킷에 올라온 파일을 가져옴. 5. 압축을 해제 하여 배포. 6. PM2를 통해 올라온 파일을 자동으로 다시 띄움. CodeDeploy Event LifeCycle Hook ApplicationStop : 이전 프로그램(구 버전)을 중지하는 스크립트를 실행하는 단계. DownloadBundle : CodeDeploy에이전트가 새 버전을 인스턴스로 가져옴. BeforeInstall :구버전의 설치 구성을 저장, 파일 복호화 현재 버전의 백.. dev-camp Day 4-1 : Redirect URI & Argon2 장점 Redirect URI는 백엔드 주소 전에는 Redirect URI를 설정할 때 프론트엔드 주소로 하였었다. GPT와 대화를 나눠보니 Redirect URI는 백엔드 주소로 하는 것이 맞다고 한다. 나도 그렇게 생각해서 Redirect URI를 이번에는 백엔드 주소로 하였다. 그런데 이렇게 되니까 프론트엔드에서 token을 어떻게 저장할 것이냐의 문제가 생겼다. 문제 REDIRECT URI 가 JSON으로 응답해서 프론트엔드에서 토큰을 로컬 스토리지에 저장할 수 없음. 시도 Redirect URI에서 응답을 redirect로 줘서 로그인 했던 페이지의 쿼리 스트링으로 token을 받게 한다. 로그인 페이지 접근 시 만약 쿼리에 토큰이 있다면 쪼개어 localstorage에 저장한다. 해결 성공 알게 된 .. dev-camp Day 3-1 : Access Token & Refresh Token Access Token 액세스 권한을 부여하기 위해 사용되는 토큰 Refresh Token 액세스 토큰이 만료될 때 새로운 액세스 토큰을 발급받기 위해 사용되는 토큰 Access Token & Refresh Token 작동 원리 로그인 인증에 성공한 클라이언트는 Refresh Token과 Access Token 두 개를 서버로부터 받는다. 클라이언트는 Refresh Token과 Access Token을 로컬에 저장해놓는다. 클라이언트는 헤더에 Access Token을 넣고 API 통신을 한다. (Authorization) 일정 기간이 지나 Access Token의 유효기간이 만료되었다. 4.1. Access Token은 이제 유효하지 않으므로 권한이 없는 사용자가 된다. 4.2. 클라이언트로부터 유효기간.. dev-camp Day 2-1 : 예시 코드, 기본 개념 공부하기. 소셜 로그인 구현. nest.js에서 index.ts를 쓰는 이유 모듈의 외부 인터페이스 제공: index.ts 파일은 해당 모듈을 사용하는 다른 부분과 상호 작용할 때 모듈의 외부 인터페이스를 제공하는 역할을 합니다. 외부에서 해당 모듈을 가져다 사용할 때, 이 파일을 통해 모듈의 중요한 기능이나 클래스에 쉽게 액세스할 수 있습니다. 폴더 구조 간소화: index.ts를 사용하면 디렉터리의 구조를 단순화할 수 있습니다. 외부에서 해당 모듈을 사용할 때, 모듈의 핵심 기능이나 클래스에 직접 액세스하고자 할 때 해당 디렉터리에 있는 index.ts 파일만 지정해주면 됩니다. 내보내는 항목의 집중화: index.ts 파일을 사용하면 해당 모듈에서 외부로 내보내는 항목들을 중앙집중화할 수 있습니다. 이는 모듈의 변경이 생겼을 때.. dev-camp Day 1-2 : hexagonal architecture practice 폴더 구조 dev-camp ├── .eslintrc.js ├── .gitignore ├── .prettierrc ├── nest-cli.json ├── package.json ├── README.md ├── src │ ├── .DS_Store │ ├── app.module.ts │ ├── auth │ │ ├── adapter │ │ │ ├── in │ │ │ │ └── auth.controller.ts │ │ │ └── out │ │ │ ├── auth.adapter.ts │ │ │ ├── auth.entity.ts │ │ │ └── auth.repository.ts │ │ ├── domain │ │ │ └── auth.ts │ │ └── port │ │ ├── in │ │ │ └── auth.useCa.. dev-camp Day 1-1 : Shall We NestJS? Nest.js를 만든 이유 아키텍처를 손쉽게 사용하기 위해 만들었다! Nest Commands dayoung@dayoungui-MacBookPro ~ % nest -h Usage: nest [options] Options: -v, --version Output the current version. -h, --help Output usage information. Commands: new|n [options] [name] Generate Nest application. build [options] [app] Build Nest application. start [options] [app] Run Nest application. info|i Display Nest project details. add [op.. 이전 1 다음