서비스 레이어 만들기 개요
이번에는 서비스 인터페이스부터 만들고 서비스 구현 클래스가 구현하는 형태가 아니라, 서비스 클래스부터 만들어서 인터페이스를 생성하는 방법을 알아봅니다.
서비스 구현 클래스 만들기
/src/main/java/v2/mvc/spring/blog/service/impl/CommentServiceImpl.java
@Service
public class CommentServiceImpl implements CommentService {
private CommentMapper commentMapper;
public CommentServiceImpl(CommentMapper commentMapper) {
this.commentMapper = commentMapper;
}
}
blog.service.impl
패키지 아래에CommentServiceImpl
클래스를 생성합니다. 이 때 인터페이스는 지정하지 않습니다.- 생성자 주입을 할 것이므로
commentMapper
멤버변수를 선언합니다. - 생성자를 만듭니다.
- 클래스 선언 오른쪽에
implements CommentService
코드를 붙입니다. - 클래스 선언 위에
@Service
어노테이션을 붙입니다.
서비스 인터페이스 생성 메뉴 진입
CommentService
부분에 빨간 줄이 가 있는 것을 확인합니다.- 빨간 줄 위에 마우스를 올립니다.
create interface
메뉴를 클릭합니다.
서비스 인터페이스 생성 팝업
- 서비스 인터페이스 생성 팝업이 보여집니다.
- 패키지가
v2.mvc.spring.blog.service.impl
로 되어 있습니다..impl
을 삭제해서v2.mvc.spring.blog.service
로 변경합니다. - Finish 버튼을 누릅니다.
서비스 인터페이스 생성 확인
- STS가 만들어 준 서비스 인터페이스를 확인합니다.
댓글 추가 요청 VO 만들기
/src/main/java/v2/mvc/spring/blog/vo/CommentAddRequestVO.java
package v2.mvc.spring.blog.vo;
public class CommentAddRequestVO {
private int blgContSeq;
private String cmtBdy;
private String tmpPw;
public int getBlgContSeq() {
return blgContSeq;
}
public void setBlgContSeq(int blgContSeq) {
this.blgContSeq = blgContSeq;
}
public String getCmtBdy() {
return cmtBdy;
}
public void setCmtBdy(String cmtBdy) {
this.cmtBdy = cmtBdy;
}
public String getTmpPw() {
return tmpPw;
}
public void setTmpPw(String tmpPw) {
this.tmpPw = tmpPw;
}
}
blog.vo
패키지 아래에CommentAddRequestVO
클래스를 생성합니다.- 댓글 요청에 필요한 멤버변수들을 선언합니다.
- Generate getters and setters 메뉴를 통해 getter와 setter를 생성합니다.
댓글 응답 VO 작성
/src/main/java/v2/mvc/spring/blog/vo/CommentResponseVO.java
package v2.mvc.spring.blog.vo;
public class CommentResponseVO {
private String cmtBdy;
private int seqBlgCmt;
public String getCmtBdy() {
return cmtBdy;
}
public void setCmtBdy(String cmtBdy) {
this.cmtBdy = cmtBdy;
}
public int getSeqBlgCmt() {
return seqBlgCmt;
}
public void setSeqBlgCmt(int seqBlgCmt) {
this.seqBlgCmt = seqBlgCmt;
}
}
CommentAddRequestVO
파일을 복사합니다.- 같은 패키지에 붙여넣기하면 클래스 이름을 물어봅니다.
CommentResponseVO
로 입력합니다. CommentResponseVO
클래스 본문을 모두 삭제합니다.cmtBdy
,seqBlgCmt
멤버 변수를CommentAddRequestVO
에서 복사합니다.cmtBdy
,seqBlgCmt
멤버 변수에 해당하는 getter와 setter를CommentAddRequestVO
에서 복사합니다.
모델 매퍼, 커먼즈 코덱 메이븐 다운로드
pom.xml
<!-- https://mvnrepository.com/artifact/org.modelmapper/modelmapper -->
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>3.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.16.0</version>
</dependency>
pom.xml
파일에modelmapper
의존성을 추가합니다.commons-codec
의존성도 추가합니다.- 메이븐 빌드를 통해 라이브러리를 다운로드합니다.
서비스 구현 클래스 add 메소드 추가
/src/main/java/v2/mvc/spring/blog/service/impl/CommentServiceImpl.java
@Override
public CommentResponseVO add(CommentAddRequestVO commentAddRequestVO){
ModelMapper modelMapper = new ModelMapper();
CommentInsertVO commentInsertVO = modelMapper.map(commentAddRequestVO, CommentInsertVO.class);
if (commentInsertVO.getTmpPw() != null) {
String sha256hex = DigestUtils.sha256Hex(commentInsertVO.getTmpPw());
commentInsertVO.setTmpPw(sha256hex);
}
int affectRowCount = this.commentMapper.insert(commentInsertVO);
if (affectRowCount == 0) {
return null;
}
ModelMapper modelMapperInsertToResponse = new ModelMapper();
CommentResponseVO commentResponseVO = modelMapperInsertToResponse.map(commentInsertVO, CommentResponseVO.class);
return commentResponseVO;
}
CommentServiceImpl.java
파일을 편집기로 엽니다.add
메소드를 추가합니다.
DigestUtils 네임스페이스 선택
- 자동 불러오기를 실행시키면 DigestUtils 패키지를 선택하라는 화면이 나옵니다.
- org.apache 로 시작하는 패키지를 선택합니다.
서비스 인터페이스에 add
메소드 추가
add
메소드 정의 위에 마우스를 올립니다.- Create 'add' ... 를 클릭합니다.
- 서비스 인터페이스에
add
메소드가 추가되었는지 확인합니다.