Service
- 이 페이지는 Service 작성 양식과 역할, 사용 방법 등을 서술한 페이지입니다.
Service란?
- Service는 Controller와 DB 사이의 데이터 처리 및 흐름을 제어하는 역할을 담당합니다.
- 본 구조에서는 Service의 영역을 추상체( Service )와, 구현체( ServiceImpl )로 분리하여 관리합니다.
- 추상체( Service )는 무엇을 할지를 구현하고, 구현체( ServiceImpl )는 어떻게 할지를 구현합니다.
Service의 역할 ( 추상체 / Interface )
- Service는 비즈니스 로직에서 사용되는 기능의 정의를 담당합니다.
- 각 기능의 명칭과 함께 요청(Request) 및 응답(Response)에 사용되는 파라미터와 반환 타입을 선언합니다.
- Controller와 ServiceImpl 사이를 연결하는 기준 역할을 수행합니다.
- 기능 구현은 포함하지 않으며, ServiceImpl( 구현체 )에서 해당 기능을 구현합니다.
- 선언 방법
- public interface UserService
ServiceImpl의 역할 ( 구현체 / Implements )
- ServiceImpl은 Service에 정의된 기능을 실제로 구현하는 역할을 합니다.
- Controller로부터 전달받은 데이터를 기반으로 비즈니스 로직을 수행하고 필요한 경우에는 DB를 호출하여 데이터 처리를 진행합니다.
- 처리 전 데이터를 가공하여 데이터 처리를 진행하거나 처리 결과를 가공하여 Controller에 반환할 수 있습니다.
- 선언 방법
- @Service( value = “userService” )
- public class UserServiceImpl implements UserService
@Service
해당 클래스가 Service 역할을 수행하는 클래스임을 선언하는 어노테이션입니다.
Spring이 해당 클래스를 Bean으로 관리하여, 다른 계층에서 자동으로 주입받아 사용할 수 있도록 합니다.
Service 작성 양식
아래는 회원에 관련된 내용을 처리하는 Service의 구성입니다.
개발 시에 주석, 개행, 띄어쓰기 등을 참조하여 작성해주시길 바랍니다.
/**
* UserService Class ( Class 명 Class )
*
* @version : 1.0
* @author : 생성자 ID ( SVN, GIT 등 )
* @date : 생성일자 ( 20xx.xx.xx )
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
* -----------------------------------------------------------------
* 수정일 수정자 수정내용
* -----------------------------------------------------------------
* 20xx.xx.xx 생성자 ID 최초 생성
*
* </pre>
*/
public interface UserService
{
/**
* 사용자 목록 조회
*
* @version : 1.0
* @author : 생성자 ID ( SVN, GIT 등 )
* @date : 생성일자 ( 20xx.xx.xx )
*
* @param map
* @throws Exception
*/
public List<UserModel> getUserList( Map<String, Object> map ) throws Exception;
/**
* 사용자 등록
*
* @version : 1.0
* @author : 생성자 ID ( SVN, GIT 등 )
* @date : 생성일자 ( 20xx.xx.xx )
*
* @param userJoinModel
* @throws Exception
*/
public void regUser( UserJoinModel userJoinModel ) throws Exception;
/**
* 사용자 수정
*
* @version : 1.0
* @author : 생성자 ID ( SVN, GIT 등 )
* @date : 생성일자 ( 20xx.xx.xx )
*
* @param userModel
* @throws Exception
*/
public void updateUser( UserModel userModel ) throws Exception;
/**
* 사용자 삭제
*
* @version : 1.0
* @author : 생성자 ID ( SVN, GIT 등 )
* @date : 생성일자 ( 20xx.xx.xx )
*
* @param map
* @throws Exception
*/
public void deleteUser( Map<String, Object> map ) throws Exception;
}
ServiceImpl 작성 양식
아래는 회원에 관련된 내용을 처리하는 ServiceImpl의 구성입니다.
개발 시에 주석, 개행, 띄어쓰기 등을 참조하여 작성해주시길 바랍니다.
/**
* UserService Class ( Class 명 Class )
*
* @version : 1.0
* @author : 생성자 ID ( SVN, GIT 등 )
* @date : 생성일자 ( 20xx.xx.xx )
* @see
*
* <pre>
* << 개정이력(Modification Information) >>
* -----------------------------------------------------------------
* 수정일 수정자 수정내용
* -----------------------------------------------------------------
* 20xx.xx.xx 생성자 ID 최초 생성
*
* </pre>
*/
@Service( value = "userService" )
public class UserServiceImpl Implements UserService
{
// 로그 출력 시 사용 : logger.info(), logger.debug() 등으로 사용
static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
/**
* 사용자 목록 조회
*
* @version : 1.0
* @author : 생성자 ID ( SVN, GIT 등 )
* @date : 생성일자 ( 20xx.xx.xx )
*
* @param map
* @throws Exception
*/
public List<UserModel> getUserList( Map<String, Object> map ) throws Exception
{
return userMapper.getUserList( map );
}
/**
* 사용자 등록
*
* @version : 1.0
* @author : 생성자 ID ( SVN, GIT 등 )
* @date : 생성일자 ( 20xx.xx.xx )
*
* @param userJoinModel
* @throws Exception
*/
public void regUser( UserJoinModel userJoinModel ) throws Exception
{
Map<String, Object> paramMap = null;
boolean isDup = false;
paramMap = new HashMap<String, Object>();
paramMap.put("userId", userJoinModel.getUserId());
/**
* 사용자 ID 중복 확인
*/
isDup = this.isDuplicationUserId(paramMap);
if ( !isDup )
{
try
{
userJoinModel.setUserTyCd("ROLE_USER");
userMapper.createUser( userJoinModel );
}
catch ( Exception e )
{
logger.error(CommonUtils.getPrintStackTrace(e));
throw new Exception("오류가 발생하였습니다. 관리자에게 문의해주세요.");
}
}
else
{
ResultModel resultModel = new ResultModel(Constants.FAIL);
resultModel.setResultMsg("중복된 사용자 ID입니다.");
throw new BusinessException(resultModel);
}
}
/**
* 사용자 수정
*
* @version : 1.0
* @author : 생성자 ID ( SVN, GIT 등 )
* @date : 생성일자 ( 20xx.xx.xx )
*
* @param userModel
* @throws Exception
*/
public void updateUser( UserModel userModel ) throws Exception
{
userMapper.updateUser( userModel );
}
/**
* 사용자 삭제
*
* @version : 1.0
* @author : 생성자 ID ( SVN, GIT 등 )
* @date : 생성일자 ( 20xx.xx.xx )
*
* @param map
* @throws Exception
*/
public void deleteUser( Map<String, Object> map ) throws Exception;
{
String userId = (String) map.get("userId");
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("userId", userId);
paramMap.put("password", password);
/**
* 사용자 정보 조회
*/
UserModel userModel = userMapper.getUser( map );
if ( !ObjectUtils.isEmpty(userModel) && !StringUtils.isEmpty(userModel.getUserId()) )
{
userModel.setPassword(password);
int deleteUserCnt = userMapper.deleteUser(userModel);
if ( deleteUserSpprnCnt == 0 || deleteUserCnt == 0 )
{
logger.error("=============================== [ERROR Start] ==================================");
logger.error("[UserServiceImpl.deleteUser] 사용자 삭제 처리 오류 발생. ");
logger.error("아이디 : " + userModel.getUserId()");
logger.error("=============================== [ERROR End] ==================================");
ResultModel resultModel = new ResultModel(Constants.FAIL);
resultModel.setResultMsg("오류가 발생하였습니다. 관리자에게 문의해주세요.");
throw new BusinessException(resultModel);
}
}
else
{
ResultModel resultModel = new ResultModel(Constants.FAIL);
resultModel.setResultMsg("비밀번호가 일치하지 않습니다.");
throw new BusinessException(resultModel);
}
}
/**
* 사용자 ID 중복 확인
*
* @version : 1.0
* @author : 생성자 ID ( SVN, GIT 등 )
* @date : 생성일자 ( 20xx.xx.xx )
*
* @param map
* @throws Exception
*/
public boolean isDuplicationUserId( Map<String, Object> map ) throws Exception
{
boolean isDup = true;
/**
* 사용자 ID 존재 여부
*/
CargoMap cargoMap = userMapper.isExistUserId( map );
String isExistUserId = (String)cargoMap.get("isExistUserId");
if ( "N".equals(isExistUserId))
{
isDup = false;
}
return isDup;
}
}