| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- RunWith
- restTemplate
- Not Acceptable
- testresttemplate
- 랜덤 포트
- 컴포넌트 스캔
- 의존관계 자동 주입
- entity
- 의존성 주입
- 좋은 객체지향 설계 원칙
- Java Reflection API
- jdbc
- 스프링 IoC 컨테이너
- 스프링 컨테이너
- 기본 생성자
- JPA
- 통합 테스트
- 테스트 코드
- 스프링 데이터 JPA
- 405 METHOD_NOT_ALLOWED
- ResponseEntity
- 스프링
- 가을야구
- jdbc template
- 406 NOT_ACCEPTABLE
- 정적 컨텐츠
- SpringBootTest
- Controller
- 키움
- 빈 스코프
- Today
- Total
코드네임 JY
[스프링 JPA] 엔티티 매핑 본문

🍳 객체와 테이블 매핑
@Entity 어노테이션
✅ 객체를 테이블에 매핑할 수 있게 해주고, 이제부터 JPA가 관리해준다!
✅ 기본 생성자 반드시 필요하다! (한 달 전에 엔티티 공부할 때 고생했던 기억! 링크 🖇️)
@Table 어노테이션
✅ 간단하게 사용할거면 테이블 이름 정도 바꾸는 용도로 사용!
데이터베이스 스키마 자동 생성
스프링에서 DB를 사용하다보면, properties 파일이나 yml 파일에서 spring.jpa.hibernate.ddl-auto 옵션을 볼 수 있다.
로컬에서 혼자 개발하는거면 큰 상관이 없을텐데.. 사람들이랑 팀 프로젝트를 한다면 이런 설정 하나 잘못했다가는 큰일이 난다..
✅ create : IF 기존 테이블 있으면 DROP 진행하고 CREATE
→ 잘못 사용하면 큰일난다 😱😱 요즘 개발바닥 유튜브를 자주 보는데 create 관련 실제 겪으신 엄청난 문제가.. (링크 🖇️)
✅ create-drop : create 옵션과 같으나 어플리케이션 종료시점에 테이블 DROP
→ 테스트 케이스에서 다 수행하고 마지막에 깔끔히 삭제하고 싶을 때 사용한다!
✅ update : ALTER 사용해서 변경한 내용만 반영
→ 실제 서비스 배포 시에는 create, create-drop, update 사용하면 안 된다!!
✅ validate : 객체 구성(엔티티)과 스키마(테이블)가 다른지 확인
✅ none : 옵션 사용하지 않음
🥓 필드와 컬럼 매핑
@Column 어노테이션
✅ 컬럼(행)의 특성을 지정
✅ (MySQL 기준으로 쓰면) NOT NULL, UNIQUE, DEFAULT 등의 옵션 지정할 수 있음!
✅ length도 자주 사용한다! (기본 값 : 255)
@Enumerated 어노테이션
✅ 자바의 enum 타입을 매핑할 때 사용
✅ STRING, ORDINAL(비추) 옵션이 있음!
→ ORDINAL은 INTEGER 형태로 값을 저장하기 때문에, enum 구성을 수정할 경우 데이터의 의미가 망가질 수 있음 주의!!
@Temporal 어노테이션
✅ 날짜 타입을 매핑할 때 사용
✅ 최신 하이버네이트에서는 LocalDate, LocalDateTime 자료형 객체를 사용하기 때문에 굳이 사용할 필요 없음!
@Lob 어노테이션
✅ 오라클 DB에서 대형 데이터를 저장할 때 사용
✅ 문자면 CLOB, 그 외에는 BLOB으로 사용 (그냥 참고)
@Transient 어노테이션
✅ 메모리 상에서 임시로 데이터를 저장하고 싶을 때 사용
✅ 그 말인 즉슨, 실제 DB에는 이 옵션이 붙는다면 해당 필드가 반영되지 않음
🥪 기본 키 매핑
기본 키는 매우 중요하다! 컬럼을 식별할 수 있는 존재이기 때문이다!
의미는 알고 있었지만, 그동안 무의식적으로 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) 로 자주 썼었다.
이는 '자동 생성 + MySQL 데이터베이스에 기본 키 생성을 위임한다' 는 뜻이었는데 다른 방식들도 존재한다!
@Id 어노테이션
✅ 그냥 @Id 어노테이션만 쓰고 Setter 방식으로 ID 값을 넣어줄 수도 있다!
✅ 하지만 기본 키는 엄청 중요한 개념이란걸 알고 있지 않나! 사용자가 직접 생성하도록 하는 것은 좋지 않다!
@GeneratedValue 어노테이션
✅ IDENTITY : 기본 키 생성을 데이터베이스에 위임 (대표적으로 MySQL에서 사용)
→ MySQL 방식이라면, 이는 AUTO_INCREMENT와 같은 의미이다!
✅ SEQUENCE : 데이터베이스 오브젝트를 통해 유일한 값을 순서대로 생성 (Oracle에서 사용)
✅ TABLE : 키를 생성하는 전용 테이블을 따로 만들어서 SEQUENCE 방식으로 동작
✅ AUTO : 아무것도 쓰지 않고 생략하면 AUTO! DB Dialect에 따라서 타입이 위의 3개 중에서 자동 지정
'백엔드 공부' 카테고리의 다른 글
| [스프링 JPA] 연관관계 매핑 (2) (0) | 2023.02.13 |
|---|---|
| [스프링 JPA] 연관관계 매핑 (1) (0) | 2023.02.10 |
| [스프링 JPA] 영속성 컨텍스트 (0) | 2023.02.08 |
| [오브젝트] 객체지향 설계 (0) | 2023.02.05 |
| [DevOps] Github Actions CI/CD (0) | 2023.01.27 |