방선주 방선주 03-12
250312 방선주 popup 폴더 throw 제거 및 주석 적용 / 일부 file throw 제거 적용
@612b8343ef1ac3148ab85ea939583aa28dbb23be
src/main/java/com/takensoft/cms/popup/Schedule/PopupScheduler.java
--- src/main/java/com/takensoft/cms/popup/Schedule/PopupScheduler.java
+++ src/main/java/com/takensoft/cms/popup/Schedule/PopupScheduler.java
@@ -6,8 +6,11 @@
 import org.springframework.transaction.annotation.Transactional;
 
 /**
- * @author  : 박정하
- * @since   : 2024.05.23
+ * @author 박정하
+ * @since 2024.05.23
+ * @modification
+ *     since    |    author    | description
+ *  2024.05.23  |    박정하     | 최초 등록
  *
  * 팝업 종료일이 된 팝업 제거를 위한 스케쥴러
  */
@@ -20,14 +23,14 @@
     }
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.23
+     * @param
+     * @return
      *
-     * 매일 자정에 종료일이 지난 팝업 삭제
+     * 리프레시 토큰 검증
      */
     @Scheduled(cron = "0 0 0 * * *")
     @Transactional(rollbackFor = Exception.class)
-    public void cleanExpiredPopups() throws Exception {
+    public void cleanExpiredPopups(){
         popupDAO.cleanExpiredPopups();
     }
 }
(No newline at end of file)
src/main/java/com/takensoft/cms/popup/dao/PopupDAO.java
--- src/main/java/com/takensoft/cms/popup/dao/PopupDAO.java
+++ src/main/java/com/takensoft/cms/popup/dao/PopupDAO.java
@@ -7,74 +7,77 @@
 import java.util.*;
 
 /**
- * @author  : 박정하
- * @since   : 2024.05.13
+ * @author 박정하
+ * @since 2024.05.13
+ * @modification
+ *     since    |    author    | description
+ * 2024.05.13  |    박정하     | 최초 등록
  *
- * 팝업 관련 Mapper
+ * 팝업 관련 DAO
  */
 @Mapper("popupDAO")
 public interface PopupDAO {
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.13
+     * @param popupVO - 팝업 등록 정보
+     * @return int - 팝업 등록 여부 (1: 성공, 0: 실패)
      *
      * 팝업 등록
      */
-    public int insertPopup(PopupVO popupVO) throws Exception;
+    int insertPopup(PopupVO popupVO);
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.13
+     * @param pagination - 페이지네이션 정보
+     * @return int - 팝업 목록 개수
      *
-     * 팝업 목록 갯수
+     * 팝업 목록 개수
      */
-    public int selectPopupListCnt(Pagination pagination) throws Exception;
+    int selectPopupListCnt(Pagination pagination);
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.13
+     * @param pagination - 페이지네이션 정보
+     * @return List<PopupVO> - 검색된 팝업 목록
      *
      * 팝업 목록 조회
      */
-    public List<PopupVO> selectPopupList(Pagination pagination) throws Exception;
+    List<PopupVO> selectPopupList(Pagination pagination);
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.13
+     * @param popupVO - 팝업 정보
+     * @return PopupVO - 팝업 상세 정보
      *
      * 팝업 목록 상세
      */
-    public PopupVO selectPopupDetail(PopupVO popupVO) throws Exception;
+    PopupVO selectPopupDetail(PopupVO popupVO);
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.13
+     * @param popupVO - 팝업 정보
+     * @return int - 팝업 수정 여부 (1: 성공, 0: 실패)
      *
      * 팝업 수정
      */
-    public int updatePopup(PopupVO popupVO) throws Exception;
+    int updatePopup(PopupVO popupVO);
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.22
+     * @param pageType - 팝업 페이지 타입
+     * @return List<PopupVO> - 검색된 팝업 목록
      *
      * 팝업 목록 조회 (팝업창 띄우는 용도)
      */
-    public List<PopupVO> selectPopupListByPage(String pageType) throws Exception;
+    List<PopupVO> selectPopupListByPage(String pageType);
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.23
+     * @param
+     * @return int - 팝업 삭제 여부 (1: 성공, 0: 실패)
      *
      * 매일 자정에 종료일이 지난 팝업 삭제
      */
-    public int cleanExpiredPopups() throws Exception;
+    int cleanExpiredPopups();
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.28
+     * @param
+     * @return List<PopupVO> - 팝업 최신 목록
      *
      * 팝업 최신 목록 조회 (최신글 5건 출력)
      */
-    public List<PopupVO> selectPopupListByNew() throws Exception;
+    List<PopupVO> selectPopupListByNew() throws Exception;
 }
(No newline at end of file)
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,30 +6,41 @@
 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.file.service.FileMngService;
 import com.takensoft.common.file.vo.FileMngVO;
 import com.takensoft.common.idgen.service.IdgenService;
 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 org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.net.UnknownHostException;
 import java.util.*;
 
 /**
- * @author  : 박정하
- * @since   : 2024.05.13
+ * @author 박정하
+ * @since 2024.05.13
+ * @modification
+ *     since    |    author    | description
+ *  2024.05.13  |    박정하     | 최초 등록
  *
- * 팝업 관련 구현체
- * EgovAbstractServiceImpl : 전자정부 상속
- * PopupService : 팝업 관련 인터페이스 상속
+ * EgovAbstractServiceImpl - 전자정부 프레임워크에서 제공하는 추상 서비스 구현 클래스
+ * PopupService - 팝업 관련 서비스 인터페이스
+ *
+ * 팝업 관련 서비스 구현체
  */
 @Service("popupService")
 @RequiredArgsConstructor
 public class PopupServiceImpl extends EgovAbstractServiceImpl implements PopupService {
+
     private final JWTUtil jwtUtil;
     private final PopupDAO popupDAO;
     private final IdgenService popupIdgn;
@@ -42,162 +53,214 @@
      *
      * 팝업 등록
      */
+    /**
+     * @param popupVO - 팝업 등록 정보를 포함하는 객체
+     * @param multipartFileList - 첨부파일 리스트
+     * @return HashMap<String, Object> - 등록 결과 및 팝업 ID
+     * @throws CustomInsertFailException - 등록 실패 예외 발생 시
+     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
+     * @throws NullPointerException - Null 값이 발생할 경우
+     * @throws Exception - 그 외 예외 발생 시
+
+     * 팝업 등록
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public HashMap<String, Object> popupInsert(PopupVO popupVO, List<MultipartFile> multipartFileList) throws Exception {
-        // 투자상담 아이디 생성
-        String popupId = popupIdgn.getNextStringId();
-        popupVO.setPopupId(popupId);
+    public HashMap<String, Object> popupInsert(PopupVO popupVO, List<MultipartFile> multipartFileList){
+        try {
+            // 투자상담 아이디 생성
+            String popupId = popupIdgn.getNextStringId();
+            popupVO.setPopupId(popupId);
 
-        // 등록자 삽입
-        String writer = jwtUtil.getWriter();
-        popupVO.setRgtr(writer);
+            // 등록자 삽입
+            String writer = jwtUtil.getWriter();
+            popupVO.setRgtr(writer);
 
-        HashMap<String, Object> result = new HashMap<>();
+            HashMap<String, Object> result = new HashMap<>();
 
-        // 첨부파일 유무
-        if (multipartFileList != null && !multipartFileList.isEmpty()) {
-            FileMngVO fileMngVO = new FileMngVO();
+            // 첨부파일 유무
+            if (multipartFileList != null && !multipartFileList.isEmpty()) {
+                FileMngVO fileMngVO = new FileMngVO();
 
-            // 파일매니저 등록
-            HashMap<String, Object> fileMng = fileMngService.fileMngInsert(fileMngVO, multipartFileList);
-            result.put("multipartFileMngResult", fileMng);
+                // 파일매니저 등록
+                HashMap<String, Object> fileMng = fileMngService.fileMngInsert(fileMngVO, multipartFileList);
+                result.put("multipartFileMngResult", fileMng);
 
-            // 파일매니저 아이디 삽입
-            popupVO.setFileMngId(fileMng.get("fileMngId").toString());
+                // 파일매니저 아이디 삽입
+                popupVO.setFileMngId(fileMng.get("fileMngId").toString());
+            }
+
+            // 팝업 등록
+            int insertResult = popupDAO.insertPopup(popupVO);
+
+            result.put("insertResult", insertResult);
+            result.put("popupId", popupVO.getPopupId());
+
+            return result;
+        } catch (CustomInsertFailException cife){
+            throw cife;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (NullPointerException ne) {
+            throw ne;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
         }
-
-        // 팝업 등록
-        int insertResult = popupDAO.insertPopup(popupVO);
-
-        result.put("insertResult", insertResult);
-        result.put("popupId", popupVO.getPopupId());
-
-        return result;
     }
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.13
+     * @param params - pagination HashMap
+     * @return HashMap<String, Object> - 팝업 목록
+     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
      *
      * 팝업 목록 조회
      */
     @Override
-    public HashMap<String, Object> popupList(HashMap<String, String> params) throws Exception {
-        Pagination search = new Pagination(0, params);
-        int cnt = popupDAO.selectPopupListCnt(search);
+    public HashMap<String, Object> popupList(HashMap<String, String> params){
+        try {
+            Pagination search = new Pagination(0, params);
+            int cnt = popupDAO.selectPopupListCnt(search);
 
-        Pagination pagination = new Pagination(cnt, params);
-        List<PopupVO> list = popupDAO.selectPopupList(pagination);
+            Pagination pagination = new Pagination(cnt, params);
+            List<PopupVO> list = popupDAO.selectPopupList(pagination);
 
-        HashMap<String, Object> result = new HashMap<>();
-        result.put("list", list);
-        result.put("pagination", pagination);
-        return result;
+            HashMap<String, Object> result = new HashMap<>();
+            result.put("list", list);
+            result.put("pagination", pagination);
+            return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
     }
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.13
+     * @param popupVO - 팝업 정보
+     * @return HashMap<String, Object> - 팝업 상세 조회 정보
+     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
      *
      * 팝업 상세 조회
      */
     @Override
-    public HashMap<String, Object> popupDetail(PopupVO popupVO) throws Exception {
-        PopupVO newPopupVO = new PopupVO();
-        if (popupVO.getPopupId() != null) {
-            newPopupVO = popupDAO.selectPopupDetail(popupVO);
-        }
+    public HashMap<String, Object> popupDetail(PopupVO popupVO){
+        try {
+            PopupVO newPopupVO = new PopupVO();
+            if (popupVO.getPopupId() != null) {
+                newPopupVO = popupDAO.selectPopupDetail(popupVO);
+            }
 
-        // 팝업크기 설정
-        if (newPopupVO.getWdthLen() != 0 && newPopupVO.getVrtcLen() != 0) {
-            if (newPopupVO.getWdthLen() == 300 && newPopupVO.getVrtcLen() == 300) {
+            // 팝업크기 설정
+            if (newPopupVO.getWdthLen() != 0 && newPopupVO.getVrtcLen() != 0) {
+                if (newPopupVO.getWdthLen() == 300 && newPopupVO.getVrtcLen() == 300) {
+                    newPopupVO.setPopupSizeType("fixed");
+                    newPopupVO.setPopupSize("PS1");
+                } else if (newPopupVO.getWdthLen() == 500 && newPopupVO.getVrtcLen() == 700) {
+                    newPopupVO.setPopupSizeType("fixed");
+                    newPopupVO.setPopupSize("PS2");
+                } else if (newPopupVO.getWdthLen() == 700 && newPopupVO.getVrtcLen() == 1000) {
+                    newPopupVO.setPopupSizeType("fixed");
+                    newPopupVO.setPopupSize("PS3");
+                } else if (newPopupVO.getWdthLen() == 1200 && newPopupVO.getVrtcLen() == 850) {
+                    newPopupVO.setPopupSizeType("fixed");
+                    newPopupVO.setPopupSize("PS4");
+                } else {
+                    newPopupVO.setPopupSizeType("custom");
+                }
+            } else {
                 newPopupVO.setPopupSizeType("fixed");
                 newPopupVO.setPopupSize("PS1");
-            } else if (newPopupVO.getWdthLen() == 500 && newPopupVO.getVrtcLen() == 700) {
-                newPopupVO.setPopupSizeType("fixed");
-                newPopupVO.setPopupSize("PS2");
-            } else if (newPopupVO.getWdthLen() == 700 && newPopupVO.getVrtcLen() == 1000) {
-                newPopupVO.setPopupSizeType("fixed");
-                newPopupVO.setPopupSize("PS3");
-            } else if (newPopupVO.getWdthLen() == 1200 && newPopupVO.getVrtcLen() == 850) {
-                newPopupVO.setPopupSizeType("fixed");
-                newPopupVO.setPopupSize("PS4");
-            } else {
-                newPopupVO.setPopupSizeType("custom");
             }
-        } else {
-            newPopupVO.setPopupSizeType("fixed");
-            newPopupVO.setPopupSize("PS1");
+
+            // 업로드 형식 설정
+            if (newPopupVO.getPopupType() == null) {
+                newPopupVO.setPopupType("image");
+            }
+
+            // 팝업 노출 페이지
+            if (newPopupVO.getPageType() == null) {
+                newPopupVO.setPageType("");
+            }
+
+            // 팝업 사용 유무
+            if (newPopupVO.getPopupUseYn() == null) {
+                newPopupVO.setPopupUseYn("Y");
+            }
+
+            // 사용 유무
+            if (newPopupVO.getUseYn() == null) {
+                newPopupVO.setUseYn("Y");
+            }
+
+            List<CodeManageVO> codeList = codeManageService.findByChildCdCache("pageType"); // 검색 조건
+
+            HashMap<String, Object> result = new HashMap<>();
+            result.put("popupVO", newPopupVO);
+            result.put("codeList", codeList);
+
+            return result;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
         }
-
-        // 업로드 형식 설정
-        if (newPopupVO.getPopupType() == null) {
-            newPopupVO.setPopupType("image");
-        }
-
-        // 팝업 노출 페이지
-        if (newPopupVO.getPageType() == null) {
-            newPopupVO.setPageType("");
-        }
-
-        // 팝업 사용 유무
-        if (newPopupVO.getPopupUseYn() == null) {
-            newPopupVO.setPopupUseYn("Y");
-        }
-
-        // 사용 유무
-        if (newPopupVO.getUseYn() == null) {
-            newPopupVO.setUseYn("Y");
-        }
-
-        List<CodeManageVO> codeList = codeManageService.findByChildCdCache("pageType"); // 검색 조건
-
-        HashMap<String, Object> result = new HashMap<>();
-        result.put("popupVO", newPopupVO);
-        result.put("codeList", codeList);
-
-        return result;
     }
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.14
+     * @param popupVO - 팝업 정보
+     * @param multipartFileList - 첨부파일 리스트
+     * @return int - 수정 결과(0: 실패, 1: 성공)
+     * @throws CustomUpdateFailException - 수정 실패 예외 발생 시
+     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
+     * @throws NullPointerException - Null 값이 발생할 경우
+     * @throws Exception - 그 외 예외 발생 시
      *
      * 팝업 수정
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int popupUpdate(PopupVO popupVO, List<MultipartFile> multipartFileList) throws Exception {
-        // 수정자 삽입
-        String writer = jwtUtil.getWriter();
-        popupVO.setMdfr(writer);
+    public int popupUpdate(PopupVO popupVO, List<MultipartFile> multipartFileList){
+        try {
+            // 수정자 삽입
+            String writer = jwtUtil.getWriter();
+            popupVO.setMdfr(writer);
 
-        // 파일 수정
-        int fileUpdateResult = 0;
-        FileMngVO fileMngVO = new FileMngVO();
-        if (popupVO.getFileMngId() != null) {
-            List<HashMap<String, Object>> deleteFileList = new ArrayList<>();
-            if (popupVO.getDeleteFileList() != null && popupVO.getDeleteFileList().size() > 0) {
-                deleteFileList = popupVO.getDeleteFileList();
+            // 파일 수정
+            int fileUpdateResult = 0;
+            FileMngVO fileMngVO = new FileMngVO();
+            if (popupVO.getFileMngId() != null) {
+                List<HashMap<String, Object>> deleteFileList = new ArrayList<>();
+                if (popupVO.getDeleteFileList() != null && popupVO.getDeleteFileList().size() > 0) {
+                    deleteFileList = popupVO.getDeleteFileList();
+                }
+
+                // 파일매니저 수정
+                fileMngVO.setFileMngId(popupVO.getFileMngId());
+                fileUpdateResult += fileMngService.fileMngUpadate(fileMngVO, deleteFileList, multipartFileList);
+            } else {
+                // 파일매니저 등록
+                if (multipartFileList != null && multipartFileList.size() > 0) {
+                    HashMap<String, Object> fileMng = fileMngService.fileMngInsert(fileMngVO, multipartFileList);
+                    fileUpdateResult += (int) fileMng.get("fileMngResult");
+                    popupVO.setFileMngId(fileMng.get("fileMngId").toString());
+                }
             }
 
-            // 파일매니저 수정
-            fileMngVO.setFileMngId(popupVO.getFileMngId());
-            fileUpdateResult += fileMngService.fileMngUpadate(fileMngVO, deleteFileList, multipartFileList);
-        } else {
-            // 파일매니저 등록
-            if(multipartFileList != null && multipartFileList.size() > 0) {
-                HashMap<String, Object> fileMng = fileMngService.fileMngInsert(fileMngVO, multipartFileList);
-                fileUpdateResult += (int) fileMng.get("fileMngResult");
-                popupVO.setFileMngId(fileMng.get("fileMngId").toString());
-            }
+            // 팝업 수정
+            int updateResult = popupDAO.updatePopup(popupVO);
+
+            return updateResult + fileUpdateResult;
+        } catch (CustomUpdateFailException cufe){
+            throw cufe;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (NullPointerException ne) {
+            throw ne;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
         }
-
-        // 팝업 수정
-        int updateResult = popupDAO.updatePopup(popupVO);
-
-        return updateResult + fileUpdateResult;
     }
 
     /**
@@ -206,37 +269,62 @@
      *
      * 팝업 삭제
      */
+    /**
+     * @param popupVO - 팝업 정보
+     * @return int - 삭제 결과(0: 실패, 1: 성공)
+     * @throws CustomDeleteFailException - 삭제 실패 예외 발생 시
+     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
+     *
+     * 팝업 삭제
+     */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int popupDelete(PopupVO popupVO) throws Exception {
-        // 수정자 삽입
-        String writer = jwtUtil.getWriter();
-        popupVO.setMdfr(writer);
+    public int popupDelete(PopupVO popupVO){
+        try {
+            // 수정자 삽입
+            String writer = jwtUtil.getWriter();
+            popupVO.setMdfr(writer);
 
-        // 파일매니저 삭제
-        int fileDeleteResult = 0;
-        if (popupVO.getFileMngId() != null && popupVO.getFileMngId().equals("")) {
-            HashMap<String, Object> hashMap = new HashMap<>();
-            hashMap.put("fileMngId", popupVO.getFileMngId());
-            fileDeleteResult = fileMngService.fileMngDelete(hashMap);
+            // 파일매니저 삭제
+            int fileDeleteResult = 0;
+            if (popupVO.getFileMngId() != null && popupVO.getFileMngId().equals("")) {
+                HashMap<String, Object> hashMap = new HashMap<>();
+                hashMap.put("fileMngId", popupVO.getFileMngId());
+                fileDeleteResult = fileMngService.fileMngDelete(hashMap);
+            }
+
+            // 팝업 삭제
+            popupVO.setUseYn("N");
+            popupVO.setFileMngId(null);
+            int deleteResult = popupDAO.updatePopup(popupVO);
+
+            return deleteResult + fileDeleteResult;
+        } catch (CustomDeleteFailException cdfe){
+            throw cdfe;
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
         }
-
-        // 팝업 삭제
-        popupVO.setUseYn("N");
-        popupVO.setFileMngId(null);
-        int deleteResult = popupDAO.updatePopup(popupVO);
-
-        return deleteResult + fileDeleteResult;
     }
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.22
+     * @param pageType - 페이지 타입
+     * @return List<PopupVO> - 팝업 목록
+     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
      *
      * 팝업 목록 조회 (팝업창 띄우는 용도)
      */
     @Override
-    public List<PopupVO> popupListByPage(String pageType) throws Exception {
-        return popupDAO.selectPopupListByPage(pageType);
+    public List<PopupVO> popupListByPage(String pageType){
+        try {
+            return popupDAO.selectPopupListByPage(pageType);
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
     }
 }
(No newline at end of file)
src/main/java/com/takensoft/cms/popup/service/PopupService.java
--- src/main/java/com/takensoft/cms/popup/service/PopupService.java
+++ src/main/java/com/takensoft/cms/popup/service/PopupService.java
@@ -6,57 +6,62 @@
 import java.util.*;
 
 /**
- * @author  : 박정하
- * @since   : 2024.05.13
+ * @author 박정하
+ * @since 2024.05.13
+ * @modification
+ *     since    |    author    | description
+ *  2024.05.13  |    박정하     | 최초 등록
  *
  * 팝업 관련 인터페이스
  */
 public interface PopupService {
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.13
+     * @param popupVO - 팝업 정보
+     * @param multipartFileList - 첨부파일 리스트
+     * @return HashMap<String, Object> - 등록 결과 및 팝업ID
      *
      * 팝업 등록
      */
-    public HashMap<String, Object> popupInsert(PopupVO popupVO, List<MultipartFile> multipartFileList) throws Exception;
+    HashMap<String, Object> popupInsert(PopupVO popupVO, List<MultipartFile> multipartFileList);
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.13
+     * @param params - 페이지네이션 HashMap
+     * @return HashMap<String, Object> - 검색된 팝업 목록
      *
      * 팝업 목록 조회
      */
-    public HashMap<String, Object> popupList(HashMap<String, String> params) throws Exception;
+    HashMap<String, Object> popupList(HashMap<String, String> params);
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.13
+     * @param popupVO - 팝업 정보
+     * @return HashMap<String, Object> - 팝업 상세 조회 결과
      *
      * 팝업 상세 조회
      */
-    public HashMap<String, Object> popupDetail(PopupVO popupVO) throws Exception;
+    HashMap<String, Object> popupDetail(PopupVO popupVO);
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.14
+     * @param popupVO - 팝업 정보
+     * @param multipartFileList - 첨부파일 리스트
+     * @return int - 수정 여부 (성공: 1, 실패: 0)
      *
      * 팝업 수정
      */
-    public int popupUpdate(PopupVO popupVO, List<MultipartFile> multipartFileList) throws Exception;
+    int popupUpdate(PopupVO popupVO, List<MultipartFile> multipartFileList);
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.14
+     * @param popupVO - 팝업 정보
+     * @return int - 삭제 여부 (성공: 1, 실패: 0)
      *
      * 팝업 삭제
      */
-    public int popupDelete(PopupVO popupVO) throws Exception;
+    int popupDelete(PopupVO popupVO);
 
     /**
-     * @author  : 박정하
-     * @since   : 2024.05.13
+     * @param pageType - 페이지 타입
+     * @return List<PopupVO> - 조회된 팝업 목록
      *
      * 팝업 목록 조회 (팝업창 띄우는 용도)
      */
-    public List<PopupVO> popupListByPage(String pageType) throws Exception;
+    List<PopupVO> popupListByPage(String pageType);
 }
(No newline at end of file)
src/main/java/com/takensoft/cms/popup/vo/PopupVO.java
--- src/main/java/com/takensoft/cms/popup/vo/PopupVO.java
+++ src/main/java/com/takensoft/cms/popup/vo/PopupVO.java
@@ -1,6 +1,6 @@
 package com.takensoft.cms.popup.vo;
 
-import lombok.Data;
+import lombok.*;
 
 import java.util.HashMap;
 import java.util.List;
@@ -8,54 +8,38 @@
 /**
  * @author  : 박정하
  * @since   : 2024.05.13
+ * @modification
+ *     since    |    author    | description
+ *  2024.05.13  |    박정하     | 최초 등록
  *
  * 팝업 관련 VO
  */
-@Data
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
 public class PopupVO {
-    // 팝업아이디
-    private String popupId;
-    // 팝업제목
-    private String popupTtl;
-    // 시작일
-    private String bgngDt;
-    // 종료일
-    private String endDt;
-    // 가로길이    
-    private int wdthLen;
-    // 세로길이
-    private int vrtcLen;
-    // 팝업유형
-    private String popupType;
-    // 팝업사용여부
-    private String popupUseYn;
-    // 동영상URL
-    private String vdoUrl;
-    // 링크 URL
-    private String linkUrl;
-    // 파일 관리 아이디
-    private String fileMngId;
-    // 순서
-    private int sn;
-    // 페이지 타입(팝업노출페이지)
-    private String pageType;
-    // 사용여부
-    private String useYn;
-    // 등록자
-    private String rgtr;
-    // 등록일
-    private String regDt;
-    // 수정자
-    private String mdfr;
-    // 수정일
-    private String mdfcnDt;
+    private String popupId;                                 // 팝업아이디
+    private String popupTtl;                                // 팝업제목
+    private String bgngDt;                                  // 시작일
+    private String endDt;                                   // 종료일
+    private int wdthLen;                                    // 가로길이
+    private int vrtcLen;                                    // 세로길이
+    private String popupType;                               // 팝업유형
+    private String popupUseYn;                              // 팝업사용여부
+    private String vdoUrl;                                  // 동영상URL
+    private String linkUrl;                                 // 링크 URL
+    private String fileMngId;                               // 파일 관리 아이디
+    private int sn;                                         // 순서
+    private String pageType;                                // 페이지 타입(팝업노출페이지)
+    private String useYn;                                   // 사용여부
+    private String rgtr;                                    // 등록자
+    private String regDt;                                   // 등록일
+    private String mdfr;                                    // 수정자
+    private String mdfcnDt;                                 // 수정일
 
-    // 팝업사이즈타입
-    private String popupSizeType;
-    // 팝업사이즈
-    private String popupSize;
-    // 등록자명
-    private String mbrNm;
-    // 삭제 파일 목록
-    private List<HashMap<String, Object>> deleteFileList;
+    private String popupSizeType;                           // 팝업사이즈타입
+    private String popupSize;                               // 팝업사이즈
+    private String mbrNm;                                   // 등록자명
+    private List<HashMap<String, Object>> deleteFileList;   // 삭제 파일 목록
 }
(No newline at end of file)
src/main/java/com/takensoft/cms/popup/web/PopupController.java
--- src/main/java/com/takensoft/cms/popup/web/PopupController.java
+++ src/main/java/com/takensoft/cms/popup/web/PopupController.java
@@ -2,11 +2,13 @@
 
 import com.takensoft.cms.popup.service.PopupService;
 import com.takensoft.cms.popup.vo.PopupVO;
+import com.takensoft.common.exception.CustomInsertFailException;
 import com.takensoft.common.file.service.FileService;
 import com.takensoft.common.message.MessageCode;
 import com.takensoft.common.util.ResponseData;
 import com.takensoft.common.util.ResponseUtil;
 import lombok.RequiredArgsConstructor;
+import org.springframework.dao.DataAccessException;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
@@ -14,8 +16,10 @@
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.net.UnknownHostException;
 import java.nio.charset.Charset;
 import java.util.*;
+
 /**
  * @author 박정하
  * @since 2024.05.13
@@ -34,16 +38,14 @@
     private final ResponseUtil resUtil;
 
     /**
-     * @author 박정하
-     * @since 2024.05.13
-     * @param popupVO
-     * @return
-     * @throws Exception
+     * @param popupVO - 팝업 정보
+     * @param multipartFileList - 업로드할 파일 목록
+     * @return ResponseEntity - 팝업 등록 결과를 포함하는 응답
      *
      * 팝업 등록
      */
     @PostMapping("/insertProc.file")
-    public ResponseEntity<?> insertProc(@RequestPart PopupVO popupVO, List<MultipartFile> multipartFileList) throws Exception {
+    public ResponseEntity<?> insertProc(@RequestPart PopupVO popupVO, List<MultipartFile> multipartFileList){
         HashMap<String, Object> result = popupService.popupInsert(popupVO, multipartFileList);
         int insertResult = (int) result.get("insertResult");
 
@@ -56,16 +58,13 @@
     }
 
     /**
-     * @author 박정하
-     * @since 2024.05.13
-     * @param params
-     * @return
-     * @throws Exception
+     * @param params - pagination HashMap
+     * @return ResponseEntity - 팝업 목록을 포함하는 응답
      *
      * 팝업 목록 조회
      */
     @PostMapping("/listProc.json")
-    public ResponseEntity<?> listProc(@RequestBody HashMap<String, String> params) throws Exception {
+    public ResponseEntity<?> listProc(@RequestBody HashMap<String, String> params){
         HashMap<String, Object> result = popupService.popupList(params);
 
         // 응답 처리
@@ -73,22 +72,25 @@
     }
 
     /**
-     * @author 박정하
-     * @since 2024.05.13
-     * @param popupVO
-     * @return
-     * @throws Exception
+     * @param popupVO - 팝업 정보
+     * @return ResponseEntity - 팝업 상세 정보를 포함하는 응답
      *
      * 팝업 상세 조회
      */
     @PostMapping("/detailProc.json")
-    public ResponseEntity<?> detailProc(@RequestBody PopupVO popupVO) throws Exception {
+    public ResponseEntity<?> detailProc(@RequestBody PopupVO popupVO) {
         HashMap<String, Object> result = popupService.popupDetail(popupVO);
         PopupVO popup = (PopupVO) result.get("popupVO");
 
         List<HashMap<String, Object>> fileList = new ArrayList<>();
         if (popup.getFileMngId() != null) {
-            fileList = fileService.fileSelectList(popup.getFileMngId());
+            try {
+                fileList = fileService.fileSelectList(popup.getFileMngId());
+            } catch (DataAccessException dae) {
+                throw dae;
+            } catch (Exception e) {
+                throw e;
+            }
         }
         result.put("fileList", fileList);
 
@@ -97,16 +99,14 @@
     }
 
     /**
-     * @author 박정하
-     * @since 2024.05.14
-     * @param popupVO
-     * @return
-     * @throws Exception
+     * @param popupVO - 팝업 정보
+     * @param multipartFileList - 업로드할 파일 목록
+     * @return ResponseEntity - 팝업 수정 결과를 포함하는 응답
      *
      * 팝업 수정
      */
     @PostMapping("/updateProc.file")
-    public ResponseEntity<?> updateProc(@RequestPart PopupVO popupVO, @RequestParam(required = false) List<MultipartFile> multipartFileList) throws Exception {
+    public ResponseEntity<?> updateProc(@RequestPart PopupVO popupVO, @RequestParam(required = false) List<MultipartFile> multipartFileList) {
         int result = popupService.popupUpdate(popupVO, multipartFileList);
 
         // 응답 처리
@@ -118,16 +118,13 @@
     }
 
     /**
-     * @author 박정하
-     * @since 2024.05.14
-     * @param popupVO
-     * @return
-     * @throws Exception
+     * @param popupVO - 팝업 정보
+     * @return ResponseEntity - 팝업 삭제 결과를 포함하는 응답
      *
-     * 팝업 삭제
+     * 팝업 수정
      */
     @PostMapping("/deleteProc.json")
-    public ResponseEntity<?> deleteProc(@RequestBody PopupVO popupVO) throws Exception {
+    public ResponseEntity<?> deleteProc(@RequestBody PopupVO popupVO) {
         int result = popupService.popupDelete(popupVO);
 
         // 응답 처리
@@ -139,16 +136,13 @@
     }
 
     /**
-     * @author 박정하
-     * @since 2024.05.22
-     * @param popupVO
-     * @return
-     * @throws Exception
+     * @param popupVO - 팝업 정보
+     * @return ResponseEntity - 팝업창 띄울 정보를 포함하는 응답
      *
      * 팝업 목록 조회 (팝업창 띄우는 용도)
      */
     @PostMapping("/listByPageProc.json")
-    public ResponseEntity<?> listByPageProc(@RequestBody PopupVO popupVO) throws Exception {
+    public ResponseEntity<?> listByPageProc(@RequestBody PopupVO popupVO) {
         List<PopupVO> result = popupService.popupListByPage(popupVO.getPageType());
 
         // 응답 처리
src/main/java/com/takensoft/cms/popup/web/SysPopupController.java
--- src/main/java/com/takensoft/cms/popup/web/SysPopupController.java
+++ src/main/java/com/takensoft/cms/popup/web/SysPopupController.java
@@ -20,9 +20,10 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+
 /**
- * @author 박정하
- * @since 2024.05.27
+ * @author  : 박정하
+ * @since   : 2024.05.27
  * @modification
  *     since    |    author    | description
  *  2024.05.27  |    박정하     | 최초 등록
@@ -38,16 +39,13 @@
     private final ResponseUtil resUtil;
 
     /**
-     * @author 박정하
-     * @since 2024.05.22
-     * @param popupVO
-     * @return
-     * @throws Exception
+     * @param popupVO - 팝업 정보
+     * @return ResponseEntity - 팝업 목록 조회 응답 결과
      *
      * 팝업 목록 조회 (팝업창 띄우는 용도)
      */
     @PostMapping("/listByPageProc.json")
-    public ResponseEntity<?> listByPageProc(@RequestBody PopupVO popupVO) throws Exception {
+    public ResponseEntity<?> listByPageProc(@RequestBody PopupVO popupVO){
         List<PopupVO> result = popupService.popupListByPage(popupVO.getPageType());
 
         // 응답 처리
@@ -55,16 +53,13 @@
     }
 
     /**
-     * @author 박정하
-     * @since 2024.05.13
-     * @param popupVO
-     * @return
-     * @throws Exception
+     * @param popupVO - 팝업 정보
+     * @return ResponseEntity - 팝업 상세 조회 응답 결과
      *
      * 팝업 상세 조회
      */
     @PostMapping("/detailProc.json")
-    public ResponseEntity<?> detailProc(@RequestBody PopupVO popupVO) throws Exception {
+    public ResponseEntity<?> detailProc(@RequestBody PopupVO popupVO){
         HashMap<String, Object> result = popupService.popupDetail(popupVO);
         PopupVO popup = (PopupVO) result.get("popupVO");
 
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
@@ -50,6 +50,7 @@
      * @throws CustomInsertFailException - 등록 실패 예외 발생 시
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
      * @throws NullPointerException - Null 값이 발생할 경우
+     * @throws UnknownHostException - 호스트의 IP정보를 알 수 없는 경우
      * @throws Exception - 그 외 예외 발생 시
      *
      * 개인정보 조회 이력 등록
@@ -69,6 +70,8 @@
             throw cife;
         } catch (DataAccessException dae) {
             throw dae;
+        } catch (NullPointerException ne) {
+            throw ne;
         } catch (UnknownHostException ukhe) {
             throw new RuntimeException("호스트의 IP정보를 알 수가 없습니다.", ukhe);
         } catch (Exception e) {
src/main/java/com/takensoft/cms/search/service/Impl/SearchServiceImpl.java
--- src/main/java/com/takensoft/cms/search/service/Impl/SearchServiceImpl.java
+++ src/main/java/com/takensoft/cms/search/service/Impl/SearchServiceImpl.java
@@ -41,9 +41,7 @@
     /**
      * @param searchVO - 검색 조건을 포함하는 객체
      * @return SearchResultVO - 검색 결과를 포함하는 객체
-     * @throws CustomNotFoundException - 검색 결과가 없을 경우
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
-     * @throws NullPointerException - Null 값이 발생할 경우
      * @throws Exception - 그 외 예외 발생 시
      *
      * 통합 검색
@@ -75,9 +73,7 @@
      * @param sysMenu - 메뉴 정보
      * @param searchVO - 검색 정보
      * @param searchResultVO - 통합 검색 결과 정보
-     * @throws CustomNotFoundException - 검색 결과가 없을 경우
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
-     * @throws NullPointerException - Null 값이 발생할 경우
      * @throws Exception - 그 외 예외 발생 시
      *
      * 통합 검색
@@ -202,9 +198,7 @@
      * @param contentList - 검색 결과를 포함하는 객체
      * @param searchMenu - 검색 메뉴 정보를 포함하는 객체
      * @param searchResultVO - 검색 결과 정보를 포함하는 객체
-     * @throws CustomNotFoundException - 검색 결과가 없을 경우
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
-     * @throws NullPointerException - Null 값이 발생할 경우
      * @throws Exception - 그 외 예외 발생 시
      *
      * 기업 정보 검색
@@ -251,9 +245,7 @@
      * @param contentList - 검색 결과를 포함하는 객체
      * @param searchMenu - 검색 메뉴 정보를 포함하는 객체
      * @param searchResultVO - 검색 결과 정보를 포함하는 객체
-     * @throws CustomNotFoundException - 검색 결과가 없을 경우
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
-     * @throws NullPointerException - Null 값이 발생할 경우
      * @throws Exception - 그 외 예외 발생 시
      *
      * 기업 상담 신청 검색
@@ -291,9 +283,7 @@
      * @param contentList - 검색 결과를 포함하는 객체
      * @param searchMenu - 검색 메뉴 정보를 포함하는 객체
      * @param searchResultVO - 검색 결과 정보를 포함하는 객체
-     * @throws CustomNotFoundException - 검색 결과가 없을 경우
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
-     * @throws NullPointerException - Null 값이 발생할 경우
      * @throws Exception - 그 외 예외 발생 시
      *
      * 투자 상담 검색
@@ -331,9 +321,7 @@
      * @param contentList - 검색 결과를 포함하는 객체
      * @param searchMenu - 검색 메뉴 정보를 포함하는 객체
      * @param searchResultVO - 검색 결과 정보를 포함하는 객체
-     * @throws CustomNotFoundException - 검색 결과가 없을 경우
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
-     * @throws NullPointerException - Null 값이 발생할 경우
      * @throws Exception - 그 외 예외 발생 시
      *
      * 검토 사항 검색
@@ -371,9 +359,7 @@
      * @param totalListCount - 전체 검색 목록 개수
      * @param searchMenu - 검색 메뉴 정보를 포함하는 객체
      * @param searchResultVO - 검색 결과 정보를 포함하는 객체
-     * @throws CustomNotFoundException - 검색 결과가 없을 경우
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
-     * @throws NullPointerException - Null 값이 발생할 경우
      * @throws Exception - 그 외 예외 발생 시
      *
      * 전체 검색 목록 조회 개수
@@ -396,9 +382,7 @@
      * @param content - 내용
      * @param regDt - 등록일
      * @param pageId - 페이지 ID
-     * @throws CustomNotFoundException - 검색 결과가 없을 경우
      * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
-     * @throws NullPointerException - Null 값이 발생할 경우
      * @throws Exception - 그 외 예외 발생 시
      *
      * 전체 검색 목록 조회 개수
src/main/java/com/takensoft/common/file/dao/FileDAO.java
--- src/main/java/com/takensoft/common/file/dao/FileDAO.java
+++ src/main/java/com/takensoft/common/file/dao/FileDAO.java
@@ -27,7 +27,7 @@
      *
      * 파일 목록 조회
      */
-    public List<HashMap<String, Object>> fileSelectList(String fileMngId) throws Exception;
+    List<HashMap<String, Object>> fileSelectList(String fileMngId);
 
     /**
      * @author 박정하
src/main/java/com/takensoft/common/file/service/FileService.java
--- src/main/java/com/takensoft/common/file/service/FileService.java
+++ src/main/java/com/takensoft/common/file/service/FileService.java
@@ -27,7 +27,7 @@
      *
      * 파일 목록 조회
      */
-    public List<HashMap<String, Object>> fileSelectList(String fileMngId) throws Exception;
+    List<HashMap<String, Object>> fileSelectList(String fileMngId);
 
     /**
      * @author 박정하
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
@@ -7,6 +7,7 @@
 import lombok.RequiredArgsConstructor;
 import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.dao.DataAccessException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
@@ -132,8 +133,14 @@
      * 파일 목록 조회
      */
     @Override
-    public List<HashMap<String, Object>> fileSelectList(String fileMngId) throws Exception {
-        return fileDAO.fileSelectList(fileMngId);
+    public List<HashMap<String, Object>> fileSelectList(String fileMngId){
+        try {
+            return fileDAO.fileSelectList(fileMngId);
+        } catch (DataAccessException dae) {
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
     }
 
     /**
Add a comment
List