본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://fastcampus.info/4n8ztzq
안녕하세요 :)
오늘은 "50일의 기적 AI 환급반_ 대규모 채팅 플랫폼으로 한 번에 끝내는 실전 대용량 트래픽 커버 완전판 " 챌린지에 도전하는 열세번째 날입니다.
열두번째 날에는 Spock 사용을 위한 Groovy 기본 문법과 JUnit과 Spock의 차이에 대해 배웠었는데요. 오늘은 과연 어떤 내용들을 배울 수 있을지 공부하고 포스팅 하도록 하겠습니다.
오늘 학습할 내용의 제목은,
Part 2. 채팅 뼈대 프로젝트 개발 > Ch 2. Rest API와 WebSocket의 기본 >
01. Rest API와 WebSocket의 차이
입니다.



🌐 Rest API vs WebSocket:
언제 어떤 통신 방식을 선택해야 할까?
- 현대 웹 서비스에서는 다양한 클라이언트와 서버 간의 통신 방식이 존재하며, 그중 가장 많이 사용되는 두 가지 방식은 Rest API와 WebSocket입니다. 이 둘은 사용하는 프로토콜, 연결 유지 방식, 그리고 실시간성 측면에서 큰 차이를 보입니다. 이번 포스팅에서는 두 기술을 비교하고, 언제 어떤 상황에서 활용하면 좋을지 정리해보겠습니다.
☝️ Rest API란?
- Rest API는 특정 프로토콜에 종속되지 않는 아키텍처 스타일이지만, 대부분 HTTP를 기반으로 동작합니다.
- URI로 리소스를 식별하고, HTTP 메서드(GET, POST, PUT, DELETE 등) 를 통해 리소스에 대한 CRUD 작업을 수행합니다.
- 가장 큰 특징은 Stateless(무상태) 방식이라는 점입니다. 각 요청은 이전 요청과 연결되어 있지 않으며, 요청에 필요한 모든 정보를 포함해야 합니다.
- 이 구조 덕분에 확장성이 뛰어나고, 서버는 세션을 관리하지 않아도 되기 때문에 유지보수가 용이합니다.
장점
- HTTP 기반이라 캐싱, 보안(HTTPS), 인증(Auth, Token) 등 표준 기술 활용 가능
- 대부분의 프론트엔드 라이브러리와 백엔드 프레임워크에서 기본 지원
- 초기 구현과 유지보수가 상대적으로 간단
단점
- 클라이언트가 요청을 보내야만 서버 응답을 받을 수 있는 단방향 통신
- 실시간 데이터 반영이 어려워 polling 혹은 SSE(Server-Sent Events) 등의 우회 기술 필요
✌️ WebSocket이란?
- WebSocket은 웹 환경에서 실시간 양방향 통신을 가능하게 하는 프로토콜입니다.
- 초기에 한 번 HTTP 연결로 핸드셰이크를 수행한 뒤, WebSocket 프로토콜로 업그레이드됩니다.
- 이 후 연결은 지속적으로 유지되며, 클라이언트와 서버 간 자유롭게 메시지를 주고받을 수 있습니다.
- 전통적인 HTTP 통신보다 오버헤드가 적고, 텍스트 및 바이너리 형식 모두 지원합니다.
장점
- 항상 열린 연결을 통해 서버에서 클라이언트로 데이터를 실시간 푸시 가능
- 헤더 오버헤드가 적고, 효율적인 데이터 송수신
- 채팅, 주식 시세, 게임 등 실시간성이 중요한 서비스에 최적화
단점
- 상태를 유지해야 하므로 서버 리소스 소모가 큼
- HTTP 기반이 아니므로 기존 보안, 인증 체계 적용이 복잡
- 연결 유지, 장애 처리 등에서 개발 복잡도 증가
🔁 기술 선택 기준
| 구분 | Rest API | WebSocket |
| 통신 방식 | 요청-응답 (단방향) | 이벤트 기반 (양방향) |
| 연결 상태 | 무상태 (Stateless) | 상태 유지 (Stateful) |
| 실시간성 | 낮음 (Polling 필요) | 매우 높음 (실시간 푸시) |
| 사용 사례 | 로그인, 정보 조회 | 채팅, 실시간 알림, 게임 |
| 구현 난이도 | 비교적 쉬움 | 상대적으로 복잡 |
🧩 실무 예시: 두 기술의 공존
현실에서는 두 기술을 혼합하여 사용하는 경우가 많습니다.
예를 들어 모바일뱅킹 앱에서는,
- 계좌 조회, 송금, 거래내역 등은 Rest API로 구현하고,
- 고객센터 실시간 채팅은 WebSocket으로 처리할 수 있습니다.
또한 하경님이 만들고 있는 채팅 애플리케이션도,
- 회원 가입, 로그인, 로그아웃은 Rest API로 처리하고,
- 채팅 메시지 송수신은 WebSocket을 활용합니다.
이런 방식은 복잡도는 낮추면서도 실시간성과 유연성을 모두 확보할 수 있는 좋은 전략입니다.
- 이번 학습을 통해 Rest API와 WebSocket이 서로 대체재가 아닌 보완재라는 점을 깊이 이해하게 되었습니다.
- 특히 WebSocket은 단순히 실시간 통신이 필요한 서비스뿐 아니라, 복합적인 사용자 경험을 요구하는 현대 서비스에서 점점 더 중요한 역할을 하게 될 것이라는 생각이 들었습니다.
- 그럼에도 모든 기능을 WebSocket으로 구현하기보다는, 기능에 맞는 통신 방식을 적절히 선택하고, 유지보수성과 성능을 동시에 고려하는 판단이 개발자에게 요구된다는 사실이 인상 깊었습니다.
- 앞으로 실시간성을 요하는 기능을 설계할 때는 반드시 WebSocket을 염두에 두되, 전체 시스템의 복잡도를 줄일 수 있는 아키텍처 설계를 함께 고민해야겠다는 생각을 하게 되었습니다.

