[Spring] 스프링Web MVC구현하기(CRUD)

Min's Study Note·2023년 11월 28일

Spring

목록 보기
1/4
post-thumbnail

📄 수업 자료

스프링 설정

  1. 새 프로젝트

    • spring workspace 폴더 만들기 (mh > spring_pro)
    • 제너레이터 : Jakarta EE
    • 템플릿 : 웹 애플리케이션
    • 언어 : Java
    • 시스템 빌드 : Maven
    • 그룹 : org.lmh
    • 버전 : Jakarta EE 10
  2. Tomcat > 구성 편집

    • 배포 : /
  3. Spring 프레임워크 라이브러리 추가(mvnrepository.com)
    👉 pom.xml 에 붙여넣고, maven 버튼 클릭
    - spring core > 6.0.11
    - spring context > 6.0.11
    - spring test > 6.0.11
    - Lombok > 최신 버전
    - log4j core > 최신 버전
    - log4j api > 최신 버전
    - log4j slf4j > 최신 버전
    - jakarta.servlet.jsp.jstl > 최신 버전
    - jakarta.servlet.jsp.jstl-api > 최신 버전
    - spring-webmvc > 6.0.11
    - mysql-connector-j > 8.0.33
    - hikaricp > 최신 버전
    - mybatis-spring > 최신 버전
    - spring transations > 6.0.11
    - spring-jdbc > 6.0.11
    - mybatis > 최신 버전

<artifact 역할>

  • spring-core
    : Spring 프레임워크의 기본적인 기능을 제공하는 핵심 모듈입니다. Bean 관리, 리소스 로딩, 이벤트 처리 등이 포함되어 있습니다.

  • spring-context
    : Spring 응용 프로그램의 컨텍스트를 제공하는 모듈입니다. 의존성 주입(Dependency Injection), 이벤트 처리, 리소스 로딩 등이 포함되어 있습니다.

  • spring-test
    : Spring 애플리케이션을 테스트하기 위한 모듈입니다. JUnit과 함께 사용되며, 특히 Spring 컨텍스트와 관련된 테스트를 수행할 때 유용합니다.

  • lombok
    : 자바 소스 코드에서 반복적인 코드를 줄이기 위한 롬복 라이브러리입니다. @Getter, @Setter, @NoArgsConstructor 등의 애노테이션을 사용하여 코드를 자동으로 생성할 수 있습니다.

  • log4j-core, log4j-api, log4j-slf4j-impl
    : 로깅을 위한 Apache Log4j 라이브러리입니다. 애플리케이션의 로그를 관리하고 출력하는 데 사용됩니다.

  • jakarta.servlet-api
    : Java Servlet API의 Jakarta EE(이전에는 Java EE) 버전입니다. Servlet 기반 웹 애플리케이션을 개발하기 위한 필수 라이브러리입니다.
    jakarta.servlet.jsp.jstl-api,

  • jakarta.servlet.jsp.jstl
    : JSTL(JavaServer Pages Standard Tag Library)을 지원하는 라이브러리입니다. JSP 페이지에서 태그를 사용하여 자주 사용되는 작업을 단순화합니다.

  1. org.lmh.springexam01>dto>SampleDTO.java

  2. src > main > resources > 새로만들기 > 파일 > log4j2.xml

<?xml version="1.0" encoding="UTF-8" ?>
<configuration status="INFO">
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout charset="UTF-8" pattern="%d{hh:mm:ss} %5p [%c] %m%n"/>
        </Console>
    </Appenders>
    <loggers>
        <logger name="org.springframework" level="INFO" additivity="false">
            <appender-ref ref="console" />
        </logger>

        <logger name="org.lmh" level="INFO" additivity="false">
            <appender-ref ref="console" />
        </logger>

        <root level="INFO" additivity="false">
            <AppenderRef ref="console" />
        </root>
    </loggers>
</configuration>
  1. src > test > java > 새로만들기 > 패키지 > org.lmh.springexam01 > SampleTest.java
  1. src > main > webapp > WEB-INF > 새로만들기 > XML 구성 파일 > Spring 구성 > root-context.xml

[springBoardSystem] 작성순서

  1. MySQL 테이블 작성(tbl_board)
create table tbl_board(
bno int not null autoincrement primary key,
title varchar(200) not null,
conente text not null,
writer varchar(45) not null,
visitcount int default 0,
postdate datetime default now());
  1. pom.xml 작성
    1) spring-core : 6.0.11
    2) spring-test : 6.0.11
    3) spring-context : 6.0.11
    4) spring-mvc : 6.0.11
    5) lombok : 1.18.30
    6) log4j-core : 2.22.0
    7) log4j-api : 2.22.0
    8) log4j-slf4fj-impl : 2.22.0
    9) jakarta.servlet.jsp.jstl : 3.0.1
    10) jakarta.servlet.jsp.jstl-api : 3.0.0
    11) mysql-connector-j : 8.0.33
    12) HikariCP : 5.0.1
    13) mybatis-spring 3.0.3
    14) spring-tx : 6.0.11
    15) spring-jdbc : 6.0.11
    16) mybatis : 3.5.14
  2. resurces => log4j2.xml 작성
  3. BoardDTO, BoardVO 작성
  4. BoardMapper interface 작성
  5. BoardMapper.xml 작성
  6. root-context.xml 작성(WEB-INF에)
  7. servlet-context.xml 작성(WEB-INF에)
  8. web.xml에 root-context 등록
  9. web.xml에 DispatcherServlet 등록, init-Param에 servlet-contxt 등록
  10. insert, list에 대한 mapper, service, controller, view 작성

💡스프링에서 mapper와 service의 역할 차이

Spring에서 Mapper와 Service의 역할은 주로 소프트웨어 아키텍처에서 데이터 액세스 계층과 비즈니스 로직 계층 간의 역할 분담에 관련이 있습니다.

  • Mapper
    데이터 액세스 계층(Data Access Layer): Mapper는 주로 데이터베이스와의 상호 작용을 담당합니다. MyBatis나 Spring Data JPA와 같은 프레임워크에서 사용되며, 데이터베이스와의 상호 작용을 위한 SQL 쿼리를 정의하고 실행하는 역할을 합니다. 주로 CRUD(Create, Read, Update, Delete) 작업과 관련이 있습니다.
  • Service
    비즈니스 로직 계층(Business Logic Layer): Service는 주로 비즈니스 로직을 처리하는데 집중합니다. 비즈니스 로직은 애플리케이션의 핵심 기능 및 규칙을 정의하며, 데이터를 가공하고 조작하여 사용자에게 제공하는 역할을 합니다. Service는 여러 개의 Mapper를 조합하여 하나의 트랜잭션으로 처리되는 비즈니스 기능을 제공할 수 있습니다.

간단하게 말하면, Mapper는 데이터베이스와의 통신과 관련된 작업을 담당하고, Service는 이러한 Mapper를 조합하여 비즈니스 로직을 수행합니다. 이렇게 역할을 나누면 코드의 모듈화가 증가하고, 유지보수성과 테스트 용이성이 향상됩니다. Service는 특정 기능이나 사용 사례에 대한 로직을 처리하면서 Mapper는 그와 관련된 데이터베이스 액세스를 처리하게 됩니다.

💡 스프링에서 DTO와 VO의 차이

  • 목적의 차이
    DTO (Data Transfer Object)
    주로 데이터 전송을 위해 사용됩니다. 웹 계층(Controller)과 서비스 계층(Service) 간에 데이터를 주고받을 때 사용됩니다. 데이터베이스에서 가져온 엔터티(Entities)의 일부 정보나 여러 엔터티에서 추출한 필요한 정보 등을 포함할 수 있습니다. 주로 읽기 전용 데이터를 담는 용도로 사용됩니다.
    VO (Value Object)
    비즈니스 로직에서 사용되는 객체로, 특정 비즈니스 도메인에서 중요한 값을 표현합니다. VO는 불변(immutable)하며, 주로 도메인 모델에서 사용됩니다. 데이터를 담는 역할 뿐만 아니라, 비즈니스 규칙을 적용하거나 특정 의미있는 연산을 수행하는 데 사용됩니다.

  • 불변성(Immutability)의 유무:
    DTO
    일반적으로 가변(mutable)할 수 있습니다. 즉, 필드 값을 변경할 수 있습니다.
    VO
    불변(immutable)하게 설계되어야 합니다. 한 번 생성되면 내부 상태가 변경되지 않아야 합니다. 이는 도메인 모델에서 안정성과 예측 가능성을 제공하며, 동일한 VO 인스턴스가 여러 곳에서 참조되더라도 내부 상태가 변경되지 않음을 보장합니다.

  • 레이어 간의 의존성 분리
    DTO
    주로 웹 계층과 서비스 계층 사이에서 사용되며, 데이터 전송을 위한 목적으로 설계됩니다.
    VO
    비즈니스 로직에 중점을 둔 도메인 모델에서 사용되며, 주로 서비스 계층과 데이터베이스 간에 상호 작용할 때 등장합니다.

이러한 구분을 통해 시스템을 모듈화하고 유지보수성을 높일 수 있습니다. 게시판과 같은 간단한 애플리케이션에서는 DTO와 VO를 엄격하게 나누지 않을 수도 있지만, 대규모 애플리케이션에서는 이러한 구분이 중요해집니다.

참고


  1. pom.xml > dependency > modelmapper 추가
  2. src > main > java > com.example.springboardsystem > config > ModelMapperConfig.java
  3. test > java > com.example.springboardsystem.mapper > BoardTest.java

부트스트랩 추가하기

  1. src > main > webapp > WEB-INF views > board > list.jsp , register.jsp , update.jsp , view.jsp

  2. src > main > webapp > WEB-INF views > includs > header.jsp , footer.jsp

  3. src > main > java > com.example.springboardsystem > controller > BoardController.java

  4. pom.xml에 hibernate validator 추가하기

0개의 댓글