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 경로와 테이블명은 별개