이펍 세미나(1)
Node.js 랑 생각보다 Spring이랑 부분부분 다른 점이 많아서 헷갈리지 않도록 신경써야 할 것 같다.
+) Spring Boot에서는 객체를 반환하면 자동으로 JSON 변환됨.
Enum
Spring Boot에서 JPA를 사용할 때 Enum을 어떻게 저장할지 결정해야한다.
Node.js에서는 그냥 enum을 객체처럼 만들어서 쓰면 되지만, JPA에서는 Enum을 직접 저장하는 방식이 두 가지가 있기 때문에 이를 명확히 지정해야한다.
//example
@Enumerated(EnumType.STRING)
private AccountStatus status = AccountStatus.ACTIVE;
Enum Type에는 ORDINAL 과 STRING 타입이 있는데, STRING 타입이 이름을 지정해서 저장하는 node.js와 비슷한 방식이다. ORDINAL 방식은 순서대로 0, 1... 이런식으로 숫자를 부여해주는데 순서가 바뀌면 데이터 불일치 문제가 발생하므로 보통 STRING 방식을 권장한다고 한다.
Response Body (응답)
Spring Boot에서 ResponseEntity는 HTTP 응답을 커스터마이징할 수 있는 객체야.
✔ HTTP 상태 코드 ✔ 응답 본문 (Body) ✔ 응답 헤더 (Headers) 설정 가능!
실제 사용
// 상태 코드 지정
@GetMapping("/custom-status")
public ResponseEntity<String> customStatus() {
return ResponseEntity.status(HttpStatus.CREATED).body("User created!");
}
// 커스텀 헤더, 바디
@GetMapping("/custom-header")
public ResponseEntity<String> customHeader() {
return ResponseEntity.ok()
.header("Custom-Header", "MyValue")
.body("Check the headers!");
}
DAO vs Repository
DAO
- 직접 SQL 쿼리를 작성해야 함. 전통적인 방식.
- JdbcTemplate을 이용해서 데이터베이스와 상호작용
Repository
- JpaRepository를 상속받으면 기본적인 CRUD 기능이 자동으로 구현됨. Spring Data JPA에서 제공하는 기능 사용
- @Query를 사용해 커스텀 쿼리도 작성 가능
→ Spring Boot에서는 보통 Repository 방식을 사용해서 JPA와 함께 개발, 특별한 경우(복잡한 쿼리 최적화, 네이티브 SQL이 필요한 경우 등)에만 DAO를 추가하는 것이 일반적
입력값 검증