방선주 방선주 03-12
Merge branch 'master' of http://210.180.118.83/jhpark/cms_backend
@75bea8179b04cbd889cd152030471e61e8e56b4f
src/main/java/com/takensoft/cms/accesCtrl/service/AccesCtrlService.java
--- src/main/java/com/takensoft/cms/accesCtrl/service/AccesCtrlService.java
+++ src/main/java/com/takensoft/cms/accesCtrl/service/AccesCtrlService.java
@@ -43,8 +43,7 @@
     public int accesCtrlUpdate(AccesCtrlVO accesCtrlVO);
 
     /**
-     * @param params
-     *  -
+     * @param params - 검색조건 및 페이징 정보
      * @return Map<String, Object>
      *  - list : 접근 제어 목록
      *  - pagination : 페이징 정보
src/main/java/com/takensoft/cms/accesCtrl/service/Impl/AccesCtrlServiceImpl.java
--- src/main/java/com/takensoft/cms/accesCtrl/service/Impl/AccesCtrlServiceImpl.java
+++ src/main/java/com/takensoft/cms/accesCtrl/service/Impl/AccesCtrlServiceImpl.java
@@ -107,8 +107,7 @@
     }
 
     /**
-     * @param params
-     *  -
+     * @param params - 검색조건 및 페이징 정보
      * @return Map<String, Object>
      *  - list : 접근 제어 목록
      *  - pagination : 페이징 정보
src/main/java/com/takensoft/cms/accesCtrl/web/AccesCtrlController.java
--- src/main/java/com/takensoft/cms/accesCtrl/web/AccesCtrlController.java
+++ src/main/java/com/takensoft/cms/accesCtrl/web/AccesCtrlController.java
@@ -54,8 +54,7 @@
     }
 
     /**
-     * @param params
-     *  -
+     * @param params - 검색조건 및 페이징 정보
      * @return ResponseEntity
      *  - data : 응답 데이터
      *  - message : 응답 메시지
src/main/java/com/takensoft/cms/author/dao/AuthorDAO.java
--- src/main/java/com/takensoft/cms/author/dao/AuthorDAO.java
+++ src/main/java/com/takensoft/cms/author/dao/AuthorDAO.java
@@ -8,58 +8,70 @@
 import java.util.List;
 
 /**
- * @author  : takensoft
- * @since   : 2024.04.01
+ * @author takensoft
+ * @since 2024.04.01
+ * @modification
+ *     since    |    author    | description
+ *  2024.04.01  |  takensoft   | 최초 등록
+ *  2024.04.05  |  takensoft   | findByCheckAuthorCode, findAllSystem, findAll, findByAuthorCode, save, update 추가
+ *  2024.04.25  |  takensoft   | findAllCnt 추가
  *
- * 권한 정보 관련 Mapper
+ * 권한 정보 관련 DAO
  */
 @Mapper("authorDAO")
 public interface AuthorDAO {
+
     /**
-     * @author takensoft
-     * @since 2024.04.05
+     * @param authorVO - 권한 정보
+     * @return boolean - 권한코드 중복 여부
+     *
      * 권한코드 중복 검사
      */
     boolean findByCheckAuthorCode(AuthorVO authorVO);
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
-     * 전체 권한 목록 조회(신규 메뉴 등록 시 권한을 주기 위해 사용)
+     * @return List<AuthorVO> - 권한 정보를 담고 있는 객체 목록
+     *
+     * 전체 권한 목록 조회 (신규 메뉴 등록 시 권한을 주기 위해 사용)
      */
     List<AuthorVO> findAllSystem();
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
+     * @param pagination - 페이징 정보
+     * @return List<AuthorVO> - 권한 정보를 담고 있는 객체 목록
+     *
      * 권한 목록 조회
      */
     List<AuthorVO> findAll(Pagination pagination);
 
     /**
-     * @author takensoft
-     * @since 2024.04.25
+     * @param pagination - 페이징 정보
+     * @return int - 권한 목록 갯수
+     *
      * 권한 목록 갯수
      */
     int findAllCnt(Pagination pagination);
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
+     * @param authrtCd - 권한 코드
+     * @return AuthorVO - 권한 정보를 담고 있는 객체
+     *
      * 권한 상세 조회
      */
     AuthorVO findByAuthorCode(String authrtCd);
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
+     * @param authorVO - 권한 정보
+     * @return int - 권한 등록 결과
+     *
      * 권한 등록
      */
     int save(AuthorVO authorVO);
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
+     * @param authorVO - 권한 정보
+     * @return int - 권한 수정 결과
+     *
      * 권한 수정
      */
     int update(AuthorVO authorVO);
src/main/java/com/takensoft/cms/author/dto/AuthorDTO.java
--- src/main/java/com/takensoft/cms/author/dto/AuthorDTO.java
+++ src/main/java/com/takensoft/cms/author/dto/AuthorDTO.java
@@ -8,8 +8,11 @@
 /**
  * @author  : takensoft
  * @since   : 2024.04.01
+ * @modification
+ *     since    |    author    | description
+ *  2024.04.01  |  takensoft   | 최초 등록
  *
- * 권한 등록/수정 관련 DTO
+ * 권한 등록/수정 관련 VO
  */
 @Setter
 @Getter
@@ -19,32 +22,17 @@
 @ToString
 public class AuthorDTO {
 
-    /**
-     * 권한 코드
-     */
     @NotBlank(message = "권한코드는 필수 입력 값입니다.")
     @Size(min = 5, max = 50)
-    private String authrtCd;
-    /**
-     * 권한명
-     */
+    private String authrtCd;      // 권한코드
+
     @NotBlank(message = "권한명은 필수 입력 값입니다.")
     @Size(min = 4, max = 50)
-    private String authrtNm;
-    /**
-     * 권한 설명
-     */
-    private String authrtExpln;
-    /**
-     * 사용여부
-     */
-    private boolean useYn;
-    /**
-     * 등록자
-     */
-    private String rgtr;
-    /**
-     * 수정자
-     */
-    private String mdfr;
+    private String authrtNm;      // 권한명
+
+    private String authrtExpln;   // 권한설명
+    private boolean useYn;        // 사용여부
+    private String rgtr;          // 등록자
+    private String mdfr;          // 수정자
+
 }
src/main/java/com/takensoft/cms/author/service/AuthorService.java
--- src/main/java/com/takensoft/cms/author/service/AuthorService.java
+++ src/main/java/com/takensoft/cms/author/service/AuthorService.java
@@ -2,57 +2,71 @@
 
 import com.takensoft.cms.author.dto.AuthorDTO;
 import com.takensoft.cms.author.vo.AuthorVO;
+import com.takensoft.common.exception.CustomInsertFailException;
+import com.takensoft.common.exception.CustomUpdateFailException;
+import org.springframework.dao.DataAccessException;
 
 import java.util.List;
 import java.util.Map;
 
 /**
- * @author  : takensoft
- * @since   : 2024.04.01
+ * @author takensoft
+ * @since 2024.04.01
+ * @modification
+ *     since    |    author    | description
+ *  2024.04.01  |  takensoft   | 최초 등록
+ *  2024.04.05  |  takensoft   | findByCheckAuthorCode, findAllAuthor, findByAuthorCode, authorSave, authorUpdate, findAllSystem 추가
  *
  * 권한 정보 관련 인터페이스
  */
 public interface AuthorService {
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
+     * @param authorVO - 권한 정보
+     * @return boolean - 권한 중복 여부
+     *
      * 권한 중복 검사
      */
-    public boolean findByCheckAuthorCode(AuthorVO authorVO) throws Exception;
+    public boolean findByCheckAuthorCode(AuthorVO authorVO);
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
+     * @param params - 검색조건 및 페이징 정보
+     * @return Map<String, Object>
+     *  - list : 권한 목록
+     *  - pagination : 페이징 정보
+     *
      * 권한 목록 조회
      */
-    public Map<String, Object> findAllAuthor(Map<String, String> params) throws Exception;
+    public Map<String, Object> findAllAuthor(Map<String, String> params);
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
+     * @param authrtCd - 권한 코드
+     * @return AuthorVO - 권한 정보를 담고 있는 객체
+     *
      * 권한 상세 조회
      */
-    AuthorVO findByAuthorCode(String authrtCd) throws Exception;
+    AuthorVO findByAuthorCode(String authrtCd);
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
+     * @param authorVO - 권한 정보
+     * @return int - 권한 등록 결과
+     *
      * 권한 등록
      */
-    public int authorSave(AuthorVO authorVO) throws Exception;
+    public int authorSave(AuthorVO authorVO);
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
+     * @param authorVO - 권한 정보
+     * @return int - 권한 수정 결과
+     *
      * 권한 수정
      */
-    public int authorUpdate(AuthorVO authorVO) throws Exception;
+    public int authorUpdate(AuthorVO authorVO);
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
-     * 전체 권한 목록 조회(신규 메뉴 등록 시 권한을 주기 위해 사용)
+     * @return List<AuthorVO> - 권한 정보를 담고 있는 객체 목록
+     *
+     * 전체 권한 목록 조회 (신규 메뉴 등록 시 권한을 주기 위해 사용)
      */
-    public List<AuthorVO> findAllSystem() throws Exception;
+    public List<AuthorVO> findAllSystem();
 }
src/main/java/com/takensoft/cms/author/service/Impl/AuthorServiceImpl.java
--- src/main/java/com/takensoft/cms/author/service/Impl/AuthorServiceImpl.java
+++ src/main/java/com/takensoft/cms/author/service/Impl/AuthorServiceImpl.java
@@ -5,21 +5,28 @@
 import com.takensoft.cms.author.vo.AuthorVO;
 import com.takensoft.cms.menu.service.MenuAuthorService;
 import com.takensoft.common.Pagination;
+import com.takensoft.common.exception.*;
 import com.takensoft.common.util.JWTUtil;
 import lombok.RequiredArgsConstructor;
 import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import org.springframework.dao.DataAccessException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 
 /**
- * @author  : takensoft
- * @since   : 2024.04.01
+ * @author takensoft
+ * @since 2024.04.01
+ * @modification
+ *     since    |    author    | description
+ *  2024.04.01  |  takensoft   | 최초 등록
+ *  2024.04.05  |  takensoft   | findByCheckAuthorCode, findAllAuthor, findByAuthorCode, authorSave, authorUpdate, findAllSystem 추가
  *
- * 권한 정보 관련 구현체
  * EgovAbstractServiceImpl : 전자정부 상속
- * AuthorService : 권한 정보 인터페이스 상속
+ * AuthorService : 권한 정보 관련 인터페이스 상속
+ *
+ * 권한 정보 관련 인터페이스 구현체
  */
 @Service("authorService")
 @RequiredArgsConstructor
@@ -29,88 +36,163 @@
     private final JWTUtil jwtUtil;
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
+     * @param authorVO - 권한 정보
+     * @return boolean - 권한 중복 여부
+     * @throws DataAccessException - db 관련 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
+     *
      * 권한 중복 검사
      */
     @Override
-    public boolean findByCheckAuthorCode(AuthorVO authorVO) throws Exception {
-        return authorDAO.findByCheckAuthorCode(authorVO);
+    public boolean findByCheckAuthorCode(AuthorVO authorVO) {
+        try {
+            boolean result = authorDAO.findByCheckAuthorCode(authorVO);
+            if(result) {
+                throw new CustomCodeDuplicationException();
+            }
+            return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
     }
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
+     * @param params - 검색조건 및 페이징 정보
+     * @return Map<String, Object>
+     *  - list : 권한 목록
+     *  - pagination : 페이징 정보
+     *  @throws DataAccessException - db 관련 예외 발생 시
+     *  @throws Exception - 그 외 예외 발생 시
+     *
      * 권한 목록 조회
      */
     @Override
-    public Map<String, Object> findAllAuthor(Map<String, String> params) throws Exception {
-        Map<String, Object> result = new HashMap<String, Object>(); // 반환 객체 생성
-        Pagination search = new Pagination(0, params); // 검색조건 객체 생성
-        int cnt = authorDAO.findAllCnt(search); // 게시물 갯수
-        Pagination pagination = new Pagination(cnt, params); // 게시물 갯수 조회 후 검색조건 객체 초기화
-        List<AuthorVO> list = authorDAO.findAll(pagination); // 목록 조회
+    public Map<String, Object> findAllAuthor(Map<String, String> params) {
+        try {
+            Map<String, Object> result = new HashMap<String, Object>(); // 반환 객체 생성
+            Pagination search = new Pagination(0, params); // 검색조건 객체 생성
+            int cnt = authorDAO.findAllCnt(search); // 게시물 갯수
+            Pagination pagination = new Pagination(cnt, params); // 게시물 갯수 조회 후 검색조건 객체 초기화
+            List<AuthorVO> list = authorDAO.findAll(pagination); // 목록 조회
 
-        result.put("list", list);
-        result.put("pagination", pagination);
+            result.put("list", list);
+            result.put("pagination", pagination);
 
-        return result;
+            return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
     }
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
+     * @param authrtCd - 권한 코드
+     * @return AuthorVO - 권한 정보를 담고 있는 객체
+     * @throws DataAccessException - db 관련 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
+     *
      * 권한 상세 조회
      */
     @Override
-    public AuthorVO findByAuthorCode(String authrtCd) throws Exception {
-        AuthorVO result = new AuthorVO();
-        if(authrtCd != null && !authrtCd.equals("")) {
-            result = authorDAO.findByAuthorCode(authrtCd);
-        } else {
-            result.setUseYn("Y");
+    public AuthorVO findByAuthorCode(String authrtCd) {
+        try {
+            AuthorVO result = new AuthorVO();
+            if (authrtCd != null && !authrtCd.equals("")) {
+                result = authorDAO.findByAuthorCode(authrtCd);
+            } else {
+                result.setUseYn("Y");
+            }
+            return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
         }
-        return result;
     }
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
+     * @param authorVO - 권한 정보
+     * @return int - 권한 등록 결과
+     * @throws CustomInsertFailException - 권한 등록 예외 발생 시
+     * @throws DataAccessException - db 관련 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
+     *
      * 권한 등록
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int authorSave(AuthorVO authorVO) throws Exception {
-        // 등록된 토큰에서 사용자 정보 조회
-        authorVO.setRgtr(jwtUtil.getWriter());
-        int result = authorDAO.save(authorVO);
-        
-        // 메뉴별 권한 등록
-        if(result > 0) {
-            result += menuAuthorService.menuAuthrtSave(authorVO.getAuthrtCd(), "author");
+    public int authorSave(AuthorVO authorVO) {
+        try {
+            // 등록된 토큰에서 사용자 정보 조회
+            authorVO.setRgtr(jwtUtil.getWriter());
+            int result = authorDAO.save(authorVO);
+            if(result == 0) {
+                throw new CustomInsertFailException("권한 등록에 실패했습니다.");
+            }
+
+            // 메뉴별 권한 등록
+            if (result > 0) {
+                result += menuAuthorService.menuAuthrtSave(authorVO.getAuthrtCd(), "author");
+            }
+            return result;
+        } catch (CustomInsertFailException cife) {
+            throw cife;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
         }
-        return result;
     }
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
+     * @param authorVO - 권한 정보
+     * @return int - 권한 수정 결과
+     * @throws CustomUpdateFailException - 권한 수정 예외 발생 시
+     * @throws DataAccessException - db 관련 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
+     *
      * 권한 수정
      */
     @Override
-    public int authorUpdate(AuthorVO authorVO) throws Exception {
-        // 등록된 토큰에서 사용자 정보 조회
-        authorVO.setMdfr(jwtUtil.getWriter());
-        return authorDAO.update(authorVO);
+    public int authorUpdate(AuthorVO authorVO) {
+        try {
+            // 등록된 토큰에서 사용자 정보 조회
+            authorVO.setMdfr(jwtUtil.getWriter());
+            int result = authorDAO.update(authorVO);
+            if(result == 0) {
+                if(authorVO.getUseYn() != null && authorVO.getUseYn().equals("N")) {
+                    throw new CustomDeleteFailException("권한 삭제에 실패했습니다.");
+                } else {
+                    throw new CustomUpdateFailException("권한 수정에 실패했습니다.");
+                }
+            }
+
+            return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
     }
 
     /**
-     * @author takensoft
-     * @since 2024.04.05
-     * 전체 권한 목록 조회(신규 메뉴 등록 시 권한을 주기 위해 사용)
+     * @return List<AuthorVO> - 권한 정보를 담고 있는 객체 목록
+     * @throws DataAccessException - db 관련 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
+     *
+     * 전체 권한 목록 조회 (신규 메뉴 등록 시 권한을 주기 위해 사용)
      */
     @Override
-    public List<AuthorVO> findAllSystem() throws Exception {
-        return authorDAO.findAllSystem();
+    public List<AuthorVO> findAllSystem() {
+        try {
+            return authorDAO.findAllSystem();
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
     }
 }
src/main/java/com/takensoft/cms/author/vo/AuthorVO.java
--- src/main/java/com/takensoft/cms/author/vo/AuthorVO.java
+++ src/main/java/com/takensoft/cms/author/vo/AuthorVO.java
@@ -4,9 +4,13 @@
 import lombok.Getter;
 import lombok.NoArgsConstructor;
 import lombok.Setter;
+
 /**
  * @author  : takensoft
  * @since   : 2024.04.01
+ * @modification
+ *     since    |    author    | description
+ *  2024.04.01  |  takensoft   | 최초 등록
  *
  * 권한 정보 관련 VO
  */
@@ -15,58 +19,19 @@
 @NoArgsConstructor
 @AllArgsConstructor
 public class AuthorVO {
-    /**
-     * 권한코드
-     */
-    private String authrtCd;
-    /**
-     * 변경전 권한코드
-     */
-    private String originAuthrtCd;
-    /**
-     * 권한명
-     */
-    private String authrtNm;
-    /**
-     * 권한 사용자
-     */
-    private String mbrId;
-    /**
-     * 권한설명
-     */
-    private String authrtExpln;
-    /**
-     * 사용여부
-     */
-    private String useYn;
-    /**
-     * 시스템 제공 여부 -> 시스템에서 제공되는 데이터는 사용자가 제거하지 못하도록 하기 위한 설정값
-     * 0: 시스템, 1: 사용자
-     */
-    private String sysPvsnYn;
-    /**
-     * 등록자
-     */
-    private String rgtr;
-    /**
-     * 등록자명
-     */
-    private String rgtrNm;
-    /**
-     * 등록일
-     */
-    private String regDt;
-    /**
-     * 수정자
-     */
-    private String mdfr;
-    /**
-     * 수정자명
-     */
-    private String mdfrNm;
-    /**
-     * 수정일
-     */
-    private String mdfcnDt;
+
+    private String authrtCd;         // 권한코드
+    private String originAuthrtCd;   // 변경전 권한코드
+    private String authrtNm;         // 권한명
+    private String mbrId;            // 권한 사용자
+    private String authrtExpln;      // 권한설명
+    private String useYn;            // 사용여부
+    private String sysPvsnYn;        // 시스템 제공 여부 ( 0: 시스템, 1: 사용자 ) -> 시스템에서 제공되는 데이터는 사용자가 제거하지 못하도록 하기 위한 설정값
+    private String rgtr;             // 등록자
+    private String rgtrNm;           // 등록자명
+    private String regDt;            // 등록일
+    private String mdfr;             // 수정자
+    private String mdfrNm;           // 수정자명
+    private String mdfcnDt;          // 수정일
 
 }
src/main/java/com/takensoft/cms/author/web/AuthorController.java
--- src/main/java/com/takensoft/cms/author/web/AuthorController.java
+++ src/main/java/com/takensoft/cms/author/web/AuthorController.java
@@ -23,12 +23,16 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 /**
  * @author takensoft
  * @since 2024.04.01
  * @modification
  *     since    |    author    | description
  *  2024.04.01  |  takensoft   | 최초 등록
+ *  2024.04.03  |  takensoft   | saveProc 추가
+ *  2024.04.15  |  takensoft   | findAll, findByAuthrt, updateProc, deleteProc 추가
+ *  2024.04.26  |   박 정 하    | findAllSystem 추가
  *
  * 권한 정보 관련 컨트롤러
  */
@@ -42,138 +46,100 @@
     private final AuthorService authorService;
 
     /**
-     * @author takensoft
-     * @since 2024.04.03
-     * @param authorVO
-     * @return
-     * @throws Exception
+     * @param authorVO - 권한 정보
+     * @return ResponseEntity
+     *  - data : 응답 데이터
+     *  - message : 응답 메시지
      *
      * 권한 등록
      */
     @PostMapping("/saveProc.json")
-    public ResponseEntity<?> saveProc(@RequestBody AuthorVO authorVO) throws Exception {
+    public ResponseEntity<?> saveProc(@RequestBody AuthorVO authorVO) {
         // 권한 코드 중복 검사
         boolean isExistence = authorService.findByCheckAuthorCode(authorVO);
 
-
-        if(isExistence) {
-            return resUtil.errorRes(MessageCode.COMMON_DUPLICATION_CODE);
-        }
         // 권한 등록
         int result = authorService.authorSave(authorVO);
-        // 응답 처리
-        if(result > 0) {
-            return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
-        } else {
-            return resUtil.errorRes(MessageCode.COMMON_INSERT_FAIL);
-        }
-    }
-
-    /**
-     * @author takensoft
-     * @since 2024.04.15
-     * @param params
-     * @return
-     * @throws Exception
-     *
-     * 권한 목록 조회
-     */
-    @PostMapping("/findAll.json")
-    public ResponseEntity<?> findAll(@RequestBody Map<String, String> params) throws Exception {
-        // 권한 목록 조회
-        Map<String, Object> result = authorService.findAllAuthor(params);
-        // 응답 처리
         return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
     }
 
     /**
-     * @author takensoft
-     * @since 2024.04.15
-     * @param authorVO
-     * @return
-     * @throws Exception
+     * @param params - 검색조건 및 페이징 정보
+     * @return ResponseEntity
+     *  - data : 응답 데이터
+     *  - message : 응답 메시지
+     *
+     * 권한 목록 조회
+     */
+    @PostMapping("/findAll.json")
+    public ResponseEntity<?> findAll(@RequestBody Map<String, String> params) {
+        Map<String, Object> result = authorService.findAllAuthor(params);
+        return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
+    }
+
+    /**
+     * @param authorVO - 권한 정보
+     * @return ResponseEntity
+     *  - data : 응답 데이터
+     *  - message : 응답 메시지
      *
      * 권한 상세 조회
      */
     @PostMapping("/findByAuthrt.json")
-    public ResponseEntity<?> findByAuthrt(@RequestBody AuthorVO authorVO) throws Exception {
-        // 권한 상세 조회
+    public ResponseEntity<?> findByAuthrt(@RequestBody AuthorVO authorVO) {
         AuthorVO authrt = authorService.findByAuthorCode(authorVO.getAuthrtCd());
 
         Map<String, Object> result = new HashMap<String, Object>();
         result.put("authrt", authrt);
 
-        // 응답 처리
         return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
     }
 
     /**
-     * @author takensoft
-     * @since 2024.04.15
-     * @param authorVO
-     * @return
-     * @throws Exception
+     * @param authorVO - 권한 정보
+     * @return ResponseEntity
+     *  - data : 응답 데이터
+     *  - message : 응답 메시지
      *
      * 권한 수정
      */
     @PostMapping("/updateProc.json")
-    public ResponseEntity<?> updateProc(@RequestBody AuthorVO authorVO) throws Exception {
+    public ResponseEntity<?> updateProc(@RequestBody AuthorVO authorVO) {
         
         // 권한 코드의 변경 사항이 있을 때만 코드 중복 검사 진행
         if(authorVO.getOriginAuthrtCd() != null && !authorVO.getOriginAuthrtCd().equals("") && !authorVO.getOriginAuthrtCd().equals(authorVO.getAuthrtCd())) {
             // 권한 코드 중복 검사
             boolean isExistence = authorService.findByCheckAuthorCode(authorVO);
-            if(isExistence) {
-                return resUtil.errorRes(MessageCode.COMMON_DUPLICATION_CODE);
-            }
         }
-        
-        // 권한 수정
-        int result = authorService.authorUpdate(authorVO);
 
-        // 응답 처리
-        if(result > 0) {
-            return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
-        } else {
-            return resUtil.errorRes(MessageCode.COMMON_UPDATE_FAIL);
-        }
+        int result = authorService.authorUpdate(authorVO);
+        return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
     }
 
     /**
-     * @author takensoft
-     * @since 2024.04.15
-     * @param authorVO
-     * @return
-     * @throws Exception
+     * @param authorVO - 권한 정보
+     * @return ResponseEntity
+     *  - data : 응답 데이터
+     *  - message : 응답 메시지
      *
      * 권한 삭제
      */
     @PostMapping("/deleteProc.json")
-    public ResponseEntity<?> deleteProc(@RequestBody AuthorVO authorVO) throws Exception {
-        // 권한 삭제
+    public ResponseEntity<?> deleteProc(@RequestBody AuthorVO authorVO) {
         int result = authorService.authorUpdate(authorVO);
-
-        // 응답 처리
-        if(result > 0) {
-            return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
-        } else {
-            return resUtil.errorRes(MessageCode.COMMON_DELETE_FAIL);
-        }
+        return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
     }
 
     /**
-     * @author 박정하
-     * @since 2024.04.26
-     * @param
-     * @return
-     * @throws Exception
+     * @return ResponseEntity
+     *  - data : 응답 데이터
+     *  - message : 응답 메시지
      *
-     * 전체 권한 목록 조회(신규 메뉴 등록 시 권한을 주기 위해 사용)
+     * 전체 권한 목록 조회 (신규 메뉴 등록 시 권한을 주기 위해 사용)
      */
     @PostMapping("/findAllSystem.json")
-    public ResponseEntity<?> findAllSystem() throws Exception {
+    public ResponseEntity<?> findAllSystem() {
         List<AuthorVO> result = authorService.findAllSystem();
-        // 응답 처리
         return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
     }
 }
src/main/java/com/takensoft/cms/menu/service/Impl/MenuAuthorServiceImpl.java
--- src/main/java/com/takensoft/cms/menu/service/Impl/MenuAuthorServiceImpl.java
+++ src/main/java/com/takensoft/cms/menu/service/Impl/MenuAuthorServiceImpl.java
@@ -53,7 +53,7 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     @CacheEvict(value = "routerAuthInfo", allEntries = true)
-    public int menuAuthrtSave(String id, String type) throws Exception {
+    public int menuAuthrtSave(String id, String type) {
         int result = 0;
         // 타입이 null or empty 경우 에러 발생
         if(type == null || type.equals("")) {
src/main/java/com/takensoft/cms/menu/service/MenuAuthorService.java
--- src/main/java/com/takensoft/cms/menu/service/MenuAuthorService.java
+++ src/main/java/com/takensoft/cms/menu/service/MenuAuthorService.java
@@ -16,7 +16,7 @@
      * @since 2024.04.15
      * 메뉴별 권한 등록
      */
-    public int menuAuthrtSave(String menuId, String type) throws Exception;
+    public int menuAuthrtSave(String menuId, String type);
 
     /**
      * @author 박정하
 
src/main/java/com/takensoft/common/exception/CustomCodeDuplicationException.java (added)
+++ src/main/java/com/takensoft/common/exception/CustomCodeDuplicationException.java
@@ -0,0 +1,26 @@
+package com.takensoft.common.exception;
+
+/**
+ * @author takensoft
+ * @since 2025.03.12
+ * @modification
+ *     since    |    author    | description
+ *  2025.03.12  |   하 석 형    | 최초 등록
+ *
+ * RuntimeException - 실행 중 발생하는 예외를 처리하는 기본 클래스
+ *
+ * 중복 코드 존재 시 발생하는 예외
+ */
+public class CustomCodeDuplicationException extends RuntimeException {
+
+    public CustomCodeDuplicationException() {
+    }
+
+    public CustomCodeDuplicationException(String message) {
+        super(message);
+    }
+
+    public CustomCodeDuplicationException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}(No newline at end of file)
 
src/main/java/com/takensoft/common/exception/CustomDataDuplicationException.java (added)
+++ src/main/java/com/takensoft/common/exception/CustomDataDuplicationException.java
@@ -0,0 +1,26 @@
+package com.takensoft.common.exception;
+
+/**
+ * @author takensoft
+ * @since 2025.03.12
+ * @modification
+ *     since    |    author    | description
+ *  2025.03.12  |   하 석 형    | 최초 등록
+ *
+ * RuntimeException - 실행 중 발생하는 예외를 처리하는 기본 클래스
+ *
+ * 중복 데이터 존재 시 발생하는 예외
+ */
+public class CustomDataDuplicationException extends RuntimeException {
+
+    public CustomDataDuplicationException() {
+    }
+
+    public CustomDataDuplicationException(String message) {
+        super(message);
+    }
+
+    public CustomDataDuplicationException(String message, Throwable cause) {
+        super(message, cause);
+    }
+}(No newline at end of file)
src/main/java/com/takensoft/common/exception/GlobalExceptionHandler.java
--- src/main/java/com/takensoft/common/exception/GlobalExceptionHandler.java
+++ src/main/java/com/takensoft/common/exception/GlobalExceptionHandler.java
@@ -244,6 +244,30 @@
     }
 
     /**
+     * @param ccde - CustomCodeDuplicationException 예외 객체
+     * @return CustomCodeDuplicationException 대한 HTTP 응답
+     *
+     * CustomCodeDuplicationException 발생한 경우
+     */
+    @ExceptionHandler(CustomCodeDuplicationException.class)
+    public ResponseEntity<?> handleCustomCodeDuplicationException(CustomCodeDuplicationException ccde) {
+        logError(ccde);
+        return resUtil.errorRes(MessageCode.COMMON_DUPLICATION_CODE);
+    }
+
+    /**
+     * @param cdde - CustomDataDuplicationException 예외 객체
+     * @return CustomDataDuplicationException 대한 HTTP 응답
+     *
+     * CustomDataDuplicationException 발생한 경우
+     */
+    @ExceptionHandler(CustomCodeDuplicationException.class)
+    public ResponseEntity<?> handleCustomDataDuplicationException(CustomDataDuplicationException cdde) {
+        logError(cdde);
+        return resUtil.errorRes(MessageCode.COMMON_DUPLICATION_DATA);
+    }
+
+    /**
      * @param e - Exception 예외 객체
      * @return 기타 예외에 대한 HTTP 응답
      *
Add a comment
List