1. HTTP(HyperText Transfer Protocol)
: 애플리케이션 계층의 네트워크 프로토콜로, 통신하기 위한 규약
[동작]
1. 사용자는 브라우저라는 클라이언트를 통해 서버에 HTTP 요청을 전송
2. 브라우저의 주소 창에 URL을 치고 엔터를 누르면, 브라우저는 HTTP 요청을 해당 URL서버로 전송
3. 해당 서버는 그 결과인 HTTP 응답을 브라우저에 렌더링 함
[HTTP 요청]
- 요청에는 메서드를 지정 → 메서드는 호스트에게 지정한 리소스에 어떤 작업을 하고 싶은지 알려주는 역할
- GET: 리소스를 가져올 때 사용
- POST: 리소스에 대해 임의의 작업할 때 사용 → 새 리소스를 생성하거나 요청 데이터를 처리하는 경우
- PUT: 리소를 완전히 대체할 때 사용(클라이언트가 리소스 위치를 알고 URI 지정)
- PATCH: 리소스의 부분만 변경
- DELETE: 리소스를 삭제할 때 사용
[HTTP 응답]
- 응답코드 존재
- 200: 성공
- 404: 해당 리소스 존재하지 않음
- 403: 송신자는 해당 리소스에 대한 접근 권한 없음
- 500: 서버 에러
- Content-Type: 미디어 타입
- 응답 바디: 서버 애플리케이션은 보통 HTTP 응답 바디에 요청 처리 결과 보냄
2. JSON(JavaScript Object Notation)
: 오브젝트를 표현하기 위한 문자열
- 인터넷을 이용해 데이터를 교환하는 애플리케이션 모두 이해할 수 있는 형태로 오브젝트를 변환해야 함
- 직렬화: 메모리 상의 오브젝트를 다른 형태로 변환하는 작업
- 역직렬화: 다른 형태에서 오브젝트로 변환하는 작업
- JSON은 키-값(Key-Value)형태로 표현
[JSON을 이용해 데이터 전달]
1. 오브젝트를 JSON형태의 문자열로 변환
2. HTTP요청의 바디 부분에 변환된 JSON을 넣어 요청 전송
3. 요청을 받은 애플리케이션은 HTTP 요청의 바디 부분에서 JSON꺼냄
4. 해당 JSON은 오브젝트로 변환하여 사용
3. 서버
: 프로그램으로, 지정된 포트에 소켓을 열고 클라이언트가 연결할 때까지 무한 대기하며 기다림
1) 정적 웹 서버(Static Web Server)
: 서버는 해당 HTML파일에 아무 작업도 하지 않고, 파일을 있는 그대로 반환
ex) 아파치, NginX
- 지정된 경로에 원하는 리소스 파일을 저장하면 해당 리소스는 자동으로 웹 서버로 접근할 수 있음
- 어떤 클라이언트가 요청하든 같은 응답을 반환
2) 동적 웹 서버(Dynamic Web Server)
: 요청을 처리한 후, 처리한 결과에 따라 응답 바디를 재구성하거나 HTML 템플릿 파일에 결과를 대체하여 보냄
ex) 아파치 톰캣
- 클라이언트가 누군지, 어떤 매개변수를 보내는지에 따라 같은 요청이라도 다른 응답을 받음
- 서블릿 엔진 또는 서블릿 컨테이너
- 개발자들은 서블릿 엔진을 설치한 후, 서블릿 엔진에게 본인이 개발한 비즈니스 로직, 즉 클래스 파일과 해당 클래스 파일을 어느 요청에서 실행해야 하는지 알려줘야함
- Javax.servlet.httpHttpServlet의 상속받는 서브 클래스가 서블릿 엔진이 이해할 수 있는 클래스
- 서블릿 엔진 이용하여 서버를 처음부터 구현하지 않고도 각기 다른 비즈니스 로직을 구현하고 배포 가능