스프링
1. 유지보수가 쉽다
2. 생산성이 높다
개발도구
-자바 개발도구 : Java11
- 통합개발 환경 : STS, IntelliJ
- 웹 서버 : Tomcat9
- 웹 브라우저 : chrome
- 데이터 베이스 : MySQL 5.7
- 기타 : VS code, Git, AWS, Maven
[2-1] 원격 프로그램의 실행
[2-3] HTTP요청과 응답
...
@Controller
public class RequestInfo {
@RequestMapping("/requestInfo")
public void main (HttpServletRequest request) {
...
[2-4] HTTP요청과 응답
서버가 제공하는 리소스
① 실행시마다 결과가 변하는 동적 리소스
② 결과가 고정되어 있는 정적 리소스
client : 서비스를 요청하는 애플리케이션
server : 서비스를 제공하는 애플리케이션
⛔ @Controller
⛔ @RequestMapping("/")
[2-5] 클라이언트와 서버
⛔ Dispatcher Servlet
[2-6] 클라이언트와 서버
- 기존의 방법은 web.xml에서 설정하는 것이었으나 어노테이션으로 바뀌는 중
① 서블릿 등록 -> @Controller
② URL 연결 -> @RequestMapping
[2-7] HTTP 요청과 응답
프로토콜(protocol)이란?
- 서로간의 통신을 위한 약속, 규칙
- 주고 받을 데이터에 대한 형식을 정의한 것
HTTP(Hyper Text Transfer Protocol)이란?
- 단순하고 읽기 쉽다. 텍스트 기반의 프로토콜
- 상태를 유지하지 않는다. 클라이언트 정보를 저장x
- 확장 가능하다. 커스텀 헤더(Header) 추가 가능
HTTP 메시지
HTTP 메시지 - 응답 메시지
상태코드와 의미
- 1xx : Information
- 2xx : Success
- 3xx : Redirect(다른 URL 요청)
- 4xx : Client Error
- 5xx : Server Error
HTTP 메시지 - 요청 메시지
HTTP 메서드 - GET, POST
GET
- 서버의 리소스를 가져오기 위해 설계
- QUERY STRING을 통해 데이터를 전달(소용량)
- URL에 데이터 노출되므로 보안에 취약
- 데이터 공유에 유리
EX) 검색엔진에서 검색단어 전송에 이용
POST
- 서버에 데이터를 올리기 위해 설계됨
- 전송 데이터 크기의 제한이 없음(대용량)
- 데이터를 요청 메시지의 body에 담아 전공
- 보안에 유리, 데이터 공유에는 불리
EX) 게시판에 글쓰기, 로그인, 회원가입
https:// = HTTP + TLS(암호화. 과거에는SSL이었음)
[2-8] 텍스트와 바이너리, MIME, Base64
- 바이너리 파일 : 문자와 숫자가 저장되어 있는 파일. 데이터를 있는 그대로 읽고 쓴다.
- 텍스트 파일 : 문자만 저장되어 있는 파일. 숫자를 문자로 변환 후 쓴다.
- MIME(Multipurpose Internet Mail Extensions) : 텍스트 기반 프로토콜에 바이너리 데이터 전송하기 위해 고안. HTTP의 Content-Type헤더에 사용. 데이터의 타입을 명시.
- Base64(64진법) 인코딩 : 바이너리 데이터를 텍스트 데이터로 변환할 때 사용
=> 받는쪽과 주는쪽의 데이터 형식이 다를 수 있기에 가장 안전하고 공통적인 64개의 문자로 인코딩 하는 것
[2-9] 관심사의 분리와 MVC패턴
MVC패턴 : 처리가 출력과 같은 메서드에 있을 때는 바로 접근가능했지만 분리됐을 경우 중간 객체(Model)가 필요하다. 그리고 결과를 출력하는데 필요한 값들을 Model객체에 저장한다. 출력은 Model객체에 있는 내용을 읽어서 출력한다.
=> 코드를 분리했기 때문에 분리된 코드간에 데이터를 전달하기 위해 Model이 필요한것!
=> 처리하는 부분 : Controller, 보여주는 부분 : View, 둘 사이 데이터를 주고받을 수 있는 객체 : Model
(1) 클라이언트가 요청을 하면
(2) DispatcherServlet이 입력과 변환을 자동으로 처리 -> 모델 생성해 Controller에게 전달
(3) Controller는 작업결과를 Key, Value형태로 Model에 담아서 다시 DispatcherServlet에 돌려준다.
(4) DispatcherServlet은 Model을 View에 전달. Controller는 어떤 View를 통해서 결과를 보여줄지를 지정
[2-10] 관심사의 분리와 MVC패턴
[2-11] 관심사의 분리와 MVC패턴
스프링이 매개변수 이름을 얻는 방법
① Reflecion API 이용
② Class file을 직접 읽기
[2-13] Servlet과 JSP
- request : 요청 정보가 담겨있는 객체
- response : 요청에 응답을 작성할 때 사용
- session : HTTP session을 구현한 객체. 세션 정보 저장에 사용
- out : 응답에 포함될 내용을 출력할 때 사용
[2-14] Servlet과 JSP
유효범위(scope)와 속성(attribute)
- HTTP의 특징 : 상태정보를 저장하지 않는다(stateless)
- 유효범위(scope)에 따라 4개의 저장소가 Map의 형태로 존재
- Map에 저장할 때 사용하는 setAttribute() / 읽어올 때 사용하는 getAttribute()
- 저장소(Map)의 key값을 속성(attribute)라고 한다.
저장소 ① : pageContext - 범위는 하나의 JSP. 해당 JSP 내부에서만 접근가능. EL때문에 사용
저장소 ② : application - WebApp 전체에서 접근가능한 공통저장소. 1개만 존재. Web Application의 시작부터 종료까지 존재한다. context 내부 어디서나 접근 가능. 모든 클라이언트가 공유.
저장소 ③ : session - 클라이언트마다 가지고 있는 개별저장소 (ex. id, 장바구니). 사용자 수 만큼 필요하기 때문에 서버부담이 가장 크다 -> 최소한의 data만 저장
저장소 ④ : request - request 객체가 Map을 가지고 있음. 요청이 처리되는 동안만 존재하기 때문에 가장 부담이 적다. 다른 JSP로 전달 가능(forward).
" 웹 프로그래밍은 결국 페이지들 간의 이동과 정보전달 "
[2-15] Servlet과 JSP
[2-16] Servlet과 JSP
⚓ OOP 5대 설계원칙 - SOLID
① SRP : 단일 책임의 원칙 "하나의 메서드는 하나의 책임만"