http 28

ORM & 영속성 컨텍스트 & OOP 관점 모델링 & HTTP

ㅇORM Object Relational Mapping : 오브젝트를 데이터베이스에 연결하는 방법론 자바에서 클래스를 만들어서 실행을 하면 데이터베이스에 자동으로 생성되게 하는 기법이 ORM이다. ORM 데이터를 자바 오브젝트로 바꾸고 연결된 세션을 끊고 연결된 커넥션을 끊고하는 모든 일련의 과정을 함수 하나로 제공해준다. CRUD로 기본적으로 반복되는 작업들을 단순하게 도와준다. 영속성 컨텍스트 영속성: 데이터 -> 영구적으로 저장! DB -> MySQL로 컨텍스트: context 자바가 처리하는 모든 메타데이터 정보를 영속성 컨텍스트가 들고있다.결론은 자바와 DB 둘다 영속성 컨텍스트를 통해서 데이터가 서로에게 전달이 된다. 영속성 컨텍스트에 있는 일들은 모두 자동으로 처리가 된다. JPA는 DB와..

Spring/SpringBoot 2022.05.06

HTTP 응답 - HTTP API, 메시지 바디에 직접 입력 & HTTP 메시지 컨버터

HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 한다. HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다. HTML이나 뷰 템플릿 사용해도 HTTP 응답 메시지 바디에 HTML 데이터가 담겨서 전달됨. 정적 리소스나 뷰 템플릿 거치지 않고, 직접 HTTP 응답 메시지를 전달하는 경우를 말함 // ResponseBodyController Class package hello.springmvc.basic.response; import hello.springmvc.basic.HelloData; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframe..

Spring/SpringMVC 2022.05.01

HTTP 요청 메시지 - JSON & HTTP 응답 - 정적 리소스, 뷰 템플릿

HTTP API에서 주로 사용하는 JSON 데이터 형식을 알아보자. JSON 형식을 다루므로 ObjectMapper을 쓰자. 실행을 시켜주면 // RequestBodyJsonController Class package hello.springmvc.basic.request; import com.fasterxml.jackson.databind.ObjectMapper; import hello.springmvc.basic.HelloData; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.util.StreamUtils; import org.springframewo..

Spring/SpringMVC 2022.05.01

캐시와 조건부 요청 헤더 & 프록시 캐시와 캐시 무효화

캐시 제어 헤더 Cache - Control: 캐시 제어 Pragma: 캐시 제어(하위 호환) Expires: 캐시 유효 기간(하위 호환) Cache-Control 캐시 지시어(directives) Cache-Control: max-age 캐시 유효 시간, 초 단위 Cache-Control: no-cache 데이터는 캐시해도 되지만, 항상 원(origin) 서버에 검증하고 사용 Cache-Control: no store 데이터에 민감한 정보가 있으므로 저장하면 안됨 (메모리에서 사용하고 최대한 빨리 삭제) Pragma 캐시 제어(하위 호환) Pragma: no-cache HTTP 1.0 하위 호환 Expires 캐시 만료일 지정(하위 호환) expires: Mon, 01 Jan 1990 00:00:00 ..

HTTP 2022.04.30

캐시 기본 동작 & 검증 헤더와 조건부 요청

웹 브라우저에서 start.jpg를 요청하면 서버에서 star.jpg라는 그림을 찾아준다. 캐시가 없을 때 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 받아야 한다. 인터넷 네트워크는 매우 느리고 비싸다. 브라우저 로딩 속도가 느리다. 느린 사용자 경험 60초 동안은 캐시가 유효하고 응답 결과를 캐시에 저장한다. 두번째 요청할 때는 캐시를 먼저 살핀다. 60초 안에 찾게되면 캐시에서 바로 가져오게 된다. 네트워크를 아예 탈 필요가 없게 된다. 캐시 적용 캐시 덕분에 캐시 가능 시간동안 네트워크를 사용하지 않아도 되고 비싼 네트워크 사용량을 줄일 수 있고 브라우저 로딩 속도가 매우 빠르다. 빠른 사용자 경혐 캐시 시간 초과 star.jpg를 다시 요청하고 60초가 초과되었다. 그러면 다시 웹브..

HTTP 2022.04.30

전송 방식 & 정보(일반 정보 and 특별한 정보)

Transfer - Encoding Range, Content - Range 전송 방식 설명 단순 전송 압축 전송 분할 전송 범위 전송 단순 전송은 Content-Length를 알고 있을 때 전달 해준다. 압축 전송은 단순 전송에 있던 내용들을 gZip 같은 걸로 압축을 한다. (Content-Encoding의 종류를 나타내주어야 한다.) 용량이 큰 걸 분할 전송으로 보내면 오는데 바로바로 표현을 해 줄수가 있다. 바이트 정보들이 다 나와있기 때문에 분할해서 전송할 때에는 Content-Length를 나타내주면 안된다. 범위 전송 같은 경우에는 범위를 지정해서 전송해 줄수가 있다. 범위를 지정해서 보내어 줄 수 있다. 일반 정보 From: 유저 에이전트의 이메일 정보 Referer: 이전 웹 페이지 주소..

HTTP 2022.04.30

HTTP 헤더 개요 & 표현 및 컨텐츠 협상

HTTP 전송에 필요한 모든 부가정보 예) 메시지 바디에 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트, 서버 정보, 캐시 관리 정보... 표준 헤더가 너무 많다. 필요시 임의의 헤더 추가 가능 헤더 분류 General 헤더: 메시지 전체에 적용되는 정보, 예) Connection: close Request 헤더: 요청 정보, 예) User-Agent: Mozilla/5.0 (Macintosh; ..) Request 헤더: 응답 정보, 예) Server: Apache Entity 헤더: 엔티티 바디 정보, 예) Content-Type: text/htm, Content-Length: 3423 메시지 본문(message body)은 엔티티 본문(entity body)을 전달하는데 사용 엔티티 본..

HTTP 2022.04.30

SpringMVC 구조 정리

직접 만든 MVC 프레임 워크 구조를 살피면서 SpringMVC 구조와 비교해보자. SpringMVC 구조는 고객의 요청이 오면(HTTP 요청) FrontController 역할을 하는 DispatcherServlet이 핸들러 매핑에게 핸들러 조회를 하고 여러개의 핸들러를 스프링 부트가 등록을 해놓는다. 핸들러 어댑터 목록에 던지면 핸들러 어댑터가 얘를 처리할 수 있는데 하고 핸들러 어댑터가 튀어나온다. 핸들러 어댑터를 통해서 실제 핸들러를 호출하고(컨트롤러) 반환을 해준다. 그리고 View가 렌더가 되면서 실제 HTTP 고객의 응답에 나가게 된다. HandlerMapping은 2개가 있다. 0 = RequestMappingHandlerMapping : 애노테이션 기반의 컨트롤러인 @RequestMapp..

Spring/SpringMVC 2022.04.28

스프링 MVC를 시작과 컨트롤러 통합 & 실용적인 방식

@RequestMapping @RequestMapping 애노테이션 컨트롤러가 등장하면서, MVC 부분도 스프링의 한 부분이다. @RequestMapping RequestMappingHandlerMapping RequestMappingHandlerAdapter 이제 본격적으로 컨트롤러를 @RequestMapping 기반의 스프링 MVC 컨트롤러로 변경해보자. 회원 등록 폼을 만들어보자. SpringMemberFormControllerV1 package hello.setvlet.web.springmvc.v1; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping..

Spring/SpringMVC 2022.04.28

HTTP 상태코드 2xx 3xx 4xx 알아보자.

2xx에 대해서 보자. 클라이언트의 요청을 성공적으로 처리 200 Ok 201 Created 202 Accepted 204 No Content 클라이언트에서 요청한 걸 가지고 서버에서 생성한걸 뜻함 200은 요청이 성공이 된 것이고 201은 요청이 성공해서 새로운 리소스가 생성이 되는데 생성된 리소스는 응답의 Location 헤더 필드로 식별이 가능하다. 202 Accepted는 요청이 접수되었으나 처리가 완료되지 않은 걸 뜻하고 배치 처리 같은 곳에서 사용 예) 요청 접수 후에 1시간 뒤 배치 프로세스가 요청을 처리한다. 204 No Content는 서버가 요청을 성공적으로 수행을 했지만, 응답 페이로드 본문에 보낼 데이터가 없는 걸 뜻한다. 예) 문서 편집기에서 sava 버튼 save 버튼의 결과로 ..

HTTP 2022.04.27