2026-02-11
오늘 한 것
- Sprint4 베이스코드 기반으로 Controller 레이어 작업 시작
- Postman 컬렉션/환경(local) 구성 및 baseUrl 변수 적용
- User API 테스트 진행:
- GET /users 전체조회 성공
- POST /users 생성 시도 및 실패 원인 추적
- 에러 흐름을 로그로 추적하며 원인별로 분리해서 해결:
- 405(Method Not Allowed): 요청 메서드/매핑 불일치
- UUID 변환 에러: PathVariable UUID에 잘못된 값(또는 빈 변수) 전달
- 500(Internal Server Error): 실제 원인은 서비스 로직 예외(중복 사용자)
- FileUserRepository 저장 경로/방식 확인:
- user.dir 기준 + (설정값 fileDirectory) + “User” 폴더로 저장
- 확장자 “.ser” (Serializable 바이너리) 파일로 사용자 데이터 저장됨
- users.txt / user.txt 같은 텍스트 파일만 보고 판단하면 꼬일 수 있다는 걸 확인
막힌 점
- Postman에서 변수(user_id)가 비어 있거나 UUID 형식이 아니면:
- URL이 /users/ 로 나가거나
- UUID 변환 실패로 404/에러처럼 보이는 상황 발생
- 동일 username/email로 POST 반복 시 중복 예외 발생
- 저장 데이터가 txt가 아니라 .ser 기반이라 “파일에 안 보인다” 착시가 발생
정리
- Postman은 환경변수 기반으로 테스트 루틴을 고정해야 함:
- baseUrl = http://localhost:8080
- user_id는 POST 응답의 id를 복사해서 사용(또는 스크립트로 자동 저장)
- 500은 “서버가 터졌다”가 아니라 “예외를 HTTP로 변환 안 했다”는 신호:
- 과제 요구사항대로 전역 예외처리(@RestControllerAdvice)로 4xx/5xx를 정리해야 함
- 파일 저장 방식일 때 데이터 위치는 코드가 정의:
- FileUserRepository에서 user.dir + fileDirectory + “User” 경로 아래에 .ser로 저장됨
- 중복/초기화가 필요하면 해당 폴더의 .ser 데이터를 기준으로 관리해야 함
코드 구조
- controller/
- UserController 등 웹 API 엔드포인트 담당
- service/
- UserService 인터페이스 + Basic 구현체가 비즈니스 로직 담당
- repository/file/
- FileUserRepository가 파일 기반 저장/조회 담당
- 저장 형태
- discodeit/User/*.ser (User 엔티티 직렬화 저장)
- discodeit/UserStatus/*.ser (상태 데이터)