JAVA
서블릿
gggg21
2024. 11. 16. 10:27
HTML Form 데이터 전송과 서버 처리 과정 정리
1. 클라이언트 측 요청 (HTML Form 데이터 전송)
- POST 전송: 클라이언트가 데이터를 서버로 보낼 때 사용하는 HTTP 메서드.
- /save URL: 사용자가 데이터를 저장하기 위해 접근하는 서버의 엔드포인트.
2. 서버에서 처리해야 하는 업무
2.1 서블릿을 지원하는 WAS 사용
- WAS (Web Application Server):
- 서버는 서블릿(Java 기반 웹 요청 처리기)을 통해 클라이언트의 요청을 처리.
- 대부분의 작업은 WAS가 자동으로 처리하며, 개발자는 비즈니스 로직에만 집중할 수 있음.
2.2 주요 서버 작업 흐름
- TCP/IP 연결 대기 및 소켓 연결
- 클라이언트가 요청하면 서버는 소켓을 통해 연결을 수립.
- HTTP 요청 메시지 처리
- 요청 메시지 파싱:
서버는 클라이언트가 보낸 HTTP 요청 메시지를 파싱하여 필요한 데이터를 추출.- POST 방식 확인: 요청이 POST 메서드인지 확인.
- URL 확인: 요청 경로가 /save와 같은 특정 엔드포인트인지 확인.
- Content-Type 확인: 요청 데이터의 형식(Content-Type, 예: application/x-www-form-urlencoded 등)을 확인.
- HTTP 메시지 바디 파싱: username, age 등 클라이언트가 보낸 데이터를 추출.
- 요청 메시지 파싱:
- 비즈니스 로직 실행
- 저장 프로세스 실행: 서버에서 데이터베이스와 연동하여 데이터를 저장.
- 비즈니스 로직:
- 예: 회원가입, 상품 정보 저장 등 클라이언트 요청에 따라 데이터베이스에 필요한 작업 수행.
- HTTP 응답 메시지 생성 및 전송
- HTTP 시작 라인 생성:
- 응답 상태 코드(200 OK, 400 Bad Request 등)를 포함.
- Header 생성: 응답의 메타정보(Content-Type, Content-Length 등) 작성.
- 메시지 바디 생성:
- HTML 페이지나 JSON 데이터를 포함하여 클라이언트에게 반환.
- TCP/IP로 전송 후 소켓 종료: 응답 메시지를 클라이언트로 보내고 연결 종료.
- HTTP 시작 라인 생성:
3. 핵심
- 가장 중요한 작업: 비즈니스 로직 실행
- 데이터베이스에 저장 요청 등 실제 처리 로직은 개발자가 직접 구현해야 함.
- 나머지 작업(TCP/IP 연결, 요청/응답 처리 등)은 WAS가 지원하며, 개발자는 로직에만 집중할 수 있음.
요약
HTML Form의 POST 요청에 대한 서버 처리 과정은 다음과 같습니다:
- WAS 지원 작업:
- TCP/IP 연결, 소켓 연결.
- HTTP 요청 메시지 파싱.
- 요청 방식과 URL 확인, Content-Type 확인.
- HTTP 응답 메시지 생성 및 전송.
- 개발자가 수행해야 할 작업:
- 비즈니스 로직 실행.
- 데이터베이스와 연동하여 데이터를 저장하거나 필요한 처리를 수행.
- 비즈니스 로직 실행.
특징
- urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행
- HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRrquest
- HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse
- 개발자는 HTTP 스펙을 매우 편리하게 사용
URL과 URI의 차이
1. Python과 C 언어의 비유
- Python은 사람이 읽기 쉬운 고수준 언어입니다.
- "쉬운 문법"과 "직관적 표현"으로 사람들에게 친숙합니다.
- C 언어는 컴퓨터가 더 잘 이해할 수 있는 저수준 언어에 가깝습니다.
- 더 직접적으로 하드웨어와 소통할 수 있어 효율적입니다.
연결 비유:
- Python은 사람이 편하게 코딩하는 도구 → 컴파일러나 인터프리터를 통해 저수준 언어(C 언어, 어셈블리 등)로 변환 → 컴퓨터가 이해함.
- C 언어는 컴퓨터에게 더 친숙하지만, 사람이 직접 작성하려면 더 많은 노력과 정확성이 필요.
2. URL과 URI의 비유
- URL은 사람이 쉽게 이해할 수 있는 리소스의 주소입니다.
- 예: https://example.com/resource
- "어디에 있다"와 "어떻게 접근할지"를 알려주는 주소처럼 직관적입니다.
- URI는 URL보다 더 포괄적인 리소스 식별 규칙입니다.
- 예: urn:isbn:978-3-16-148410-0
- 이름(URN)도 포함되어 있고, 반드시 위치를 가리킬 필요는 없습니다.
연결 비유:
- URL은 사람이 쉽게 이해하는 주소 시스템 → 사람 친화적.
- URI는 컴퓨터가 모든 리소스를 고유하게 식별할 수 있는 방법 → 컴퓨터 친화적.
3. 정리된 비유
프로그래밍 언어와 URL/URI의 관계:
- Python = URL: 사람이 읽기 쉬운 표현으로 설계된 고수준 도구.
- C 언어 = URI: 좀 더 근본적인 레벨에서 컴퓨터가 처리하기에 적합한 개념.
URL과 URI의 차이:
- URL은 사람에게 "이 리소스는 어디에 있다"와 "어떻게 접근할 수 있다"를 설명하는 주소.
- URL은 URI의 하위 개념이므로, 사람 친화적인 URI라고 볼 수 있습니다.
- URI는 더 포괄적인 규칙으로, URL뿐 아니라 이름(URN) 같은 다른 식별 방식도 포함.
- URI는 컴퓨터가 리소스를 고유하게 식별하는 데 더 적합한 개념입니다.
4. 한 줄 요약
- URL은 사람이 이해하기 쉬운 리소스의 주소이고,
- URI는 컴퓨터가 모든 리소스를 고유하게 식별할 수 있는 규칙입니다.
마치 Python이 사람에게 친숙하고, C 언어가 컴퓨터에게 친숙한 것과 유사하죠!