-
3. Spring Boot : ORM과 JPA개발/Spring Boot 2024. 7. 29. 17:23
* 본 글은 벡엔드 부트캠프를 진행하며 쓴 글입니다.
예전에 진행했던 프로젝트에서는 항상 DB를 사용했었다. 주로 Maria DB를 활용해 서비스를 제작했었는데, 이번 시간에 사용했던 JPA는 기존의 DB보다 사용하기에 편했다. 서비스를 제작하고 테스트할 때 무슨 이유에서인지는 모르겠지만 비교적 빈번하게 DB가 터져 테스트를 진행하기에 어려움이 있었다. JPA도 좀 더 사용해 보아야겠지만, 체감상 조금 더 안전한 느낌이다.
# ORM이란?
ORM(Object-Relational Mapping)은 자바로 SQL을 사용하지 않고 데이터베이스를 관리할 수 있는 도구이다.
Java
Question q1 = new Question(); q1.setSubject("sbb가 무엇인가요?"); q1.setContent("sbb에 대해 알고 싶어요."); q1.setCreateDate(LocalDateTime.now()); this.questionRepository.save(q1); Question q2 = new Question(); q2.setSubject("스프링부트 모델 질문입니다."); q2.setContent("id는 자동으로 생성되나요?"); q2.setCreateDate(LocalDateTime.now()); this.questionRepository.save(q2);
사용법은 객체를 생성하고, 객체의 컬럼에다 값을 집어넣는다. ORM은 CRUD API를 지원한다.
@Column(nullable = true) private String description;
null 값을 원한다면 이런 어노테이션을 추가하면 된다.
# JPA란?
JPA(Java Persistence API)는 이런 ORM을 구현하기 위한 표준 API이다.
예제를 보자.
@Getter @Setter @Entity public class Question { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(length = 200) private String subject; @Column(columnDefinition = "Text") private String content; private LocalDateTime createDate; @OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE) private List<Answer> answerList; }
기존의 db 테이블에서 pk와 여러 필드를 선언할 수 있다. 특히 다른 테이블과의 관계를 생성할 수 있다. 이 코드에서는 OneToMany를 사용했지만 OneToOne, ManyToMany 등 다양한 관계 유형이 존재한다.
# 왜 ORM을 사용하는가?
자바 내부에서 sql을 작성하는 것은 생각보다 큰 장점이 있다. 코드 내부에서 sql 쿼리를 생성하므로 언어와 사람에 관계없이 안정적으로 통일된 코드를 작성할 수 있다.
# JPA 테이블 시각화?
JPA에서 테이블을 정의하는 단계에서 느꼈는데, 복잡한 형태의 데이터스키마를 정의할 때 상당히 곤란할 것 같다. 예를 들어서 MySQL 워크벤치에서는 gui를 사용해서 한눈에 보기 쉽게 사용했었기 때문이다.
- JPA Buddy: IntelliJ IDEA의 플러그인인데, 엔티티 관계를 시각적으로 표현할 수 있다.
참고 :
https://github.com/seyoung4503/Backend-Bootcamp
GitHub - seyoung4503/Backend-Bootcamp
Contribute to seyoung4503/Backend-Bootcamp development by creating an account on GitHub.
github.com
'개발 > Spring Boot' 카테고리의 다른 글
6. Spring Boot : 의존성 주입 (0) 2024.07.30 5. Spring Boot : Service란 (0) 2024.07.30 4. Spring Boot : H2 데이터베이스 (0) 2024.07.29 2. Spring Boot Controller (0) 2024.07.29 1. Spring Boot란 (0) 2024.07.29