[인프런] REST API 개발

최대 1 분 소요

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;
}