2025-08-11 NestJS API 테스트 및 문제 해결

2025. 8. 11. 02:45·TIL

1. 오늘 한 것 (What I Did)

  • NestJS CRUD API HTTP 요청 테스트
  • 500 Internal Server Error 문제 해결

실제 진행한 작업들

1단계: HTTP 요청 테스트 환경 설정

  • VS Code REST Client 확장 프로그램 사용
  • .vscode/settings.json에 환경변수 설정
  • user.http 파일 생성

2단계: API 테스트 시도 및 에러 발생

POST {{domain}}/users
Content-Type: application/json

{
  "providerId": "kakao123",
  "email": "test@test.com", 
  "name": "홍길동"
}
  • 결과: HTTP 500 Internal Server Error 발생

3단계: 에러 원인 분석 및 해결

  • 터미널 로그 확인: Field 'provide_id' doesn't have a default value
  • 문제 원인: SnakeNamingStrategy가 providerId → provide_id로 잘못 변환
  • 해결: Entity에서 컬럼명 직접 지정

4단계: Entity 수정

@Column({ name: 'provider_id', nullable: false })
providerId: string;

@Column({ name: 'profile_image', nullable: true })
profileImage: string;

@CreateDateColumn({ name: 'create_at' })
createAt: Date;

@UpdateDateColumn({ name: 'update_at' })
updateAt: Date;

2. 새로 이해한 것 (What I Learned)

2-1. HTTP 요청의 기본 구조

완전한 URL의 필요성

GET {{domain}}/users
    ↑         ↑
  어디서?   무엇을?

URL 구성 요소

http://localhost:3000/users
  ↑         ↑        ↑    ↑
프로토콜   서버주소   포트  경로

2-2. RESTful API URL 패턴 이해

기본 CRUD 패턴

HTTP 메서드 URL 의미
GET /users 모든 사용자 조회 "전체 목록 보여줘"
GET /users/1 ID가 1인 사용자 조회 "1번 사용자만 보여줘"
POST /users 새 사용자 생성 "새 사용자 만들어줘"
PATCH /users/1 ID가 1인 사용자 수정 "1번 사용자 정보 바꿔줘"
DELETE /users/1 ID가 1인 사용자 삭제 "1번 사용자 지워줘"

:id 파라미터의 의미

@Get(':id')  // ← :id는 "변수"를 의미
findOne(@Param('id') id: string) {  // URL에서 추출된 값

2-3. Controller의 역할과 경로 생성 원리

Controller = API 경로의 설계자

@Controller('users')  // ← "나는 /users 경로를 담당할게!"
export class UsersController {
  @Get()        // ← "GET /users는 내가 처리!"
  @Post()       // ← "POST /users는 내가 처리!"
  @Get(':id')   // ← "GET /users/:id는 내가 처리!"
}

2-4. VS Code 환경변수 설정 방법

REST Client 환경변수

{
  "rest-client.environmentVariables": {
    "todo_list_db": {
      "domain": "http://localhost:3000"
    }
  }
}

SQLTools 연결 설정

{
  "sqltools.connections": [
    {
      "name": "Todo List",
      "driver": "MySQL",
      "username": "hanbi",
      "password": "1234"
    }
  ]
}

3. 실수했던 부분들 (What I Struggled With)

3-1. 환경변수와 실제 설정 불일치

문제: SQLTools 연결 정보 오류

  • settings.json: "username": "hanbi", "password": "hanbi1234"
  • 실제 MySQL: username: "root", password: "1234"
  • 결과: SQLTools 연결 실패

해결: 실제 Docker MySQL 설정에 맞게 수정

3-2. 에러 로그 다른데서 찾음...

문제: HTTP 500 에러 발생 시 원인 파악 어려움

  • VS Code REST Client: "Internal Server Error"만 표시
  • SQLTools 로그: 관련 없는 정보만 가득

해결: NestJS 서버가 실행 중인 터미널 로그 확인 필요

  • npm run start:dev가 실행된 터미널에서 실제 에러 확인

4. 여전히 잘 모르겠는 부분

HTTP 요청 기본 개념 부족

  • "왜 {{domain}}을 넣어야 하지?" → HTTP 요청은 완전한 URL 필요
  • "왜 /users/1에서 1을 보내지?" → RESTful API의 리소스 식별 방식
  • "테이블명은 user인데 경로는 users?" → API 경로와 테이블명은 별개
저작자표시 비영리 변경금지 (새창열림)
'TIL' 카테고리의 다른 글
  • 2025-08-18 React 공식 문서 - UI 표현하기
  • 2025-08-12 NestJS 구글 소셜 로그인 & JWT 인증 시스템 구현
  • 2025-08-10 NestJS UsersService CRUD 구현 및 DTO 작성
  • 2025-08-09 NestJS + TypeORM DB 연동
한비(BIBI)
한비(BIBI)
IT 업계에서 오랫동안 일 하고 싶습니다. 가능하다면 죽을 때까지 배우며 살고 싶습니다. 마케팅과 CX 분야에서 커리어를 쌓았습니다. 지금은 IT 업계에 더 깊이 있게 기여하고자 개발 공부를 하고 있습니다. 이 배움의 여정을 글로 남기고 싶어 블로그를 시작했습니다.
  • 한비(BIBI)
    0과 1로된 세상
    한비(BIBI)
  • 전체
    오늘
    어제
    • 분류 전체보기 (33)
      • 크래프톤 정글 (5)
      • Computer Science (10)
      • 읽고 쓰고 생각하기 (1)
      • 일하면서 배웁니다 (1)
      • TIL (15)
  • 링크

    • LinkedIn
    • Threads
    • Twitter
  • 인기 글

  • 태그

    데이터시각화
    크래프톤정글
    정글후기
    운영체제구조
    컴퓨터과학입문
    시스템설계
    gpt인프라
    CPU스케줄링
    나만무프로젝트
    뉴스피드시스템
  • hELLO· Designed By정상우.v4.10.4
한비(BIBI)
2025-08-11 NestJS API 테스트 및 문제 해결
상단으로

티스토리툴바