Show Kim VamPa
Git 주소 : github.com/sjinjin7/Blog_BoardProject목표게시판 등록 기능 구현 게시판에 대한 정보를 담는 DB 테이블을 생성하고 웹에서 해당 테이블에 정보를 즉, 게시판을 등록하는 기능 구현을 목표로합니다. 게시판 등록 기능 구현 뿐만 아니라 앞으로의 대부분 기능 구현 작업순서는 'VO,DTO(도메인 모델 계층)' -> 'Mapper(퍼시스턴트 계층)' -> 'Service(비즈니스 계층)' -> 'Controller(제어 계층)' -> 'JSP(프리젠티에션 계층)' 순으로 작업할 것입니다. 각 계층의 역할을 간략히 설명하면 다음과 같습니다. 그림 1도메인 모델 계층
퍼시스턴트 계층
비즈니스 계층
제어 계층
프리젠테이션 계층
참고 : egloos.zum.com/mt1716/v/9291203 순서1. 게시판 테이블 생성 2. BoardVO 클래스 작성 3. Mapper 처리 및 테스트 4. Service 처리 및 테스트 1. 게시판 테이블 생성게시판의 정보를 저장할 테이블을 아래의 명령문을 통해서 생성합니다. Oracle
MySQL
- 게시판 테이블(vam_board)에 등록할 정본는 'bno(게시판 번호)', 'title(게시판 제목)', 'content(게시판 내용)', 'writer(게시판 작성자)', 'regdate(등록날짜)', 'updatedate(수정날짜)' 입니다. - 'bno' 경우 새로운 행을 작성할 때마다 자동으로 +1 증가된 값으 입력되도록 설정하였습니다. (자동값 증가(Oracle, MySQL)(IDENTITY, AUTO_INCREMENT) 참고) - 각 게시물을 고유하게 구분해주기 위해 'bno' 열에 PRIMARY KEY 속성을 추가하였습니다. ( 제약조건명을꼭 부여할 필요는 없지만 추 후 '데이터베이스 페이징 처리'에 사용하기 위해 pk_board로 부여하였습니다.) - 등록날짜(regdate), 수정날짜(updatedate) 값은 자동으로 현재의 시간정보가 입력되도록 설정하였습니다. 'bno', 'regdate', 'updatedate' 값이 자동으로 잘 입력되는지 확인하기 위해서 INSERT문을 통해 3개의 행을 추가합니다. 삽입 후 정상적으로 데이터가 삽입되었는지 SELECT문을 통해서 확인합니다. Oracle 경우 데이터가 정상적으로 삽입되었는지 확인 했다면 "commit ;" 명령을 실행합니다.
2. BoardVO 클래스 작성vam_board 테이블의 컬럼 구조를 반영하는 VO(Value Object) 클래스를 생성하겠습니다. com.vam.model 패키지에 BoardVO 클래스를 생성 합니다. 그림 4BoardVO 클래스에 아래의 코드를 작성한 후 "Getter/Setter" 메서드와 "toString"메서드를 추가합니다.
BoardVO 전체 코드 더보기
3. Mapper 처리 및 테스트Mapper 작성(인터페이스, xml)com.vam.mapper 패키지에 BoardMapper.java 인터페이스를 생성합니다. 그림 7게시판 등록 쿼리를 요청하는 enroll() 메서드 코드를 작성합니다. 파라미터로는 BoardVO 그림 8src/main/resources 경로에 있는 com/vam/mapper 폴더에 BoardMapper.xml 파일을 생성합니다. 그림 9xml 파일을 mapper로서의 기능을 하도록 만들기 위해 아래와 같이 작성합니다. 가중 중요한 것은 namespace 속성 값을 앞에서 생성하고 작성한 Mapper 인터페이스의 경로를 포함하는 인터페이스의 이름을 작성해야한다는 점입니다. namespace 속성 값이 중요한 이유는 MyBatis가 Mapper 인터페이스와 XML을 인터페이스 이름 과 namespace 속성 값을 가지고 판단하기 때문입니다. 인터페이스 이름과 namespace 속성 값이 동일한 이름이면 이를 병합해서 처리하는데, 이러한 경우에는 메서드 선언은 인터페이스에 존재하고 SQL에 대한 처리는 XML을 이용하게 됩니다. 'MyBatis 작동원리' 키워드로 구글링 하시면 작동 방식에 대한 정보를 얻을 수 잇습니다.(MyBatis에 대한 사용방법은 공식 홈페이지를 참고해주세요.)
Mapper 인터페이스에서 선언한 enroll 메서드 호출될 시에 실행될 SQL문을 아래와 같이 작성합니다. <insert>태그에 id 속성 값을 메서드 이름과 동일하게 작성합니다. insert문 경우 앞서 직접 수행하여 실행이되는것을 확인하였기 때문에 바로 사용하였습니다. 값이 들어가야 할 구문에는 Mapper 인터페이스에서 선언한 enroll() 메서드의 파라미터 BoardVO 클래스의 멤버변수명을 #{}을 붙여서 작성합니다. "#{title}"의 경우 getTitle()/setTtile()을 의미 합니다. 따라서 BoardVO 멤버 변수인 title, content, writer에 값이 담긴 경우 그 값들이 각각 #{title}, #{content}, #{writer} 대체하여 SQL문이 실행됩니다.
Mapper 테스트작성한 Mapper 메서드를 정상적으로 작동하는지 Junit을 통해 테스트 하겠습니다. src/test/java 경로에 com/vam/mapper 패키지를 만든 후 BoardMapperTests.java 클래스를 생성합니다. 그림 12클래스에 다음과 같이 작성 후 Junit 테스트를 진행합니다. 정상적으로 처리가 되었다는 표시가 뜬다면 값이 삽입되었는지 select문을 통해 데이터베이스를 직접 확인 합니다.
3. Service 처리 및 테스트Service 작성com.vam.service 패키지에 BoardService.java 인터페이스를 생성합니다. 그림 17BoardService.java 인터페이스에 게시판 등록을 수행하는 메서드를 작성합니다. 그림 18인터페이스를 생성한 패키지에 작성한 메서드를 구현할 BoardServiceImpl.java 클래스를 생성합니다. 그림 19해당 클래스가 BoardService 인터페이스를 구현한다는 의미의 키워드를 작성합니다. 그림 20스프링에서 해당클래스가 Service역할을 한다는 것을 인식 할 수 있도록 @Service 어노테이션을 추가합니다. 그림 21BoardMapper 인터페이스를 주입 해주는 코드를 작성합니다. 그림 22BoardService 인터페이스에서 선언한 메서드를 오버라이딩하여 메서드의 구현부를 작성합니다. 구현부에는 BoardMapper의 enroll() 메서드를 호출 하는 코드를 작성합니다. 그림 23Service 테스트Service 클래스에 작성한 메서드가 정상적으로 동작하는지 확인하기 위해 테스트를 합니다. src/test/java 경로에 com/vam/service 패키지를 생성후 BoardServiceTests.java 클래스를 생성합니다. 생성한 클래스에 아래와같이 코드를 작성한 후 Junit 테스트를 진행합니다. 정상적으로 동작하였다는 표시가 보인다면 데이터베이스에도 정상적으로 값이 삽입되었는지 확인합니다.
REFERENCEDATE
|