스프링 부트와 AWS로 혼자 구현하는 웹 서비스 책을 보며 학습, 사용했던 어노테이션들을 숙지하고, 각 어노테이션을 시기적절하게 사용하기 위해 정리해둔다.
Test, JUnit
@RunWith(SpringRunner.class)
테스트를 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킵니다.
위는 SpringRunner라는 스프링 실행자를 사용합니다.
스프링 부트테스트와 JUnit 사이에 연결자 역할을 합니다.
@WebMvcTest
여러 스프링 테스트 어노테이션 중, Web(Spring MVC)에 집중할 수 있는 어노테이션 입니다.
선언할 경우 @Controller, @ControllerAdvice등을 사용할 수 있습니다.
@Service, @Compoment, @Repository등은 사용할 수 없습니다.
@After
JUnit에서 단위 테스트가 끝날 때마다 수행되는 메소드를 지정
보통 배포 전 전체 테스트를 수행할 때 테스트간 데이터 침범을 막기 위해 사용합니다.
여러 테스트가 동시에 수행되면 테스트용 데이터 데이터베이스인 H2에 데이터가 그대로 남아 있어 다음 테스트 실행 시 테스트가 실패할 수 있습니다.
@SpringBootTest
별다른 설정 없이 사용할 경우 H2 데이터베이스를 자동으로 실행해 줍니다.
롬북
@Getter
선언된 모든 필드의 get 메소드를 생성해 줍니다.
@RequiredArgsConstructor
선언된 모든 final 필드가 포함된 생성자를 생성해 줍니다.
final이 없는 필드는 생성자에 포함되지 않습니다.
@NoArgsConstructor
기본 생성자 자동 추가
@AllArgsConstructor
모든 필드의 기본 생성자 자동 추가
@Builder
해당 클래스의 빌더 패턴 클래스를 생성
생성자 상단에 선언 시 생성자에 포함된 필드만 빌더에 포함
-> 빌더를 사용하는 이유
빌더는 생성자와 같이 생성 시점에 값을 채워주는 역할을 합니다.
생성자는 지금 채워야 할 필드가 무엇인지 명확히 지정할 수 없습니다. 때문에 생성자 선언시 잘못 된 파라미터를 넘겨줬을 때 문제를 찾기 힘듭니다.
빌더를 사용하게 되면 어느필드에 어떤 값을 채워야할지 명확하게 인지할 수 있기 때문에 위 문제점을 해결할 수 있습니다.
@EqaulsAndHashCode(of = "id")
동등성을 비교하기 위한 Eqauls와 HashCode 메소드를 자동으로 생성해준다.
of 옵션을 사용해 어떤 필드를 비교할 것인지 설정한다.
JPA
@Entity
테이블과 링크될 클래스임을 나타냅니다.
기본값으로 클래스의 카멜케이스 이름을 언더스코어 네이밍으로 테이블 이름을 매칭합니다.
ex) SpringProject -> spring_project
@Id
해당 테이블의 PK필드를 나타냅니다.
@GeneratedValue
PK의 생성 규칙을 나타냅니다.
스프링 부트 2.0에서는 GenerationType.IDENTITY 옵션을 추가해야만 auto_increment가 됩니다.
스프링 부트 2.0과 1.5버전의 차이점 https://jojoldu.tistory.com/295
Spring Boot Data JPA 2.0 에서 id Auto_increment 문제 해결
안녕하세요? 이번 시간엔 Spring Boot JPA 2.0 에서 PK의 Auto_increment 문제를 알아보려고 합니다. 모든 코드는 Github에 있기 때문에 함께 보시면 더 이해하기 쉬우실 것 같습니다. (공부한 내용을 정리하
jojoldu.tistory.com
@Column
테이블의 칼럼을 나타내며 굳이 선언하지 않더라도 해당 클래스의 필드는 모두 칼럼이 됩니다.
사용하는 이유는, 기본값 외에 추가로 변경이 필요한 옵션이 있으면 사용합니다.
문자열의 경우 VARCHAR(255)가 기본값인데, 사이즈를 500으로 늘리고 싶거나, 타입을 TEXT로 변경하고 싶거나 등의 경우에 사용됩니다.
@MappedSuperclass
JPA Entity 클래스들이 BaseTimeEntity을 상속할 경우 필드들도 칼럼으로 인식하도록 합니다.
@EntityListeners(AuditingEntityListener.class)
BaseTimeEntity 클래스에 Auditing 기능을 포함시킵니다.
@CreatedDate
Entity가 생성되어 저장될 때 시간이 자동 저장됩니다.
@LastModifiedDate
조회한 Entity의 값을 변경할 때 시간이 자동 저장됩니다.
@EnableJpaAuditing
JPA Auditing 어노테이션들을 모두 활성화할 수 있도록 해줍니다.
Application 클래스에 사용
공통
@RequestParam
외부에서 API로 넘긴 파라미터를 가져오는 어노테이션입니다.
@RequsetParam("name") => String name에 저장됩니다.
@Transactional
선언적 트랜잭션을 사용할 수 있게 해줍니다.
사용시 트랜잭션 기능이 적용된 프록시 객체를 생성합니다.
이 프록시 객체는 @Transactional이 포함된 메소드가 호출 될 경우, PlatformTransactionManager를 사용하여 트랜잭션을 시작하고, 정상 여부에 따라 Commit 또는 Rollback 한다.
출처: https://goddaehee.tistory.com/167 [갓대희의 작은공간]
[Spring] Transactional 정리 및 예제
[Spring] @Transactional 정리 및 예제 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 스프링 어노테이션 @Transactional ] 입니다. : ) 들어가기 앞서...... SI를 할때, 현재 어느 쇼핑몰 운영을 맡으며 개..
goddaehee.tistory.com
@Autowired
스프링이 관리하는 빈(Bean)을 주입 받습니다.
@RestController
컨트롤러를 JSON을 반환하는 컨트롤러로 만들어 줍니다.
이 어노테이션을 사용하면 @ResponseBody를 각 메소드마다 선언해줄 필요 없습니다.
참고 서적 : 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
스프링 부트와 AWS로 혼자 구현하는 웹 서비스
가장 빠르고 쉽게 웹 서비스의 모든 과정을 경험한다. 경험이 실력이 되는 순간!이 책은 제목 그대로 스프링 부트와 AWS로 웹 서비스를 구현한다. JPA와 JUnit 테스트, 그레이들, 머스테치, 스프링
www.yes24.com