반응형
- 지난주에 이어 Web 진행
- JPA
3-1. exam 프로젝트 까보기
spring-boot-autoconfigure 밑에 있는
spring.factories
가 중요함- 자동 설정에 관련된 키/값들이 존재함
@RestController
@Controller
,@ResponseBody
로 이루어진 어노테이션- Spring 4.0 부터 지원
Form으로 전송되는 데이터를 받는 방법
@RequestParam
@ModelAttribute
- 전송될 필드가 많으면
`@ModelAttribute
로 객체로 받을수 있게 한다. - 만약 JSON이 온다면
@RequestBody
로 처리한다
문자열을 JSON으로 변환해주는 놈?
- MessageConverter
HttpMessageConvertersAutoConfiguration
참고JacksonAutoConfiguration
: JSON 컨버터 설정ObjectMapper
Bean 이 없다면 자동으로 Bean 생성해줌JacksonObjectMapperConfiguration.jacksonObjectMapper
Accept
를 통해서 요청자가 원하는 데이터를 만들어서 전달한다text/html
,application.json
등등- 요청자의
accept
보고 다양한 MessageConverter중 골라서 값 전달
BoardApiController
의 API 테스트Accept: application/json
혹은Accept: text/xml
로 테스트해보기- 추천 Rest API Testing Tool
- 대신 파라미터에 format=xml 혹은 format=json등으로 하면 Accept와 같은 역할을 한다.
만약 XML 프로퍼티를 설정하고 싶다면
@Data
@AllArgsConstructor
public class BoardList {
@JacksonXmlElementWrapper(localName = "Boards")
@JacksonXmlProperty(localName = "Board")
private List<Board> boards;
}
@JacksonXmlElementWrapper
- boards의 XML 태그명 설정
@JacksonXmlProperty
- boards의 자식 (Board)의 태그명
- 없다면 Item 으로 태그가 생성될 것
ContentNegotiationViewResolver
- 요청되는 콘텐츠 형식에 기반을 두어 선택한 하나 이상의 다른 뷰 리졸버에 위임한다
- Freemarker, Thymeleaf 등의 뷰리졸버는 HTML 형식을 대응
- 이때는 MessageConverter 가 사용되지 않는다
- 만약 이 리졸버가 처리하지 못하는 형식이라면 다른 리졸버에게 요청을 던진다
ThymeleafViewResolver
- Thymeleaf기반의 템플릿을 찾는다
주의할 점
JSON, XML등은@RestController
를 사용한다.
즉, MessageConverter만 사용되며, 뷰리졸버는 사용되지 않는다.
3-2. JPA와 데이터베이스
기본 설명
- SQL 모르고는 JPA를 잘할수 없음
- 어떻게 하면 Java로 DB를 사용할때 DB 종류에 관계없이 동일한 코드로 사용할수 있을까?
- Connection, PreparedStatement, ResultSet 인터페이스
- 인터페이스 구현체는 각 DB사에 맡김
- JDBC Driver
- 일관된 방법으로 DB를 사용
- 쿼리는 결국 DB에서 사용되니, Connection을 맺어야만 실행 가능
- 하지만 Connection을 맺는 작업은 많은 리소스가 필요함
- 이를 해결하기 위해 Connection Pool을 이용해 재사용으로 문제를 해결
- Connection Pool의 Connection이 모두 사용중이라면 이후 요청들은 대기하게 된다.
DAO
- Data Access Object
- 트랜잭션
- 하나의 논리적인 작업 단위
- ex)
- 1건 조회
- 조회수 + 1
- 이 기능이 묶여서 실행되어야함
- 실패나면 같이 롤백 되어야함
- 선언적 트랜잭션
- 설정만 하면 자동으로 트랜잭션 처리되는 방식
- XML, 어노테이션 등등
- Spring에선 AOP로 이를 구현 (
@Transaction
)
JPA
- 자바 개발자는 객체지향 프로그래밍을 하는데, SQL??
- 하이버네이트의 등장
- 유사한 ORM 들이 계속 등장하니, 표준이 생김 -> JPA
- Spring 입장에선?
- JPA로는 RDBMS만 가능한데, NoSQL 대응은 어떻게?
- 이들 모두를 대응하는 추상화 레이어를 하나더 두자
- Spring Data 가 등장
- 우린 여기서 Spring Data Jpa를 사용
참고 도서: 자바 ORM 표준 JPA 프로그래밍
- JPA를 사용하는 이유?
- SQL 중심 개발 -> 객체 중심 개발
- 생산성
- 패러다임의 불일치 해결
개인적인 추천으로.. JPA를 잘하기 위해선 같이 쓰는 사람들이 있어야함
혼자서는 힘듬
- 패러다임 불일치?
- 객체: 상속, 다형성, 메소드, 객체 레퍼런스 관계, 레퍼런스를 이용한 순회
- 릴레이션: 테이블 위주, 메소드 없음, PK를 통한 구별, 다형성 지원하지 않음
- ORM
- 객체와 관계형 데이터베이스와의 매핑
- 이들 사이의 매핑을 ORM 프레임워크가 중간에서 매핑
3-3. JPA 실습
- 영속성
Repository
의 1차 캐싱findById
등으로 같은 키로 가져올때면 트랜잭션 내에 호출됐던 결과를 그대로 리턴한다
- 트랜잭션 내에서는 엔티티 변경 내용이 트랜잭션 끝나는 시점에 자동으로 테이블에 반영 된다.
- 동일 트랜잭션 내에서는 최적화가 진행된다
- 처음 가져온 형태와 최종 변경 형태가 같으면 update 쿼리가 실행되지 않는다 *
반응형