상세 컨텐츠

본문 제목

Spring Boot으로 웹 출시까지 7. JPA이용한 RESTful API 작성

Java/코딩의 신

by Gopythor 2023. 12. 4. 16:47

본문

728x90
반응형

 

GET POST PUT DELETE를 통해 REStful API를 만들 수 있음.

Web JPA H2로 샘플을 두고 있음.

H2는 메모리 안에서 작동하는 인메모리 데이터베이스.

 

Web과 JPA 그리고 MariaDB를 사용한다.

이를 통해 RESTfulAPI를 만들어보겠다.

예시는 Employee이지만, Board 클래스로 해보겠다.

BoardRepository를 이미 생성한 상태임.

RESTapi 샘플 코드가 있음.

 

보통 이런 방식으로 경로를 많이 지정함.

 

/employees 주소로 지정함.

@GetMapping - 전체 직원

@PostMapping - 추가할 때

 

/employees/{id}

@GetMapping - 한 직원

@PutMapping - PostMapping은 바로 저장을 하지만,

사용자가 이미 있는지 확인을 하고 있다면 업데이트를 하고,

없다면 저장해서 insert를 함.

@DeleteMapping

삭제 기능

 

주소는 공통적으로 사용 가능.

요청할 때의 메소드에 따라서 다른 동작을 하게 됨.

BoardApiController를 만들어볼 것이다.

ctrl+r을 누른다.

Employee를 Board로 변경.

변수형 맞춰줌.

에러가 있는데 간단하게 null리턴

생성자를 지워준다.

헷갈릴 수 있으므로 RequestMapping을 붙인다.

repository의 findAll을 호출

전체 게시판 데이터가 JSON 형태로 나오고 있음.

14를 넣으면 14에 해당하는 데이터가 나옴.

제목으로 검색하는 api를 추가해보겠음.

RequestParam을 required를 false로 함.

if가 empty면 전체출력.

검색할 필드명 지정.

인터페이스만 정의하면 구현은 알아서 됨.

이 타이틀을 검색하게 됨.

값이 일치하는 필드가 전부다 리턴될 것임.

검색해서 리스트를 가져오는 것임.

둘다 빈 값일 때에는 전체 데이터 조회.

둘중에 하나가 들어오면 or 조건 검색

and 조건도 된다.

JPA 규칙의 메소드대로 하면 된다.

jpa learn 에 문서가 있다.

여러가지 예제들이 나옴.

or해서 데이터들을 붙여 나가도 된다.

특정 데이터가 시작, 종료되는 값.

IgnoreCase 대소문자 구분없이.

 

전형적인 CRUD기능을 쉽게 작성할 수 있음.

그러나 해당 키워드만으로 제약이 있을 수 있음.

복잡한 쿼리문을 작성하게 되면, 수십줄의 SQL문이 나옴.

실제로 SQL문도 작성할 수 있음.

 

 

User 엔티티에 해당하는 데이터를 sql비슷하게 작성하는 방법.

 

nativeQuery를 실제로 하고 싶을 때에는 nativeQuery를 true로 줌.

 

특정조건일 때에는 e-mail을 검색하고, 이름을 검색하고.

쿼리를 조건에 따라서 다르게 작성하고 싶다면 custom repasitory를 작성할 수 있음.

 

JPA를 이용하면 Page를 리턴할 수 있음.

Pageable로 몇 페이지의 데이터를 가져올 지 지정.

쉽게 페이지를 작성할 수 있음.

페이지가 많아지면 전체 조회로는 무리가 있다.

postman으로 테스트를 해볼 것이다.

로그인을 안하고 사용해도 됨.

원하는 요청을 보낼 수 있음.

GET 테스트

파라미터를 받는 부분이 리퀘스트바디임.

RESTful API이기 때문에 raw로 보냄.

전송을 해볼 것임.

전송한 데이터가 데이터베이스에 입력됨.

postman console에서 보낸 데이터가 확인이 된다.

application/json이기 때문에 데이터가 잘 전송된 것임.

데이터 형식을 잘 맞춰서 전송해야 함.

put메소드를 실행할 것임.

방금 실행한 test제목을 2로 변경할 것임.

board/{id} 임

데이터가 수정됐음을 볼 수 있다.

DELETE를 진행

바디 없이 전송

삭제가 되었음.

https://youtu.be/XHT6S5JH_RU?si=R-tGOzEihuceVnbW

728x90
반응형

관련글 더보기

댓글 영역