로컬 환경이 아닌 외부에서 프로그램을 실행하기 위해서는 2가지 일을 해야한다.
1. 프로그램 등록
2. URL과 프로그램을 연결
package com.fastcampus.ch2;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller // 1. 프로그램 등록
public class Hello {
@RequestMapping("/hello") // 2. URL에 /hello를 호출하면 해당 main 메서드가 호출된다.
public void main() {
System.out.println("Hello");
}
}
// 브라우저 URL : localhost:8080/ch2
@Controller로 프로그램을 등록시켜줬으니 브라우저URL에 hello를 검색하면 main()메서드가 실행되어 main()메서드 안의 Hello가 호출된다.
이 때 main()메서드는 객체생성을 하지 않았지만, 톰캣에서 자체적으로 객체를 생성해주기 때문에 main()메서드의 호출이 가능하다.
클라이언트(client) : 서비스를 요청하는 애플리케이션
서버(server) : 서비스를 제공하는 애플리케이션
어떤 서비스를 제공하냐에 따라 달라진다.
Email Service를 제공하면 Email server고
File Service를 제공하면 File server고
browser를 이용한 모든 Service를 제공하는게 Web server다.
1대의 PC에 여러가지 서버를 제공할 수 있는데, 포트번호를 통해 구분한다.
ip주소 뒤에 prot번호를 적으면 어떤 서버로 요청할건지 구분한다.
ex
111.22.33.44:25 25 -> Email server
111.22.33.44:22 22 -> File server
111.22.33.44:80 80 -> Web server
웹 애플리케이션을 서비스하는 서버
서버에 모든 프로그램을 설치해서 클라이언트가 프로그램을 사용할 수 있게 해준다.
📌 WAS에 프로그램을 설치하면 한곳에서 update를 하고 클라이언트의 설치용량도 필요없기 때문에 클라이언트에 프로그램을 설치하는 것보다 효율적이다.
Tomcat Server안에는 Service가 있고, 그 서비스를 처리하는 것이 Engine(Catalina)이다.
Engine안에는 여러개의 Host가 존재하고, Host안에는 여러개의 Context가 있다. Context는 Spring Project를 의미
Context안에 있는 Servlet은 Controller로 생각할 수 있다.
요청이 들어오면 Server(Tomcat)안에 Thread Pool이 대기하고 있다가 한가한 Thread가 도맡아 작업한다.

공통 설정을 먼저 한 후에 개별 설정을 한다.

getQueryString()은 값을 전달할 때 사용한다.

&은 구분자로 사용하고 year=2021이, month=10, day=1이 저장된다.
동적 리소스
: 실행하는 프로그램, 스트리밍
정적 리소스
: 이미지 js, .css, *html 등등
- 서로 간의 통신을 위한 약속 규칙
- 주고받을 데이터에 대한 형식을 정의한 것
- 텍스트를 전송하기 위한 프로토콜 약속이다.
- 단순하고 읽기 쉽다.
- 상태를 유지하지 않는다. (stateless) - 같은 클라이언트에서 요청이 와도 알지 못함. 클라이언트의 정보를 저장하지 않음
- 쿠키와 세션을 사용해 이를 보완한다.
- 확장 가능하다. - 커스텀 헤더(header) 추가 기능, 우리가 원하는 대로 추가가 가능하다.
브라우저에 URL을 입력해서 전송하면 요청 메시지가 서버로 전달된다.
<!-- 요청 메시지 -->
GET/ch2/hello HTTP/1.1
Host : 111.22.33.44.8080
Connection:keep-alive
Cache-Control:max-age=0
Accept-Encoding:gzip, deflate, br
서버는 요청을 받고 응답 메시지를 전송한다.
<!-- 요청 메시지 -->
GET/ch2/hello HTTP/1.1
Host : 111.22.33.44.8080
Connection:keep-alive
Cache-Control:max-age=0
Accept-Encoding:gzip, deflate, br
HTTP/1.1 200 OK <!-- 상태코드 : 200 OK 성공했다는 의미 -->
Content-Length : 44
Content-Type : text/html
Date : Sat, 20 Oct 2021 19:03:38 GMT <!-- 상태코드 아래는 헤더 N줄 -->
<html>
<head></head>
<body>Hello</body>
</html>
| 상태코드 | 의미 |
|---|---|
| 1XX | Informational |
| 2XX | Success 성공 |
| 3XX | Redirect 다른 URL요청 |
| 4XX | Client Error 클라이언트 에러 |
| 5XX | Server Error 서버 처리중 에러 |
<!-- Http 요청 메시지 - GET -->
GET/ch2/getYoil?year=2021&month=12&day=1 HTTP/1.1
Host:111.22.33.44:8080
User-Agent:Mozilla/5.0(Windows NT 10.0)
Accept:text/html
Connection:keep-alive
쿼리스트링에 데이터를 직접 입력해서 보낸다. 바디에 첨부 X
리소스를 요청해서 데이터를 얻어오기 위함이며, read 읽기 전용
<!-- Http 요청 메시지 - POST -->
POST/ch2/getYoil HTTP/1.1
Host:111.22.33.44:8080
User-Agent:Mozilla/5.0(Windows NT 10.0)
Accept:text/html
Connection:keep-alive
<!-- 바디 -->
year=2021&month=12&day=1
바디 부분에 데이터를 저장해서 서버로 보낸다.
write글쓰기, 로그인, 회원가입, 파일첨부 등에 많이 사용
| GET | POST |
|---|---|
| . 서버의 리소스를 가져오기 위해 설계 | . 서버에 데이터를 올리기 위해 설계 |
| . Query String을 통해 데이터를 전달 (소용량) | . 전송 데이터 크기의 제한이 없음 (대용량) |
| . URL에 데이터 노출되므로 보안에 취약함 | . 데이터를 요청 메시지의 body에 담아 전송 |
| . 데이터 공유에 유리 | . 보안에 유리, 데이터 공유에는 불리 |
| ex. 검색엔진에서 검색단어 전송에 이용 | ex. 게시판에 글쓰기, 로그인, 회원가입에 사용 |
바이너리 파일 : 문자와 숫자가 저장되어 있는 파일
텍스트 파일 : 문자만 저장되어 있는 파일, 사람이 읽기가 쉽다.
| 파일 종류 | 쓰기 | 읽기 |
|---|---|---|
| 바이너리 | 문자 → 문자 숫자 → 숫자 | 문자 → 문자 숫자 → 숫자 |
| 텍스트 | 문자 → 문자 숫자 → 문자 | 문자 → 문자 |
텍스트 기반 프로토콜 바이너리 데이터이미지, 동영상를 전송하기 위해 고안한 것이다.
HTTP의 Context-Type헤더에 사용한다. 데이터의 타입을 명시하는 것

바이너리 데이터를 텍스트 데이터로 변환할 때 사용
64진법은 ‘0’~’9’, ‘A’~’Z’, ‘a’~’z’, ‘+’, ‘/’ 모두 64개의 문자로 구성
26 + 26 + 10 + 2 = 64개 ( 6bit )의 문자로 구성
