목차
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사용
@Columnname, 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를 사용