20220523 TIL

Don Lee·2022년 5월 24일
0

EpiTIL

목록 보기
14/24

JPA: Java Persistence API(자바 영속성 API 기술)

🛠 Java를 위한 영속성(Persistence) 관리와 O/R Mapping(ORM; Object-Relational Mapping)을 위한 표준 기술

ORM(Object-Relational Mapping; 객체-관계 매핑)?

💡 ORM의 표준기술이 JPA $JPA ⊂ ORM$
  1. 클래스(Java)와 테이블(DB)은 서로가 기존부터 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생함.
  2. 이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결함.
  3. 따라서 ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 됨.

  • 객체와 DB의 테이블이 매핑을 이루는 것. 즉, 객체 → 테이블이 되도록 매핑(연결) 시켜주는 것.
  • ORM을 이용하면 SQL Query가 아닌 직관적인 코드(메서드)로서 데이터를 조작
    할 수 있음.
💡 User 테이블의 데이터를 출력할 때 SQL과 ORM의 차이
SELECT * FROM user;
user.findAll()

https://miro.medium.com/max/1200/1*beI5EsSh45USmgJnKk2v9A.png

  • Java 진영에서 ORM 기술 표준으로 사용하는 인터페이스 모음
  • 자바 어플리케이션에서 RDB(Relational DB; 관계형 데이터베이스)를 사용하는 방식을 정의한 인터페이스. 라이브러리가 아니다.
  • 인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함

JPA를 왜 사용하는 가?

  1. SQL문이 아닌 메소드를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을 이용하여 비즈니스 로직을 구성하는데만 집중할 수 있음.
  • 코드가 줄어들어, 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높임
  • 객체지향적인 코드 작성이 가능함. 오직 객체지향적 접근만 고려하면 되기때문에 생산성 증가.

RequestParam & Pathvariable

Controller에서 parameter(인수)값을 전달할 때 사용되는 방법

@Requestparam

http://localhost:8000/board?page=1&listSize=10

@Pathvariable
http://localhost:8000/board/1


RequestParam

public String view(
@RequestParam("id") int id, 
@RequestParam("name") String name, 
@ReqpestParam("file") MultipartFile file
) 
{ ... }
  • 가져올 요청 파라미터의 이름을 @RequestParam 애노테이션의 기본 값으로 지정해주면 된다. 요청 파라미터의 값은 메소드 파라미터의 타입에 따라 적절하게 변환된다.
public String add(@RequestParam Map<String, String> params) 
{ ... }
  • @RequestParam에 파라미터 이름을 지정하지 않고 Map<String, String> 타입으로 선언하면 모든 요청 파라미터를 담은 맵으로 받을 수 있다. 파라미터 이름은 맵의 키에, 파라미터 값은 맵의 값에 담겨 전달된다.
public void view(@RequestParam(value="id", required=false, defaultValue="-1")
int id) {..}

@RequestParam을 사용했다면 해당 파라미 터가 반드시 있어야만 한다. 없다면 HTTP 400 - Bad Request를 받게 될 것이다. 파라미터를 필수가 아니라 선택적으로 제공하게 하려면 required 엘리먼트를 false로 설정해주면 된다. 요청 파라미터가 존재하지 않을 때 사용할 디폴트 값도 지정할 수 있다.


PathVariable

@RequestMapping("/member/{membercode}/order/{orderid}") 
public String lookup(@PathVariable("membercode") String code, 
@PathVariable("orderid" ) int orderid) {
	...
}

@RequestMapping의 URL에 {}로 들어가는 패스 변수(path variable)를 받는다. 요청 파라미터를 URL의 쿼리 스트링으로 보내는 대신 URL 패스로 풀어서 쓰는 방식을 쓰는 경우 매우 유용하다.

/user/view?id=10

예를 들어 id가 10인 사용자를 조회하는 페이지의 URL을 쿼리 스트링으로 파라미터를 전달하면 보통 다음과 같이 작성하게 된다.

/user/view/10

파라미터를 URL 경로에 포함시키는 방식으로 하면 다음과 같은 URL을 사용할 수 있다. URL의 특정 위치에 파라미터 값을 넣게 하면,이해하기 쉽고 보기 좋은 URL을 만들 수 있다.

심미적으로 깔끔하지만,타입이 일치하지 않는 값이 들어오면 예외가 발생해 400 - Bad Request 응답 코드가 전달된다.

profile
쾌락코딩

0개의 댓글