브라우저와 WAS(웹 애플리케이션 서버)가 있어야 원격프로그램을 실행할 수 있다.
1. 프로그램 등록 (@Controller을 클래스에 붙임)
2. URL과 프로그램을 연결 (@RequestMapping을 메소드에 붙임)
-> URL을 입력하면 프로그램이 실행 될 수 있게 함
접근제어자, ststic 유뮤 상관없이 호출 가능 (톰캣서버가 Reflection API을 활용하여 메서드를 호출하기 때문)
- 서버가 제공하는 리소스
실행시마다 결과가 변함 -> 동적 리소스(프로그램, 스트리밍)
변하지 않음 -> 정적 리소스(이미지, *.js , *.css, *.html)
- URL의 정보를 이용
브라우저에 URL을 입력해서 요청을 하면 해당 서버에 있는 Tomcat이 요청을 받아서 HttpServletRequest 객체를 생성하고 정보를 객체에 담는다.
해당 객체를 메소드의 매개변수로 제공하고 메소드 내에서 해당 객체(HttpServletRequest)를 이용함.
- 개념적인 내용
1. 클라이언트와 서버
클라이언트(client) : 서비스를 요청하는 애플리케이션
서버(server) : 서비스를 제공하는 애플리케이션
클라이언트->요청->서버
서버에서 프로그램 실행->응답->화면
2. 서버의 종류
서버의 종류에는 email서버, file서버, web서버 등등이 있음
3. 서버의 포트
서버에는 포트가 연결되어 있다. 포트로 서버를 구분할 수 있다.
서버는 포트와 미리 binding 되어있는 상태로 기다리고 있음(listening 하고 있음)
포트번호는 0~1023까지 예약이 되어 있고 이를 제외하면 65535번까지 사용 가능.
4. 웹 애플리케이션 서버(WAS)란?
웹 애플리케이션 서버(WAS) : 웹 애플리케이션을 서비스하는 서버(Tomcat 같은)
클라이언트가 원격 프로그램을 호출하면 WAS에서 프로그램을 실행하고 그 결과를 전송함
5. Tomcat의 내부구조

브라우저에서 서버로 요청이 오면 Thread pool에 대기하고 있던 Thread 중 하나가 요청을 처리하게 된다.
Service 안의 Connector가 요청 종류에 따라 Engine에게 요청을 전달함.
Engine 내에는 여러개의 Host가 존재할 수 있으며(보통은 1개) Host 안에는 Context(스프링 프로젝트)가 여러개 있을 수 있다.
Context(스프링 프로젝트) 안에 Servlet이 존재한다.
Thread -> Connector -> Engine -> Host -> Context -> Servlet
DispatcherServlet이 Controller를 호출하고(@Controller 애너테이션을 붙인 클래스), 거기에 있는 메소드를 호출하여 실행한다.
6. Tomcat의 설정 파일 – server.xml, web,xml
톰캣설치경로/conf/server.xml : Tomcat 서버 설정 파일
톰캣설치경로/conf/web.xml : Tomcat의 모든 web app의 공통 설정
웹앱이름/WEB-INF/web.xml : web app의 개별 설정
HTTP 요청과 응답
1. 프로토콜(protocol)이란?
서로 간의 통신을 위한 약속, 규칙
주고 받을 데이터에 대한 형식을 정의한 것
2. HTTP(Hyper Text Transfer Protocol)란?
텍스트를 전송하기 위한 프로토콜
특징)
텍스트 기반의 프로토콜 - 단순하고 읽기 쉽다.
상태를 유지하지 않는다(stateless) - 클라이언트 정보를 저장하지 않음
확장 가능하다 – 커스텀 헤더(header) 추가 가능
3. HTTP 메시지
요청 메시지 <-> 응답 메시지
4. HTTP 메시지 – 응답 메시지 format

상태코드 / 의미
1xx / Information
2xx / Success 성공
3xx / Redirect 다른 URL 재 요청
4xx / Client Error 클라이언트 에러, 요청이 잘못됨 404 Not Found
5xx / Server Error 서버 에러, 요청은 정상적인데 서버에서 처리 중 에러 발생
5. HTTP 메시지 – 요청 메시지

HTTP 요청 메시지 – GET 메소드
단순히 리소스를 얻어오기 위함
요청 라인과 헤더로 구성되어 있고 바디가 없음. 요청 라인에 쿼리스트링을 통해 작은 데이터를 전달할 수 있음.
HTTP 요청 메시지 – POST 메소드
서버에 정보를 제공해야 할 때 사용
요청 라인과 헤더, 바디로 구성되어 있음. 서버에 전송할 데이터가 바디에 들어가 있음.
바디에 데이터를 담아서 요청할 때 POST를 사용
(글쓰기, 로그인, 회원가입, 파일첨부 등)

* HTTPS = HTTP + TLS (암호화 덕분에 보안에 유리)
7. 텍스트 파일 vs. 바이너리 파일
바이너리 파일 : 문자와 숫자가 저장되어 있는 파일. 데이터를 있는 그대로 읽고 쓴다.
텍스트 파일 : 문자만 저장되어 있는 파일. 숫자를 문자로 변환 후 쓴다.
8. MIME(Multipurpose Internet Mail Extensions)
텍스트 기반 프로토콜에 바이너리 데이터를 전송하기 위해 고안

내가 보내는 데이터가 어떤 타입인지 MIME 타입을 적어줘야 함.
9. Base64
->64진법
바이너리 데이터를 텍스트 데이터로 변환할 때 사용
64진법은 ‘0’~‘9’, ‘A’~‘Z’, ‘a’~‘z’, ‘+’,‘/’ 모두 64개(6 bit)의 문자로 구성

-> 이미지 파일을 Base64로 인코딩하여 16진수로 나타냄.
'Spring & SpringBoot > Spring 복습' 카테고리의 다른 글
[Chapter 2] Spring MVC (20강 ~ 26강) (0) | 2022.07.28 |
---|---|
[Chapter 2] Spring MVC (9강 ~ 19강) (0) | 2022.07.27 |
[Chapter 4] 3강~4강 (0) | 2022.07.13 |
[Chapter 3] 18강~21강, [Chapter 4] 1~2강 (0) | 2022.07.11 |
[Chapter 3] Spring DI와 AOP 9강 ~ 17강 (0) | 2022.07.09 |