[스프링 부트 어드민 페이지] 2. JPA Repository

2021. 5. 12. 23:26개발공부/[패스트캠퍼스] 스프링 부트 어드민 페이지 만들기


Github 코드

 

JPA

JPA는 Java Persistence API로 RDB 데이터베이스 정보를 Java ORM(Object Relational Mapping)으로 활용할 수 있도록 도와주는 라이브러리 입니다. 객체를 매핑시키는 Hibernate도 JPA를 상속한 프레임 워크입니다. 

JPA의 장점은 Java 객체를 DB와 호환할 수 있다는 점이 두드러지게 나타납니다. 쿼리보다 객체 지향코드에 집중할 수 있게 말이죠.

들어가기에 앞서 Spring Web MVC 패턴 구조를 간략한 도식화로 보겠습니다. 

 

(출처 :  https://docs.spring.io/spring-framework/docs/3.0.0.RC3/spring-framework-reference/html/ch15s02.html)

 

DispatcherServlet은 Servlet(웹 서버의 요청-응답 처리방식이 가능하도록 확장해주는 Java 클래스)이 HTTP 요청을 Dispatch(분담시키다) 하는 Web MVC 모델의 Request 처리 첫 단계입니다.

WebApplicationContext는 Spring Application의 설정값이나 정보들을 저장하고 관리하는 루트입니다. 주로 Application에 사용되는 객체, 클래스들의 <Bean> 관계가 정의되어 있으며 파일은 XML 형식을 사용합니다.


 

Entity 생성과 Repository

Naming Convention

- Camel Case : 단어를 표기할 때 첫 문자는 소문자로 시작하며 띄어쓰기 대신 대문자로 단어를 구분합니다. (Java)

- Snake Case : 단어를 표기할 때 모두 소문자로 표기하며, 띄어쓰기 대신 _ 언더바로 표기합니다. (DB, Python)

Java와 DB의 컨벤션이 다르기 때문에 JPA는 Entity 및 DB Column을 자동 매칭시켜 주는 기능까지 해줍니다. (createdAt <-> create_at) Entity는 JPA에서 DB의 테이블과 유사한 개념이며 테이블을 자동으로 생성해주는 기능도 있습니다. 

Annotation 용도
@Entity 해당 Class가 Entity임을 명시
@Table 실제 DB테이블의 이름을 명시
@Id Primary key(식별키)를 명시
@Column 실제 DB Column의 이름을 명시
@GeneratedValue PK(식별키)의 전략 설정

(JPA 관련 어노테이션 정리)

 - @Table, @Column은 변수명과 DB와 같다면 생략 가능합니다. 

 - MySql의 autoincrement PK를 사용한다면 @GeneratedValue strategy는 IDENTITY 입니다. 

Repository

 - 따로 쿼리문을 작성하지 않아도 JPA/CRUDRepository 인터페이스를 상속해 기본적인 CRUD 처리가 가능한 라이브러리 입니다. 

 - 간단한 예시 : @Repository interface A extends JpaRepository<ClassName, IDType>


JPA를 통한 CRUD 배우기

 - 의존성 주입 : 객체를 직접 관리하지 않고 spring이 관리해주는 기능 (싱글톤 패턴 기반; 객체는 하나만 생성할 수 있고 소멸하기 전까지 사용됨)

 - spring.jpa.show-sql=true 어러JPA에서 실행한 쿼리문을 출력할 수 있는 프로퍼티 설정값 입니다.


출처 : 패스트캠퍼스 Java 웹 개발 마스터 올인원 패키지