본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
🔥누적 수강 9백만 시간 돌파 기념 100% 페이백 (03.22 - 03.27) | 패스트캠퍼스
단 6일 한정! 지금 수강 시작하면 수강료 100% 돌려드려요!
fastcampus.co.kr
0326 수
학습 내용 정리
nestjs
로그인 시스템 구현
오류해결
학습후기
🔐 Basic 토큰 파싱부터 시작한 회원가입
먼저 회원가입 기능에서는 클라이언트로부터 받은 Basic 인증 토큰을 파싱하는 parseBasicToken 메서드를 작성했습니다. 이 토큰은 base64 인코딩된 문자열로, email:password 형식의 정보를 담고 있습니다. 이를 다시 디코딩해서 이메일과 비밀번호를 분리하고, 유효성 검사까지 꼼꼼히 처리했습니다.
이후 이메일 중복 체크를 거쳐, bcryptjs를 사용하여 비밀번호를 안전하게 해싱하고, 최종적으로 사용자 정보를 데이터베이스에 저장하는 방식으로 구현했습니다. 이 부분에서 NestJS의 @InjectRepository와 ConfigService의 조합을 통해 의존성 주입 구조를 자연스럽게 익힐 수 있었습니다.
🧱 bcrypt 오류: bcrypt_lib.node를 찾을 수 없다?
개발 도중 예상치 못한 큰 장애물을 하나 마주쳤습니다. bcrypt 모듈을 사용하려 했는데, 실행하자마자 아래와 같은 에러가 발생했습니다:
처음엔 패키지를 재설치하고, 캐시를 지우고, 심지어 Node 버전까지 바꿔봤지만 해결되지 않았습니다. 이후 해결책으로 bcryptjs 모듈을 사용했고, import * as bcrypt from 'bcryptjs'로 코드를 수정한 후 문제가 해결되었습니다. 순수 JavaScript 기반 모듈이라 네이티브 빌드 환경에 의존하지 않아 환경 이슈를 피할 수 있었죠.
이 경험을 통해, 무작정 오류에 당황하지 않고 대체 라이브러리나 구조를 유연하게 고려하는 사고가 얼마나 중요한지를 느꼈습니다.
🔐 로그인 기능과 JWT 발급
로그인 기능 구현에서도 중요한 교훈이 있었습니다. 비밀번호 비교 후, 사용자에게 accessToken과 refreshToken을 발급하는 과정에서 다음과 같은 에러가 발생했죠:
원인은 간단했습니다. JwtService가 아니라 JwtModule을 주입한 것이 문제였습니다. 하지만 이 경험 덕분에 NestJS에서의 의존성 주입 구조와 @nestjs/jwt 모듈의 동작 방식에 대해 더 깊이 이해할 수 있게 되었습니다.
환경 변수에서 JWT 시크릿 키를 가져와 설정하고, 토큰마다 만료 시간을 다르게 적용하는 것도 보안적인 측면에서 매우 유의미한 경험이었습니다.
🧠 오늘 느낀 점
NestJS는 구조가 엄격한 만큼, 처음엔 불편하게 느껴질 수 있지만 그 구조에 익숙해지고 나면 코드의 일관성과 유지보수성이 얼마나 강력한지를 체감하게 됩니다. 오늘 작성한 AuthService 코드는 단순히 돌아가는 기능이 아니라, 구조적이고 안전하게 잘 짜인 코드라는 점에서 나름의 자부심이 들었습니다.
무엇보다도, 오류를 피해가지 않고 직접 부딪혀 해결하는 경험이 개발자로서 가장 값진 성장이라는 걸 다시 한 번 느꼈습니다.
✍️ 마무리하며
오늘 하루 동안 구현한 기능과 해결한 문제는 다음과 같습니다:
- Basic 토큰 파싱 로직 작성
- 비밀번호 해싱 및 비교 처리
- JWT 토큰 발급 로직 구현
- bcrypt 오류(bcrypt_lib.node 누락) 해결 → bcryptjs로 대체
- JwtService와 JwtModule 혼동 오류 해결
NestJS 인증 시스템의 구조를 체계적으로 익히고, 실무에서 마주칠 수 있는 오류를 직접 겪으며 해결해본 오늘은 그 어떤 강의보다도 깊이 있게 배운 날이었습니다. 앞으로 더 복잡한 시스템을 구성할 때도 오늘의 경험이 큰 자산이 될 것 같습니다.
사진



