저는 사실 데이터베이스와 Spring을 같이 쓸때 mybatis밖에 안써봐서.... JPA? 대략 ORM기술의 인터페이스다!
라고만 알고있지 사실은 정확히 어떻게 쓰고 언제 용이한지는 전혀 모르고 있었습니다....
근데 슬슬 프로젝트 개발도 마무리가 되가고 있는 시점에서 저희 호기심이 참지 못하고, 한번 알아보고 써봤습니다 헿.
JPA (Java Presistence API)
자바 진영에서 ORM 기술 표준으로 사용되는 인터페이스 모음이라고 합니다 !
즉 인터페이스라고 하는거 보니 실제로 구현이 되있는건??? 아니죠.
구현된 클래스와 매핑을 해주기 위해서 사용되는 프레임워크라고 합니다 :)
근데 그전에 ORM기술 표준이라고 했는데, ORM이 뭔지 알아야겠죠???
ORM (Object Relational Mapping)
보통 흔히들 알고 있는 Class와 RDB(Relation DataBase)의 테이블을 연결(매핑) 한다는 뜻입니다.
어플리케이션 객체를 RDB 테이블에 자동으로 연결시켜준다고 생각하시면 될것 같습니다 !
그렇다면 이걸 왜 쓸까?......
바로 알아보죠!
장점:
- 쿼리문이 아닌 메소드를 통해 DB를 조작할 수 있습니다 ! 개발자는 객체 모델을 이용하여 비지니스 로직을 집중적으로 개발 할 수 있게 됩니다. (사실 내부적으로 쿼리문을 생성하여 DB에서 사용하는겁니다 !)
- mybatis와 같은 프레임워크를 사용했을때보다 코드량이 적어집니다. 또한 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성 역시 높아지게 되죠!
- 객체지향개념이 잘 스며든 코드가 작성이 가능합니다. 어떻게 보면 생산성이 올라간다고 볼 수 있죠?
- 매핑(연결)에 대한 정보들이 모두 클래스에 명시가 되어 있어서 ERD를 보로 왔다갔다 하는 시간이 매우 줄어듭니다! 그말은 즉슨, 의존성이 낮아지고 유지보수랑 리펙토링 관점에서 조금 더 유리해진다고 생각이 드네요!
- 만약에 중간에 데이터베이스가 부득이하게 변경이 된다면? 쿼리문을 다시 짜야죠... EX) MySql -> PosterSql 하지만 JPA를 사용하면 쿼리를 수정할 필요가 없어지죠!
단점:
- 만약에 프로젝트의 규모가 너무 크거나 복잡해진다면? 일관성이 한순간 사라질 수 도 있으며, 속도저하 문제를 일으킨다고 합니다.
- 쿼리문이 매우 복잡하고 무겁다면? 속도를 위해서 별도로 쿼리문을 작성해야 할 수 도 있습니다.
- 비싸요;
JPA (Java Presistence API)
자바에서 ORM 기술 표준을 이용하여 사용하는 인터페이스 모음입니다! 자바에서 관계형 DB를 사용하는 방식이 들어가있겠죠?
그렇다면 다시 본론으로 돌아와서 왜 쓸까요?
당연히 단순한 쿼리문 및 반복적인 쿼리문을 알아서 처리해줍니다. 너무 좋죠?...
개발자 입장에서는 그냥 어떤 SQL을 써야할까? 라는 생각만 하면 되는거죠.
그리고 제일 중요한 핵심 기능은....바로바로
SQL중심의 개발이 아닌 "객체지향개념"을 중심으로 개발할 수 있게 된다는거죠 !!!!!
객체지향개념을 알고 있으시다면 당연히 느껴지시겠지만, 생산성 및 유지보수 측면이 매우 좋죠.
만약에 아래와 같이 클래스를 저장한다고 가정하면,
jpa.persist(customer);
JPA는 아래와 같은 쿼리문으로 변환시켜 실행할겁니다.
INSERT INTO customer (id, name,.....) .....
쿼리문을 안써도 해준다니.......너무 좋은거 같아요 이거....
다음에는 좀 더 복잡한 쿼리를 어떻게 실행을 시켜주는지 알아보도록 하겠습니다 :)
'Spring & Spring Boot' 카테고리의 다른 글
[Spring] Mybatis와 JPA의 차이점 feat. ORM이란? (0) | 2023.03.12 |
---|---|
[Spring] @Autowired, @Inject, @Resource 차이점 정리 (1) | 2023.03.06 |
Spring AND Spring Boot ? (0) | 2023.01.17 |
Spring Boot And Mybatis 연동하기 feat.MySQL (0) | 2023.01.17 |
Entity On Spring feat.JPA (0) | 2023.01.17 |