# 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 테스트 (명령줄)**
```bash
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 요청
```bash
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. **타임아웃 증가**
   ```typescript
   // 10초 → 30초로 증가
   timeout: 30000
   ```

2. **상세 에러 로깅 추가**
   - API 요청/응답 로그
   - 에러 상세 정보 출력
   - 단계별 진행 상황 추적

3. **에러 메시지 개선**
   ```typescript
   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. **로컬에서 서버 실행**
   ```bash
   # 서버 로그를 확인하며 실행
   ```

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. **서버 로그 확인**
   - 요청이 도달했는지
   - 어느 시점에서 멈추는지
   - 예외가 발생하는지

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

```bash
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`
