목차
1. API와 Endpoint
2. Lombok Library
3. JPA
1) API는 서버와 데이터베이스에 대한 출입구 역할을 한다.
2) API는 애플리케이션과 기기가 원활하게 통신할 수 있도록 한다.
3) API는 모든 접속을 표준화한다.
1) 웹 API는 웹 애플리케이션 개발에서 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세를 일컫는다.
2) 말하자면 서비스 간의 요청과 응답을 위한 명세이다.
1) 서비스를 사용가능하도록 하는 서비스에서 제공하는 커뮤니케이션 채널의 한 쪽 끝.
2) 즉, 요청을 받아 응답을 제공하는 서비스를 사용할 수 있는 지점을 의미한다.
1) API: 두 시스템이 상호작용할 수 있게 하는 프로토콜의 총집합.
2) Endpoint: API가 서버에서 리소스에 접근할 수 있도록 가능하게 하는 URL
@Data
Annotation은 @Getter
@Setter
@ToString
@EqualsAndHashCode
@RequiredArgsConstructor
를 모두 합쳐놓은 어노테이션이다.1) @ToString
exclude
속성 :@ToString
결과에서 제외시킬 수 있다.2) @EqualsAndHashCode
callSuper
속성 :equals
와hashCode
메서드 자동 생성 시 부모 클래스의 필드까지 감안할지 설정할 수 있다.
callSuper = true
이면 부모 클래스 필드 값들도 동일한지 체크callSuper = false
이면(기본값) 자신 클래스의 필드 값들만 고려한다.
@Data
는 callSuper
, includeFieldName
, exclude
와 같은 파라미터와 같이 사용될 수 없으므로 해당 파라미터를 사용할 때는 개별 Annotation을 모두 명시해 주면 된다.@NoArgsConstructor
파라미터가 없는 기본 생성자를 만들어 준다.
@AllArgsConstructor
모든 필드값을 파라미터로 받는 생성자를 만들어 준다.
@RequiredArgsConstructor
final
이나@NonNull
인 필드값만 파라미터로 받는 생성자를 만들어 준다.
@Entity
, @Table
: 객체와 테이블을 매핑@Id
: 기본 키 매핑@Column
: 필드와 컬럼 매핑@ManyToOne
, @JoinColumn
: 연관관계 매핑@Entity
테이블과의 매핑
@Entity
가 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라고 불린다.
속성
Name
: JPA에서 사용할 엔티티 이름을 지정한다.
보통 기본값인 클래스 이름을 사용한다.
주의사항
기본생성자가 필수이다.(JPA가 엔티티 객체 생성 시 기본 생성자를 사용)
final
클래스,enum
,interface
,inner class
에는 사용할 수 없다.
저장할 필드에 final 사용 불가
@Table
엔티티와 매핑할 테이블을 지정
생략 시 매핑한 엔티티 이름을 테이블 이름으로 사용
속성
Name
: 매핑할 테이블 이름(기본값: 엔티티 이름 사용)
CataLog
: catalog 기능이 있는 DB에서 catalog를 매핑(기본값: DB명)
Schema
: schema 기능이 있는 DB에서 schema를 매핑
uniqueConstraints
: DDL 생성 시 유니크 제약조건을 만듦.
스키마 자동 생성 기능을 사용해서 DDL을 만들 때만 사용
<property name="hibernate.hbm2ddl.auto" value="create" />
hibernate.hbm2ddl.auto
속성
create
: 기존 테이블을 삭제하고 새로 생성(DROP+CREATE)create-drop
:create
속성에 추가로 애플리케이션을 종료할 때 생성한 DDL을 제거 (DROP+CREATE+DROP)update
: DB 테이블과 엔티티 매핑 정보를 비교해서 변경 사항만 수정validate
: DB 테이블과 엔티티 매핑정보를 비교해서 차이가 있으면 경고를 남기고 애플리케이션을 실행하지 않음. DDL을 수행하지 않음.none
: 자동 생성 기능을 사용하지 않음
개발 초기 단계는
create
또는update
초기화 상태로 자동화된 테스트를 진행하는 개발자 환경과 CI서버는create
또는create-drop
테스트 서버는update
또는validate
스테이징과 운영 서버는validate
또는none
영속성 컨텍스트는 엔티티를 식별자 값으로 구분하므로 엔티티를 영속 상태로 만들기 위해 식별자 값이 반드시 필요하다.
@GeneratedValue
em.persist()를 호출하기 전 애플리케이션에서 직접 식별자 값을 할당해야 함.
식별자 값이 없을 경우 에러 발생
IDENTITY
: 기본 키 생성을 데이터베이스에 위임 (=AUTO_INCREMENT)
SEQUENCE
: 데이터베이스 시퀀스를 사용해서 기본 키를 할당
데이터베이스 시퀀스에서 식별자 값을 획득한 후 영속성 컨텍스트에 저장
유일한 값을 순서대로 생성(오라클, PostgreSQL, DB2, H2)
TABLE
: 키 생성 테이블을 사용
키 생성 전용 테이블 하나를 만들고 여기에 이름과 값으로 사용할 컬럼을 만들어 데이터베이스 시퀀스를 흉내내는 전략.
테이블을 사용하므로 모든 데이터베이스에 적용 가능
AUTO
: 선택한 데이터베이스 방언에 따라 방식을 자동으로 선택(기본값)
ex) 오라클 DB 선택 시SEQUENCE
, MySQL DB 선택 시IDENTITY
사용
@Column
name
, nullable
이 주로 사용되고 나머지는 잘 사용되지 않음
name
: 필드와 매핑할 테이블 컬럼 이름 (기본값: 객체의 필드 이름)
nullable
(DDL): null 값의 허용 여부 설정, false 설정 시 not null (기본값: true)
@Column
사용 시nullable = false
로 설정하는 것이 안전
unique
(DDL):@Table
의uniqueConstraints
와 같지만 한 컬럼에 간단히 유니크 제약조건을 적용
columnDefinition
(DDL): 데이터베이스 컬럼 정보를 직접 줄 수 있음, default 값 설정
(기본값: 필드의 자바 타입과 방언 정보를 사용해 적절한 컬럼 타입을 생성)
Length
(DDL): 문자 길이 제약조건, String 타입에만 사용 (기본값: 255)
percision
,scale
(DDL):BigDecimal
,BigInteger
타입에서 사용.
아주 큰 숫자나 정밀한 소수를 다룰 때만 사용
(기본값: precision = 19, scale = 2)
@Enumerated
value
:
EnumType.ORDINAL
: enum 순서를 데이터베이스에 저장
EnumType.STRING
: enum 이름을 데이터베이스에 저장
(기본값: EnumType.ORDINAL)
@Temporal
value
:
TemporalType.DATE
: 날짜, 데이터베이스date
타입과 매핑
TemporalType.TIME
: 시간, 데이터베이스time
타입과 매핑
TemporalType.TIMESTAMP
: 날짜와 시간, 데이터베이스 timestamp 타입과 매핑
(기본값: TemporalType은 필수로 지정)
@Temporal
을 생략하면 자바의Date
와 가장 유사한 timestamp로 정의
@Lob
지정 속성이 없음
대신 매핑하는 필드 타입이 문자면 CLOB로, 나머지는 BLOB로 매핑
@Transient
@Access
필드 접근:
AccessType.FIELD
로 지정
필드에 직접 접근 (private도 접근 가능)프로퍼티 접근:
AccessType.PROPERTY
로 지정
접근자Getter
를 사용