방선주 방선주 03-17
250317 방선주 접속 통계 try ~ catch 적용 및 주석 변경
@427d60a6c4deaa6813ffc534986a35b7627448a5
src/main/java/com/takensoft/cms/bbs/dao/BbsMngDAO.java
--- src/main/java/com/takensoft/cms/bbs/dao/BbsMngDAO.java
+++ src/main/java/com/takensoft/cms/bbs/dao/BbsMngDAO.java
@@ -124,5 +124,5 @@
      * @since   2024.07.18
      * 게시판 관리 목록 조회 개수 (접속 통계용)
      */
-    public int findAllCntNotPagination() throws Exception;
+    public int findAllCntNotPagination();
 }
(파일 끝에 줄바꿈 문자 없음)
src/main/java/com/takensoft/cms/cntnStats/dao/CntnStatsDAO.java
--- src/main/java/com/takensoft/cms/cntnStats/dao/CntnStatsDAO.java
+++ src/main/java/com/takensoft/cms/cntnStats/dao/CntnStatsDAO.java
@@ -10,6 +10,12 @@
 /**
  * @author  : takensoft
  * @since   : 2024.05.23
+ * @modification
+ *     since    |    author    | description
+ *  2024.05.23  |  takensoft   | 최초 등록
+ *  2024.05.29  |  takensoft   | selectUserCntnStats, selectUserCntnStatsCnt 추가
+ *  2024.05.30  |  takensoft   | selectMenuCntnStats, selectMenuCntnStatsCnt, selectBbsCntnStats, selectBbsCntnStatsCnt 추가
+ *  2025.03.17  |    방선주     | 코드 리펙토링
  *
  * 접속통계 관련 Mapper
  */
@@ -17,130 +23,146 @@
 public interface CntnStatsDAO {
 
     /**
-     * @author takensoft
-     * @since 2024.05.23
+     * @param cntnStatsVO - 사용자 접속 통계 VO
+     * @return boolean - 사용자 접속 통계 등록 검증
+     *
      * 사용자 접속 통계 등록 검증
      */
     boolean userCntnStatsSaveChck(CntnStatsVO cntnStatsVO);
 
     /**
-     * @author takensoft
-     * @since 2024.05.23
+     * @param cntnStatsVO - 사용자 접속 통계 VO
+     * @return int - 사용자 접속 통계 등록 결과
+     *
      * 사용자 접속 통계 등록
      */
     int userCntnStatsSave(CntnStatsVO cntnStatsVO);
 
     /**
-     * @author takensoft
-     * @since 2024.05.23
+     * @param cntnStatsVO - 사용자 접속 통계 VO
+     * @return int - 사용자 접속 통계 수정 결과
+     *
      * 사용자 접속 통계 수정
      */
     int userCntnStatsUpdate(CntnStatsVO cntnStatsVO);
 
     /**
-     * @author takensoft
-     * @since 2024.05.23
+     * @param cntnStatsVO - 사용자 접속 통계 VO
+     * @return boolean - 컨텐츠 접속 통계 등록 검증
+     *
      * 컨텐츠 접속 통계 등록 검증
      */
     boolean contsCntnStatsSaveChck(CntnStatsVO cntnStatsVO);
 
     /**
-     * @author takensoft
-     * @since 2024.05.23
+     * @param cntnStatsVO - 사용자 접속 통계 VO
+     * @return int - 컨텐츠 접속 통계 등록 결과
+     *
      * 컨텐츠 접속 통계 등록
      */
     int contsCntnStatsSave(CntnStatsVO cntnStatsVO);
 
     /**
-     * @author takensoft
-     * @since 2024.05.23
+     * @param cntnStatsVO - 사용자 접속 통계 VO
+     * @return int - 컨텐츠 접속 통계 수정 결과
+     *
      * 컨텐츠 접속 통계 수정
      */
     int contsCntnStatsUpdate(CntnStatsVO cntnStatsVO);
 
     /**
-     * @author takensoft
-     * @since 2024.05.23
+     * @param cntnStatsVO - 사용자 접속 통계 VO
+     * @return boolean - 게시판 접속 통계 등록 검증
+     *
      * 게시판 접속 통계 등록 검증
      */
     boolean bbsCntnStatsSaveChck(CntnStatsVO cntnStatsVO);
+
     /**
-     * @author takensoft
-     * @since 2024.05.23
+     * @param cntnStatsVO - 사용자 접속 통계 VO
+     * @return int - 게시판 접속 통계 등록 결과
+     *
      * 게시판 접속 통계 등록
      */
     int bbsCntnStatsSave(CntnStatsVO cntnStatsVO);
+
     /**
-     * @author takensoft
-     * @since 2024.05.23
+     * @param cntnStatsVO - 사용자 접속 통계 VO
+     * @return int - 컨텐츠 접속 통계 수정 결과
+     *
      * 컨텐츠 접속 통계 수정
      */
     int bbsCntnStatsUpdate(CntnStatsVO cntnStatsVO);
 
     /**
-     * @author takensoft
-     * @since 2024.05.23
+     * @param cntnStatsVO - 사용자 접속 통계 VO
+     * @return boolean - 메뉴 접속 통계 등록 검증
+     *
      * 메뉴 접속 통계 등록 검증
      */
     boolean menuCntnStatsSaveChck(CntnStatsVO cntnStatsVO);
+
     /**
-     * @author takensoft
-     * @since 2024.05.23
+     * @param cntnStatsVO - 사용자 접속 통계 VO
+     * @return boolean - 메뉴 접속 통계 등록
+     *
      * 메뉴 접속 통계 등록
      */
     int menuCntnStatsSave(CntnStatsVO cntnStatsVO);
+
     /**
-     * @author takensoft
-     * @since 2024.05.23
+     * @param cntnStatsVO - 사용자 접속 통계 VO
+     * @return boolean - 메뉴 접속 통계 수정 결과
+     *
      * 메뉴 접속 통계 수정
      */
     int menuCntnStatsUpdate(CntnStatsVO cntnStatsVO);
 
     /**
-     * @author 박정하
-     * @since 2024.05.29
+     * @param params - 사용자 접속 통계 조회 조건
+     * @return List<HashMap<String, Object>> - 사용자 접속 통계 목록
      *
      * 사용자 접속 통계
      */
-    public List<HashMap<String, Object>> selectUserCntnStats(HashMap<String, Object> params) throws Exception;
+    List<HashMap<String, Object>> selectUserCntnStats(HashMap<String, Object> params);
 
     /**
-     * @author 박정하
-     * @since 2024.05.29
+     * @param params - 사용자 접속 통계 조회 조건
+     * @return int - 사용자 접속 통계 총 개수
      *
      * 사용자 접속 통계 총 개수
      */
-    public int selectUserCntnStatsCnt(HashMap<String, Object> params) throws Exception;
+    int selectUserCntnStatsCnt(HashMap<String, Object> params);
 
     /**
-     * @author 박정하
-     * @since 2024.05.30
+     * @param params - 메뉴별 접속 통계 조회 조건
+     * @return List<HashMap<String, Object>> - 메뉴별 접속 통계
      *
      * 메뉴별 접속 통계
      */
-    public List<HashMap<String, Object>> selectMenuCntnStats(HashMap<String, Object> params) throws Exception;
+    List<HashMap<String, Object>> selectMenuCntnStats(HashMap<String, Object> params);
 
     /**
-     * @author 박정하
-     * @since 2024.05.30
+     * @param params - 메뉴별 접속 통계 조회 조건
+     * @return int - 메뉴별 접속 통계 총 개수
      *
      * 메뉴별 접속 통계 총 개수
      */
-    public int selectMenuCntnStatsCnt(HashMap<String, Object> params) throws Exception;
+    int selectMenuCntnStatsCnt(HashMap<String, Object> params);
 
     /**
-     * @author 박정하
-     * @since 2024.05.30
+     * @param params - 게시판 접속 통계 조회 조건
+     * @return List<HashMap<String, Object>> - 게시판 접속 통계
      *
      * 게시판 접속 통계
      */
-    public List<HashMap<String, Object>> selectBbsCntnStats(HashMap<String, Object> params) throws Exception;
+    List<HashMap<String, Object>> selectBbsCntnStats(HashMap<String, Object> params);
 
     /**
-     * @author 박정하
-     * @since 2024.05.30
+     * @param params - 게시판 접속 통계 조회 조건
+     * @return int - 게시판 접속 통계 총 개수
      *
      * 게시판 접속 통계 총 개수
      */
-    public int selectBbsCntnStatsCnt(HashMap<String, Object> params) throws Exception;
+    int selectBbsCntnStatsCnt(HashMap<String, Object> params);
 }
(파일 끝에 줄바꿈 문자 없음)
src/main/java/com/takensoft/cms/cntnStats/dto/CntnStatsDTO.java
--- src/main/java/com/takensoft/cms/cntnStats/dto/CntnStatsDTO.java
+++ src/main/java/com/takensoft/cms/cntnStats/dto/CntnStatsDTO.java
@@ -8,6 +8,10 @@
 /**
  * @author  : takensoft
  * @since   : 2024.05.23
+ * @modification
+ *     since    |    author    | description
+ *  2024.05.23  |  takensoft   | 최초 등록
+ *  2025.03.17  |    방선주     | 코드 리펙토링
  *
  * 접속 통계 관련 DTO
  */
@@ -18,13 +22,7 @@
 @Builder
 @ToString
 public class CntnStatsDTO {
-    /**
-     * 타입 아이디
-     */
-    private String typeId;
-    /**
-     * 권한 목록
-     */
+    private String typeId; // 타입 아이디
     @Builder.Default
-    private List<String> mbrAuthList = new ArrayList<String>();
+    private List<String> mbrAuthList = new ArrayList<String>(); // 권한 목록
 }
src/main/java/com/takensoft/cms/cntnStats/dto/CntnStatsExcelDTO.java
--- src/main/java/com/takensoft/cms/cntnStats/dto/CntnStatsExcelDTO.java
+++ src/main/java/com/takensoft/cms/cntnStats/dto/CntnStatsExcelDTO.java
@@ -7,6 +7,16 @@
 import lombok.NoArgsConstructor;
 import lombok.Setter;
 import javax.persistence.*;
+/**
+ * @author  : takensoft
+ * @since   : 2024.05.23
+ * @modification
+ *     since    |    author    | description
+ *  2024.05.23  |  takensoft   | 최초 등록
+ *  2025.03.17  |    방선주     | 코드 리펙토링
+ *
+ * 게시판 계정별 접속 통계 DTO
+ */
 
 @Entity
 @Getter
src/main/java/com/takensoft/cms/cntnStats/service/CntnStatsService.java
--- src/main/java/com/takensoft/cms/cntnStats/service/CntnStatsService.java
+++ src/main/java/com/takensoft/cms/cntnStats/service/CntnStatsService.java
@@ -8,42 +8,49 @@
 import java.util.Map;
 
 /**
- * @author  : takensoft
- * @since   : 2024.05.23
+ * @author takensoft
+ * @since 2024.05.23
+ * @modification
+ *     since    |    author    | description
+ *  2024.05.23  |  takensoft   | 최초 등록
+ *  2024.05.29  |    박정하     | userCntnStatsSelect 추가
+ *  2024.05.30  |    박정하     | menuCntnStatsSelect, bbsCntnStatsSelect 추가
+ *  2025.03.17  |    방선주     | 코드 리펙토링
  *
  * 접속통계 관련 인터페이스
  */
 public interface CntnStatsService {
 
     /**
-     * @author  : takensoft
-     * @since   : 2024.05.23
+     * @param cntnStatsDTO - 접속 통계 DTO
+     * @return int - 접속 통계 등록 결과
      *
      * 접속 통계 등록
      */
-    public int cntnStatsSave(CntnStatsDTO cntnStatsDTO) throws Exception;
+    int cntnStatsSave(CntnStatsDTO cntnStatsDTO);
 
     /**
-     * @author 박정하
-     * @since 2024.05.29
+     * @param params - 통계 조회 조건
+     * @return HashMap<String, Object> - 사용자 접속 통계 결과
      *
      * 사용자 접속 통계
+     *
      */
-    public HashMap<String, Object> userCntnStatsSelect(HashMap<String, Object> params) throws Exception;
+    HashMap<String, Object> userCntnStatsSelect(HashMap<String, Object> params);
 
     /**
-     * @author 박정하
-     * @since 2024.05.30
+     * @param params - 통계 조회 조건
+     * @return HashMap<String, Object> - 메뉴별 접속 통계 결과
      *
      * 메뉴별 접속 통계
      */
-    public HashMap<String, Object> menuCntnStatsSelect(HashMap<String, Object> params) throws Exception;
+    HashMap<String, Object> menuCntnStatsSelect(HashMap<String, Object> params);
 
     /**
-     * @author 박정하
-     * @since 2024.05.30
+     * @param params - 통계 조회 조건
+     * @return boolean - 게시판 접속 통계 결과
      *
      * 게시판 접속 통계
      */
-    public HashMap<String, Object> bbsCntnStatsSelect(HashMap<String, Object> params) throws Exception;
+    HashMap<String, Object> bbsCntnStatsSelect(HashMap<String, Object> params);
 }
(파일 끝에 줄바꿈 문자 없음)
src/main/java/com/takensoft/cms/cntnStats/service/Impl/CntnStatsServiceImpl.java
--- src/main/java/com/takensoft/cms/cntnStats/service/Impl/CntnStatsServiceImpl.java
+++ src/main/java/com/takensoft/cms/cntnStats/service/Impl/CntnStatsServiceImpl.java
@@ -6,10 +6,12 @@
 import com.takensoft.cms.cntnStats.service.CntnStatsService;
 import com.takensoft.cms.cntnStats.vo.CntnStatsVO;
 import com.takensoft.cms.menu.dao.MenuDAO;
+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;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -18,11 +20,18 @@
 
 /**
  * @author  : takensoft
- * @since   : 2024.05.23
+ * @since   :2024.05.23
+ * @modification
+ *     since    |    author    | description
+ *  2024.05.23  |  takensoft   | 최초 등록
+ *  2024.05.29  |    박정하     | 최초 등록
+ *  2024.05.30  |    박정하     | 최초 등록
+ *  2025.03.17  |    방선주     | 코드 리펙토링
+ *
+ * EgovAbstractServiceImpl - 전자정부 프레임워크에서 제공하는 추상 서비스 구현 클래스
+ * CntnStatsService - 접속 통계 관련 인터페이스
  *
  * 접속통계 관련 구현체
- * EgovAbstractServiceImpl : 전자정부 상속
- * CntnStatsService : 접속 통계 관련 인터페이스 상속
  */
 @Service("cntnStatsService")
 @RequiredArgsConstructor
@@ -34,174 +43,301 @@
     private final MenuDAO menuDAO;
 
     /**
-     * @author  : takensoft
-     * @since   : 2024.05.23
+     * @param cntnStatsDTO - 접속 통계 DTO
+     * @return int - 접속 통계 등록 결과
+     * @throws CustomInsertFailException - 등록 실패 시
+     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
+     * @throws NullPointerException - Null 값이 발생할 경우
+     * @throws Exception - 그 외 예외 발생 시
      *
      * 접속 통계 등록
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public int cntnStatsSave(CntnStatsDTO cntnStatsDTO) throws Exception {
-        LocalDate date = LocalDate.now(); // 오늘 금일 날짜 출력
-        CntnStatsVO vo = new CntnStatsVO(); // 접속 통계 객체 생성
+    public int cntnStatsSave(CntnStatsDTO cntnStatsDTO){
+        try {
+            LocalDate date = LocalDate.now(); // 오늘 금일 날짜 출력
+            CntnStatsVO vo = new CntnStatsVO(); // 접속 통계 객체 생성
 
-        vo.setCntnYr(String.valueOf(date.getYear())); // 년도 추출
-        vo.setCntnMm(String.format("%02d", date.getMonthValue())); // 월 추출
-        vo.setCntnDay(String.format("%02d", date.getDayOfMonth())); // 일 추출
+            vo.setCntnYr(String.valueOf(date.getYear())); // 년도 추출
+            vo.setCntnMm(String.format("%02d", date.getMonthValue())); // 월 추출
+            vo.setCntnDay(String.format("%02d", date.getDayOfMonth())); // 일 추출
 
-        int result = 0;
+            int result = 0;
 
-        // 사용자 접속 통계 생성
-        if(cntnStatsDTO.getTypeId() == null || cntnStatsDTO.getTypeId().equals("")) {
-            result += userCntnStatsSave(vo, cntnStatsDTO);
-        // 메뉴 접속 통계 생성
-        } else if(cntnStatsDTO.getTypeId().contains("MENU")) {
-            result += menuCntnStatsSave(vo, cntnStatsDTO);
-        // 게시판 접속 통계 생성
-        } else if(cntnStatsDTO.getTypeId().contains("BBS")) {
-            result += bbsCntnStatsSave(vo, cntnStatsDTO);
-        // 콘텐츠 접속 통게 생성
-        } else if(cntnStatsDTO.getTypeId().contains("CONTS")) {
-            result += contsCntnStatsSave(vo, cntnStatsDTO);
+            // 사용자 접속 통계 생성
+            if (cntnStatsDTO.getTypeId() == null || cntnStatsDTO.getTypeId().equals("")) {
+                result = userCntnStatsSave(vo, cntnStatsDTO);
+                // 메뉴 접속 통계 생성
+            } else if (cntnStatsDTO.getTypeId().contains("MENU")) {
+                result = menuCntnStatsSave(vo, cntnStatsDTO);
+                // 게시판 접속 통계 생성
+            } else if (cntnStatsDTO.getTypeId().contains("BBS")) {
+                result = bbsCntnStatsSave(vo, cntnStatsDTO);
+                // 콘텐츠 접속 통게 생성
+            } else if (cntnStatsDTO.getTypeId().contains("CONTS")) {
+                result = contsCntnStatsSave(vo, cntnStatsDTO);
+            }
+            // 접속 통계 등록 실패 시 예외 발생
+            if( result == 0) {
+                throw new CustomInsertFailException("접속 통계 등록 실패");
+            }
+
+            return result;
+        } catch (DataAccessException dae){
+            throw dae;
+        } catch (NullPointerException npe) {
+            throw npe;
+        } catch (Exception e) {
+            throw e;
         }
-
-        return result;
     }
 
     /**
-     * @author takensoft
-     * @since 2024.05.23
+     * @param cntnStatsDTO - 접속 통계 DTO
+     * @return int - 사용자 접속 통계 등록 결과
+     * @throws CustomInsertFailException - 등록 실패 시
+     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
+     * @throws NullPointerException - Null 값이 발생할 경우
+     * @throws Exception - 그 외 예외 발생 시
+     *
      * 사용자 접속 통계 등록
      */
-    private int userCntnStatsSave(CntnStatsVO cntnStatsVO, CntnStatsDTO cntnStatsDTO) throws Exception {
-        int result = 0;
-        for(String auth : cntnStatsDTO.getMbrAuthList()) {
-            cntnStatsVO.setAuthrtCd(auth);
-            boolean chck = cntnStatsDAO.userCntnStatsSaveChck(cntnStatsVO);
-            // 카운트 증가
-            if(chck) {
-                result += cntnStatsDAO.userCntnStatsUpdate(cntnStatsVO);
-            // 신규 등록
-            } else {
-                result += cntnStatsDAO.userCntnStatsSave(cntnStatsVO);
+    private int userCntnStatsSave(CntnStatsVO cntnStatsVO, CntnStatsDTO cntnStatsDTO){
+        try {
+            int result = 0;
+            for (String auth : cntnStatsDTO.getMbrAuthList()) {
+                cntnStatsVO.setAuthrtCd(auth);
+                boolean chck = cntnStatsDAO.userCntnStatsSaveChck(cntnStatsVO);
+                // 등록 결과
+                int saveResult = 0;
+                // 카운트 증가
+                if (chck) {
+                    saveResult = cntnStatsDAO.userCntnStatsUpdate(cntnStatsVO);
+                    // 신규 등록
+                } else {
+                    saveResult = cntnStatsDAO.userCntnStatsSave(cntnStatsVO);
+                }
+
+                // 등록 실패 시 예외 발생
+                if( saveResult == 0) {
+                    throw new CustomInsertFailException("사용자 접속 통계 등록 실패");
+                }else {
+                    result += saveResult;
+                }
             }
+            return result;
+        } catch (DataAccessException dae){
+            throw dae;
+        } catch (NullPointerException npe) {
+            throw npe;
+        } catch (Exception e) {
+            throw e;
         }
-        return result;
     };
 
     /**
-     * @author takensoft
-     * @since 2024.05.23
+     * @param cntnStatsDTO - 접속 통계 DTO
+     * @return int - 컨텐츠 접속 통계 등록 결과
+     * @throws CustomInsertFailException - 등록 실패 시
+     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
+     * @throws NullPointerException - Null 값이 발생할 경우
+     * @throws Exception - 그 외 예외 발생 시
+     *
      * 컨텐츠 접속 통계 등록
      */
-    private int contsCntnStatsSave(CntnStatsVO cntnStatsVO, CntnStatsDTO cntnStatsDTO)throws Exception {
+    private int contsCntnStatsSave(CntnStatsVO cntnStatsVO, CntnStatsDTO cntnStatsDTO){
         int result = 0;
-        for(String auth : cntnStatsDTO.getMbrAuthList()) {
-            cntnStatsVO.setAuthrtCd(auth);
-            cntnStatsVO.setTypeId(cntnStatsDTO.getTypeId());
-            boolean chck = cntnStatsDAO.contsCntnStatsSaveChck(cntnStatsVO);
-            // 카운트 증가
-            if(chck) {
-                result += cntnStatsDAO.contsCntnStatsUpdate(cntnStatsVO);
-                // 신규 등록
-            } else {
-                result += cntnStatsDAO.contsCntnStatsSave(cntnStatsVO);
+        try {
+            for (String auth : cntnStatsDTO.getMbrAuthList()) {
+                cntnStatsVO.setAuthrtCd(auth);
+                cntnStatsVO.setTypeId(cntnStatsDTO.getTypeId());
+                boolean chck = cntnStatsDAO.contsCntnStatsSaveChck(cntnStatsVO);
+                int saveResult = 0;
+                // 카운트 증가
+                if (chck) {
+                    saveResult = cntnStatsDAO.contsCntnStatsUpdate(cntnStatsVO);
+                    // 신규 등록
+                } else {
+                    saveResult = cntnStatsDAO.contsCntnStatsSave(cntnStatsVO);
+                }
+
+                // 등록 실패 시 예외 발생
+                if( saveResult == 0) {
+                    throw new CustomInsertFailException("컨텐츠 접속 통계 등록 실패");
+                } else {
+                    result += saveResult;
+                }
             }
+            return result;
+        } catch (DataAccessException dae){
+            throw dae;
+        } catch (NullPointerException npe) {
+            throw npe;
+        } catch (Exception e) {
+            throw e;
         }
-        return result;
     };
 
     /**
-     * @author takensoft
-     * @since 2024.05.23
-     * 게시판 접속 통계 등록
+     * @param cntnStatsDTO - 접속 통계 DTO
+     * @return int - 게시판 접속 통계 등록 결과
+     * @throws CustomInsertFailException - 등록 실패 시
+     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
+     * @throws NullPointerException - Null 값이 발생할 경우
+     * @throws Exception - 그 외 예외 발생 시
+     *
+     * 컨텐츠 접속 통계 등록
      */
-    private int bbsCntnStatsSave(CntnStatsVO cntnStatsVO, CntnStatsDTO cntnStatsDTO)throws Exception {
+    private int bbsCntnStatsSave(CntnStatsVO cntnStatsVO, CntnStatsDTO cntnStatsDTO){
         int result = 0;
-        for(String auth : cntnStatsDTO.getMbrAuthList()) {
-            cntnStatsVO.setAuthrtCd(auth);
-            cntnStatsVO.setTypeId(cntnStatsDTO.getTypeId());
-            boolean chck = cntnStatsDAO.bbsCntnStatsSaveChck(cntnStatsVO);
-            // 카운트 증가
-            if(chck) {
-                result += cntnStatsDAO.bbsCntnStatsUpdate(cntnStatsVO);
-                // 신규 등록
-            } else {
-                result += cntnStatsDAO.bbsCntnStatsSave(cntnStatsVO);
+        try {
+            for (String auth : cntnStatsDTO.getMbrAuthList()) {
+                cntnStatsVO.setAuthrtCd(auth);
+                cntnStatsVO.setTypeId(cntnStatsDTO.getTypeId());
+                boolean chck = cntnStatsDAO.bbsCntnStatsSaveChck(cntnStatsVO);
+                // 등록 결과
+                int saveResult = 0;
+                // 카운트 증가
+                if (chck) {
+                    saveResult += cntnStatsDAO.bbsCntnStatsUpdate(cntnStatsVO);
+                    // 신규 등록
+                } else {
+                    saveResult += cntnStatsDAO.bbsCntnStatsSave(cntnStatsVO);
+                }
+                // 등록 실패 시 예외 발생
+                if( saveResult == 0) {
+                    throw new CustomInsertFailException("게시판 접속 통계 등록 실패");
+                } else {
+                    result += saveResult;
+                }
             }
+            return result;
+        } catch (DataAccessException dae){
+            throw dae;
+        } catch (NullPointerException npe) {
+            throw npe;
+        } catch (Exception e) {
+            throw e;
         }
-        return result;
     };
 
     /**
-     * @author takensoft
-     * @since 2024.05.23
+     * @param cntnStatsDTO - 접속 통계 DTO
+     * @return int - 메뉴 접속 통계 등록 결과
+     * @throws CustomInsertFailException - 등록 실패 시
+     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
+     * @throws NullPointerException - Null 값이 발생할 경우
+     * @throws Exception - 그 외 예외 발생 시
+     *
      * 메뉴 접속 통계 등록
      */
-    private int menuCntnStatsSave(CntnStatsVO cntnStatsVO, CntnStatsDTO cntnStatsDTO)throws Exception {
+    private int menuCntnStatsSave(CntnStatsVO cntnStatsVO, CntnStatsDTO cntnStatsDTO){
         int result = 0;
-        for(String auth : cntnStatsDTO.getMbrAuthList()) {
-            cntnStatsVO.setAuthrtCd(auth);
-            cntnStatsVO.setTypeId(cntnStatsDTO.getTypeId());
-            boolean chck = cntnStatsDAO.menuCntnStatsSaveChck(cntnStatsVO);
-            // 카운트 증가
-            if(chck) {
-                result += cntnStatsDAO.menuCntnStatsUpdate(cntnStatsVO);
-                // 신규 등록
-            } else {
-                result += cntnStatsDAO.menuCntnStatsSave(cntnStatsVO);
+        try {
+            for (String auth : cntnStatsDTO.getMbrAuthList()) {
+                cntnStatsVO.setAuthrtCd(auth);
+                cntnStatsVO.setTypeId(cntnStatsDTO.getTypeId());
+                boolean chck = cntnStatsDAO.menuCntnStatsSaveChck(cntnStatsVO);
+                // 등록 결과
+                int saveResult = 0;
+                // 카운트 증가
+                if (chck) {
+                    saveResult = cntnStatsDAO.menuCntnStatsUpdate(cntnStatsVO);
+                    // 신규 등록
+                } else {
+                    saveResult = cntnStatsDAO.menuCntnStatsSave(cntnStatsVO);
+                }
+                // 등록 실패 시 예외 발생
+                if( saveResult == 0) {
+                    throw new CustomInsertFailException("메뉴 접속 통계 등록 실패");
+                } else {
+                    result += saveResult;
+                }
             }
+            return result;
+        } catch (DataAccessException dae){
+            throw dae;
+        } catch (NullPointerException npe) {
+            throw npe;
+        } catch (Exception e) {
+            throw e;
         }
-        return result;
     };
 
     /**
-     * @author 박정하
-     * @since 2024.05.29
+     * @param params - 접속 통계 조회 조건
+     * @return HashMap<String, Object> - 조회 결과
+     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
      *
      * 사용자 접속 통계
      */
     @Override
-    public HashMap<String, Object> userCntnStatsSelect(HashMap<String, Object> params) throws Exception {
-        HashMap<String, Object> result = new HashMap<>();
-        result.put("list", cntnStatsDAO.selectUserCntnStats(params));
-        result.put("totalCnt", cntnStatsDAO.selectUserCntnStatsCnt(params));
-        return result;
-    };
+    public HashMap<String, Object> userCntnStatsSelect(HashMap<String, Object> params){
+        try {
+            HashMap<String, Object> result = new HashMap<>();
+            result.put("list", cntnStatsDAO.selectUserCntnStats(params));
+            result.put("totalCnt", cntnStatsDAO.selectUserCntnStatsCnt(params));
+            return result;
+        } catch (DataAccessException dae){
+            throw dae;
+        } catch (Exception e) {
+            throw e;
+        }
+    }
 
     /**
-     * @author 박정하
-     * @since 2024.05.30
+     * @param params - 접속 통계 조회 조건
+     * @return HashMap<String, Object> - 조회 결과
+     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
      *
      * 메뉴별 접속 통계
      */
     @Override
-    public HashMap<String, Object> menuCntnStatsSelect(HashMap<String, Object> params) throws Exception {
-        HashMap<String, Object> result = new HashMap<>();
-        int menuCnt = menuDAO.findAllCnt(params);
-        result.put("menuCnt", menuCnt);
-        if (menuCnt > 0) {
-            result.put("list", cntnStatsDAO.selectMenuCntnStats(params));
-            result.put("totalCnt", cntnStatsDAO.selectMenuCntnStatsCnt(params));
+    public HashMap<String, Object> menuCntnStatsSelect(HashMap<String, Object> params){
+        try {
+            HashMap<String, Object> result = new HashMap<>();
+            int menuCnt = menuDAO.findAllCnt(params);
+            result.put("menuCnt", menuCnt);
+            if (menuCnt > 0) {
+                result.put("list", cntnStatsDAO.selectMenuCntnStats(params));
+                result.put("totalCnt", cntnStatsDAO.selectMenuCntnStatsCnt(params));
+            }
+            return result;
+        } catch (DataAccessException dae){
+            throw dae;
+        } catch (Exception e) {
+            throw e;
         }
-        return result;
     }
 
     /**
-     * @author 박정하
-     * @since 2024.05.30
+     * @param params - 접속 통계 조회 조건
+     * @return HashMap<String, Object> - 조회 결과
+     * @throws DataAccessException - 데이터베이스 접근 예외 발생 시
+     * @throws Exception - 그 외 예외 발생 시
      *
      * 게시판 접속 통계
      */
     @Override
-    public HashMap<String, Object> bbsCntnStatsSelect(HashMap<String, Object> params) throws Exception {
-        HashMap<String, Object> result = new HashMap<>();
-        int bbsCnt = bbsMngDAO.findAllCntNotPagination();
-        result.put("bbsCnt", bbsCnt);
-        if (bbsCnt > 0) {
-            result.put("list", cntnStatsDAO.selectBbsCntnStats(params));
-            result.put("totalCnt", cntnStatsDAO.selectBbsCntnStatsCnt(params));
+    public HashMap<String, Object> bbsCntnStatsSelect(HashMap<String, Object> params){
+        try {
+            HashMap<String, Object> result = new HashMap<>();
+            int bbsCnt = bbsMngDAO.findAllCntNotPagination();
+            result.put("bbsCnt", bbsCnt);
+            if (bbsCnt > 0) {
+                result.put("list", cntnStatsDAO.selectBbsCntnStats(params));
+                result.put("totalCnt", cntnStatsDAO.selectBbsCntnStatsCnt(params));
+            }
+            return result;
+        } catch (DataAccessException dae){
+            throw dae;
+        } catch (RuntimeException re){
+            throw re;
+        } catch (Exception e) {
+            throw e;
         }
-        return result;
     }
 }
(파일 끝에 줄바꿈 문자 없음)
src/main/java/com/takensoft/cms/cntnStats/vo/CntnStatsVO.java
--- src/main/java/com/takensoft/cms/cntnStats/vo/CntnStatsVO.java
+++ src/main/java/com/takensoft/cms/cntnStats/vo/CntnStatsVO.java
@@ -8,6 +8,10 @@
 /**
  * @author  : takensoft
  * @since   : 2024.05.23
+ * @modification
+ *     since    |    author    | description
+ *  2024.05.23  |  takensoft   | 최초 등록
+ *  2025.03.17  |    방선주     | 코드 리펙토링
  *
  * 접속 통계 관련 VO
  */
@@ -16,24 +20,9 @@
 @NoArgsConstructor
 @AllArgsConstructor
 public class CntnStatsVO {
-    /**
-     * 타입 아이디 (게시판/콘텐츠/메뉴)
-     */
-    private String typeId;
-    /**
-     * 권한 코드
-     */
-    private String authrtCd;
-    /**
-     * 접속 년도
-     */
-    private String cntnYr;
-    /**
-     * 접속 월
-     */
-    private String cntnMm;
-    /**
-     * 접속 일
-     */
-    private String cntnDay;
+    private String typeId;      // 타입 아이디(게시판/콘텐츠/메뉴)
+    private String authrtCd;    // 권한 코드
+    private String cntnYr;      // 접속 년도
+    private String cntnMm;      // 접속 월
+    private String cntnDay;     // 접속 일
 }
src/main/java/com/takensoft/cms/cntnStats/web/CntnStatsController.java
--- src/main/java/com/takensoft/cms/cntnStats/web/CntnStatsController.java
+++ src/main/java/com/takensoft/cms/cntnStats/web/CntnStatsController.java
@@ -18,12 +18,16 @@
 import jakarta.servlet.http.HttpServletResponse;
 import java.nio.charset.Charset;
 import java.util.*;
+
 /**
  * @author takensoft
  * @since 2024.05.23
  * @modification
  *     since    |    author    | description
  *  2024.05.23  |  takensoft   | 최초 등록
+ *  2024.05.29  |    박정하     | selectUserCntnStatsProc 추가
+ *  2024.05.30  |    박정하     | selectMenuCntnStatsProc, selectBbsCntnStatsProc, excelDownload 추가
+ *  2025.03.17  |    방선주    | 코드 리펙토링
  *
  * 접속 통계 관련 컨트롤러
  */
@@ -37,73 +41,55 @@
     private final ResponseUtil resUtil;
 
     /**
-     * @author takensoft
-     * @since 2024.05.23
-     * @param cntnStatsDTO
-     * @return
-     * @throws Exception
+     * @param cntnStatsDTO - 접속 통계 DTO
+     * @return ResponseEntity - 접속 통계 등록 응답 결과
      *
      * 접속 통게 등록
      */
     @PostMapping("/saveProc.json")
-    public ResponseEntity<?> saveProc(@RequestBody CntnStatsDTO cntnStatsDTO) throws Exception {
+    public ResponseEntity<?> saveProc(@RequestBody CntnStatsDTO cntnStatsDTO){
         int result = cntnStatsService.cntnStatsSave(cntnStatsDTO);
 
         // 응답 처리
-        if(result > 0) {
-            return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
-        } else {
-            return resUtil.errorRes(MessageCode.COMMON_INSERT_FAIL);
-        }
+        return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
     }
 
     /**
-     * @author 박정하
-     * @since 2024.05.29
-     * @param
-     * @return
-     * @throws Exception
+     * @param params - 접속 통계 조회 파라미터
+     * @return ResponseEntity - 사용자 접속 통계 응답 결과
      *
      * 사용자 접속 통계
      */
     @PostMapping("/selectUserCntnStatsProc.json")
-    public ResponseEntity<?> selectUserCntnStatsProc(@RequestBody HashMap<String, Object> params) throws Exception {
+    public ResponseEntity<?> selectUserCntnStatsProc(@RequestBody HashMap<String, Object> params){
         // 사용자 접속 통계 조회
         HashMap<String, Object> result = cntnStatsService.userCntnStatsSelect(params);
-
         // 응답 처리
         return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
     }
 
     /**
-     * @author 박정하
-     * @since 2024.05.30
-     * @param
-     * @return
-     * @throws Exception
+     * @param params - 접속 통계 조회 파라미터
+     * @return ResponseEntity - 메뉴별 접속 통계 응답 결과
      *
      * 메뉴별 접속 통계
      */
     @PostMapping("/selectMenuCntnStatsProc.json")
-    public ResponseEntity<?> selectMenuCntnStatsProc(@RequestBody HashMap<String, Object> params) throws Exception {
+    public ResponseEntity<?> selectMenuCntnStatsProc(@RequestBody HashMap<String, Object> params){
         // 메뉴별 접속 통계 조회
         HashMap<String, Object> result = cntnStatsService.menuCntnStatsSelect(params);
-
         // 응답 처리
         return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
     }
 
     /**
-     * @author 박정하
-     * @since 2024.05.30
-     * @param
-     * @return
-     * @throws Exception
+     * @param params - 접속 통계 조회 파라미터
+     * @return ResponseEntity - 게시판 접속 통계 응답 결과
      *
      * 게시판 접속 통계
      */
     @PostMapping("/selectBbsCntnStatsProc.json")
-    public ResponseEntity<?> selectBbsCntnStatsProc(@RequestBody HashMap<String, Object> params) throws Exception {
+    public ResponseEntity<?> selectBbsCntnStatsProc(@RequestBody HashMap<String, Object> params){
         // 게시판 접속 통계 조회
         HashMap<String, Object> result = cntnStatsService.bbsCntnStatsSelect(params);
 
@@ -112,16 +98,15 @@
     }
 
     /**
-     * @author 박정하
-     * @since 2024.05.30
-     * @param
-     * @return
-     * @throws Exception
+     * @param response - HTTP 응답 객체
+     * @param cntnStats - 엑셀 다운로드 데이터
+     * @param chart - 차트 명
+     * @return ResponseEntity - 게시판 접속 통계 응답 결과
      *
      * 접속 통계 엑셀 다운로드
      */
     @PostMapping("/excelDownload.file")
-    public void excelDownload(HttpServletResponse response, @RequestPart List<CntnStatsExcelDTO> cntnStats, @RequestPart String chart) throws Exception {
+    public void excelDownload(HttpServletResponse response, @RequestPart List<CntnStatsExcelDTO> cntnStats, @RequestPart String chart){
         excelService.cntnStatsExcelDownload(response, cntnStats, chart);
     }
 }
(파일 끝에 줄바꿈 문자 없음)
src/main/java/com/takensoft/common/excel/service/ExcelService.java
--- src/main/java/com/takensoft/common/excel/service/ExcelService.java
+++ src/main/java/com/takensoft/common/excel/service/ExcelService.java
@@ -11,9 +11,9 @@
 import java.util.List;
 
 public interface ExcelService {
-    public void ivstDscsnExcelDownload(HttpServletResponse response, IvstDscsnExcelDTO ivstDscsn) throws Exception;
-    public void rvwMttrExcelDownload(HttpServletResponse response, RvwMttrExcelDTO rvwMttr, List<RvwMttrPrgrsExcelDTO> prgrsList) throws Exception;
-    public void entInfoExcelDownload(HttpServletResponse response, EntInfoExcelDTO entInfo, List<BplcExcelDTO> bplcList) throws Exception;
-    public void cntnStatsExcelDownload(HttpServletResponse response, List<CntnStatsExcelDTO> cntnStats, String chart) throws Exception;
-    public void entInfoExcelDownloadAll(HttpServletResponse response, List<EntInfoExcelDTO> entInfoList) throws Exception;
+    void ivstDscsnExcelDownload(HttpServletResponse response, IvstDscsnExcelDTO ivstDscsn) throws Exception;
+    void rvwMttrExcelDownload(HttpServletResponse response, RvwMttrExcelDTO rvwMttr, List<RvwMttrPrgrsExcelDTO> prgrsList) throws Exception;
+    void entInfoExcelDownload(HttpServletResponse response, EntInfoExcelDTO entInfo, List<BplcExcelDTO> bplcList) throws Exception;
+    void cntnStatsExcelDownload(HttpServletResponse response, List<CntnStatsExcelDTO> cntnStats, String chart);
+    void entInfoExcelDownloadAll(HttpServletResponse response, List<EntInfoExcelDTO> entInfoList) throws Exception;
 }
(파일 끝에 줄바꿈 문자 없음)
src/main/java/com/takensoft/common/excel/service/Impl/ExcelServiceImpl.java
--- src/main/java/com/takensoft/common/excel/service/Impl/ExcelServiceImpl.java
+++ src/main/java/com/takensoft/common/excel/service/Impl/ExcelServiceImpl.java
@@ -126,26 +126,32 @@
 
     // 통계관리
     @Override
-    public void cntnStatsExcelDownload(HttpServletResponse response, List<CntnStatsExcelDTO> mainDataList, String chart) throws Exception {
-        // 기본 세팅
-        Workbook workbook = new SXSSFWorkbook();
-        Sheet sheet = workbook.createSheet();
-        int rowIndex = 0;
+    public void cntnStatsExcelDownload(HttpServletResponse response, List<CntnStatsExcelDTO> mainDataList, String chart) {
+        try {
+            // 기본 세팅
+            Workbook workbook = new SXSSFWorkbook();
+            Sheet sheet = workbook.createSheet();
+            int rowIndex = 0;
 
-        // 개별 설정
-        ExcelRenderResource mainResource = ExcelRenderResourceFactory.prepareRenderResource(CntnStatsExcelDTO.class);
+            // 개별 설정
+            ExcelRenderResource mainResource = ExcelRenderResourceFactory.prepareRenderResource(CntnStatsExcelDTO.class);
 
-        // 엑셀 그리기
-        ExcelCreateService<CntnStatsExcelDTO> mainExcel = new ExcelCreateService(workbook, sheet, mainDataList, mainDataList.getClass());
-        mainExcel.chartDraw(sheet, chart, rowIndex, mainResource.getDataFieldNames().size() + 1);
-        rowIndex = mainExcel.createHorizontal(mainResource, mainDataList, rowIndex);
+            // 엑셀 그리기
+            ExcelCreateService<CntnStatsExcelDTO> mainExcel = new ExcelCreateService(workbook, sheet, mainDataList, mainDataList.getClass());
+            mainExcel.chartDraw(sheet, chart, rowIndex, mainResource.getDataFieldNames().size() + 1);
+            rowIndex = mainExcel.createHorizontal(mainResource, mainDataList, rowIndex);
 
-        // 엑셀 사이즈 지정
-        int cellNumber = mainResource.getDataFieldNames().size();
-        sheetSize(sheet, cellNumber);
+            // 엑셀 사이즈 지정
+            int cellNumber = mainResource.getDataFieldNames().size();
+            sheetSize(sheet, cellNumber);
 
-        // 엑셀 파일 출력
-        writeExcel(response, workbook, mainResource);
+            // 엑셀 파일 출력
+            writeExcel(response, workbook, mainResource);
+        } catch (RuntimeException ex) {
+            throw new RuntimeException(ex);
+        }catch (Exception e) {
+            e.printStackTrace();
+        }
     }
 
     // 기업정보 전체 다운로드
Add a comment
List