Backend

Swagger를 이용한 API 문서화
❓Swagger란? Swagger는 Open API를 명세하기 위한 Open Api Specification(OAS) 프레임워크이다. API들이 가진 스펙을 명세하고, 관리하여 문서화 해주는 기능을 가지고 있다. Swagger를 이용해 다른 개발팀과 협업, 프로젝트의 유지보수 , 백엔드 API 명세서를 작성해 보다 편리하게 관리하는 것이 가능하다. ⚙️ Spring Boot Swagger 설정 Spring Boot 프로젝트에 의존성 추가를 한다. implementation 'io.springfox:springfox-swagger2:2.9.2' #Swagger 애노테이션 사용가능 implementation 'io.springfox:springfox-swagger-ui:2.9.2' #Swagger UI 사용..

단방향, 양방향 매핑
엔티티들은 다른 엔티티들과 연관관계를 맺고 조회한다. 테이블에서는 외래 키를 사용하여 서로의 테이블을 조회하는 것이 가능하고, 객체는 다른 객체와의 참조를 통해 조회하는 것이 가능하다. 객체의 경우 서로 다른 객체 중 참조가 있는 객체 쪽에서만 조회가 가능하다. 방향 : 단방향과 양방향 매핑이 있으며, 서로 다른 두 개의 엔티티 중 한 개의 엔티티 쪽에서만 참조하는 경우를 단방향, 모두 서로의 객체를 참조하는 경우를 양방향 관계라고 한다. 테이블의 경우 외래키를 이용해 서로의 테이블 데이터를 조회할 수 있기 때문에 사실상 양방향 관계라고 볼 수 있다. 다중성 : 테이블의 관계와 동일하다. 1:N , N:1, 1:1, N:M 관계를 의미한다. 연관관계의 주인(owner) : 객체를 양방향 관계로 맺어 서로..

기본키 매핑, @Id, @GeneratedValue
필드를 테이블의 컬럼과 매핑하는 애노테이션도 있지만 해당 필드를 기본키로 매핑하는 애노테이션은 @Id, @GeneratedValue이다. @Id 애노테이션은 기본키를 직접 만들어서 지정해주는 경우에 사용한다. 하지만, MySQL의 Auto Increment나 Oracle의 Sequence 같이 기본키 값을 자동으로 생성되도록 하기 위해서는 @Id 뿐만 아니라 @GeneratedValue를 함께 지정해줘야한다. @GeneratedValue @GeneratedValue는 JPA가 테이블의 기본키 값을 자동으로 생성해주는 애노테이션이다. DB에 따라 자동으로 생성해주는 방식이 다른 것과 유사하게 자동생성 전략을 지정해주어야한다. public enum GenerationType { TABLE, // 키 생성용 ..
필드와 컬럼 매핑, @Column
엔티티 클래스 내 필드는 테이블의 컬럼과 매핑된다 . 컬럼과 필드를 상세하게 매핑하도록 도와주는 애노테이션들을 정리해보자. @Column 말 그대로 필드와 컬럼을 매핑해주는 속성을 가진 애노테이션이다. // @Column public @interface Column { String name() default ""; // 필드와 매핑될 실제 DB 테이블 컬럼 이름 boolean unique() default false; // 한 개의 컬럼에 유니크 제약조건을 거는 속성이다. @Column의 unique 프로퍼티는 랜덤 값으로 제약조건 이름을 갖기 때문에 @Table 애노테이션의 uniqueConstraint 프로퍼티를 일반적으로 사용한다. boolean nullable() default true; // n..

객체와 테이블 매핑, @Entity, @Table
@Entity JPA는 객체와 실제 DB 테이블 매핑을 @Entity 애노테이션을 이용해 매핑한다. @Entity 애노테이션은 JPA가 관리하는 엔티티이며 테이블과 매핑된다. @Entity가 붙은 엔티티 클래스는 public, protected 접근 제어자가 붙은 기본 생성자가 필수로 필요하다. public class Member { public Member() {...} protected Member() {...} } 또한, final 클래스, interface, enum, inner 클래스에는 사용이 불가능하며, DB와 매핑되는 컬럼들은 final 키워드를 사용하면 안된다. @Entity 아래의 경우 붙일 수 없음 1. public final class Member {...} 2. public int..