1. 웹
웹이란
인터넷에서 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보 공간을 말한다.
웹의 구성
- HTTP
- URI
- HTML
URI(Uniform Resource Identifier)
웹에 있는 정보를 리소스라 한다. URI는 리소스를 식별하기 위한 식별자로서 웹에 존재하는 어떠한 자원에 접근하기 위한 유일한 주소를 가진 식별자이다.
URI는 리소스가 있는 위치를 지정하는 URL(Locator), 리소스에 이름을 부여하는 URN(Name)으로 분류되며 일반적으로 URL을 통해 리소스를 찾는다.
URL 문법
scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hi=ko
- URI scheme: https
- 호스트명: www.google.com
- 포트 번호: 443
- 패스: /search
- 쿼리 파라미터: q=hello&hi=ko
URL에서 사용 가능한 문자는 다음과 같다.
- 알파벳: A-Za-z
- 숫자: 0-9
- 기호: -.:~@!&'()
scheme
- 주로 프로토콜을 사용
userinfo
- id:pass@의 형태로 사용자정보를 포함해서 인증
- 거의 사용하지 않는다.
host
- 호스트명
- 도메인명 또는 IP 주소를 직접 사용 가능
port
- 접속 포트
- 일반적으로 생략
- 생략시 http는 80, https는 443
path
- 리소스 경로
- 계층적 구조
query
- key=value 형태
- ?로 시작, &로 추가 가능
- 웹 서버에 제공하는 파라미터
fragment
- html 내부 북마크 등에 사용
- 서버에 전송하는 정보 아님
HTTP
HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다.
URI로 리소스를 지정하고 HTTP를 통해 특정한 리소스를 가져오거나, 변경하거나, 삭제할 수 있다.
HTTP의 특징은 다음과 같다.
- 클라이언트-서버 프로토콜
- 요청을 보내고 응답을 받는 동기형 프로토콜
- 무상태 프로토콜
- 비연결성
- HTTP 메시지
클라이언트-서버 프로토콜
- 클라이언트는 서버에 요청을 보내고 응답을 대기한다.
- 서버가 요청에 대한 결과를 만들어서 응답
- 요청-응답 구조이기 떄문에 동기형 프로토콜이라고 보면 된다.
무상태 프로토콜
- 서버는 클라이언트의 상태를 보존하지 않는다.
- 클라이언트가 항상 추가 데이터를 전송해야 하나 이 덕분에 자유로운 스케일 아웃이 가능하다.
비연결성
- 1시간 동안 수천명이 서비스를 사용해서 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작다.
- 서버 자원을 효율적으로 사용할 수 있다.
- 매번 TCP/IP 연결을 새로 맺는 시간이 필요하다는 한계가 있었으나 현재는 HTTP 지속 연결로 문제를 해결하였다.
HTTP 메시지
HTTP 메시지는 다음과 같이 네 가지 부분으로 구성되어 있다.
개행
헤더
공란
바디
헤더는 내용에 따라 Request/Response headers, General headers, Representation headers로 나뉠 수 있다.
개행
- 요청
- HTTP 메서드
- 요청 대상(/search?q=hello)
- HTTP version
- 응답
- HTTP Version
- 상태 코드(200, 201, 403...)
- 상태 텍스트(OK, CREATED...)
헤더
- 요청
- Request 헤더
- General 헤더
- Representation 헤더
- 응답
- Response 헤더
- General 헤더
- Representation 헤더
메시지 바디
- 실제 전송할 데이터
- HTML 문서, 이미지, JSON 등등
- byte로 표현할 수 있는 모든 데이터
HTML
태그로 구성된 마크업 언어, 연결성을 가진 마크업 언어라고 볼 수 있다.
2. 웹의 기술적 특징 두 가지
하이퍼 미디어 시스템
- 이미지, 음성, 영상 등 다양한 미디어들이 연결되어 있고 구성되어 있는 시스템
분산 시스템
- 복수의 컴퓨터를 조합하여 프로세싱한다.
- 전 세계의 서버에 전 세계의 브라우저에서 액세스할 수 있는 분산 시스템이다.
3. Web Application Architecture
웹 어플리케이션 아키텍처는 애플리케이션의 구성 요소, 미들 웨어 시스템, 사용자 인터페이스 및 데이터베이스 간의 상호 작용을 나타내는 골격이다.
이러한 종류의 상호 작용을 통해 여러 애플리케이션 동시에 작동할 수 있다.
DNS
- 도메인의 IP 주소를 조회하여 서버로 요청을 전달한다.
로드 밸런서
- 사용자의 요청을 여러 서버로 분산한다.
웹 서버
- 사용자의 요청을 가지고 자바 코드가 실행된다.
- 그에 따른 적절한 응답을 사용자에게 전송한다.
데이터베이스
- 작업에 따른 입력, 조회, 수정, 삭제가 이루어지고 데이터가 저장된다.
캐싱 서비스
- 변경이 적은 데이터는 캐싱 서버에 저장하고 요청이 들어오면 이전 결과를 참조하여 빠른 응답을 반환한다.
잡 큐
- 어떠한 행위가 오래 걸린다면 잡 큐에 넣어놓을 수도 있다.
- 잡을 전문적으로 처리하는 서버가 이를 처리하고 클라이언트에 알릴 수 있다.
풀 텍스트 서치 서비스
- 검색 서비스가 있다면 사용자의 요청에 따른 관련성 높은 결과를 반환하기 위한 풀 텍스트 서치 서비스가 있을 수 있다.
Services
- 외부의 서비스와 상호작용하거나 마이크로 서비스로 구성된 다른 서비스들과 소통이 이루어질 수도 있다.
데이터 웨어하우스
- 데이터 수집, 저장, 분석과 같은 작업을 위해 대용량 데이터가 저장된다.
CDN
- HTML, CSS, JS, 이미지 등 특정 미디어 파일의 전송을 처리하여 지역에 따른 빠른 로딩을 기대할 수 있다.
4. 서블릿
웹 서버
HTTP, HTTPS 프로토콜을 지원하는 서버를 웹 서버라 한다. 동적인 컨텐츠를 지원하지 않으며 이미지, CSS와 같이 정적인 리소스 파일을 지원한다.
대표적인 웹 서버로 Nginx, 아파치가 있다.
WAS
DB 조회나 비즈니스 로직 처리와 같이 동적인 컨텐츠를 제공하기 위한 애플리케이션 서버이다.
WAS는 웹 서버와 웹 컨테이너를 합친 개념이다.
서블릿
서블릿이란 요청에 따른 특정한 기능을 수행하고 HTML 문서 생성 등 응답 처리를 하는 자바 소프트웨어 컴포넌트이다.
서블릿을 실행하기 위해서는 웹 컨테이너(서블릿 컨테이너)가 필요하다. 서블릿의 라이프사이클을 관리하고, URL을 특정 서블릿에 매핑하고, URL 요청자에게 올바른 액세스 권한이 있는지 확인하는 역할을 담당한다.
서블릿 인터페이스의 대표적인 구현체로 HttpServlet
이 있다. 우리가 서블릿을 상속하여 코드를 작성 뒤 서블릿 컨테이너에 이를 등록하면, URL 패턴에 맞는 요청이 왔을 때 해당하는 메서드가 호출된다.
서블릿 라이프사이클
서블릿 라이프사이클에는 세 가지 핵심 메서드 init()
, service()
, destroy()
가 있다.
- 서블릿 라이프사이클 초기화 단계에서 웹 컨테이너는
init()
을 호출하여 서블릿 인스턴스를 초기화한다. - 클라이언트 요청이 들어오면 WAS로부터 쓰레드를 획득하고 개별 쓰레드는 서블릿 인스턴스의
service()
를 호출한다.service()
는 요청에 따른 적절한 메서드를 실행하고 응답이 만들어진다. - 웹 컨테이너는
destroy()
를 호출하고 서블릿을 서비스에서 제거한다.
'공부방' 카테고리의 다른 글
[TIL 07/05] Spring MVC, REST API (0) | 2023.07.07 |
---|---|
[TIL 07/04] 스프링 MVC (0) | 2023.07.06 |
[TIL 06/30] 스프링 AOP, 스프링 트랜잭션 (0) | 2023.07.04 |
[TIL 06/29] NamedParameterJdbcTemplate, Transaction (0) | 2023.06.30 |
[TIL 06/28] Connection Pool, DataSource, JdbcTemplate (0) | 2023.06.30 |