1. Create Maven Web Application

  2. Add Dependencies - pom.xml File

    SLF4J (Simple Logging Facade for Java) with JCL (Jakarta Commons Logging) bridge:

    Logback:

  3. Project Structure

    Untitled

  4. AppInitializer - Register a DispatcherServlet using Java-based Spring configuration

  5. PersistenceJPAConfig - Spring Data JPA and Hibernate Configuration using Java-based Spring configuration

    1. @Configuration: 이 클래스가 Spring 구성 클래스임을 나타내는 어노테이션. 이 클래스 내에서 정의된 메소드들은 스프링 빈을 제공
    2. @EnableTransactionManagement: 이 어노테이션은 클래스 레벨에서 선언적 트랜잭션 관리를 활성화. 이를 통해 @Transactional 어노테이션이 붙은 메소드의 트랜잭션을 자동으로 관리
    3. @PropertySource: database.properties 파일로부터 환경 속성을 로드하는 데 사용. 이 파일에는 데이터베이스 연결 정보와 같은 중요한 구성 속성이 포함
    4. @ComponentScan: net.javaguides.springmvc 패키지를 스캔하여 스프링 빈을 자동으로 감지하고 등록
    5. @EnableJpaRepositories: JPA 리포지토리를 활성화하고, net.javaguides.springmvc.repository 패키지에 정의된 JPA 리포지토리를 스프링에 등록
    6. entityManagerFactory(): **LocalContainerEntityManagerFactoryBean**을 생성하고 구성하는 빈을 정의. 이 빈은 JPA 엔티티 매니저 팩토리를 생성하고, 데이터 소스와 엔티티 패키지를 설정
    7. additionalProperties(): Hibernate 구성 속성을 추가. 여기에는 DDL 자동 생성 설정, 데이터베이스 다이얼렉트, 두 번째 레벨 캐시 및 쿼리 캐시 사용 여부 등이 포함.
    8. dataSource(): **DriverManagerDataSource**를 생성하고 구성하는 빈을 정의. 이 메소드는 데이터베이스 연결에 필요한 정보(드라이버 클래스 이름, URL, 사용자 이름, 비밀번호)를 환경에서 로드하여 설정
    9. transactionManager(): **JpaTransactionManager**를 생성하고 구성하는 빈을 정의. 이 트랜잭션 관리자는 JPA 엔티티 매니저 팩토리를 사용하여 트랜잭션을 관리
    10. exceptionTranslation(): 데이터베이스 작업 중 발생하는 예외를 스프링의 데이터 접근 예외 계층으로 변환하는 PersistenceExceptionTranslationPostProcessor 빈을 등록
  6. WebMvcConfig - Spring MVC Bean Configuration using Java-based Spring configuration

  7. JPA Entity - Customer.java

  8. Spring MVC Controller Class - CustomerController.java

    이 클래스는 **CustomerController**라는 Spring MVC 컨트롤러를 정의하고 있습니다. 이 컨트롤러는 고객과 관련된 웹 요청을 처리

  9. Service Layer - CustomerService.java

    List<Customer> getCustomers():

    void saveCustomer(Customer theCustomer):

    Customer getCustomer(int theId) throws ResourceNotFoundException:

    void deleteCustomer(int theId) throws ResourceNotFoundException:

  10. Service Layer - CustomerServiceImpl.java

    **CustomerServiceImpl**은 고객 데이터에 대한 비즈니스 로직을 처리하며, 이 로직은 주로 **CustomerRepository**를 통해 데이터베이스 작업을 수행

  11. Spring Data JPA Repository - CustomerRepository.java

  12. Custom Exception - ResourceNotFoundException.java

    이 코드는 사용자 정의 예외 **ResourceNotFoundException**을 정의하는 Java 클래스

  13. JSP Views - customer-form.jsp

  14. JSP Views - list-customers.jsp