부트캠프 - 온보딩
1. HTTP 요청과 응답
(1) 프로토콜이란 ?
① 서로간의 통신을 위한 약속 규칙
② 주고 받을 데이터에 대한 형식을 정의한 것
③ 어떤 형식으로 주고 받을 건지 약속을 정한 것 -> 그래야 서로 데이터를 알 수 있음
④ 예를 들어 야구에서 모자를 만지면 번트, 코는 안타 -> 서로간의 약속으로 소통
(2) 따라서, 프로토콜은 약속이다
(3) HTTP : Hyper Text Transfer Protocol
① HTTP는 하이퍼 텍스트를 전달하는데 사용되는 약속이다
② 텍스트 기반으로 되어있음. 예를 들어, [ GET /hello HTTP1.1 ... ] 처럼 주고받을 데이터가 텍스트로 되어있어서 단순하고 사람이 읽기 쉬움
③ 상태를 저장하지 않음. 클라이언트 정보를 저장하지 않음 -> 이를 보완하기 위해 쿠키 & 세션을 사용
④ 확장이 가능함. 헤더에 사용자가 직접 만든 헤더를 추가할 수 있음
(4) HTTP는 편지와 비슷함(Header와 내용으로 구성되어 있음)
(5) HTTP는 클라이언트와 서버 간 요청 편지와 응답 편지를 주고받는 것과 비슷하다
(6) 동작 순서
① 클라이언트가 브라우저에 URL을 입력
② 브라우저는 요청 메시지를 HTTP에 맞춰서 만든 후에 서버에 전송
③ 서버는 응답 메시지를 HTTP에 맞춰서 다시 클라이언트에 전송
④ 클라이언트는 응답 메시지를 분석해서 내용을 브라우저에 보여줌
(7) 응답 메시지의 구성
① 상태코드 : 1xx, 2xx, ... 5xx
② 헤더
③ 바디
-> 이렇게 구성되어 있는 것이 HTTP 규약에 맞는 '응답 메시지'. 이렇게 작성되어있어야 클라이언트가 이해할 수 있음
(8) 요청 메시지의 구성
① 요청라인 : GET, POST
② 헤더
③ 바디
(9) GET은 버서에 리소스를 얻어오는 용. 그래서 바디가 없음. 그렇지만 쿼리스트링으로 데이터 전송 가능
(10) POST는 서버에 리소스를 보내는 용. 바디에 리소스를 담음(ex. 게시글 등록, 로그인, 회원가입)
2. 텍스트와 바이너리 MIME, Base64
(1) 텍스트 기반 프로토콜에서 바이너리 데이터(ex. 이미지, 파일)을 전송하려면 어떻게 할까?
(2) HTTP의 Content-Type 헤더를 사용 -> Content-Type은 바디 데이터의 타입을 명시하는 헤더임
(3) Post 방식의 form-data를 이용하면 body에 바이너리 데이터를 보낼 수 있음
(4) 이 바이너리 데이터는 Base64(64진법)으로 나타내서 보내짐. 64비트를 사용하는 이유는 모든 OS에서 기본적으로 사용하는 문자를 사용해서 디코딩을 가능하게끔 하기 위해
3. 관심사의 분리와 MVC 패턴
(1) 관심사의 분리 : 기존 코드는 ① 입력, ② 처리, ③ 출력 으로 나누어져 있음(3개의 관심사로 나누어져 있음)
(2) 입력의 분리 -> 입력을 처리하는 부분을 앞으로 분리
(3) 처리와 출력의 분리 -> 계산하는 부분과 출력하는 부분을 분리. 그런데 처리한 데이터를 출력부분과 연결지어야 하므로 이 때 사용하는 것이 Model 객체임
(4) C(데이터 처리) -> M(모델) -> V(뷰, 출력) -> 이 모양이 MVC패턴임
4. MVC 패턴의 원리
(1) DispatcherServlet은 Reflection을 이용해서 사용할 클래스(Controller)의 메서드를 알아내고 그 매개변수에 필요한 값을 넣어줌
(2) 어떻게 Controller가 view이름만 전달해도 뷰를 반환해줄까?
(3) DispatcherServlet은 해시맵인 model을 만들고 반환 받은 view에 model을 같이 전달한다
5. 서블릿과 JSP
(1) jsp와 서블릿은 거의 비슷. 그리고 이를 발전시킨 것이 Spring
(2) Servlet은 Java코드 안에 HTML
(3) JSP는 HTML코드 안에 Java
(4) JSP는 서블릿으로 변경되어서 서블릿으로 등록된다
1. 문제
- 직접 Servlet을 만들어서 등록하면 DispatcherServlet은 거치지 않겠네?
2. 시도
- 직접 해보자
3. 해결
- 그렇다. 직접 Servlet을 등록할 경우 DispatcherServlet은 거치지 않는다
4. 알게된 점
- Servlet을 직접 등록하면, DispatcherServlet과 함께 Servlet은 두 대가 된다
- DispatcherServlet도 하나의 Servlet에 불과하다. Servlet 다음인 Controller에서 비즈니스 로직에 집중할 수 있도록 도와주는 Servlet일 뿐임
코테 준비
1. 백준 2812 - 크게 만들기
: stack 자료구조를 이용해서 푸는 문제이다. 사실 stack 문제라는 걸 알고 풀어서 쉽게 풀었지만, 만약 몰랐다면 어땠을까. 자료구조를 이용한 문제를 많이 풀어보면서 감을 익혀야 할 것 같다
2. 백준 3425 - 고스택
: 새로운 stack을 만드는 아주 빡빡한 구현문제였다
하루하루 꾸준히!!!