하석형 하석형 05-02
250502 하석형 트랜잭션 추가, try catch exception 수정
@00c98a5f7600ecbaee8e6d0cca0b8e6b150c1c31
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
@@ -16,6 +16,7 @@
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.dao.DataAccessException;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.HashMap;
 import java.util.List;
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
@@ -6,7 +6,6 @@
 import com.takensoft.cms.menu.service.MenuAuthorService;
 import com.takensoft.common.Pagination;
 import com.takensoft.common.exception.*;
-import com.takensoft.common.idgen.service.IdgenService;
 import com.takensoft.common.util.JWTUtil;
 import lombok.RequiredArgsConstructor;
 import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
@@ -51,7 +50,7 @@
         try {
             boolean result = authorDAO.findByCheckAuthorCode(authorVO);
             if(result) {
-                throw new CustomCodeDuplicationException();
+                throw new CustomCodeDuplicationException("이미 존재하는 권한 코드입니다.");
             }
             return result;
         } catch (DataAccessException dae) {
src/main/java/com/takensoft/cms/bbs/service/Impl/BbsCnServiceImpl.java
--- src/main/java/com/takensoft/cms/bbs/service/Impl/BbsCnServiceImpl.java
+++ src/main/java/com/takensoft/cms/bbs/service/Impl/BbsCnServiceImpl.java
@@ -6,7 +6,6 @@
 import com.takensoft.cms.bbs.service.BbsCnService;
 import com.takensoft.cms.bbs.vo.BbsCnVO;
 import com.takensoft.cms.bbs.vo.BbsMngVO;
-import com.takensoft.cms.bbs.vo.WordMngVO;
 import com.takensoft.common.Pagination;
 import com.takensoft.common.exception.*;
 import com.takensoft.common.file.dao.FileDAO;
@@ -23,11 +22,8 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.IOException;
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -117,8 +113,8 @@
      *
      * 게시판 내용 등록
      */
-    @Transactional(rollbackFor = Exception.class)
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HashMap<String, Object> saveBbsCn(BbsCnVO bbsCn, List<MultipartFile> multipartFileList, List<MultipartFile> multipartImgList) {
         try {
             HashMap<String, Object> result = new HashMap<>();
@@ -196,8 +192,6 @@
             result.put("result", saveBbsCnResult);
 
             return result;
-        } catch (CustomNotFoundException | CustomFileUploadFailException | CustomInsertFailException | IllegalArgumentException le) {
-            throw le;
         } catch (DataAccessException dae) {
             throw dae;
         } catch (Exception e) {
@@ -339,8 +333,8 @@
      *
      * 게시판 내용 수정
      */
-    @Transactional(rollbackFor = Exception.class)
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HashMap<String, Object> updateBbsCn(HashMap<String, Object> params, List<HashMap<String, Object>> deleteFileList, List<MultipartFile> multipartFileList, List<HashMap<String, Object>> deleteImgFileList, List<MultipartFile> multipartImgList) {
         try {
             HashMap<String, Object> result = new HashMap<>();
@@ -424,10 +418,7 @@
 
             result.put("result", intResult);
             return result;
-        } catch (CustomNotFoundException | CustomFileUploadFailException | CustomInsertFailException | CustomUpdateFailException | IllegalArgumentException
-                | CustomDeleteFailException le) {
-            throw le;
-        }  catch (DataAccessException dae) {
+        } catch (DataAccessException dae) {
             throw dae;
         } catch (Exception e) {
             throw e;
@@ -760,6 +751,4 @@
             throw e;
         }
     }
-
-
 }
(파일 끝에 줄바꿈 문자 없음)
src/main/java/com/takensoft/cms/bbs/service/Impl/BbsMngServiceImpl.java
--- src/main/java/com/takensoft/cms/bbs/service/Impl/BbsMngServiceImpl.java
+++ src/main/java/com/takensoft/cms/bbs/service/Impl/BbsMngServiceImpl.java
@@ -7,10 +7,8 @@
 import com.takensoft.cms.bbs.vo.BbsMngVO;
 import com.takensoft.cms.bbs.vo.BbsRouterVO;
 import com.takensoft.cms.bbs.vo.BbsTypeMngVO;
-import com.takensoft.cms.codeManage.service.CodeManageService;
 import com.takensoft.cms.menu.service.MenuService;
 import com.takensoft.cms.menu.vo.MenuVO;
-import com.takensoft.common.HierachyVO;
 import com.takensoft.common.Pagination;
 import com.takensoft.common.exception.*;
 import com.takensoft.common.idgen.service.IdgenService;
@@ -143,8 +141,6 @@
             result.put("bbsMngId", bbsMngId);
             result.put("result", insertResult);
             return result;
-        } catch (CustomInsertFailException | NullPointerException le) {
-            throw le;
         } catch (DataAccessException dae) {
             throw dae;
         } catch (Exception e) {
@@ -270,6 +266,7 @@
      * 게시판 관리 수정
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     @CacheEvict(value = "routerAuthInfo", allEntries = true)
     public int updateBbsMng(BbsMngVO bbsMngVO) {
         try {
@@ -330,8 +327,6 @@
             }
 
             return result;
-        } catch (CustomUpdateFailException | CustomDeleteFailException | CustomInsertFailException le) {
-            throw le;
         } catch (DataAccessException dae) {
             throw dae;
         } catch (Exception e) {
@@ -349,8 +344,8 @@
      *
      * 게시판 관리 삭제
      */
-    @Transactional(rollbackFor = Exception.class)
     @Override
+    @Transactional(rollbackFor = Exception.class)
     @CacheEvict(value = "routerAuthInfo", allEntries = true)
     public int deleteBbsMng(BbsMngVO bbsMngVO) {
         try {
@@ -380,8 +375,6 @@
             }
 
             return result;
-        } catch (CustomDeleteFailException cdfe) {
-            throw cdfe;
         } catch (DataAccessException dae) {
             throw dae;
         } catch (Exception e) {
@@ -514,8 +507,6 @@
             }
 
             return result;
-        } catch (CustomInsertFailException cife) {
-            throw cife;
         } catch (DataAccessException dae) {
             throw dae;
         } catch (Exception e) {
src/main/java/com/takensoft/cms/bbs/service/Impl/BbsTypeMngServiceImpl.java
--- src/main/java/com/takensoft/cms/bbs/service/Impl/BbsTypeMngServiceImpl.java
+++ src/main/java/com/takensoft/cms/bbs/service/Impl/BbsTypeMngServiceImpl.java
@@ -3,9 +3,7 @@
 import com.takensoft.cms.bbs.dao.BbsTypeMngDAO;
 import com.takensoft.cms.bbs.service.BbsTypeMngService;
 import com.takensoft.cms.bbs.vo.BbsTypeMngVO;
-import com.takensoft.common.exception.CustomDataDuplicationException;
-import com.takensoft.common.exception.CustomInsertFailException;
-import com.takensoft.common.exception.CustomNotFoundException;
+import com.takensoft.common.exception.*;
 import com.takensoft.common.idgen.service.IdgenService;
 import com.takensoft.common.util.JWTUtil;
 import lombok.RequiredArgsConstructor;
src/main/java/com/takensoft/cms/bbs/service/Impl/CmntServiceImpl.java
--- src/main/java/com/takensoft/cms/bbs/service/Impl/CmntServiceImpl.java
+++ src/main/java/com/takensoft/cms/bbs/service/Impl/CmntServiceImpl.java
@@ -154,7 +154,6 @@
      * 게시판 댓글 수정
      */
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public HashMap<String, Object> updateCmnt(CmntVO cmntVO) {
         try {
             HashMap<String, Object> result = new HashMap<>();
@@ -200,7 +199,6 @@
      * 게시판 댓글 삭제
      */
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public int deleteCmnt(CmntVO cmntVO) {
         try {
             // 등록된 토큰에서 사용자 정보 조회
src/main/java/com/takensoft/cms/bbs/service/Impl/WordMngServiceImpl.java
--- src/main/java/com/takensoft/cms/bbs/service/Impl/WordMngServiceImpl.java
+++ src/main/java/com/takensoft/cms/bbs/service/Impl/WordMngServiceImpl.java
@@ -10,6 +10,7 @@
 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.HashMap;
 import java.util.List;
@@ -45,6 +46,7 @@
      * 금지어 등록
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int saveWords(HashMap<String, Object> wordList) {
         try {
             // 등록된 토큰에서 사용자 정보 조회
@@ -116,6 +118,7 @@
      * 금지어 삭제
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int deleteWords(HashMap<String, Object> params) {
         try {
             List<Integer> wordsArr = (List<Integer>) params.get("wordsArr");
src/main/java/com/takensoft/cms/cntxtPth/service/Impl/CntxtPthServiceImpl.java
--- src/main/java/com/takensoft/cms/cntxtPth/service/Impl/CntxtPthServiceImpl.java
+++ src/main/java/com/takensoft/cms/cntxtPth/service/Impl/CntxtPthServiceImpl.java
@@ -3,8 +3,7 @@
 import com.takensoft.cms.cntxtPth.dao.CntxtPthDAO;
 import com.takensoft.cms.cntxtPth.service.CntxtPthService;
 import com.takensoft.cms.cntxtPth.vo.CntxtPthVO;
-import com.takensoft.common.exception.CustomInsertFailException;
-import com.takensoft.common.exception.CustomNotFoundException;
+import com.takensoft.common.exception.*;
 import com.takensoft.common.idgen.service.IdgenService;
 import com.takensoft.common.util.JWTUtil;
 import lombok.RequiredArgsConstructor;
@@ -14,10 +13,6 @@
 import org.springframework.dao.DataAccessException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 
 /**
  * @author 하석형
@@ -74,8 +69,8 @@
      * 컨텍스트 패스 등록
      */
     @Override
-    @CacheEvict(value = "cntxtPthInfo", allEntries = true)
     @Transactional(rollbackFor = Exception.class)
+    @CacheEvict(value = "cntxtPthInfo", allEntries = true)
     public int cntxtPthSave(CntxtPthVO cntxtPthVO) {
         try {
             // 등록된 토큰에서 사용자 정보 조회
src/main/java/com/takensoft/cms/codeManage/service/Impl/CodeManageServiceImpl.java
--- src/main/java/com/takensoft/cms/codeManage/service/Impl/CodeManageServiceImpl.java
+++ src/main/java/com/takensoft/cms/codeManage/service/Impl/CodeManageServiceImpl.java
@@ -3,9 +3,7 @@
 import com.takensoft.cms.codeManage.dao.CodeManageDAO;
 import com.takensoft.cms.codeManage.service.CodeManageService;
 import com.takensoft.cms.codeManage.vo.CodeManageVO;
-import com.takensoft.common.exception.CustomInsertFailException;
-import com.takensoft.common.exception.CustomNotFoundException;
-import com.takensoft.common.exception.CustomUpdateFailException;
+import com.takensoft.common.exception.*;
 import com.takensoft.common.util.JWTUtil;
 import com.takensoft.common.HierachyVO;
 import lombok.RequiredArgsConstructor;
@@ -50,8 +48,8 @@
     /**
      * @param codeManageVO - 공통코드 정보
      * @return boolean - 중복 여부
+     * @throws CustomCodeDuplicationException - 코드 중복 예외 발생 시
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
-     * @throws NullPointerException - Null 값이 발생할 경우
      * @throws Exception - 그 외 예외 발생 시
      *
      * 코드 중복 검사
@@ -59,7 +57,11 @@
     @Override
     public boolean findByCheckCd(CodeManageVO codeManageVO) {
         try {
-            return codeManageDAO.findByCheckCd(codeManageVO);
+            boolean result = codeManageDAO.findByCheckCd(codeManageVO);
+            if (result) {
+                throw new CustomCodeDuplicationException("이미 존재하는 코드입니다.");
+            }
+            return result;
         } catch (DataAccessException dae) {
             throw dae;
         } catch (Exception e) {
@@ -71,7 +73,7 @@
      * @param codeManageVO - 공통코드 정보
      * @return int - 등록 결과
      * @throws CustomNotFoundException - 사용자 정보 조회 예외 발생 시
-     * @throws CustomInsertFailException - 등록 실패 시
+     * @throws CustomInsertFailException - 공통 코드 등록 실패 예외 발생 시
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
      * @throws NullPointerException - Null 값이 발생할 경우
      * @throws Exception - 그 외 예외 발생 시
@@ -103,7 +105,7 @@
             // 코드 등록 결과
             int result = codeManageDAO.save(codeManageVO);
             if(result == 0) {
-                throw new CustomInsertFailException("공통 코드 등록 실패");
+                throw new CustomInsertFailException("공통 코드 등록에 실패했습니다.");
             }
             return result;
         } catch (DataAccessException dae) {
@@ -119,7 +121,7 @@
      * @param codeManageVO - 공통코드 정보
      * @return int - 등록 결과
      * @throws CustomNotFoundException - 사용자 정보 조회 예외 발생 시
-     * @throws CustomUpdateFailException - 수정 실패 시
+     * @throws CustomUpdateFailException - 공통 코드 수정 실패 예외 발생 시
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
      * @throws NullPointerException - Null 값이 발생할 경우
      * @throws Exception - 그 외 예외 발생 시
@@ -139,7 +141,7 @@
             // 코드 수정
             int result = codeManageDAO.update(codeManageVO);
             if(result == 0) {
-                throw new CustomUpdateFailException("공통 코드 수정 실패");
+                throw new CustomUpdateFailException("공통 코드 수정에 실패했습니다.");
             }
             // 해당 코드가 변경됨에 따라 하위 코드의 상위 코드값 변경 (cd의 수정은 불가능 하므로 하위코드의 상위cd값 변경 로직 삭제)
 //            int updateChild = codeManageDAO.updateUpCd(codeManageVO);
@@ -279,6 +281,7 @@
     /**
      * @param cd - 공통코드 명
      * @return int - 삭제 결과
+     * @throws CustomDeleteFailException - 공통 코드 삭제 실패 예외 발생 시
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
      * @throws Exception - 그 외 예외 발생 시
      *
@@ -288,7 +291,11 @@
     @Transactional(rollbackFor = Exception.class)
     public int cdDelete(String cd) {
         try {
-            return codeManageDAO.deleteCd(cd);
+            int result = codeManageDAO.deleteCd(cd);
+            if(result == 0) {
+                throw new CustomDeleteFailException("공통 코드 삭제에 실패했습니다.");
+            }
+            return result;
         } catch (DataAccessException dae) {
             throw dae;
         } catch (Exception e) {
@@ -322,6 +329,7 @@
             throw e;
         }
     }
+
     /**
      * @param id - 상위 코드
      * @return List<HierachyVO> - 하위 코드 목록
@@ -348,14 +356,14 @@
     /************************************** Hierachy 전용 **************************************/
 
     /**
-     * @param deptList - 부서 코드 목록
-     * @return int - 부서 코드 수정 결과
+     * @param deptList - 공통 코드 목록
+     * @return int - 공통 코드 수정 결과
      * @throws CustomNotFoundException - 사용자 정보 조회 예외 발생 시
-     * @throws CustomUpdateFailException - 수정 실패 시
+     * @throws CustomUpdateFailException - 공통 코드 수정 실패 예외 발생 시
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
      * @throws Exception - 그 외 예외 발생 시
      *
-     * 부서 코드 수정 (hierachyVO 사용)
+     * 공통 코드 수정 (hierachyVO 사용)
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -380,17 +388,13 @@
 
                 int upCode = codeManageDAO.codeUpdateByHierachy(vo);
                 if(upCode == 0) {
-                    throw new CustomUpdateFailException("부서 코드 수정 실패");
+                    throw new CustomUpdateFailException("공통 코드 수정에 실패했습니다.");
                 }
                 result += upCode;
 
                 // 하위 노드 수정
                 if (hierachyVO.getChildList() != null && hierachyVO.getChildList().size() > 0) {
-
                     int childResult = updateChildNode(hierachyVO.getChildList(), vo);
-                    if(childResult == 0) {
-                        throw new CustomUpdateFailException("부서 코드 수정 실패");
-                    }
                 }
                 sn++;
             }
@@ -399,16 +403,17 @@
     }
 
     /**
-     * @param childList - 부서 코드 목록
+     * @param childList - 공통 코드 목록
      * @param upCodeManageVO - 상위 코드 정보
-     * @return int - 부서 코드 수정 결과
-     * @throws CustomUpdateFailException - 수정 실패 시
+     * @return int - 공통 코드 수정 결과
+     * @throws CustomUpdateFailException - 공통 코드 수정 실패 예외 발생 시
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
      * @throws Exception - 그 외 예외 발생 시
      *
      * 하위 코드 수정
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int updateChildNode(List<HierachyVO> childList, CodeManageVO upCodeManageVO){
         try {
             int result = 0;
@@ -424,7 +429,11 @@
                 vo.setCdGrd(grd);
                 vo.setCdSn(sn);
                 vo.setMdfr(mdfr);
-                result += codeManageDAO.codeUpdateByHierachy(vo);
+                int childCode = codeManageDAO.codeUpdateByHierachy(vo);
+                if(childCode == 0) {
+                    throw new CustomUpdateFailException("하위 공통 코드 수정에 실패했습니다.");
+                }
+                result += childCode;
 
                 // 하위 노드 수정
                 if (hierachyVO.getChildList() != null && hierachyVO.getChildList().size() > 0) {
src/main/java/com/takensoft/cms/contsType/service/Impl/ContsTypeServiceImpl.java
--- src/main/java/com/takensoft/cms/contsType/service/Impl/ContsTypeServiceImpl.java
+++ src/main/java/com/takensoft/cms/contsType/service/Impl/ContsTypeServiceImpl.java
@@ -10,9 +10,7 @@
 import com.takensoft.cms.menu.vo.MenuAuthorVO;
 import com.takensoft.cms.menu.vo.MenuVO;
 import com.takensoft.common.Pagination;
-import com.takensoft.common.exception.CustomInsertFailException;
-import com.takensoft.common.exception.CustomNotFoundException;
-import com.takensoft.common.exception.CustomUpdateFailException;
+import com.takensoft.common.exception.*;
 import com.takensoft.common.idgen.service.IdgenService;
 import com.takensoft.common.util.JWTUtil;
 import lombok.RequiredArgsConstructor;
@@ -108,8 +106,6 @@
             result.put("contsId", contsId);
             result.put("result", insertResult);
             return result;
-        } catch (CustomInsertFailException cife) {
-            throw cife;
         } catch (DataAccessException dae) {
             throw dae;
         } catch (NullPointerException npe) {
@@ -130,8 +126,8 @@
      * 콘텐츠 유형 수정
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     @CacheEvict(value = "routerAuthInfo", allEntries = true)
-    @Transactional
     public int contsUpdate(ContsTypeVO contsTypeVO){
         try {
             // 콘텐츠 유형 수정 결과
@@ -293,66 +289,50 @@
     /**
      * @param routes - 라우터 정보 목록
      * @return List<ContsAuthrtVO> - 콘텐츠 유형과 권한 정보 목록 조회 결과값
-     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
-     * @throws Exception - 그 외 예외 발생 시
      *
      * 라우터의 특정경로로 그룹화하여 각 그룹 내에서 권한을 공유
      */
     private List<ContsAuthrtVO> groupAndShareAuth(List<ContsAuthrtVO> routes) {
-        try {
-            // 경로의 특정 기준점으로 라우터를 그룹화
-            Map<String, List<ContsAuthrtVO>> groupedRoutes = routes.stream()
-                    .collect(Collectors.groupingBy(route -> route.getPageCrs().substring(0, route.getPageCrs().lastIndexOf('/')))); // 마지막 슬래시까지 포함된 경로 추출
+        // 경로의 특정 기준점으로 라우터를 그룹화
+        Map<String, List<ContsAuthrtVO>> groupedRoutes = routes.stream()
+                .collect(Collectors.groupingBy(route -> route.getPageCrs().substring(0, route.getPageCrs().lastIndexOf('/')))); // 마지막 슬래시까지 포함된 경로 추출
 
-            /* key */
+        /* key */
 //        Iterator<String> keys = groupedRoutes.keySet().iterator();
 //        while(keys.hasNext()) {
 //            String key = keys.next();
 //            System.out.println("key : " + key);
 //        }
-            /* key */
+        /* key */
 
-            // 그룹화된 각 경로에 대해 권한 정보 공유
-            groupedRoutes.forEach((basePath, routeGroup) -> {
-                List<MenuAuthorVO> sharedAuth = findMostComprehensiveAuth(routeGroup); // 그룹 내에서 가장 완전한 권한 정보 조회
-                // 그룹의 모든 라우트에 권한 정보가 없으면 공유된 권한 정보로 설정
-                routeGroup.forEach(route -> {
-                    if (route.getAuthrtList().isEmpty()) {
-                        route.setAuthrtList(sharedAuth);
-                    }
-                });
+        // 그룹화된 각 경로에 대해 권한 정보 공유
+        groupedRoutes.forEach((basePath, routeGroup) -> {
+            List<MenuAuthorVO> sharedAuth = findMostComprehensiveAuth(routeGroup); // 그룹 내에서 가장 완전한 권한 정보 조회
+            // 그룹의 모든 라우트에 권한 정보가 없으면 공유된 권한 정보로 설정
+            routeGroup.forEach(route -> {
+                if (route.getAuthrtList().isEmpty()) {
+                    route.setAuthrtList(sharedAuth);
+                }
             });
-            // 각 그룹의 라우터들을 리스트로 반환
-            return groupedRoutes.values().stream()
-                    .flatMap(List::stream)
-                    .collect(Collectors.toList());
-        } catch (DataAccessException dae) {
-            throw dae;
-        } catch (Exception e) {
-            throw e;
-        }
+        });
+        // 각 그룹의 라우터들을 리스트로 반환
+        return groupedRoutes.values().stream()
+                .flatMap(List::stream)
+                .collect(Collectors.toList());
     }
 
     /**
      * @param routeGroup - 콘텐츠 유형과 권한 정보 목록
      * @return List<MenuAuthorVO> - 권한 정보가 있는 첫 번째 라우터의 권한 정보 목록
-     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
-     * @throws Exception - 그 외 예외 발생 시
      *
      * 그룹 내에서 가장 완전한 권한 정보를 가진 라우터를 찾아 해당 권한 리스트 반환
      */
     private List<MenuAuthorVO> findMostComprehensiveAuth(List<ContsAuthrtVO> routeGroup) {
         // 권한정보가 있는 첫 번째 라우터를 찾아 권한 정보 반환
-        try {
-            return routeGroup.stream()
-                    .filter(route -> !route.getAuthrtList().isEmpty())
-                    .findFirst()
-                    .map(ContsAuthrtVO::getAuthrtList)
-                    .orElse(Collections.emptyList()); // 권한 정보가 없으면 빈 리스트 반환
-        } catch (DataAccessException dae) {
-            throw dae;
-        } catch (Exception e) {
-            throw e;
-        }
+        return routeGroup.stream()
+                .filter(route -> !route.getAuthrtList().isEmpty())
+                .findFirst()
+                .map(ContsAuthrtVO::getAuthrtList)
+                .orElse(Collections.emptyList()); // 권한 정보가 없으면 빈 리스트 반환
     }
 }
src/main/java/com/takensoft/cms/dept/service/Impl/DeptServiceImpl.java
--- src/main/java/com/takensoft/cms/dept/service/Impl/DeptServiceImpl.java
+++ src/main/java/com/takensoft/cms/dept/service/Impl/DeptServiceImpl.java
@@ -88,7 +88,7 @@
 
             insertResult = deptDAO.save(deptVO);
             if(insertResult == 0) {
-                throw new CustomInsertFailException("부서 등록 실패");
+                throw new CustomInsertFailException("부서 등록에 실패했습니다.");
             }
             // 부서 권한 등록
             if (deptVO.getAuthrtList().size() > 0) {
@@ -97,7 +97,7 @@
                     vo.setRgtr(writer);
                     int insertDeptAuth = deptDAO.authrtSave(vo); // 부서 권한 등록 결과
                     if(insertDeptAuth == 0) {
-                        throw new CustomInsertFailException("부서 권한 등록 실패");
+                        throw new CustomInsertFailException("부서 권한 등록에 실패했습니다.");
                     }
                 }
             }
@@ -140,7 +140,7 @@
 
             result = deptDAO.deptMbrSave(deptMbrVO); // 부서 사용자 등록
             if(result == 0) {
-                throw new CustomInsertFailException("부서 사용자 등록 실패");
+                throw new CustomInsertFailException("부서 사용자 등록에 실패했습니다.");
             }
             return result;
         } catch(DataAccessException dae) {
@@ -264,12 +264,12 @@
 
             result = deptDAO.update(deptVO); // 부서정보 수정
             if (result == 0) {
-                throw new CustomUpdateFailException("부서 정보 수정 실패");
+                throw new CustomUpdateFailException("부서 정보 수정에 실패했습니다.");
             }
             // 부서 권한 삭제 결과
             int deleteDeptAuth = deptDAO.deleteAuth(deptVO.getDeptId()); // 부서 권한 삭제
             if (deleteDeptAuth == 0) {
-                throw new CustomUpdateFailException("부서 권한 삭제 실패");
+                throw new CustomUpdateFailException("부서 권한 삭제에 실패했습니다.");
             }
             // 부서 권한 등록
             if (deptVO.getAuthrtList().size() > 0) {
@@ -278,7 +278,7 @@
                     vo.setRgtr(writer);
                     int insertDeptAuth = deptDAO.authrtSave(vo); // 부서 권한 등록 결과
                     if (insertDeptAuth == 0) {
-                        throw new CustomInsertFailException("부서 권한 등록 실패");
+                        throw new CustomInsertFailException("부서 권한 등록에 실패했습니다.");
                     }
                 }
             }
@@ -317,7 +317,7 @@
                 int deleteDeptAuth = 0; // 부서 사용자 삭제 결과
                 deleteDeptAuth = deptDAO.deleteDeptInDeptMbr(deptVO.getDeptId());
                 if (deleteDeptAuth == 0) {
-                    throw new CustomDeleteFailException("부서 사용자 삭제 실패");
+                    throw new CustomDeleteFailException("부서 사용자 삭제에 실패했습니다.");
                 }
             }
             return delResult;
@@ -350,7 +350,7 @@
                 if (deptDAO.findByDeptMber(param).size() > 0) {
                     int delMbrResult = deptDAO.deleteDeptMbr(param); // 부서 사용자 삭제
                     if (delMbrResult == 0) {
-                        throw new CustomDeleteFailException("부서 사용자 삭제 실패");
+                        throw new CustomDeleteFailException("부서 사용자 삭제에 실패했습니다.");
                     }
                     result += delMbrResult;
                 }
@@ -440,7 +440,7 @@
                     vo.setMdfr(writer);
                     int updateResult = deptDAO.deptUpdateByHierachy(vo);
                     if (updateResult == 0) {
-                        throw new CustomUpdateFailException("부서 정보 수정 실패");
+                        throw new CustomUpdateFailException("부서 정보 수정에 실패했습니다.");
                     }
                     result += updateResult;
 
@@ -452,8 +452,6 @@
                 }
             }
             return result;
-        } catch(CustomUpdateFailException cufe) {
-            throw cufe;
         } catch(DataAccessException dae) {
             throw dae;
         } catch (NullPointerException ne) {
@@ -474,6 +472,7 @@
      * 하위 부서 수정
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int updateChildNode(List<HierachyVO> childList, DeptVO upDeptVO) {
         try {
             int result = 0; // 부서 정보 수정 결과
@@ -491,7 +490,7 @@
                 vo.setMdfr(mdfr);
                 int updateResult = deptDAO.deptUpdateByHierachy(vo);
                 if (updateResult == 0) {
-                    throw new CustomUpdateFailException("부서 정보 수정 실패");
+                    throw new CustomUpdateFailException("부서 정보 수정에 실패했습니다.");
                 }
                 result += updateResult;
 
@@ -503,8 +502,6 @@
                 sn++;
             }
             return result;
-        } catch(CustomUpdateFailException cufe) {
-            throw cufe;
         } catch(DataAccessException dae) {
             throw dae;
         } catch (NullPointerException ne) {
src/main/java/com/takensoft/cms/mber/dto/PasswordDTO.java
--- src/main/java/com/takensoft/cms/mber/dto/PasswordDTO.java
+++ src/main/java/com/takensoft/cms/mber/dto/PasswordDTO.java
@@ -26,4 +26,5 @@
     private String pswd;                                    // 비밀번호[현재 비밀번호]
     @NotBlank(message = "변경할 비밀번호는 필수 입력 값입니다.")
     private String newPswd;                                 // 비밀번호[변경될 비밀번호]
+    private String mdfr;                                    // 수정자
 }
src/main/java/com/takensoft/cms/mber/service/Impl/AdmMbrServiceImpl.java
--- src/main/java/com/takensoft/cms/mber/service/Impl/AdmMbrServiceImpl.java
+++ src/main/java/com/takensoft/cms/mber/service/Impl/AdmMbrServiceImpl.java
@@ -11,7 +11,7 @@
 import com.takensoft.cms.mber.vo.MberAuthorVO;
 import com.takensoft.cms.mber.vo.MberVO;
 import com.takensoft.common.Pagination;
-import com.takensoft.common.exception.CustomNotFoundException;
+import com.takensoft.common.exception.*;
 import com.takensoft.common.idgen.service.IdgenService;
 import com.takensoft.common.util.HttpRequestUtil;
 import com.takensoft.common.util.JWTUtil;
@@ -133,6 +133,9 @@
      * @param admMbrDTO -회원정보
      * @return int - 회원정보 수정 결과
      * @throws CustomNotFoundException - 사용자 정보 조회 예외 발생 시
+     * @throws CustomUpdateFailException - 회원정보 수정 예외 발생 시
+     * @throws CustomDeleteFailException - 회원 권한 삭제 예외 발생 시
+     * @throws CustomInsertFailException - 회원 권한 등록 예외 발생 시
      * @throws DataAccessException - db 관련 예외 발생 시
      * @throws Exception - 그 외 예외 발생 시
      *
@@ -168,15 +171,24 @@
 
             // 회원정보 수정
             int result = admMbrDAO.updateMbr(admMbrDTO);
+            if(result == 0) {
+                throw new CustomUpdateFailException("회원정보 수정에 실패했습니다.");
+            }
 
             // 권한 수정
             result += admMbrDAO.deleteAuthorListByMbrId(admMbrDTO.getMbrId()); // 회원 권한 전체 삭제
+            if(result == 0) {
+                throw new CustomDeleteFailException("회원 권한 삭제에 실패했습니다.");
+            }
             if (admMbrDTO.getUseYn().equals("Y")) { // 수정일 경우 회원 권한 재 등록
                 if(admMbrDTO.getAuthorList() != null && admMbrDTO.getAuthorList().size() > 0) {
                     for(MberAuthorVO mberAuthorVO : admMbrDTO.getAuthorList()) {
                         mberAuthorVO.setMbrId(admMbrDTO.getMbrId());
                         mberAuthorVO.setRgtr(writer);
                         result += admMbrDAO.insertAuthor(mberAuthorVO);
+                        if(result == 0) {
+                            throw new CustomInsertFailException("회원 권한 등록에 실패했습니다.");
+                        }
                     }
                 }
             } else { // 회원 탈퇴일 경우 관련 정보 삭제
@@ -195,71 +207,78 @@
         }
     }
 
-        /**
-         * @param req - HTTP 요청 객체
-         * @param joinDTO -회원정보
-         * @return HashMap<String, Object> - 회원정보 등록 결과
-         *  - mbrId : 회원 아이디
-         *  - insertResult : 회원등록정보 결과
-         * @throws CustomNotFoundException - 사용자 정보 조회 예외 발생 시
-         * @throws DataAccessException - db 관련 예외 발생 시
-         * @throws Exception - 그 외 예외 발생 시
-         *
-         * 회원정보 등록
-         */
-        @Override
-        @Transactional(rollbackFor = Exception.class)
-        public HashMap<String, Object> mbrInsert(HttpServletRequest req, JoinDTO joinDTO){
-            try {
-                // 회원 아이디 생성
-                String mbrId = mberIdgn.getNextStringId();
-                joinDTO.setMbrId(mbrId);
+    /**
+     * @param req - HTTP 요청 객체
+     * @param joinDTO -회원정보
+     * @return HashMap<String, Object> - 회원정보 등록 결과
+     *  - mbrId : 회원 아이디
+     *  - insertResult : 회원등록정보 결과
+     * @throws CustomNotFoundException - 사용자 정보 조회 예외 발생 시
+     * @throws CustomInsertFailException - 등록 실패 예외 발생 시
+     * @throws DataAccessException - db 관련 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
+     *
+     * 회원정보 등록
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public HashMap<String, Object> mbrInsert(HttpServletRequest req, JoinDTO joinDTO){
+        try {
+            // 회원 아이디 생성
+            String mbrId = mberIdgn.getNextStringId();
+            joinDTO.setMbrId(mbrId);
 
-                // 비밀번호 암호화
-                joinDTO.setPswd(bCryptPasswordEncoder.encode(joinDTO.getPswd()));
+            // 비밀번호 암호화
+            joinDTO.setPswd(bCryptPasswordEncoder.encode(joinDTO.getPswd()));
 
-                // 연락처 암호화
-                if(joinDTO.getMblTelno() != null && !joinDTO.getMblTelno().equals("")) {
-                    joinDTO.setMblTelno(Secret.encrypt(joinDTO.getMblTelno()));
-                }
-                if(joinDTO.getTelno() != null && !joinDTO.getTelno().equals("")) {
-                    joinDTO.setTelno(Secret.encrypt(joinDTO.getTelno()));
-                }
+            // 연락처 암호화
+            if(joinDTO.getMblTelno() != null && !joinDTO.getMblTelno().equals("")) {
+                joinDTO.setMblTelno(Secret.encrypt(joinDTO.getMblTelno()));
+            }
+            if(joinDTO.getTelno() != null && !joinDTO.getTelno().equals("")) {
+                joinDTO.setTelno(Secret.encrypt(joinDTO.getTelno()));
+            }
 
-                // 아이피 등록
-                String ip = httpRequestUtil.getIp(req);
-                joinDTO.setFrstRegIp(ip);
+            // 아이피 등록
+            String ip = httpRequestUtil.getIp(req);
+            joinDTO.setFrstRegIp(ip);
 
-                // 등록된 토큰에서 사용자 정보 조회
-                String writer = jwtUtil.getWriter();
-                if (writer == null || writer.isEmpty()) {
-                    throw new CustomNotFoundException("사용자 정보 조회에 실패했습니다.");
-                }
-                // 작성자 등록
-                joinDTO.setRgtr(writer);
+            // 등록된 토큰에서 사용자 정보 조회
+            String writer = jwtUtil.getWriter();
+            if (writer == null || writer.isEmpty()) {
+                throw new CustomNotFoundException("사용자 정보 조회에 실패했습니다.");
+            }
+            // 작성자 등록
+            joinDTO.setRgtr(writer);
 
-                // 회원정보 등록
-                int insertResult = admMbrDAO.mbrInsert(joinDTO);
+            // 회원정보 등록
+            int insertResult = admMbrDAO.mbrInsert(joinDTO);
+            if(insertResult == 0) {
+                throw new CustomInsertFailException("회원정보 등록에 실패했습니다.");
+            }
 
-                // 권한 등록
-                if(joinDTO.getAuthorList().size() > 0) {
-                    for(MberAuthorVO mberAuthorVO : joinDTO.getAuthorList()) {
-                        mberAuthorVO.setMbrId(joinDTO.getMbrId());
-                        mberAuthorVO.setRgtr(writer);
-                        insertResult += admMbrDAO.insertAuthor(mberAuthorVO);
+            // 권한 등록
+            if(joinDTO.getAuthorList().size() > 0) {
+                for(MberAuthorVO mberAuthorVO : joinDTO.getAuthorList()) {
+                    mberAuthorVO.setMbrId(joinDTO.getMbrId());
+                    mberAuthorVO.setRgtr(writer);
+                    insertResult += admMbrDAO.insertAuthor(mberAuthorVO);
+                    if(insertResult == 0) {
+                        throw new CustomInsertFailException("회원 권한 등록에 실패했습니다.");
                     }
                 }
-
-                HashMap<String, Object> result = new HashMap<>();
-                result.put("mbrId", mbrId);
-                result.put("insertResult", insertResult);
-                return result;
-            } catch (DataAccessException dae) {
-                throw dae;
-            } catch (Exception e) {
-                throw e;
             }
+
+            HashMap<String, Object> result = new HashMap<>();
+            result.put("mbrId", mbrId);
+            result.put("insertResult", insertResult);
+            return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
         }
+    }
 
     /**
      * @param mbrVO -회원정보
@@ -296,6 +315,7 @@
             passwordDTO.setMbrId(mbrId);
             passwordDTO.setPswd(admMbrDTO.getPswd());
             passwordDTO.setNewPswd(resetPswd);
+            passwordDTO.setMdfr("SYSTEM"); // 비로그인 수정이기 때문에 시스템 변경
 
             // 비밀번호 변경
             int result = mbrService.updatePassword(passwordDTO);
src/main/java/com/takensoft/cms/mber/service/Impl/LgnHstryServiceImpl.java
--- src/main/java/com/takensoft/cms/mber/service/Impl/LgnHstryServiceImpl.java
+++ src/main/java/com/takensoft/cms/mber/service/Impl/LgnHstryServiceImpl.java
@@ -6,13 +6,10 @@
 import com.takensoft.cms.mber.dao.LgnHstryDAO;
 import com.takensoft.cms.mber.service.LgnHstryService;
 import com.takensoft.cms.mber.vo.LgnHstryVO;
-import com.takensoft.cms.popup.vo.PopupVO;
 import com.takensoft.common.Pagination;
-import com.takensoft.common.util.JWTUtil;
+import com.takensoft.common.exception.CustomInsertFailException;
 import lombok.RequiredArgsConstructor;
 import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.dao.DataAccessException;
 import org.springframework.stereotype.Service;
 
@@ -39,6 +36,7 @@
     /**
      * @param lgnHstryVO - 로그인 이력 정보
      * @return int - 로그인 이력 결과
+     * @throws CustomInsertFailException - 로그인 이력 등록 실패 예외 발생 시
      * @throws DataAccessException - db 관련 예외 발생 시
      * @throws Exception - 그 외 예외 발생 시
      *
@@ -47,9 +45,12 @@
     @Override
     public int LgnHstrySave(LgnHstryVO lgnHstryVO){
         try {
-        int result = lgnHstryDAO.save(lgnHstryVO);
+            int result = lgnHstryDAO.save(lgnHstryVO);
+            if (result == 0) {
+                throw new CustomInsertFailException("로그인 이력 등록에 실패했습니다.");
+            }
 
-        return result;
+            return result;
         } catch (DataAccessException dae) {
             throw dae;
         } catch (Exception e) {
src/main/java/com/takensoft/cms/mber/service/Impl/MberServiceImpl.java
--- src/main/java/com/takensoft/cms/mber/service/Impl/MberServiceImpl.java
+++ src/main/java/com/takensoft/cms/mber/service/Impl/MberServiceImpl.java
@@ -69,7 +69,7 @@
     /**
      * @param lgnId - 로그인 아이디
      * @return boolean - 아이디 아이디 중복 여부
-     * @throws CustomIdTakenException
+     * @throws CustomIdTakenException - 아이디 중복 예외 발생 시
      * @throws DataAccessException - db 관련 예외 발생 시
      * @throws Exception - 그 외 예외 발생 시
      *
@@ -97,6 +97,7 @@
      *  - mbrId : 회원 아이디
      *  - result : 회원등록정보 결과
      * @throws CustomNotFoundException - 사용자 정보 조회 예외 발생 시
+     * @throws CustomInsertFailException - 회원가입, 회원권한 등록 실패 예외 발생 시
      * @throws DataAccessException - db 관련 예외 발생 시
      * @throws Exception - 그 외 예외 발생 시
      *
@@ -138,6 +139,10 @@
             // 회원정보 등록
             HashMap<String, Object> result = new HashMap<>();
             int saveResult = mberDAO.save(joinDTO);
+            if(saveResult == 0) {
+                throw new CustomInsertFailException("회원 정보 등록에 실패했습니다.");
+            }
+
             result.put("mbrId", mbrId);
 
             // 권한 등록
@@ -149,6 +154,9 @@
                     vo.setRgtr(writer);
 
                     authorResult += mberDAO.authorSave(vo);
+                    if(authorResult == 0) {
+                        throw new CustomInsertFailException("회원 권한 등록에 실패했습니다.");
+                    }
                 }
             }
             result.put("result", saveResult + authorResult);
@@ -171,7 +179,7 @@
      * 비밀번호 비교
      */
     @Override
-    public boolean passwordCheck(PasswordDTO passwordDTO){
+    public boolean passwordCheck(PasswordDTO passwordDTO) {
         try {
             // 등록된 토큰에서 사용자 정보 조회
             String writer = jwtUtil.getWriter();
@@ -183,10 +191,12 @@
             MberVO mbr = mberDAO.findByMber(writer);
 
             // 비밀번호 비교 후 성공 시 비밀번호 수정 후 true 반환
-            if(bCryptPasswordEncoder.matches(passwordDTO.getPswd(), mbr.getPassword())) {
-                passwordDTO.setNewPswd(bCryptPasswordEncoder.encode(passwordDTO.getNewPswd()));
+            if (bCryptPasswordEncoder.matches(passwordDTO.getPswd(), mbr.getPassword())) {
+//                passwordDTO.setNewPswd(bCryptPasswordEncoder.encode(passwordDTO.getNewPswd()));
                 passwordDTO.setMbrId(mbr.getMbrId());
-                mberDAO.updatePassword(passwordDTO);
+                passwordDTO.setMdfr(writer);
+//                mberDAO.updatePassword(passwordDTO);
+                int result = updatePassword(passwordDTO);
                 return true;
                 // 기존 비밀번호와 입력한 비밀번호가 서로 다를 경우 false 반환
             } else {
@@ -210,17 +220,17 @@
     @Override
     public MberVO findByMbr(HashMap<String, Object> params){
         try {
-        String mbrId = params.get("mbrId").toString();
-        MberVO mberVO = mberDAO.findByMber(mbrId);
-        // 휴대폰번호 복호화
-        if (mberVO.getMblTelno() != null && !mberVO.getMblTelno().equals("")) {
-            mberVO.setMblTelno(Secret.decrypt(mberVO.getMblTelno().toString()));
-        }
-        // 전화번호 복호화
-        if (mberVO.getTelno() != null && !mberVO.getTelno().equals("")) {
-            mberVO.setTelno(Secret.decrypt(mberVO.getTelno().toString()));
-        }
-        return mberVO;
+            String mbrId = params.get("mbrId").toString();
+            MberVO mberVO = mberDAO.findByMber(mbrId);
+            // 휴대폰번호 복호화
+            if (mberVO.getMblTelno() != null && !mberVO.getMblTelno().equals("")) {
+                mberVO.setMblTelno(Secret.decrypt(mberVO.getMblTelno().toString()));
+            }
+            // 전화번호 복호화
+            if (mberVO.getTelno() != null && !mberVO.getTelno().equals("")) {
+                mberVO.setTelno(Secret.decrypt(mberVO.getTelno().toString()));
+            }
+            return mberVO;
         } catch (DataAccessException dae) {
             throw dae;
         } catch (Exception e) {
@@ -241,7 +251,8 @@
     public int updatePassword(PasswordDTO passwordDTO) {
         try {
             int result = 0;
-            passwordDTO.setNewPswd(bCryptPasswordEncoder.encode(passwordDTO.getNewPswd()));
+
+            passwordDTO.setNewPswd(bCryptPasswordEncoder.encode(passwordDTO.getNewPswd())); // 비밀번호 암호화
 
             result = mberDAO.updatePassword(passwordDTO);
             if (result == 0) {
src/main/java/com/takensoft/cms/mber/web/AdmMbrController.java
--- src/main/java/com/takensoft/cms/mber/web/AdmMbrController.java
+++ src/main/java/com/takensoft/cms/mber/web/AdmMbrController.java
@@ -146,9 +146,6 @@
 
         // 아이디 중복 검사
         boolean isExistence = mbrService.findByCheckLoginId(joinDTO.getLgnId());
-        if(isExistence) {
-            return resUtil.errorRes(MessageCode.SIGNUP_ID_TAKEN);
-        }
 
         // 회원 가입 진행
         HashMap<String, Object> result = admMbrService.mbrInsert(req, joinDTO);
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
@@ -7,10 +7,7 @@
 import com.takensoft.cms.menu.service.MenuAuthorService;
 import com.takensoft.cms.menu.vo.MenuAuthorVO;
 import com.takensoft.cms.menu.vo.MenuVO;
-import com.takensoft.common.exception.CustomInsertFailException;
-import com.takensoft.common.exception.CustomNoChangeException;
-import com.takensoft.common.exception.CustomNotFoundException;
-import com.takensoft.common.exception.CustomUpdateFailException;
+import com.takensoft.common.exception.*;
 import com.takensoft.common.util.JWTUtil;
 import lombok.RequiredArgsConstructor;
 import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
src/main/java/com/takensoft/cms/menu/service/Impl/MenuDgstfnServiceImpl.java
--- src/main/java/com/takensoft/cms/menu/service/Impl/MenuDgstfnServiceImpl.java
+++ src/main/java/com/takensoft/cms/menu/service/Impl/MenuDgstfnServiceImpl.java
@@ -1,26 +1,15 @@
 package com.takensoft.cms.menu.service.Impl;
 
-import com.takensoft.cms.author.dao.AuthorDAO;
-import com.takensoft.cms.author.vo.AuthorVO;
-import com.takensoft.cms.menu.dao.MenuAuthorDAO;
-import com.takensoft.cms.menu.dao.MenuDAO;
 import com.takensoft.cms.menu.dao.MenuDgstfnDAO;
-import com.takensoft.cms.menu.service.MenuAuthorService;
 import com.takensoft.cms.menu.service.MenuDgstfnService;
-import com.takensoft.cms.menu.vo.MenuAuthorVO;
 import com.takensoft.cms.menu.vo.MenuDgstfnVO;
-import com.takensoft.cms.menu.vo.MenuVO;
-import com.takensoft.common.exception.CustomInsertFailException;
-import com.takensoft.common.exception.CustomNoChangeException;
-import com.takensoft.common.exception.CustomNotFoundException;
-import com.takensoft.common.exception.CustomUpdateFailException;
+import com.takensoft.common.exception.*;
 import com.takensoft.common.idgen.service.IdgenService;
 import com.takensoft.common.util.HttpRequestUtil;
 import com.takensoft.common.util.JWTUtil;
 import jakarta.servlet.http.HttpServletRequest;
 import lombok.RequiredArgsConstructor;
 import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
-import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.dao.DataAccessException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
src/main/java/com/takensoft/cms/menu/service/Impl/MenuServiceImpl.java
--- src/main/java/com/takensoft/cms/menu/service/Impl/MenuServiceImpl.java
+++ src/main/java/com/takensoft/cms/menu/service/Impl/MenuServiceImpl.java
@@ -9,10 +9,7 @@
 import com.takensoft.cms.menu.vo.MenuVO;
 import com.takensoft.cms.menu.vo.SysMenuVO;
 import com.takensoft.common.HierachyVO;
-import com.takensoft.common.exception.CustomDeleteFailException;
-import com.takensoft.common.exception.CustomInsertFailException;
-import com.takensoft.common.exception.CustomNotFoundException;
-import com.takensoft.common.exception.CustomUpdateFailException;
+import com.takensoft.common.exception.*;
 import com.takensoft.common.idgen.service.IdgenService;
 import com.takensoft.common.util.JWTUtil;
 import lombok.RequiredArgsConstructor;
@@ -410,8 +407,8 @@
      * 메뉴 정보 수정 (hierachyVO 사용)
      */
     @Override
-    @CacheEvict(value = "findByMenuWithRouter", allEntries = true)
     @Transactional(rollbackFor = Exception.class)
+    @CacheEvict(value = "findByMenuWithRouter", allEntries = true)
     public int updateList(List<HierachyVO> deptList){
         int result = 0;
         try {
@@ -441,9 +438,6 @@
                     // 하위 노드 수정
                     if (hierachyVO.getChildList() != null && hierachyVO.getChildList().size() > 0) {
                         int updateResult = updateChildNode(hierachyVO.getChildList(), vo);
-                        if(updateResult == 0) {
-                            throw new CustomUpdateFailException("메뉴 수정에 실패했습니다.");
-                        }
                         result += updateResult;
                     }
                     sn++;
@@ -469,8 +463,8 @@
      * 하위 메뉴 수정
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     @CacheEvict(value = "findByMenuWithRouter", allEntries = true)
-    @Transactional
     public int updateChildNode(List<HierachyVO> childList, MenuVO upMenuVO) {
         int result = 0;
         try {
@@ -503,8 +497,6 @@
                 sn++;
             }
             return result;
-        } catch (CustomUpdateFailException cufe){
-            throw cufe;
         } catch (DataAccessException dae) {
             throw dae;
         } catch (NullPointerException ne) {
src/main/java/com/takensoft/cms/popup/service/Impl/PopupServiceImpl.java
--- src/main/java/com/takensoft/cms/popup/service/Impl/PopupServiceImpl.java
+++ src/main/java/com/takensoft/cms/popup/service/Impl/PopupServiceImpl.java
@@ -6,10 +6,7 @@
 import com.takensoft.cms.popup.service.PopupService;
 import com.takensoft.cms.popup.vo.PopupVO;
 import com.takensoft.common.Pagination;
-import com.takensoft.common.exception.CustomDeleteFailException;
-import com.takensoft.common.exception.CustomInsertFailException;
-import com.takensoft.common.exception.CustomNotFoundException;
-import com.takensoft.common.exception.CustomUpdateFailException;
+import com.takensoft.common.exception.*;
 import com.takensoft.common.file.service.FileMngService;
 import com.takensoft.common.file.vo.FileMngVO;
 import com.takensoft.common.idgen.service.IdgenService;
src/main/java/com/takensoft/cms/prvcInqHstry/service/Impl/PrvcInqHstryServiceImpl.java
--- src/main/java/com/takensoft/cms/prvcInqHstry/service/Impl/PrvcInqHstryServiceImpl.java
+++ src/main/java/com/takensoft/cms/prvcInqHstry/service/Impl/PrvcInqHstryServiceImpl.java
@@ -6,8 +6,7 @@
 import com.takensoft.cms.prvcInqHstry.service.PrvcInqHstryService;
 import com.takensoft.cms.prvcInqHstry.vo.PrvcInqHstryVO;
 import com.takensoft.common.Pagination;
-import com.takensoft.common.exception.CustomInsertFailException;
-import com.takensoft.common.exception.CustomNotFoundException;
+import com.takensoft.common.exception.*;
 import com.takensoft.common.util.HttpRequestUtil;
 import com.takensoft.common.util.JWTUtil;
 import lombok.RequiredArgsConstructor;
@@ -55,6 +54,7 @@
      *
      * 개인정보 조회 이력 등록
      */
+    @Override
     public int prvcInqHstryInsert(HttpServletRequest request, PrvcInqHstryVO prvcInqHstryVO) {
         try {
             // 조회 아이피 삽입
src/main/java/com/takensoft/cms/token/service/impl/RefreshTokenServiceImpl.java
--- src/main/java/com/takensoft/cms/token/service/impl/RefreshTokenServiceImpl.java
+++ src/main/java/com/takensoft/cms/token/service/impl/RefreshTokenServiceImpl.java
@@ -164,9 +164,10 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int tokenReissueProc(HttpServletRequest req, HttpServletResponse res){
+        try {
             // refresh token 검증
             int result = (int) refreshTokenCheck(req).get("result");
-            if(result == 0) return result;
+            if (result == 0) return result;
 
             String refreshToken = refreshTokenCheck(req).get("refreshToken").toString();
 
@@ -197,7 +198,7 @@
             String newAccessToken = jwtUtil.createJwt("Authorization", mber.getMbrId(), mber.getLgnId(), mber.getMbrNm(), (List) mber.getAuthorities(), JWT_ACCESSTIME);
 
             // 남은 시간이 3시간 미만으로 남았을 경우 RefreshToken 재발급
-            if(timeDffrnc < 3) {
+            if (timeDffrnc < 3) {
                 RefreshTknVO refresh = new RefreshTknVO();
                 refresh.setMbrId(mber.getMbrId());
 
@@ -207,17 +208,22 @@
                 // 신규 RefreshToken 발행
                 String newRefreshToken = jwtUtil.createJwt("refresh", mber.getMbrId(), mber.getLgnId(), mber.getMbrNm(), (List) mber.getAuthorities(), JWT_REFRESHTIME);
                 refresh.setToken(newRefreshToken);
-                result += saveRefreshToken(req, res,refresh, JWT_REFRESHTIME);
+                result += saveRefreshToken(req, res, refresh, JWT_REFRESHTIME);
 
                 // 응답설정 RefreshToken
-    //            res.setHeader("refresh", newRefreshToken);
+                //            res.setHeader("refresh", newRefreshToken);
                 // 쿠키 방식
-                res.addCookie(jwtUtil.createCookie("refresh",newRefreshToken, COOKIE_TIME));
+                res.addCookie(jwtUtil.createCookie("refresh", newRefreshToken, COOKIE_TIME));
             }
             // 응답설정 AccessToken
             res.setHeader("Authorization", newAccessToken);
 
             return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
     }
     /**
      * @param req - HTTP 요청 객체
@@ -230,12 +236,18 @@
      */
     @Override
     public int delete(HttpServletRequest req, RefreshTknVO refreshTknVO) {
+        try {
             refreshTknVO.setUseIp(httpRequestUtil.getIp(req));
             //중복로그인 비허용시 삭제
             if (!loginPolicyService.getPolicy()) {
                 redisTemplate.delete("jwt:" + refreshTknVO.getMbrId()); // 기존 JWT 삭제
             }
             return refreshTokenDAO.deleteByRefresh(refreshTknVO);
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
     }
     /**
      * @param req - HTTP 요청 객체
src/main/java/com/takensoft/common/file/service/Impl/FileMngServiceImpl.java
--- src/main/java/com/takensoft/common/file/service/Impl/FileMngServiceImpl.java
+++ src/main/java/com/takensoft/common/file/service/Impl/FileMngServiceImpl.java
@@ -12,6 +12,7 @@
 import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
 import org.springframework.dao.DataAccessException;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
@@ -53,6 +54,7 @@
      * 파일매니저 등록
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public HashMap<String, Object> fileMngInsert(FileMngVO fileMngVO, List<MultipartFile> multipartFileList) {
         try {
             HashMap<String, Object> result = new HashMap<>();
@@ -83,9 +85,7 @@
             result.put("fileMngResult", fileMngResult);
 
             return result;
-        } catch (CustomNotFoundException | CustomFileUploadFailException | CustomInsertFailException | IllegalArgumentException le) {
-            throw le;
-        }  catch (DataAccessException dae) {
+        } catch (DataAccessException dae) {
             throw dae;
         } catch (Exception e) {
             throw e;
@@ -105,6 +105,7 @@
      * 파일매니저 수정
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int fileMngUpadate(FileMngVO fileMngVO, List<HashMap<String, Object>> deleteFileList, List<MultipartFile> multipartFileList) {
         try {
             int insertResult = 0;
@@ -137,9 +138,6 @@
             }
 
             return result;
-        } catch (CustomNotFoundException | CustomFileUploadFailException | CustomInsertFailException | IllegalArgumentException
-                 | CustomDeleteFailException le) {
-            throw le;
         } catch (DataAccessException dae) {
             throw dae;
         } catch (Exception e) {
@@ -157,6 +155,7 @@
      * 파일매니저 삭제
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int fileMngDelete(HashMap<String, Object> params) {
         try {
             int deleteResult = 0;
@@ -173,8 +172,6 @@
             }
 
             return result;
-        } catch (CustomDeleteFailException le) {
-            throw le;
         } catch (DataAccessException dae) {
             throw dae;
         } catch (Exception e) {
src/main/java/com/takensoft/common/file/service/Impl/FileServiceImpl.java
--- src/main/java/com/takensoft/common/file/service/Impl/FileServiceImpl.java
+++ src/main/java/com/takensoft/common/file/service/Impl/FileServiceImpl.java
@@ -1,16 +1,12 @@
 package com.takensoft.common.file.service.Impl;
 
-import com.takensoft.common.exception.CustomDeleteFailException;
-import com.takensoft.common.exception.CustomFileUploadFailException;
-import com.takensoft.common.exception.CustomInsertFailException;
-import com.takensoft.common.exception.CustomNotFoundException;
+import com.takensoft.common.exception.*;
 import com.takensoft.common.file.dao.FileDAO;
 import com.takensoft.common.file.service.FileService;
 import com.takensoft.common.file.vo.FileVO;
 import com.takensoft.common.util.FileUtil;
 import com.takensoft.common.util.JWTUtil;
 import lombok.RequiredArgsConstructor;
-import org.apache.tomcat.util.http.fileupload.impl.FileSizeLimitExceededException;
 import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.dao.DataAccessException;
@@ -202,6 +198,8 @@
      *
      * 파일 삭제
      */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
     public int fileDelete(List<HashMap<String, Object>> fileList) {
         try {
             int result = 0;
@@ -308,7 +306,7 @@
                 }
                 uploadFile.transferTo(saveFile);
             } catch (IOException ioe) {
-                throw new CustomFileUploadFailException("파일 업로드에 실패했습니다.", ioe);
+                throw new CustomFileUploadFailException("에디터 이미지 파일 업로드에 실패했습니다.", ioe);
             }
             String imgPath = editPath + maskNm; // 윈도우 상대 경로 경로
 //            String imgPath = frontUrl + "/uploadFiles" + editPath + maskNm; // 리눅스 경로
src/main/resources/mybatis/mapper/mber/mber-SQL.xml
--- src/main/resources/mybatis/mapper/mber/mber-SQL.xml
+++ src/main/resources/mybatis/mapper/mber/mber-SQL.xml
@@ -185,6 +185,8 @@
     <update id="updatePassword" parameterType="PasswordDTO">
         UPDATE mbr_info
         SET pswd = #{newPswd}
+            , mdfr = #{mdfr}
+            , mdfcn_dt = NOW()
         WHERE mbr_id = #{mbrId}
     </update>
 
Add a comment
List