지금 나는 chatController 에서
websocket 통신과, api 통신(채팅방 생성, 채팅방 리스트 불러오기, 채팅방 입장하기 등등) 모든 것을 처리함.
이렇게 될 경우 AWS Gateway 담당자 분이 핸드쉐이크에서 모든 경로에 접근하려고 해서 오류가 날 수 있다고 함.
> 솔직히 핸드쉐이크랑 게이트웨이 구조 몰라서 그런가 보다 라고까지만 이해함.
튜터님 조언 :
컨트롤러를 나누는게 확장성을 고려한다면 맞는 구조다. 하지만 지금 단계에서 필수라고 생각되지 않는다. 중요한건 기능 구현이 먼저고, 그건 나중에 개선으로 해도 될 것 같다.
> 팀원분이 핸드쉐이크 부분에 대한 우려가 있어보여서 그냥 내가 바로 컨트롤러 나눠서 해보겠다고 종결지음.
하지만 AI 답변은 나누는걸 추천하지만 나누는게 정답이 아니라고 함.
메모 해두고 나중에 공부해야할 듯
결론부터 말씀드리면, **“꼭 컨트롤러를 분리해야만 하는 것은 아니다”**가 정답입니다.
하지만 “분리하면 얻는 장점”과 “분리하지 않아도 되는 상황”이 각각 있습니다.
## 1. **분리하는 게 맞는 경우(장점)**
- **WebSocket 엔드포인트와 REST API의 보안 정책, 인증 방식, 라우팅 정책이 완전히 다를 때**
- **게이트웨이에서 WebSocket 업그레이드 경로만 별도로 관리하고 싶을 때**
- **대규모 서비스에서 REST와 WebSocket 트래픽을 완전히 분리해서 운영하고 싶을 때**
- **코드 구조상 명확하게 역할을 나누고 싶을 때(유지보수, 확장성)**
이런 경우에는
- `/api/clubs/{clubId}/chat` → REST API 컨트롤러
- `/chat/ws` 또는 `/api/clubs/{clubId}/chat/ws` → WebSocket 컨트롤러
처럼 **분리**하는 것이 “더 좋은 설계”가 될 수 있습니다.
## 2. **분리하지 않아도 되는 경우**
- **게이트웨이에서 이미 chat 서버로 라우팅을 잘 해주고 있고**
- **UI 흐름상 사용자가 임의로 WebSocket 엔드포인트에 접근할 수 없고**
- **REST와 WebSocket 모두 같은 인증/권한 정책을 쓴다면**
이럴 때는
- 같은 컨트롤러(혹은 같은 경로)에서 REST와 WebSocket을 같이 관리해도
**실질적인 보안/운영상 문제는 없습니다.**
## 3. **실무에서의 결론**
- **“꼭 분리해야 한다”는 강제 규칙은 없음**
- 하지만 **“분리하면 더 명확하고, 게이트웨이/보안/운영 측면에서 유리”**한 경우가 많음
- **작은 프로젝트/단일 서버/간단한 서비스**라면 굳이 분리하지 않아도 됨
- **대규모/장기 운영/보안 민감**하다면 분리하는 것이 더 좋음
---
### **정리**
- **분리해도 되고, 안 해도 된다.**
- “꼭 분리해야 한다”는 것은 아니다.
- 하지만 **분리하면 더 명확하고, 인프라/보안/운영에 유리**한 것은 사실이다.
**실제 운영 환경/팀 정책/트래픽/보안 요구사항**에 따라 유연하게 선택하시면 됩니다!
'코딩 > sparta TIL' 카테고리의 다른 글
Kafka : Gateway 적용 과정 - userId, token 전달 처리에 대한 논의 (0) | 2025.06.30 |
---|---|
kafka : 미수신 대비(DLQ) 및 Indempotent 개념 (0) | 2025.06.30 |
Kafka : failover(장애 전환) (1) | 2025.06.26 |
Kafka : Topic, Consumer Group, Partition, Offset (0) | 2025.06.26 |
AWS : VPC(Virtual Private Cloud) (0) | 2025.06.26 |