[내일배움캠프 사전캠프] 1일 차 TIL 상품-주문 미니프로젝트

2026. 2. 4. 18:06·내배캠

상품과 주문 도메인으로 구성된 주문관리 서비스 구현

먼저 내가 생각한 도메인 구조는 다음과 같다. ( 진행하면서 수정하기로 결정 )
도메인 구조)
- 상품 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
'내배캠' 카테고리의 다른 글
  • [내일배움캠프 본캠프] 2일 차 TIL - SQL, JdbcTemplate, IoC, DI, Bean
  • [내일배움캠프 본캠프] 1일 차 TIL 상품-주문 미니프로젝트 피드백
  • [내일배움캠프 사전캠프] 3일 차 TIL Jackson
  • [내일배움캠프 사전캠프] 2일 차 TIL 상품-주문 미니프로젝트
MvA
MvA
백엔드 개발자 김재현입니다. 주로 공부하면서 느낀점을 기록합니다.
  • MvA
    Man vs Ai
    MvA
  • 전체
    오늘
    어제
    • 분류 전체보기 (94)
      • Java (6)
      • Python (8)
        • 딥러닝 (1)
        • 머신러닝 (7)
      • JavaScript (2)
      • 내배캠 (60)
      • 개인 프로젝트 (11)
      • 책 후기 (5)
      • 기타 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    TiL
    아키텍처
    배포
    내일배움캠프
    딥러닝
    Riot API
    머신러닝
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
MvA
[내일배움캠프 사전캠프] 1일 차 TIL 상품-주문 미니프로젝트
상단으로

티스토리툴바