Web Programming/Project

[게시판 만들기] 3-5. Spring 게시판 목록 만들기

유가엘 2020. 4. 21. 10:55

lesson07_Spring_Board.zip
0.03MB

게시판을 만들기 웹 프로젝트를 하면서 가장 기본적으로 배우게 되는 내용이며, 여러가지 설정과 기법을 통해 구현을 할 수 있습니다.

 

1. 데이터베이스 테이블 생성

각각의 데이터베이스가 존재하며 , 해당 글에서는 Oracle 11G ORCL을 통하여 작성하게 되었습니다.

테이블 생성

CREATE TABLE TB_BOARD(
	 TB_IDX number primary key,				-- 게시글에 대한 고유값
	 TB_TITLE varchar2(30),					-- 게시글 제목
	 TB_CONTENTS varchar2(100),				-- 게시글 내용
	 TB_CONTENT_CNT number(1),				-- 게시글 조회 수
	 TB_DEL_GB char(1),						-- 삭제여부
	 TB_WRITE_DTM Date,						-- 게시글 작성일
	 TB_WRITE_ID varchar2(10)				-- 게시글 작성자
);

2. SQLDeveloper 를 통한 테이블 확인

데이터 베이스 툴을 통하여 아래와 같이 정상적으로 생성된 것을 확인 할 수 있습니다.

3. 게시글 중복 방지를 위한 시퀀스 생성

게시글의 중복 방지를 위하여 오라클에서 제공하는 시퀀스를 생성합니다. 이는 TB_IDX에 사용할 예정입니다.

시퀀스 생성

CREATE SEQUENCE SEQ_TB_BOARD_IDX;

4. 샘플 데이터의 추가

아래와 같이 테이블 컬럼에 맞는 데이터 타입을 기재하여 삽입 할 수 있습니다. 

정상적으로 삽입되었다면 데이터 탭을 통해 확인 할 수 있습니다.

INSERT INTO TB_BOARD VALUES(1,'테스트1','내용입니다',0,'N',SYSDATE,'KYLE');
INSERT INTO TB_BOARD VALUES(2,'테스트2','내용입니다',0,'N',SYSDATE,'KYLE');
INSERT INTO TB_BOARD VALUES(3,'테스트3','내용입니다',0,'N',SYSDATE,'KYLE');
INSERT INTO TB_BOARD VALUES(4,'테스트4','내용입니다',0,'N',SYSDATE,'KYLE');

COMMIT;


5. 구현의 진행 순서

Spring은 아래와 같이 데이터 전달이 진행 됩니다.

Controller > Service(ServiceImpl ) > DAO > SQL(XML) > Controller > JSP

 

6. Controller 구현

클래스 상단에 @Controller를 선언함으로 스프링컨테이너가 실행될때 컨트롤러로 인식하게 만들 수 있습니다.

해당 프로젝트가 실행시 , index.jsp > Controller(callBoardList) > boardList.jsp 로 이동됩니다. 

ModelAndView 는 화면에 보여줄 jsp파일 경로와 함께 전달할 Object를 선언하여 전달 합니다.

Object는 비즈니스 로직이 담긴 Service를 호출하고 화면으로 이동 시킵니다.

7. Service 구현

비즈니스 로직을 담당하며, 클래스 상단에 @Service 를 선언함으로 스프링컨테이너가 실행될때 서비스로 인식하게 만들 수 있습니다.

Service는 두개의 파일로 구성되어 있습니다. 어떤 작업을 진행 할 것인지 ( Service Interface ) , Interface의 내용을 실제로 구현시킬 (ServiceImpl) 입니다.

 

Board Service가 가지는 기능 명세서 ( 인터페이스 )

기능을 작성한 인터페이스를 implements 를 통하여 상속받으며 @Override를 통해 재정의 해 사용 합니다.

8. DAO 구현

데이터베이스 접근을 담당하며, 클래스 상단에 @Repository 를 선언함으로 스프링컨테이너가 실행될때 저장소로 인식하게 만들 수 있습니다. 또한 BoardDAO에서 직접 쿼리를 호출할 수도 있지만, 이전에 작성해둔 AbstractDAO (공통 DAO)를 상속받음으로써 만들어둔 메서드를 사용할 수 있습니다.

extends 는 implements 와 달리 오버라이딩을 할 필요가 없습니다.

9. AbstractDAO 호출

BoardDAO 에서 selectBoardList 를 담아 AbstractDAO 의 붉은 네모 표기된 쿼리를 실행합니다. 

10. SQL 호출

AbstractDAO 의 queryId를 통해 iBatis.xml 의 id를 찾습니다. 이후 그 안의 쿼리를 반환 합니다.

11. 화면 구현

마지막으로 사용자에게 보여줄 화면을 구성하는 일이 남았습니다.

컨트롤러에 선언한 /board/boardList가 core-servlet 의 InternalResourceViewResolver 을 통하여 화면을 호출 합니다.

비즈니스 로직을 통해 담긴 값은 mv.addObject("list",list); 를통하여 화면에서 아래와 같이 호출 할 수 있습니다.

위와 같이 모두 구현을 완료하였다면 , 프로젝트를 실행 후 정상적으로 출력되는지 확인할 수 있습니다.

설정만 진행하다 실제 구현이 되니 조금 헷갈리는 부분도 많고.. 계속 오류가 발생해 당황스럽기도하다.