본문 바로가기
(2024-10) 스파르타 내일배움캠프 - 백엔드/TIL

(2024-12-02) TIL

by 어뫄어뫄 2024. 12. 2.

 

 

1.Servelet 코드 이해

 

@WebServlet("/hello-world")
public class HelloWorldServlet extends HttpServlet {

이 예제는 Java Annotation 문법으로 쓰였다. 그러나 "/hello-world" 부분이 바로 이해되지는 않아서 찾아보았다. 알아보니 서버 지식과 맞물려 있었다.
문자열 "/hello-world"는 서블릿이 HTTP 요청을 처리할 URL 패턴을 지정한다. 이 경우, 클라이언트가 http://<서버>:<포트>/<컨텍스트-경로>/hello-world에 요청을 보내면 HelloWorldServlet 클래스가 이를 처리하게 됩니다.

 

 

 

 

2.TCP 이해

1) 특징 첫번째: 논리적인 과정으로 '연결'을 확인한다.

 

1단계: 연결하기
-------------------------
나: "안녕, 준비됐어?"
친구: "응, 준비됐어!"
나: "좋아, 이제 편지 보낼게!"

2단계: 메시지 보내기
-------------------------
나: [1페이지 보내기] ---> 친구
친구: "1페이지 받았어!"
나: [2페이지 보내기] ---> 친구
친구: "2페이지 받았어!"
(모든 페이지를 반복해서 보냄)

3단계: 메시지 조립하기
-------------------------
친구: "모든 페이지를 다 받았어!"
친구: [페이지를 순서대로 정리해서 읽음]

4단계: 대화 종료하기
-------------------------
나: "안녕, 끊을게!"
친구: "안녕, 나도 끊을게!"

TCP (전송 제어 프로토콜)는 네트워크에서 데이터를 안전하고 정확하게 보내는 데 사용하는 통신 규약이다. 인터넷과 비슷한 네트워크에서 데이터를 주고받을 때 역할을 한다.

 

 

  • 연결 시작 (3단계 핸드셰이크):
    1. 보내는 쪽: "안녕! 연결할 준비됐어?" (SYN)
    2. 받는 쪽: "응, 준비됐어! 너도 준비됐어?" (SYN-ACK)
    3. 보내는 쪽: "좋아! 연결 시작!" (ACK)
  • 데이터 전송: 데이터를 보낸 후, 받은 쪽에서 "잘 받았어!"라고 알려준다. 받지 못하면 다시 보낸다.
  • 연결 종료: 데이터 전송이 끝나면, 양쪽이 연결을 끊는 과정을 거친다.

출처: 스파르타 강의 자료

 

 

  • SYN (연결 요청)
    • 클라이언트가 서버에게 연결을 시작하고 싶다고 알리는 첫 단계이다.
    • 이때 클라이언트는 SYN 플래그가 설정된 패킷을 보내며, "연결을 열자"는 요청의 의미를 전달한다.
    • 패킷에는 시퀀스 번호가 포함되어 있어 데이터 전송 순서를 추적할 준비를 한다.
  • ACK (요청 확인)
    • 서버는 클라이언트의 SYN 패킷을 받은 뒤, 이를 수락했다는 메시지를 보낸다.
    • 서버는 SYN 플래그ACK 플래그가 설정된 패킷을 클라이언트로 전송하며, "연결을 승인하고 나도 시작할 준비가 됐다"는 의미를 전달합니다.
    • 이 패킷에는 클라이언트가 보낸 시퀀스 번호에 1을 더한 값이 포함됩니다. 이를 통해 클라이언트는 서버가 요청을 제대로 받았음을 알 수 있습니다.

 

출처: 스파르타 강의

 

 

2) 특징 두 번째: PORT를 통해서 '어떤 프로그램이 쓸지' 전달한다.

 

비유하자면, IP주소가 아파트 동을 찾아주는 주소라면 PORT는 '몇 호' 까지 정해준 것과 비슷하다
보내는 메세지 안에 정보가 더 들어가게 되었다.

 

3. localhost:8080/example 을 호출하면 생기는 일

 

저 말이 순간 헷갈려서 정리했다.

 

  • HTTP 요청: 사용자가 브라우저나 HTTP 클라이언트를 통해 localhost:8080/example URL에 HTTP 요청(GET, POST 등)을 보낸다. 이 요청은 서버에 특정 리소스나 데이터를 요청하는 것이다.

일견 헷갈릴 수도 있지만 내가 지금껏 사용하던 문자 도식으로 정리하면 아래와 같다.

사용자
: 브라우저
   │
   ▼
HTTP 요청
   │
   ▼
서버 (localhost:8080/example)

 

  • 서버 접속: localhost는 현재 컴퓨터를 가리키며, 8080은 서버가 요청을 수신하는 포트 번호이다. 서버가 이 포트에서 실행 중이어야 요청을 받을 수 있다.
사용자
: 브라우저
   │
   ▼
HTTP 요청
   │
   ▼
서버 (localhost:8080/example)
:isOn() ? 수신 : ???

 

  • API 엔드포인트 처리: 서버는 요청을 받고, /example이라는 API 엔드포인트에 대한 처리를 시작합니다. 서버 애플리케이션의 코드에서 이 경로에 대한 로직을 구현해 두어야 합니다.
  • 비즈니스 로직 실행: API 엔드포인트에 대한 요청을 처리하기 위해, 서버는 해당 경로에 정의된 비즈니스 로직을 실행합니다. 이 과정에서 데이터베이스 조회, 외부 API 호출, 데이터 처리 등 다양한 작업을 수행할 수 있습니다.
사용자
: 브라우저
   │
   ▼
HTTP 요청
   │
   ▼
서버 (localhost:8080/)
:isOn() ? 수신 → /example로 : ???
: localhost:8080/example
  • 응답 생성: 비즈니스 로직이 완료되면, 서버는 클라이언트에 반환할 응답 데이터를 생성합니다. 이 데이터는 JSON, XML, HTML 등의 형식일 수 있습니다.
  • HTTP 응답 전송: 생성된 응답 데이터는 클라이언트에게 전달됩니다. 이때 HTTP 응답 상태 코드(예: 200 OK, 404 Not Found 등)도 함께 전송됩니다.
사용자
   ▲
   │

HTTP
: HTTP 응답 상태 코드: 200 OK, 404 Not Found 등
   ▲
   │
서버
@응답 데이터 생성
  • 클라이언트 처리: 클라이언트는 서버로부터 응답을 수신하고, 이를 처리하여 사용자에게 결과를 보여줍니다. 예를 들어, 웹 애플리케이션의 경우 응답 데이터를 화면에 출력하거나, API의 경우 데이터 처리를 위해 파싱할 수 있습니다.

 

 

 

'(2024-10) 스파르타 내일배움캠프 - 백엔드 > TIL' 카테고리의 다른 글

(2024-12-16) TIL  (0) 2024.12.16
(2024-12-03) TIL, 메모 과제 구조 이해하기 (추가중)  (0) 2024.12.03
(2024-11-29) TIL  (1) 2024.11.29
(2024-11-28) TIL  (0) 2024.11.28
(2024-11-27) TIL  (1) 2024.11.27