김데이의 개발공부

[ TIL ] Day 44 - 실습 : Express User 기능 구현 with Token 본문

코드잇 Node.js(BE) 부트 캠프/TIL (Today I Learn) 📑

[ TIL ] Day 44 - 실습 : Express User 기능 구현 with Token

theday365 2025. 11. 26. 19:04
반응형

🗓️ 수업 일자 : 2025.11.26

✨ 오늘의 수업 평가 :  [ PROJECT ] 실습 러버 👩‍💻🛠️ 실습 꿀잼 🍯😝

 

소올직히 user 인증/인가 기능에 대해 내가 겨우 이해한 정도라서 진짜 겁먹고 시작했는데,

기존에 작업했던 코드까지 수정 할 정도로 여유있게 작업해서 꽤나 놀램 🤓😉ㅋㅋㅋ 

 

물론 거의 대부분 강의 코드를 보며 작성 했지만 

그래도 로직 순서에 맞게 작업 했고,

각 모듈의 역할이 무엇인지 알고 작업 했으며,

문제가 생기면 어떤 모듈에서 잘못됬는지 파악 할 수 있었으니

 

이정도면 80% 이상 이해했다고 봐도 되겠지~? ㅋㅋ

 

👩‍💻 [개인 프로젝트] 오늘 작업 내용 💻
- 스프린트 미션 4 : Express User 인증 API 구현 /

                             관련된 Product & Article & comment 인가 추가

 

📝  오늘 배운 내용  

- User 인증/인가 관련 기초 이론

- Token 작업하기

 


1.  User 인증/인가 관련 기초 이론

MVC(Model-View-Controller) 패턴

  • Model(모델), View(뷰), Controller(컨트롤러)가 독립적으로 작동하는 것을 목적으로 함. 
  • 가독성과 유지보수성이 높고, 변화에 대응하기 쉬워짐
  • Model(모델) : 데이터베이스와 상호작용, 비지니스 로직 관리
  • View(뷰) : 레이아웃, 화면 처리
  • Controller(컨트롤러) : 모델과 뷰로 명령을 전달하는 역할
  • Service(서비스) : 모델이 너무 많은 역할을 담당하고 있어서, 비지니스 로직만 분리하여 서비스가 담당. 

 

작업 구조 분리 

  • Controller : API의 요청 / 응답에 반응하는 로직, 라우터에서 바로 접속하는 진입점
  • Service : 이메일 중복 검사, 비밀번호 해싱, 민감 데이터 필터링 등을 진행
  • Utility : 재사용 가능한 독립 함수, 작은 단일 기능을 담당

 

User Prisma Schema 설정

1. Unique 설정 : schema.prisma 에서 필드 값에 @unique 설정을 하지 않으면 prisma.{modelname}.findUnique 를 쓸 수 없음!

2. 필수 값이 아닌 경우, 꼭 ? (옵셔널) 설정 : [ image String? ]을 하지 않으면 API 테스트에서 Prisma 오류 발생!

 

2. Token 작업하기 

1) .env 파일 작성 규칙

  • KEY=VALUE 형태로 작성하며, "=" 앞뒤로 공백을 사용하면 안됨
  • KEY는 무조건 대문자로 사용
  • value는 자유롭게 사용, 공백이나 #(주석용 특수문자)을 써야하는 경우에만 따옴표를 사용하고 평소엔 따옴표 사용 안함
  • 주석 사용 시 #으로 작성
# 기본 파일 셋팅
NODE_ENV=development
PORT=3000

# 토큰 셋팅
JWT_ACCESS_TOKEN_SECRET=supersecret_access_123
JWT_REFRESH_TOKEN_SECRET=supersecret_refresh_456
.env 가 아니어도 되는 값 .env에 꼭! 넣어야 하는 값
명칭 선언, 일반적으로 사용하는 값들 유출되면 바로 리스크가 생기는 값들
PORT
ACCESS_TOKEN_COOKIE_NAME
REFRESH_TOKEN_COOKIE_NAME
UPLOAD_PATH
STATIC_FOLDER
...
JWT_ACCESS_TOKEN_SECRET
JWT_REFRESH_TOKEN_SECRET
DB_URL
DB_PASSWORD
GOOGLE_API_KEY 
...

 

 

2) NODE_ENV의 역할

  • Node.js 실행 환경을 구분하는 일종의 "모드 스위치", 현재 어떤 모드인지 알려주는 플래그(Flag)
  • 개발 / 운영 환경에서 다르게 동작해야 하는 코드들을 제어하기 위해 사용
    ex) 개발 모드용 콘솔 로그 설정, 쿠키 옵션 설정, DB 연결 시 개발용 / 운영용 설정, CORS 설정 등 
  • development : 개발단계 
    product : 배포 또는 실제 서비스 단계
    test : 테스트 자동화 단계

 

3) Login & Logout Test 화면 - Access Token / Refresh Token 생성

 

Login 시 Cookie에 발행한 Access Token / Refresh Token 전달
Login 시 Cookie에 발행한 Access Token / Refresh Token 전달

 

Logout 시 Cookie로 전달했던 토큰 값의 만료 시간을 과거로 변환 시켜서 못 쓰게 만듦
Logout 시 Cookie로 전달했던 토큰 값의 만료 시간을 과거로 변환 시켜서 못 쓰게 만듦

 

 

4) Access Token 을 이용하여 USER 정보를 불러와 Product 등록! 

Login 하며 생성된 Access Token 을 이용하여 USER 정보를 불러와 Product 등록!
Login 하며 생성된 Access Token 을 이용하여 USER 정보를 불러와 Product 등록!

 


 

📃 내일은 뭘 배울까 🤔

- 스프린트 미션 4 : 로그인 - 마이페이지 구현

- Passport OAuth 구조 정리

 

 

반응형