반응형

 

 

 

1. JPA 개요

- Persistence : java 객체에 포함된 데이터를 데이터베이스를 통해 저장 관리함으로써 객체의 영속성 보장

- JPA : 자바 객체와 데이터베이스 사이의 mapping 방법을 설정, SQL문 자동 생성 및 실행

- Persistenct Provider : JPA의 기능을 구현한 구현체 => 반드시 필요 !!

ex) Hibernate

 

 

 

2.  JPA 구성요소

1) Entity : ORM을 통해 데이터베이스에서 영속적으로 저장, 관리되는 객체

2) EntityManager : Entity에 대한 CRUD 기능 실행

3) ORM 설정 : Entity와 데이터베이스 테이블 사이에 mapping 방법을 정의

: annotation 및 XML 이용

4) JPQL(Java Persistence Query Language)

: SQL과 유사한 질의 언어

=> 복잡한 질의할 때 사용

5) Criteria API

: 자바 코드를 이용한 질의 표현 및 실행 가능

 

 

 

3. Entity

: 영속적인 데이터를 포함하는 POJO 객체

- 식별자(ID) 속성 필요

- 클래스 내에서 어노테이션을 이용해 ORM 설정

 

 

 

4. JPA 주요 어노테이션

1) Entity 정의 : @Entity

2) 식별자 정의 : @Id

3) Entity와 테이블 간의 매핑 정의 : @Table, @Column, 등등

4) Entity들 간의 연관 관계 정의 : @OneToOne

 

 

 

5. EntityManager

: Entity에 대한 생명주기 관리

- 영속 컨텍스트 : 영속성을 갖는 Entity들의 저장 공간(Cache 기능 포함)

- 영속 객체에 대해 데이터베이스 저장, 갱신, 삭제 실행

 

 

- 주요 메소드

 

사용 예)

 

 

 

 

 

6. 복합식별자

: 다른 객체에 포함되는 값 객체를 정의

 

- @Embeddable, @EmbeddableId

 

 

- @IdClass, @Id

 

 

 

- @Embeddable, @Embedded

 

 

7. @Enumerated

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'Programming > Spring' 카테고리의 다른 글

카페24 ROOT.war 파일 배포 후 오류  (0) 2022.10.24
Restful하게 API를 구성하자 !  (0) 2021.11.25
11. Transaction Management  (0) 2021.06.08
10. Spring 기반 RESTful service  (0) 2021.06.07
09. Spring JDBC  (0) 2021.06.01
반응형

 

 

 

1. Transaction

: 여러 operation들로 이루어 지는 하나의 작업 단위

- database의 상태를 변경(insert, update, delete)

- all or nothing (operation이 하나라도 실패할 경우, 모든 실행 결과를 취소시킴으로써 데이터 무결성 보장)

- ACID 특성을 만족 : Atomicity / Consistency / Isolation / Durability

 

예시 ) 

 

 

 

2. Transaction 처리의 중요성

무결성 제약조건(check)

alter table inventory add constraint c1 check(qty >= 0);

 

-> 트랜잭션으로 구현하지 않았을 경우, check 제약조건 위배로 오류 발생했을 때 이미 삽입 및 변경된 행은 그대로 남아 데이터베이스의 무결성이 훼손된다.

-> 트랜잭션으로 구현될 경우, 변경된 사항이 취소(rollback)된다.

 

 

 

3. Transaction Manager

: 다양한 영속성 기술들을 위한 구현 클래스 제공

 

- JDBC 기반

: DataSourceTransactionManager 이용

: commit(), rollback() 등 호출

 

 

 

4. 스프링의 Transaction 지원

- 선언적 트랜잭션 관리

: 트랜잭션 처리를 코드에서 직접 구현하지 않고 xml 설정 파일이나 annotation을 통해 트랜잭션의 범위와 규칙을 정의

: XML, annotation 이용

1) TransactionProxyFactoryBean

2) <tx:advice>

3) @Transactional

 

 

 

5. transaction 속성

1) Propagation Behavior

 

 

2) Isolation level

: 한 트랜잭션이 동시에 실행중인 다른 트랜잭션의 영향을 얼마나 받았는가를 의미

- dirty reads : 다른 트랜잭션에 의해 변경되었지만, 아직 commit 되지 않은 데이터를 읽는 현상

- non-repeatable reads : 같은 질의를 두 번 이상 할 때 서로 다른 데이터를 얻는 현상

- phantom reads : 여러 데이터 행을 읽은 후 다시 질의를 수행할 때 이전에 없던 데이터를 얻는 현상

 

 

 

 

 

6. @Transactional annotation 이용

: @Transactional 어노테이션이 붙은 모든 class/bean들에 대해 transaction advice를 자동 생성 및 적용

 

 

적용 예 )

* 메소드가 먼저 적용됨

 

 

 

 

 

반응형

'Programming > Spring' 카테고리의 다른 글

Restful하게 API를 구성하자 !  (0) 2021.11.25
12. Spring & JPA  (0) 2021.06.08
10. Spring 기반 RESTful service  (0) 2021.06.07
09. Spring JDBC  (0) 2021.06.01
08. MyBatis  (0) 2021.06.01
반응형

 

 

1. REST

: web과 같은 distributed hypermedia system을 위한 구조

: 요청 가능한 resource에 대해 주소를 지정하고 HTTP 위에서 부가적인 전송 계층 없이 상태 표현을 전송하기 위한 방법을 정의

* resource : 주소(URI)를 통해 접근할 수 있는 의미있는 정보

 

 

2. RESTful Web Service 

: REST 개념에 기반하고 HTTP 프로토콜을 이용하여 구현된 resource 지향적인 서비스

1) URI를 통한 resource 식별

2) Internet media type를 이용한 resource 표현 ex) XML, JSON, RSS 등

3) HTTP method를 이용한 resource에 대한 연산 요청 ex) POST(CREATE), GET(READ), PUT(UPDATE), DELETE

 

 

3. spring MVC framework의 REST 지원

: controller 에서 get, post, put, delete 등 모든 http method 요청 처리 가능

- @PathVariable : URI에 대한 요청 처리

- @RequestBody, @ResponseBody : 요청 메시지 -> 자바객체 / 자바객체 -> 응답 메시지 변환 수행

- HttpMessageConverter : XML, JSON, RSS 등 다양한 data format에 대한 변환 처리

- RestTemplate : RESTful Service를 이용하는 클라이언트 개발 지원

 

 

 

 

4. @RequestBody / @ResponsBody

- @RequestBody : 요청 메시지의 body에 포함된 데이터를 저장할 Java 객체 지정

- @ResponseBody : Java 객체를 응답 메시지의 body에 포함될 데이터로 사용

- @RestController : @Controller의 확장으로, @ResponseBody를 자동으로 적용

 

 

 

 

5. HTTP Message Conversion

- Java 객체와 message 간의 변환 처리

: 앞 예제에서 message bodyString 객체 사이의 변환을 위해  StringHttpMessageConverter가 사용됨

: <mvc:annotation-driven/>또는@EnableWebMvc설정을통해 다양한 HttpMessageConverter 구현 객체를 생성 및 이용 가능

 

 

 

 

6. JAXB2를 이용한 XML 처리

- JAXB2 : Java class와 XML 사이의 mapping 을 위한 표준 라이브러리 (Java SE / EE에 포함됨 )

Java objects => XML data (marshalling)

XML data => Java objects (unmarshalling)

 

 

 

예 1)

 

예 2)

 

 

 

- Controller : GET 요청 처리

* 객체 타입(MessageList)JAXB2가 적용된 클래스일 경우, Jaxb2RootElementHttpMessageConverter를 이용하여 return 객체를 XML 데이터로 변환하여 응답 메시지 body에 출력

 

 

- Controller : POST 요청 처리

 

Client(browser) : XML 데이터를 포함한 POST 요청 생성

 

 

 

7. JSON

- Data Type : 수, 문자열, 불린, 배열, 객체(순서가없음), null

예 ) 

 

 

 

 

 

8. Jackson2

: Java 객체와 JSON 형식 데이터 사이의 변환 실행

 

 

- Controller : GET 요청 처리

* Request handler methodJava 객체나 HashMapreturn 할 경우, SpringMappingJackson2HttpMessageConverter를 이용하여 return 객체를 JSON 데이터로 변환함

 

 

 

* JSON 변환 제외 처리 : @JsonIgnore

 

 

* 날짜 형식 변환 처리 : @JsonFormat

 

 

 

- Controller : POST 요청 처리

: 요청 메시지를 통해 전송된 JSON 데이터를 java 객체로 변환하여 사용

 

Client : Ajax

 

 

 

 

 

8. RestTemplate

 

 

- REST client 구현

: RESTful Service를 호출하기 위한 다양한 메소드 제공

: HttpMessageConverter를 이용해 message와 JAVA 객체 간 변환

 

 

- 주요 메서드

1) 가변 인자 방식을 이용한 parameterized URL

2) Map 을 이용한 parameterized URL

3) java.net.URI 이용

 

 

 

 

 

 

9. RestTemplate을 이용한 HTTP method

1) GET 요청

 

 

2) POST

 

- PUT

 

 

 

- DELETE 

 

 

반응형

'Programming > Spring' 카테고리의 다른 글

12. Spring & JPA  (0) 2021.06.08
11. Transaction Management  (0) 2021.06.08
09. Spring JDBC  (0) 2021.06.01
08. MyBatis  (0) 2021.06.01
07. Thymeleaf  (0) 2021.05.31
반응형

 

 

 

 

1. DAO 의 개념

: DBMS를 통해 데이터를 저장 및 검색하는 기능을 전담하는 객체

- business layer와 독립적인 persistence layer 구현 및 변경 가능

- dao mock object를 이용한 테스트 용이

 

 

 

2. Data Access Template

: 각 영속성 기술을 위한 template class 제공한다.

: DAO 에서 반복적으로 실행되는 작업들을 자동으로 수행한다.

 

3. Spring 에서 예외처리 지원

: DB 오류에 관한 다양한 Exception class 제공한다.

: Spring 이 지원하는 Exception은 모두 "unchecked" exception 이다. 즉 try-catch로 잡아서 처리할 필요가 없다.

 

 

4. Data Source 설정

: 데이터베이스에 대한 connection을 제공하는 factory 객체

 

- Connection pool 사용

- JNDI에 등록된 Data Source 

- JDBC driver 직접 이용

 

1) connection pool

: 데이터베이스 커넥션을 미리 생성시키고 pool로 관리함으로써 데이터베이스 접근 성능을 향상시키기 위한 방법

- BasicDataSource 타입의 객체를 spring bean으로 생성

 

 

2) JNDI에 등록된 data source 설정

: Java EE application server에서 data source를 생성하고 JNDI service에 등록 및 사용

 

 

 

 

 

5. JDBC API

: java application에서 데이터베이스를 접근하는 가장 기본적인 방법

- 장점

1) 표준 SQL 언어를 사용

2) 특정 DBMS에서 제공하는 고유 기능 사용 가능

- 단점

1) 데이터 질의, 갱신 등 핵심적인 코드 외에 connection, statement 등의 자원 할당 및 반납, 예외 처리 등과 관련된 코드 필요

2) 위와 같은 코드가 각 데이터 접근 메소드마다 중복됨

 

 

 

- JDBC API 사용 예

 

 

 

 

 

6. Spring JDBC Template Classes

: JDBC 기반 프로그램에서 반복적으로 작성되는 코드를 구현하여 숨김

1) JdbcTemplate

2) NamedParameterJdbcTemplate

 

 

7. JdbcTemplate

- bean 설정 (spring boot는 필요x)

* 참조 관계 주목 !

 

- Query method 1 : query()

: rowMapper - ResultSet 에 포함된 각 행을 추출해서 T type의 domain객체를 생성하는 RowMapper 객체

 

 

 

- RowMapper interface

: mapRow() => ResultSet의 특정 행에 대해 T type의 객체 생성 및 반환

 

 

- 구현 예 1 : RowMapper class를 별도로 정의

 

 

- 구현 예 2: RowMapper를 익명 클래스로 구현

 

 

- 구현 예 3 : Java 8의 Lambda expression 활용

 

 

 

- query method 2 : queryForList()

: 질의가 하나의 column만을 조회하는 경우 RowMapper 대신 그 column type에 해당하는 Java type 이름을 제공

 

 

- query method 3 : queryForObject() 

: 질의 결과로 List 대신 하나의 T type 객체를 반환

: 질의 결과로 검색되는 row 가 하나인 경우 사용

 

 

 

- Insert/Update/Delete method

 

 

 

 

- 가변 길이 인자 지원

 

예 1) 

 

예 2)

 

 

 

 

 

 

 

 

 

 

 

 

8. NamedParameterJdbcTemplate

: 질의에 포함된 parameter에 이름을 사용

=> Object 대신에 Map이나 paramSource 를 인자로 받음

 

 

예시 )

 

 

 

- SqlParameterSource를 사용한 parameter값 설정

 

- BeanPropertySqlParameterSource 이용

 

 

 

 

 

9. SimpleJdbcInsert

예 1)

 

예 2)

 

 

 

10. DaoSupport

- bean 설정

 

 

 

 

 

 

 

반응형

'Programming > Spring' 카테고리의 다른 글

11. Transaction Management  (0) 2021.06.08
10. Spring 기반 RESTful service  (0) 2021.06.07
08. MyBatis  (0) 2021.06.01
07. Thymeleaf  (0) 2021.05.31
06. Spring Boot  (0) 2021.05.27
반응형

 

 

 

1. Data Mappers

: 객체와 데이터베이스 사이에 데이터를 이동시킴

- 객체와 데이터베이스가 서로 독립적으로 유지되고 mapper에 대해서도 독립적임

 

 

2. pom.xml 설정

- 사용할 DBMS의 JDBC driver는 별도 설치 필요

 

 

 

3. MyBatis workflow

 

 

4. Mapper XML 예

 

 

 

 

 

 

 

 

 

5. MyBatis - spring 연동

- pom.xml

 

 

1) SqlSessionFactoryBean

2) SqlSessionTemplate

3) MapperScannerConfigurer

 

 

 

 

반응형

'Programming > Spring' 카테고리의 다른 글

10. Spring 기반 RESTful service  (0) 2021.06.07
09. Spring JDBC  (0) 2021.06.01
07. Thymeleaf  (0) 2021.05.31
06. Spring Boot  (0) 2021.05.27
05. Spring MVC  (0) 2021.04.18
반응형

 

 

 

1. Thymeleaf란?

: server-side java template engine

- JSP를 대체하는 템플릿 언어 및 엔진

- 모든 기능을 HTML element 의 속성으로 표현

 

 

2. JSP와 Thymeleaf 비교

 

 

3. Spring MVC Framework와의 연동

- Spring view resolution 방식에 따라 타임리프 템플릿을 뷰로 이용 가능하다.

- Form backing beans

- MessageSource 객체를 통해 Spring에서 관리되는 message file들에서 메시지 검색 및 출력

- SpEL 사용 가능

 

 

4. dependency 설정 (in Spring-Boot)

- auto-configuration

: 명시적인 bean 설정 필요없음

- Template file 기본 위치: src/main/resources/templates

 

 

5. Namespace 선언

 

 

 

6. 텍스트 출력

th:text 속성 : 주어진 식의 값을 tag의 content에 출력함(기존 값을 대체)

 

 

 

7. Standard Expression Syntax

 

 

8. 변수 식 : ${...}

 

사용 예)

 

 

9. 선택 변수 식 : *{...}

: 전체 context 대신 특정 객체에 대해 실행됨

1) th:object를 먼저 설정하고

2) *{...} 으로 뒤에 객체 선택

 

 

 

 

10. 메시지 식 : #{...}

 

 

11. Link URL : @{...}

: page, context, server, protocol에 대한 상대 경로 이용

 

 

 

 

12. Literals

 

 

13. Operations

 

 

14. 임의의 속성 설정(이미지)

 

 

 

15. 반복문 - th:each="..."

 

 

** 홀수번째만 속성을 적용하고 싶다면,

 

 

 

 

 

 

16. 조건문 ; th:if="...", th:unless="..."

 

 

 

 

17. Switch

 

 

 

18. Template layout

 

 

- id를 이용한 fragment 삽입

 

- 다양한 방식

 

 

 

- fragment는 params를 가질 수 있음

 

- th:remove

 

 

 

 

19. Form binding in Spring MVC

 

- checkbox

 

 

- radio button

 

- dropdown list

 

 

 

 

20. 검증 오류 메시지 출력

반응형

'Programming > Spring' 카테고리의 다른 글

09. Spring JDBC  (0) 2021.06.01
08. MyBatis  (0) 2021.06.01
06. Spring Boot  (0) 2021.05.27
05. Spring MVC  (0) 2021.04.18
04. bean life-cycle관리 / 외부설정 property / message source  (0) 2021.04.13

+ Recent posts