Dev/Spring

[Spring] 클라이언트 - 서버 간 통신 흐름

syuare 2025. 5. 9. 20:00

 

향후 Web Application을 실제 개발하기 위해서는 클라이언트와 서버 간의 통신 흐름을 알아야 한다.


왜 알아야 할까?

  • 효율적인 API 설계를 위해
    → RESTful API 설계와 HTTP 메서드(GET, POST, PUT, DELETE 등)를 올바르게 활용 가능
  • 디버깅 / 문제 해결을 위해
    → 오류 발생 시 어떤 오류인지 정확히 파악하고 해결 가능
  • 보안 / 최적화를 위해
    → HTTPS를 사용한 암호화된 통신, 캐싱 전략 구현, 데이터 압축, 비동기 통신 등을 활용하여 응답 속도 개선 가능
  • 전체적인 시스템 흐름 파악을 위해
    → 백엔드와 프론트엔드의 상호작용 명확히 이해하고, 시스템 구조에 대해 파악 가능

클라이언트가 요청을 보내는 과정

클라이언트에서 URL을 입력 or 버튼 클릭 → 해당 요청을 서버로 보내기 위한 준비 시작한다.

  • DNS(Domain Name System) 서버에 요청 →  요청한 도메인 이름을 IP 주소로 변환하여 서버 위치 확인한다.
  • DNS에서 IP 주소 확인 → 서버와 연결하기 위해 TCP 연결을 설정하고, 3-way handshake 절차 진행하여 연결한다.

HTTP 요청 전송

클라이언트는 HTTP 요청을 서버로 전송한다. (요청 메서드, URL, 헤더, 본문(선택) 포함)

  • 요청 메서드: GET, POST, PUT, DELETE, PATCH 등
  • URL: 요청할 리소스 위치
  • 헤더: 요청에 대한 메타 데이터(User-Agent, Content-Type, Authorization 등)
  • 본문: POST, PUT 등 요청 시 필요한 데이터를 포함하여 서버에 전송
GET /users HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0

서버에서 요청 처리

서버는 클라이언트의 요청을 받게 되면, 요청 URL을 분석하고 적절한 라우팅을 찾아 요청된 리소스에 대한 처리를 시작한다.

  • 요청에 대한 비즈니스 로직을 수행하여 결과를 준비한다
  • 요청 처리 과정에서 필요한 경우 외부 API와 통신/데이터 가져오는 등 작업을 진행한다
  • 요청에 대한 응답을 준비한다. ( 응답 코드 + 응답 본문)

HTTP 응답 전송

서버는 클라이언트 요청에 대해 준비한 HTTP 응답을 클라이언트에게 반환한다

  • 상태 코드: 요청 처리 결과를 나타내는 코드 ( 200 OK / 404 NOT FOUND / 500 INTERNAL SERVER ERROR 등)
  • 응답 헤더: 응답에 대한 메타 데이터 (Content-Type, Cache Control, Date 등)
  • 응답 본문: 요청한 리소스에 대한 실제 데이터 (HTML, JSON 등)
HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 1,
  "name": "Alice"
}

클라이언트 응답 처리

클라이언트는 서버로부터 받은 응답을 처리하게 된다 

  • HTML: 페이지 렌더링 후 화면에 표시한다
  • JSON: 클라이언트 어플리케이션에서 파싱 후 데이터 처리하고, 사용자에게 표시하거나 후속 작업 진행한다.

추가 리소스 요청: 만약 HTML과 같은 페이지에서 이미지, CSS 파일 등 정적 리소스가 포함되어 있을 경우 클라이언트는 해당 리소스에 대한 데이터를 서버로부터 추가 요청을 한다.


연결 종료

클라이언트와 서버의 HTTP 연결을 종료한다

  • HTTP는 무상태성(Stateless) 프로토콜이므로,
  • 각 요청 및 응답은 독립적이기 때문에 서버는 이전 요청의 상태를 기억하지 않는다.
  • 이로 인해 클라이언트와 서버간의 연결은 매 요청마다 새로 연결해야하고 완료되면 종료된다.

 

'Dev > Spring' 카테고리의 다른 글

[Spring] 연관 관계 매핑  (0) 2025.05.19
[Spring] JPA  (0) 2025.05.15
[Spring] IP / Port / Domain / URL  (0) 2025.05.13
[Spring] HTTP 기본 구조  (0) 2025.05.07
[Spring] Spring 이란  (0) 2025.05.02