ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring 게시판](4) 게시글 목록 구현
    Practice 2020. 12. 4. 01:32

     

    기본적인 설정은 끝났으니, 게시글 목록을 구현하고자 한다.

    일종의 메인 페이지 기능으로 현재 서버에 올라와있는 게시글들을 전체보기 할 수 있는 기능이다.

     

    CRUD 중 R(Read : 조회) 기능이라고 할 수 있다.

     

     

    1. VO 만들기

     

    데이터베이스에서 가져온 데이터를 담기 위한 객체인 VO(Value Obeject)를 만든다.

     

    src/main/java 경로에 새로운 패키지 com.board.domain 패키지를 생성한다.

    com.board.domain 패키지 안에는 BoardVO 자바 파일을 생성한다.

     

    주석처리한 부분은 테이블 생성 SQL 구문이다. 컬럼 명을 기억하기 쉽기 위해 주석으로 가지고 왔다.

     

    이제 자료를 담을 변수와

    getter / setter 메소드를 생성해준다.

     

     

    regDate 같은 경우 Date 자료형이다. 이는 자바 기본 자료형이 아니기에 java.util.Date 클래스를 Import 해서 사용한다.

     

    지금은 테이블이 TBL_BOARD 테이블 하나이기 때문에 VO도 하나이지만

    처리해야 하는 데이터가 많을 수록 VO의 갯수도 늘어난다.

     

     

    2. TBL_BOARD 테이블에 테스트 데이터 넣기.

     

    현재 TBL_BOARD 테이블은 비어있는 상태다.

    insert 구문을 이용해서 테스트 하기 위한 게시글을 넣어주자.

     

    HITCOUNT의 경우, 내가 실수로 DEFAULT 값 설렁을 안해주었다.

    ALTER TABLE TBL_BOARD MODIFY HITCOUNT DEFAULT 0;

    구문을 이용해 DEFAULT 제약 조건을 추가한 후 INSERT 했다.

     

     

    3. 뷰 페이지 (Jsp 파일) 만들기

     

    웹 페이지에서 보이게 될 뷰 페이지를 만든다.

    CSS와 자바스크립트 혹은 부트스트랩 같은 프론트엔드적인 부분은 이번 실습에서 제외한다.

    (프로젝트 때에 제대로 하자!)

     

    main/webApp/WEB-INF/views 경로에 폴더 board를 만든다. 

    WEB-INF 경로에 있는 뷰 페이지는 도메인을 통하지 않고 링크만으로 외부에서 접근할 수 없다.

    board 폴더 안에 list.jsp 파일을 생성한다.

     

    jsp 파일의 charset을 UTF-8로 수정한다. 또한 jstl을 사용하기 위한 링크를 삽입한다.

     

     

    html의 body 안에 게시물 리스트를 표현하기 위한 table을 만들어준다.

    	<table>
    		<thead>
    			<tr>
    				<th>번호</th>
    				<th>제목</th>
    				<th>작성자</th>
    				<th>작성일</th>
    				<th>조회수</th>
    			</tr>
    		</thead>
    	</table>

     

     

    4. Controller 만들기 및 mapper 설정

     

    com.board.controller 클래스에 boardController.java 파일을 만든다.

     

    런타임 에러가 나는 부분은 아직 구현이 안된 클래스이기에 import가 안되어서다.

    Service와 dao는 다음 단계에서 만든다.

     

    @Controller로 컨트롤러를 선언해주고

    @RequestMapping으로 /board/ 경로의 요청이 있을 경우 해당 컨트롤러 클래스를 매핑시켜 준다.

    이후 /list 경로가 요청될 경우, boardController 클래스의 getList() 메소드로 매핑시켜주는 코드다.

     

     

    Controller를 구성했으니 이제 Mapper를 설정할 차례다.

    main/resource/mappers 경로에 만들어 둔 boardMapper.xml 파일 안에 게시물 리스트를 불러오는 쿼리를 적는다.

    해당 쿼리의 아이디(식별자)는 list고, 반환 결과는 boardVO를 통해 저장할 수 있다는 뜻이다.

     

     

    5. DAO / Service 구성

     

    SpringMVC 패턴의 구성은 이렇다.

     

    특정 도메인이 매핑되면 Controller가 해당 Service를 호출한다.

    → Service는 주입된 DAO의 리턴 값을 가지고 온다.

    → DAO는 mapper의 쿼리의 결과값을 반환한다.

    → Controller는 Service의 결과값을 model에 담아 뷰로 보낸다.

    → View는 Controller로부터 받은 값을 출력한다.

     

    실제 비즈니스 로직을 처리하는 부분은 Service 단이다. DAO는 백엔드에서 서버-클라이언트 프로그램 간 데이터 주고받기를 실행한다.

     

     

    DAO 구현은 먼저 DAO interface를 구현하면서 시작한다.

    com.board.dao 패키지에 BoardDAO 인터페이스 파일을 만든다.

     

    인터페이스는 메소드를 선언만 하고 구현부는 작성하지 않는다. 

    이는 인터페이스를 임플리먼트 하는 하위 클래스가 추상 메소드를 자유롭게 오버라이딩 해서 쓸 수 있다는 뜻이다.

    인터페이스의 경우 생략해도 되지만, 재사용성이 높기 때문에 유지/보수에 편리해 인터페이스를 분리하는 쪽이 좋다.

     

    BoardDAO를 임플리먼트 하는 BoardDAOImpl.java 파일을 생성한다.

     

    @Repository 어노테이션을 사용함으로써 DAO임을 명시한다.

    또한 @Inject는 주입을 통해 매 메소드에서 SqlSession 객체를 재생성 할 필요가 없도록 한다. 

    Mapper에 등록된 namespace를 이용해 mapper의 쿼리를 읽어오는 메소드 list()를 작성한다.

     

     

    com.board.sercive 패키지에 BoardService interface를 만든다.

    이후 BoardServiceImpl를 통해 BoardDaolist() 메소드의 결과값을 반환한다.

     

     

     

    5. Controller를 통한 결과값 전달 / View 페이지에서 결과값 출력

     

    BoardController는 Service가 가져온 값을 Model 객체를 이용해 View 페이지에 전달한다.

    Model.addAttribute를 이용해 List<BoardVO> 객체로 구성된 내용을 전달한다.

     

     

    list.jsp 파일 테이블 속성의 <tbody> 속성 안에

    jstl 반복문인 <c:forEach> 구문을 사용해 list<BoardVO>에 담겨온 값을 출력한다.

     

     

     

    DB에 테스트로 등록한 게시글 목록이 출력된 모습이다.

     

     

    댓글

Designed by Tistory.