허원철의 개발 블로그

Spring Boot - Rest 본문

web

Spring Boot - Rest

허원철 2016. 12. 4. 20:57
이번 글은 spring 에서 rest 서비스를 가장 빠르게 만드는 기술에 대한 내용 입니다.

1. gradle 설정
2. Entity 설정
3. Repository 설정
4. Events 설정
5. JPQL 이란?



1. gradle 설정

- jpa 와 함께 rest 추가해서 넣어줍니다. (※참고 : Spring Boot 에 JPA 적용하기)

dependencies {
	compile('mysql:mysql-connector-java')
	compile('org.springframework.boot:spring-boot-starter-data-jpa')
	compile('org.springframework.boot:spring-boot-starter-data-rest')
	compile('org.projectlombok:lombok')
	compile('org.springframework.boot:spring-boot-starter-web')
	runtime('mysql:mysql-connector-java')
	testCompile('org.springframework.boot:spring-boot-starter-test')
}

2.  Entity 설정



- 기존 Entity 와 다른 점은 @NamedQuery 라는 어노테이션이 추가되었습니다.
물론 없어도 되는 것이지만, JPQL를 설명하기 위해 넣어놓은 어노테이션입니다.

3. Repository 설정


- @RepositoryRestResource : repository 선언에 대한 어노테이션
① collectionResourceRel : 반환되는 데이터 배열의 이름
② path : 경로
- jpa 와 같이 선언만으로도 기본적인 CRUD 가 만들어집니다. 여기서 차이는 controller가 필요 없다는 것 입니다. 
- /{repository} 이런 식으로 맵핑이 되기 때문입니다.
- 위와 같은 경우는 localhost:8080/people/1 (데이터가 있는 경우) 으로 확인 가능합니다.

- @RestResource 가 달려있는 메소드를 보면 jpa 와 같은 형식입니다.
- 여기서도 다른 점이 있다면, 커스텀할 메소드에 대한 설정을 바꿀 수 있습니다.
① path : /{repository}/search/{search} 이런식으로 가능한다. default 로는 해당 메소드명을 적어야합니다.
② rel : 반환되는 데이터 배열의 이름(collectionResourceRel와 동일하게 해줍니다.)
③ exported : url 허용? 이라고 생각하면 쉬울 것 같다. 내부로직에만 필요한 경우 사용됩니다.

4. Events 설정
- 여기서 컨트롤러나 서비스용도로 쓰이는 event라는 것이 제공됩니다.
(DB의 트리거 같은 개념..? 정도라고 생각됩니다.)
- 간단하게 하나만 말씀을 드린다면, 입력하기 전에 대한 로직처리를 할 수 있습니다.



- 위와 같은 어노테이션이 입력하기 전에 대한 로직처리를 하기 위한 것입니다.
- insert를 하게 되면 아래와 같이 log를 볼 수 있습니다.



- 하지만!! 저렇게 어노테이션으로 하게 되면 config에 등록하지 않으면 event를사용 할 수 없습니다. 



5. JPQL 이란?



- 쿼리를 작성할때 jpa 만으로 불가능한 상관이 올 수 있습니다. 그런 경우 jpql, querydsl 이라는걸 사용할 수 있습니다.

- EntityManager 를 통해 쿼리를 작성할 수 있습니다. (DAO 같은 개념이라고 봐도 될지 모르겠습니다...)


'web' 카테고리의 다른 글

Spring Boot - WebSocket  (396) 2016.12.04
lonic Framework - Angular  (421) 2016.12.04
Spring Boot - Security OAuth2  (384) 2016.12.04
Spring Boot - Validator  (424) 2016.12.04
Spring Boot - Security  (388) 2016.12.04
Comments