Spring 공부를 하다보면 @ 골뱅이라 불리는 Annotation을 심심치 않게, 아니 자주 볼 수 있습니다. 성격상 이것에 대해 대충 넘긴다면 개발에 활용할 수 없을 것 같다는 생각이 들었고, 예제 코드를 작성해서 작성의도, 작성의미 등을 하나 하나 자세히 뜯어보는 포스팅을 올려보려고 합니다. 오늘 뜯어볼 코드는 @Entity, @Id, @GeneratedValue, @Column 입니다.
import javax.persistence.*;
import java.io.Serializable;
@Entity
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false, updatable = false)
private Long userId;
private String userPw;
private String nickname;
private String category;
private String region;
private String geMail;
private String userImage;
}
@Entity : @Entity 어노테이션은 엔티티 클래스임을 지정하며 테이블과 매핑된다. 라고 합니다. Spring의 JPA에서 관리할 객체를 선언하는 것입니다. @Entity 어노테이션으로 인해 따로 Create sql 명령어 없이도 테이블을 자동으로 생성해줍니다. 하지만 기존에 존재하던 테이블을 Drop(삭제)시키고 다시 Create한다는 것을 Default로 갖고있기 때문에 특정 속성을 추가해줘야 합니다. application.properties에 spring.jpa.hibernate.ddl-auto=update 여기서 spring.jpa.hibernate.ddl-auto는 프로젝트, 시작 및 종료시 DDL을 어떻게 실행시킬지에 대한 옵션입니다. 이것을 위와 같이 update로 지정하면 내부 DB 컬럼을 비교하여 바뀐 부분을 자동으로 추가해줍니다. spring.jpa.hibernate.ddl-auto의 옵션은 크게 5가지 입니다.
- none - 테이블을 자동으로 생성하지 않습니다.
- create - 테이블을 항상 다시 생성합니다.
- create-drop - 프로젝트 실행 시 테이블을 생성하고 프로젝트 종료시 테이블을 삭제합니다.
- update - 프로젝트 실행 시 @Entity 클래스와 DB내부 스키마를 비교합니다. 만약 스키마와 @Entity가 다르다면 컬럼을 추가합니다. 단 컬럼 삭제는 진행하지 않습니다.
- validate - 프로젝트 실행 시 @Entity와 DB내부 스키마를 비교해서 같으면 정상적으로 실행시키고 다르면 예외를 발생시킵니다.
@Id : 엔티티의 기본키를 할당하는 어노테이션, 기본키 자동 생성 전략을 사용하려면 @GeneratedValue 옵션을 사용하면 됩니다.
@GeneratedValue : 기본키 자동생성 전략이며, strategy 속성을 통해 원하는 키 전략을 선택하면 됩니다. 전략은 4가지가 있습니다.
- IDENTITY - 데이터베이스에 위임
- SEQUENCE - 데이터베이스 시퀀스 오브젝트 사용
- TABLE - 키 생성용 테이블 사용, 모든 DB 사용
- AUTO - 방언에 따라 자동 지정, 기본값
@Column : 어노테이션은 객체 필드와 DB 테이블 컬럼을 맵핑합니다. @Column의 속성은 다음과 같습니다.
- name : 맵핑할 테이블의 컬럼 이름을 지정합니다.
- insertable : 엔티티 저장시 선언된 필드도 같이 저장합니다.
- updateable : 엔티티 수정시 이 필드를 함께 수정합니다.
- table : 지정한 필드를 다른 테이블에 맵핑할 수 있도록 합니다.
- nullable : NULL을 허용할지, 허용하지 않을지 결정합니다.
- unique : 제약조건을 걸 때 사용합니다.
- columnDefinition : DB 컬럼 정보를 직접적으로 지정할 때 사용합니다.
- length : varchar의 길이를 조정합니다. 기본값으로 255가 입력됩니다.
- precsion, scale : BigInteger, BigDecimal 타입에서 사용합니다. 각각 소수점 포함 자리수, 소수의 자리수를 의미합니다.
'Programming > Spring' 카테고리의 다른 글
[스프링의 정석] AWS에 서버 실행하기 (0) | 2021.10.22 |
---|---|
[스프링의 정석] AWS에 서버 구축하기 (0) | 2021.10.14 |
[스프링의 정석] Mac OS 기반 스프링 개발 도구 설치 및 설정 (0) | 2021.10.13 |
[스프링의 정석] 개발 도구 소개 (0) | 2021.10.13 |
[스프링의 정석] 스프링 프레임워크 (Spring Framework) (0) | 2021.10.13 |