Springboot

[SpringBoot & JPA ] 판매자 POST와 GET 방식

-JUNHEOK- 2022. 2. 14. 00:31

JPA를 사용하여 테이블을 만드는 것을 연습을 하면서 POST, GET 방식으로 DB의 값을 넣고 브라우저에서 확인하는 것을 연습하였다. 

 


gym : 헬스장 정보 

pass :  회원권 종류

gym_pass : 헬스장 이용권 정보

owner : 판매자 

owner_qna : 판매자 QNA


POST와 GET 매핑을 중점을 두고 연습하였으므로 테이블구조와 설계부분은 다음에 자세히 다루도록 하겠다. 

 

 

 

owner (판매자) 컨트롤러를 간단히 테스트해보고자  postman으로 post 방식으로 조회가 되는지 확인해보았다.


http://localhost:9990/owner/join 조회하기 

 

x-www-form-urlencoded 는  key=value&key=value 형태로 데이터를 전송한다. 

이클립스에서 확인해보면 값이 제대로 전달된 것을 확인할 수 있다. 

 

 

앞서 join () 메서드는 파라미터 형태로 값을 받았지만 object 형태로도 받을 수 있기 때문에 컨트롤러를 수정해보도록 하겠다. 


Repository 만들기

 

전에 배웠던 스프링, 스프링 부트에서 했던 것들을 보면  이렇게 하면 빈으로 등록이 되나? 라고 의문이 들었었다.   즉 스프링 ioc 에서 객체를 가지고 있나요? 라는 뜻이며  인젝션을 통해 DI 를 할수 있었다. @Repository 어노테이션을 붙혀서 스프링이 컴포넌트 스캔을 할 때 OwnerRepository를 메모리에 올렸었다. 

그런데 위의 코드처럼 사용을 하게 되면 자동으로 빈이 등록된다. 스프링 데이터 JPA 를 간단한 CRUD 기능을 공통으로 처리하는 JpaRepository 인터페이스를 제공한다. 그리고 이 인터페이스를 상속받는다. 그리고 제네릭에 엔티티 클래스와 엔티티 클래스가 사용하는 식별자 타입을 지정한다. 

 

간단히 JpaRepository 인터페이스를 상속받으면 사용할 수 있는 주요 메서드를 보면 


save(S): 새로운 엔티티는 저장하고 이미 엔티티는 수정한다. 

delete(T): 엔티티 하나를 조회한다. 내부에서 EntityManager.remove()를 호출한다. 

findOne(ID) : 엔티티 하나를 조회한다. 내부에서 EntityManager.find()를 호출한다. 

getOne(ID): 엔티티를 프록스로 조회한다. 내부에서 EntityManager.getReference()를 호출한다. 

findAll(): 모든 엔티티를 조회한다. 정렬(Sort)이나 페이징조건을 파라미터로 제공할 수 있다.


 

@Autowired 를 통해서 ownerRepository를 주입을 하고 save(owner)를 통해 저장한다.

테스트를 해보도록 하겠다. 

 

1. Postman 

 

2. 이클립스

 

3. DB

 

데이터베이스에 값이 잘 전달된 것을 확인할 수 있다. 

 


GET방식으로  DB에  저장된 값을 브라우저에서 확인해보기

 

 

만약 DB에서 값이 없는데 호출을 하려고 하면  null을 return 하게 된다.  이런 문제를 해결하기 위해 Optional로 owner 객체를 감싸서 null이 아닌지 판단해서  return 을 하게 하였다.

 

{ownerNo} 주소로 파라미터를 전달 받을 수 있다. 

http://localhost:9990/owner/12311222로 검색을 해보면 아래와 같이 json으로 나타난다. MessageConverter라 응답시 자동작동한다. 만약 object를 리턴하게 되면 MessageConverter가 Jackson 라이브러리를 호출하여 
 owner 오브젝트를 json으로 변환해서 브라우저에 넘겨준다.