kt-event-marketing-fe/docs/api-server-issue.md
cherry2250 10c728dbaf User API 전체 연동 완료 및 로그아웃 에러 처리 개선
## 주요 변경사항

### 1. FSD 아키텍처 기반 API 레이어 구축
- entities/user: User 엔티티 (타입, API)
- features/auth: 인증 기능 (useAuth, AuthProvider)
- shared/api: 공통 API 클라이언트 (Axios, 인터셉터)

### 2. 전체 User API 화면 연동 완료
-  POST /api/v1/users/login → login/page.tsx
-  POST /api/v1/users/register → register/page.tsx
-  POST /api/v1/users/logout → profile/page.tsx
-  GET /api/v1/users/profile → profile/page.tsx
-  PUT /api/v1/users/profile → profile/page.tsx
-  PUT /api/v1/users/password → profile/page.tsx

### 3. 로그인 페이지 API 연동
- useAuthStore → useAuthContext 변경
- 실제 로그인 API 호출
- 비밀번호 검증 완화 (API 스펙에 맞춤)
- 상세 로깅 추가

### 4. 프로필 페이지 API 연동
- 프로필 자동 로드 (GET /profile)
- 프로필 수정 (PUT /profile)
- 비밀번호 변경 (PUT /password)
- 로그아웃 (POST /logout)
- 전화번호 형식 변환 (01012345678 ↔ 010-1234-5678)

### 5. 로그아웃 에러 처리 개선
- 백엔드 500 에러 발생해도 로컬 상태 정리 후 로그아웃 진행
- 사용자 경험 우선: 정상 로그아웃으로 처리
- 개발자용 상세 에러 로그 출력

### 6. 문서화
- docs/api-integration-complete.md: 전체 연동 완료 보고서
- docs/api-server-issue.md: 백엔드 이슈 상세 보고 (회원가입 타임아웃, 로그아웃 500 에러)
- docs/user-api-integration.md: User API 통합 가이드
- docs/register-api-guide.md: 회원가입 API 가이드

### 7. 에러 처리 강화
- 서버 응답 에러 / 네트워크 에러 / 요청 설정 에러 구분
- 사용자 친화적 에러 메시지
- 전체 프로세스 상세 로깅

## 기술 스택
- FSD Architecture
- React Context API (AuthProvider)
- Axios (인터셉터, 90초 타임아웃)
- Zod (폼 검증)
- TypeScript (엄격한 타입)

## 테스트
-  빌드 성공
-  백엔드 안정화 후 전체 플로우 테스트 필요

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 13:18:23 +09:00

6.8 KiB

API 서버 연결 문제 보고

문제 요약

현상:

  1. 회원가입 API 호출 시 30초 타임아웃 발생
  2. 로그아웃 API 호출 시 500 Internal Server Error 발생

원인: API 서버(http://20.196.65.160:8081)의 성능 및 구현 이슈 날짜: 2025-10-28 최종 업데이트: 2025-10-28

상세 분석

1. 프론트엔드 구현 상태

완료됨 - 프론트엔드는 정상적으로 구현됨

  • API client 설정 완료
  • 회원가입, 로그인, 프로필, 로그아웃 페이지 API 연동 완료
  • 상세 로깅 추가
  • 타입 정의 및 유효성 검증 완료
  • 에러 처리 강화 (로그아웃은 실패해도 로컬 상태 정리 후 진행)

2. 테스트 결과

이슈 1: 회원가입 API 타임아웃

curl 테스트 (명령줄)

curl -X POST http://20.196.65.160:8081/api/v1/users/register \
  -H "Content-Type: application/json" \
  -d '{
    "name": "테스트",
    "phoneNumber": "01012345678",
    "email": "test@example.com",
    "password": "password123",
    "storeName": "테스트가게",
    "industry": "restaurant",
    "address": "서울시 강남구",
    "businessHours": "09:00-18:00"
  }'

결과: timeout after 30 seconds

브라우저 테스트

❌ API Error: {
  message: 'timeout of 10000ms exceeded',
  status: undefined,
  statusText: undefined,
  url: '/api/v1/users/register',
  data: undefined
}

프론트엔드 조치: 타임아웃을 90초로 증가


이슈 2: 로그아웃 API 500 에러

브라우저 테스트

❌ API Error: {
  message: 'Request failed with status code 500',
  status: 500,
  statusText: '',
  url: '/api/v1/users/logout',
  data: {...}
}

프론트엔드 조치:

  • API 실패해도 로컬 상태 정리 후 로그아웃 처리 계속 진행
  • 사용자 경험을 위해 정상 로그아웃으로 처리
  • 상세 에러 로그만 콘솔에 출력

3. 서버 상태 확인

HEAD 요청

curl -I http://20.196.65.160:8081/api/v1/users/register

결과:

  • Status: HTTP/1.1 500
  • 서버는 실행 중이지만 에러 발생

연결 테스트

✅ 서버 연결: 성공 (20.196.65.160:8081)
❌ POST 요청: 30초 타임아웃

원인 분석

가능한 원인들

  1. 서버 측 처리 시간 초과

    • 회원가입 로직이 30초 이상 걸림
    • 데이터베이스 연결 문제
    • 무한 루프 또는 데드락
  2. 서버 에러 (500 Internal Server Error)

    • 서버 로직에 버그 존재
    • 필수 설정 누락
    • 예외 처리 실패
  3. 데이터베이스 문제

    • DB 연결 실패
    • DB 쿼리 타임아웃
    • DB 트랜잭션 락
  4. 서버 리소스 부족

    • 메모리 부족
    • CPU 과부하
    • 스레드 풀 고갈

프론트엔드에서 수행한 조치

완료된 개선사항

  1. 타임아웃 증가

    // 10초 → 30초로 증가
    timeout: 30000
    
  2. 상세 에러 로깅 추가

    • API 요청/응답 로그
    • 에러 상세 정보 출력
    • 단계별 진행 상황 추적
  3. 에러 메시지 개선

    if (error.response) {
      // 서버 응답 에러
      errorMessage = error.response.data?.message
    } else if (error.request) {
      // 응답 없음
      errorMessage = '서버로부터 응답이 없습니다'
    }
    

서버 측에서 확인이 필요한 사항

🔍 체크리스트

회원가입 API (POST /api/v1/users/register)

  • 서버 로그 확인

    • 엔드포인트 호출 로그
    • 예외 스택 트레이스
    • 데이터베이스 쿼리 로그
    • 30초 이상 걸리는 원인 파악
  • 데이터베이스 연결 확인

    • DB 연결 상태
    • 연결 풀 설정
    • 쿼리 실행 시간
  • API 로직 검증

    • 회원가입 로직 검토
    • 무한 루프나 데드락 확인
    • 트랜잭션 처리 확인

로그아웃 API (POST /api/v1/users/logout)

  • 500 에러 원인 파악

    • 서버 로그에서 예외 스택 트레이스 확인
    • 토큰 검증 로직 확인
    • 데이터베이스 쿼리 에러 확인
  • API 로직 검증

    • 로그아웃 처리 로직 검토
    • 필수 필드 검증
    • 예외 처리 확인

공통

  • 서버 설정 확인

    • 타임아웃 설정
    • 스레드 풀 크기
    • 메모리 설정
  • 서버 리소스 확인

    • CPU 사용률
    • 메모리 사용률
    • 디스크 I/O

테스트 방법

서버 측 직접 테스트

  1. 로컬에서 서버 실행

    # 서버 로그를 확인하며 실행
    
  2. Postman으로 테스트

    POST http://localhost:8081/api/v1/users/register
    Content-Type: application/json
    
    {
      "name": "테스트",
      "phoneNumber": "01012345678",
      "email": "test@example.com",
      "password": "password123",
      "storeName": "테스트가게",
      "industry": "restaurant",
      "address": "서울시 강남구",
      "businessHours": "09:00-18:00"
    }
    
  3. 서버 로그 확인

    • 요청이 도달했는지
    • 어느 시점에서 멈추는지
    • 예외가 발생하는지

프론트엔드 테스트 (서버 수정 후)

npm run dev
  1. http://localhost:3000/register 접속
  2. 회원가입 정보 입력
  3. 브라우저 콘솔 확인
  4. 네트워크 탭에서 요청/응답 확인

임시 해결 방법

서버가 수정될 때까지 프론트엔드에서는:

  1. Mock 데이터 사용 (개발/테스트용)

    • 회원가입 성공 시나리오 테스트
    • UI/UX 개선 작업
  2. 에러 처리 개선

    • 사용자 친화적인 에러 메시지
    • 재시도 옵션 제공

백엔드 팀 확인 사항

서버 문제 해결을 위해 다음을 확인해주세요:

회원가입 API

  1. 서버 로그에 요청이 도달했는가?
  2. 30초 이상 걸리는 원인이 무엇인가?
  3. 데이터베이스 연결은 정상인가?
  4. 회원가입 로직이 정상적으로 실행되는가?

로그아웃 API

  1. 500 에러의 정확한 원인은 무엇인가?
  2. 서버 로그의 스택 트레이스는?
  3. 토큰 검증 로직이 정상인가?
  4. 로그아웃 로직이 정상적으로 실행되는가?

프론트엔드 대응 완료

로그아웃은 사용자 경험을 위해 다음과 같이 처리:

  • API 500 에러 발생해도 로컬 상태 정리 후 로그아웃 진행
  • 사용자에게는 "로그아웃되었습니다" 성공 메시지 표시
  • 로그인 페이지로 정상 리다이렉트
  • 콘솔에는 상세 에러 로그 출력 (디버깅용)

참고 자료

  • API 명세: docs/user-api-integration.md
  • 회원가입 가이드: docs/register-api-guide.md
  • 프론트엔드 코드:
    • API Client: src/shared/api/client.ts
    • User API: src/entities/user/api/userApi.ts
    • 회원가입 페이지: src/app/(auth)/register/page.tsx