[인프런] REST API 개발
Dependency 목록
- java 11
- Web
- JPA
- HATEOAS
- REST Docs
- H2
- PostgresSQL
- Lombok
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional> <!-- 다른 프로젝트가 해당 프로젝트를 참조시 의존성을 제외 시킨다 -->
</dependency>
<dependency> <!-- 테스트할때만 사용 -->
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency> <!-- // 테스트할때만 사용 -->
<dependency> <!-- 실제 운영시 사용 -->
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency> <!-- // 실제 운영시 사용 -->
Lombok
- @Builder
- @Getter
- @Setter
- @AllArgsConstructor
- @NoArgsConstructor
- @EqualsAndHashCode
// Equals, HashCode를 사용하는 객체간의 복잡한 연관관계가 있을 때 stackoverflow가 발생할 수
// 있기때문에 id의 값만으로 사용하는것이 좋다.
@EqualsAndHashCode(of ={"id", "name"})
// 빌더 패턴을 생성해준다.
@Builder
// 현재는 Spring처럼 커스텀 어노테이션을 만들 수는 없다.
Junit5
import static org.junit.jupiter.api.Assertions.*;
// ... import 생략
@ExtendWith(SpringExtension.class) // junit4의 RunWith(SpringRunner.class)의 역할
@SpringBootTest // @SpringBootApplication을 찾아서 설정된 모든 어노테이션을 등록시켜준다.
// @WebMvcTest // 웹과 관련된 bean을 만든다. jpa의 repository를 등록해주지는 않는다.
public class Test{
@Autowired
MockMvc mockMvc; // 응답 요청 테스트
@Autowired
ObjectMapper objectMapper;
@MockBean // repository Mock으로 생성
EventRepository eventrepository;
}
JPA
@Entity
public class Event{
@Id @GeneratedValue
private Integer id;
// EnumType.ORIGINAL보다는 EnumType.STRING으로 순서의 영향을 받지 않게하는것이 좋다.
@Enumerated(EnumType.STRING)
private EventStatus eventStatus;
}