상품과 주문 도메인으로 구성된 주문관리 서비스 구현
먼저 내가 생각한 도메인 구조는 다음과 같다. ( 진행하면서 수정하기로 결정 )
도메인 구조)
- 상품 1개의 정보를 저장하는 Product 엔티티
- 주문 1개의 정보를 저장하는 Order 엔티티
오늘은 상품의 기본 CRUD만 구현했다. ( Product 파트 )
신경쓰며 구현한 부분
1. dto 구조
- product의 dto를 요청dto와 응답dto 2개로 나눴다.
product의 기본키는 시퀀스를 사용해 자동으로 1씩 증가하게 했기때문에
요청dto에는 id필드를 제외하고
응답dto에는 id필드를 포함했다.
2. 도메인의 의미를 고려해 파라미터 생성자와 update 메서드로 객체의 생성/수정을 관리했다.
@Entity
@Getter
@NoArgsConstructor
@SequenceGenerator(
name="product_seq_gen",
sequenceName = "PRODUCT_SEQ",
allocationSize = 1
)
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "product_seq_gen")
private Long id; // 상품번호
private String name; // 상품명
private Integer price; // 가격
public Product(String name, Integer price) {
this.name = name;
this.price = price;
}
public void update(String name, Integer price) {
this.name = name;
this.price = price;
}
}
3. 수정시 객체를 새로 생성하지 않는다.
- 서비스 레이어에서 생성메서드는 new 키워드로 객체를 생성하고
수정메서드는 findById() 로 이미 있는 값을 수정하는 로직을 사용했다.
4. 컨트롤러에서 RESTFul을 고려해 매핑경로를 선택했다.
@RestController
@RequestMapping("/products")
@RequiredArgsConstructor
public class ProductController {
private final ProductService productService;
@PostMapping
public Long insert(@RequestBody ProductRequest productRequest){
return productService.save(productRequest);
}
@GetMapping("/{id}")
public ProductResponse findById(@PathVariable Long id){
return productService.findOne(id);
}
@PutMapping("/{id}")
public Long update(@PathVariable Long id, @RequestBody ProductRequest productRequest){
return productService.update(id,productRequest);
}
@DeleteMapping("/{id}")
public Long delete(@PathVariable Long id){
productService.delete(id);
return id;
}
}
새로 배운부분
처음으로 swagger API를 사용해서 백엔드로직을 테스트해봤다.

컨트롤러를 바탕으로 UI를 생성해주는 듯 하다.
그동안은 프론트도 직접 만들어서 테스트해봐야해서 오래걸렸는데
빠른 개발이 가능할 것 같다.
gradle)
// Source: https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui
// swagger UI, api 즉석 테스트 UI 생성 http://localhost:8080/swagger-ui.html 으로 접속해서 사용
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.5.0")\
// swagger 라이브러리 문제 해결용
implementation("org.apache.commons:commons-lang3:3.18.0")
진행한 프로젝트 코드 ( Github url ) - https://github.com/RunSBS/sparta-mini1
'내배캠' 카테고리의 다른 글
| [내일배움캠프 본캠프] 3일 차 TIL 영속성 컨텍스트 (0) | 2026.02.12 |
|---|---|
| [내일배움캠프 본캠프] 2일 차 TIL - SQL, JdbcTemplate, IoC, DI, Bean (0) | 2026.02.11 |
| [내일배움캠프 본캠프] 1일 차 TIL 상품-주문 미니프로젝트 피드백 (0) | 2026.02.10 |
| [내일배움캠프 사전캠프] 3일 차 TIL Jackson (0) | 2026.02.06 |
| [내일배움캠프 사전캠프] 2일 차 TIL 상품-주문 미니프로젝트 (0) | 2026.02.05 |
