네트워크

08-네트워크 기초&기본 개념 공부

hakstroy 2025. 4. 18. 03:08



**서버-네트워크 흐름과 송수신 과정

1. 웹 백엔드 서버-네트워크 기본 흐름과 송수신 설명
 : 1단계 - 사용자가 요청을 보낸다. ( 클라이언트(사용자) -> 서버 )
  - 사용자가 브라우저에서 사이트 주소를 입력하거나 버튼을 누르는 순간부터 시작!!
 예를 들면
  - 사용자가 https://www.myproject.com/login 입력 또는 로그인 버튼을 클릭(+아무 버튼도 가능)
   : 브라우저가 서버로 요청(Request)을 보낸다.
    - 이 요청은 HTTP/HTTPS 프로토콜을 사용해서 요청을 보낸다.
    - 요청에는 다음 정보들이 담겨서 요청 된다.
     : 구성 요소 설명(정보들)
      - 요청 URL : 예) /login, /user/1
      - 요청 메서드 : GET, POST, PUT, DELETE (CRUD 관련)
      - 요청 헤더 : 브라우저 정보, 쿠키, 인증 토큰 등
      - 요청 바디 : (POST 동일 경우)아이디/비번 같은 실제 데이터

 : 2단계 - 주소-->IP로 바꾼다.(이러한 방법을 DNS 과정!)
  - 사용자는 도메인( http://www.myproject.com )주소를 입력했지만, 실제 통신은 IP 주소로 해야한다.
   : DNS 서버 역할
    - http://www.myproject.com -> 123.123.123.123(서버 IP주소로 변환 후 통신)
    - 이 과정을 DNS Lookup 이라고 한다.
   : 실무 예시
    - 회사 인프라에서 DNS가 설정되지 않으면 접속 오류가 발생한다.
    - 도메인 연결시 IP 설정이 정확해야 한다.

 

**TCP - 3-way handshake

 : TCP 프로토콜에서 통신을 시작하기 전에 신뢰성있는 연결을 안전하게 맺기위한 과정이다.

절차 흐름

  1. 클라이언트 → 서버 : "연결 요청할게요~" (SYN)
  2. 서버 → 클라이언트 : "오케이, 나도 연결할게요!" (SYN + ACK)
  3. 클라이언트 → 서버 : "좋아요, 이제 시작합시다!" (ACK)

 : 3단계 - 서버와 연결한다. (TCP 3-way 핸드셰이크)
  - 클라이언트와 서버가 통신하려면 먼저 신뢰할 수 있는 연결(TCP/IP) 을 맺어야 한다.
  : TCP 연결 과정 (3-way handshake)
   - 클라이언트 -> 서버 : SYN 패킷 전송
   - 서버 -> 클라이언트 : SYN+ ACK 응답
   - 클라이언트 -> 서버 : ACK 보내고 연결 성립!
**참고 : HTTPS는 이 후에 SSL/TLS 암호화 협상이 추가된다.

 : 4단계 - 실제 요청 데이터 전송
  - 이제 연결이 되었으니, 본격적으로 요청 데이터를 서버에 전송한다!
  : HTTP 요청 전송
   - 서버는 이 요청을 받고 백엔드(Spring Boot 등)가 처리 시작한다.
   - 예 : 사용자가 /login에 ID|PW를 POST로 보냈다면, Spring Controller에서 @PostMapping("/login")에서 처리한다.

 : 5단계 - 서버에서 처리(Spring Boot 기준으로 설명)
  - 클라이언트의 요청이 들어오면, 백엔드 서버는 순서대로 처리한다.
 : 처리 흐름(Spring Boot 예시)
  - 컨트롤러(@RestController) -> 서비스 계층(@Service) -> DB조회/저장(JPA, MyBatis 등 @Repository)
 : 처리 예시
  - 로그인 요청이라면 ID | PW를 DB에서 조회한다.
  - 비밀번호가 맞는지 확인한다.
  - 토큰 발급 or 세션을 저장

 : 6단계 - 서버가 응답을 보낸다.(Response)
 - 처리가 끝났으면 클리언트에게 결과를 응답으로 전송한다.
 : 응답 구조(HTTP Response)
  - 구성 요소 설명
   : 상태코드 : 200 OK, 400 Bad Request, 500 Error 등
   : 응답 헤더 : Content-Type - application/json 등
   : 응답 바디 : 실제 데이터(ex) { "message" : "Login success!" }
 : 실무 예시
  - 프론트가 AJAX로 요청 -> 백엔드는 JSON으로 응답 처리

 : 7단계 - 클라이언트가 결과를 화면에 출력
  - 응답을 받은 브라우저가 결과를 해석해서 화면에 보여준다.
 : 예시
  - HTML 페이지면 랜더링
  - JSON이면 JavaScript가 처리해서 화면에 출력!

 : 8단계 - 연결 종료 또는 재사용
  - 요청/응답이 끝나면 TCP 연결을 끊거나 유지(keep-alive)
  - 반복 요청시 연결을 재사용해 성능 향상

2. 전체 흐름
 : [사용자 브라우저] -> [DNS로 IP변환] -> [TCP 3-way 핸드셰이크] -> [백엔드 서버(Spring)] -> [DB조회 or 비즈니스 처리] -> [HTTP 응답(JSON등)] -> [브라우저 화면 출력]