[꼼꼼한 개발자] 꼼코더

39. [개발일지] - [쇼핑몰 프로젝트] - 03. 상품 도메인 개발 (1), Create 성공 (패키지 구조, JPA) 본문

개발일지/쇼핑몰 프로젝트

39. [개발일지] - [쇼핑몰 프로젝트] - 03. 상품 도메인 개발 (1), Create 성공 (패키지 구조, JPA)

꼼코더 2023. 5. 9. 10:52
반응형

📦 패키지 생성과 설정

(상품) Product 패키지를 생성 후 그 안에 필요한 패키지부터 만들어 보았다.

[controller, domain, dto, repository, service]

 

추가로 jpa, Hibernate를 사용하기 위한 설정 코드도 작성해 준다.

# Hibernate 로그 레벨 설정
logging.level.org.hibernate=info

# SQL 쿼리 보기 설정
spring.jpa.properties.hibernate.show_sql=true
# SQL 쿼리 포맷팅 설정(가독성 향상 *들여쓰기)
spring.jpa.properties.hibernate.format_sql=true
# SQL 코멘트 사용 설정 (주석)
spring.jpa.properties.hibernate.use_sql_comments=true

# Hibernate DDL 자동생성 설정
spring.jpa.hibernate.ddl-auto=create
# SQL 쿼리를 출력할지 여부 설정
spring.jpa.show-sql=true

 

이제 각 패키지 별 클래스를 만들어 보자.

 

 


🧺 상품 엔티티 생성(Base 엔티티)

엔티티에 등록, 수정 일자 필드를 담고 있는 클래스르 따로 만들어 '코드의 재사용 성'을 높였다.

@MappedSuperclass
@EntityListeners(value = {AuditingEntityListener.class})
@Getter
abstract class BaseEntity {

    @CreatedDate
    @Column(name = "regdate", updatable = false)
    private LocalDateTime regDate;

    @LastModifiedDate
    @Column(name="moddate")
    private LocalDateTime modDate;
}
@Entity // JPA 엔티티 클래스임을 나타냄
@Getter
@Builder
@NoArgsConstructor // 파라미터가 없는 기본 생성자를 자동으로 생성
@AllArgsConstructor // 모든 필드를 인자로 받는 생성자를 자동으로 생성
@ToString
@Table(name = "product")
public class Product extends BaseEntity{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 기본키 자동 생성
    private Long id; // 상품 테이블 기본키(id)

    @Column(length = 200, nullable = false)
    private String name; // 상품명

    @Column(length = 1500,nullable = false)
    private String description; // 상품설명

    @Column(nullable = false)
    private int price; // 상품가격

    @Column(nullable = false)
    private int stock; // 재고

    @Column(nullable = false)
    private String category; // 상품 카테고리

    @Column(nullable = false)
    private String brand; // 상품 브랜드

    // 생성자, getters, setters
}

 


🧑🏻‍💻 레파지토리 생성 (JPA 상속)

JPA를 상속받는 레파지토리를 만들어 준다.

// 레파지토리 코드

public interface ProductRepository extends JpaRepository<Product, Long> {
}

 


💻 레파지토리 테스트 코드(상품 생성)

테스트 코드를 작성하여 실제 DB에 적용해 보겠다.

'builder'를 사용하여 편리하게 객체를 생성하였다. 

@SpringBootTest // 테스트하기 위한 어노테이션
public class ProductRepositoryTests {

    @Autowired
    private ProductRepository productRepository;

    @Test
    @DisplayName("상품 등록 테스트")
    public void insertProductDummies(){
        // 1부터 200까지의 숫자를 생성하고 forEach() 메서드로 각 숫자에 대한 람다식 수행.
        IntStream.rangeClosed(1,200). forEach(i -> {
            // Builder 패턴을 사용하여 Product 객체를 생성 후 DB에 저장
            Product product = Product.builder()
                    .name("[" + i + "]번째 상품이름")
                    .description("description..상품설명" + i)
                    .price(i * 10 + 100)
                    .stock(10)
                    .category("카테고리....")
                    .brand("브랜드....")
                    .build();
            System.out.println(productRepository.save(product));
        });
    }
}

 


 

👀 결과

정상적으로 테스트 코드랑 일치하게 더미 데이터들이 들어간 걸 확인할 수 있다.

또한 Hibernate설정 값과 같이 테이블 생성, 가독성 등을 확인할 수 있다.

 


💬 앞으로 할 일과 느낀점

이제 생성(C)은 마쳤으니 나머지 RUD도 개발해야 한다.

또한 Service 클래스(인터페이스와 구현객체) 또한 제작하여야 한다.

어떻게 할지 막막하지만 그래도 잘 찾아보면서 해야겠다.

 

테스트 코드 작성이 귀찮고 하기 싫었지만 중요성은 익히 들었으니 찾아보면서 작성해 봤다.

성공하니 기분은 좋았다..! 하지만 앞으로 작성할 코드의 흐름을 잡기가 어려워 막막하긴 하다..

많은 시간을 사용해서라도 성공하고 싶다.

 

 

 

 

 

 

 

Comments