하석형 하석형 04-02
250402 하석형 ContextPath 이력 관리 및 최신 컨텍스트 패스 조회 형식으로 변경, Context Path 필터 추가
@61d379b5708d3e529decaa869e0b34d5ec970338
src/main/java/com/takensoft/cms/cntxtPth/dao/CntxtPthDAO.java
--- src/main/java/com/takensoft/cms/cntxtPth/dao/CntxtPthDAO.java
+++ src/main/java/com/takensoft/cms/cntxtPth/dao/CntxtPthDAO.java
@@ -12,6 +12,7 @@
  * @modification
  *     since    |    author    | description
  *  2025.03.31  |    하석형     | 최초 등록
+ *  2025.04.02  |    하석형     | 이력 관리 및 최신 컨텍스트 패스 조회 형식으로 변경
  *
  * 컨텍스트 패스 정보 관련 DAO
  */
@@ -19,28 +20,11 @@
 public interface CntxtPthDAO {
 
     /**
-     * @param pagination - 페이징 정보
-     * @return List<CntxtPthVO> - 컨텍스트 패스 정보를 담고 있는 객체 목록
+     * @return String - 컨텍스트 패스 경로
      *
-     * 컨텍스트 패스 목록 조회
+     * 최신 컨텍스트 패스 조회
      */
-    List<CntxtPthVO> findAll(Pagination pagination);
-
-    /**
-     * @param pagination - 페이징 정보
-     * @return int - 컨텍스트 패스 목록 갯수
-     *
-     * 컨텍스트 패스 목록 갯수
-     */
-    int findAllCnt(Pagination pagination);
-
-    /**
-     * @param cntxtPthId - 컨텍스트 패스 아이디
-     * @return CntxtPthVO - 컨텍스트 패스 정보를 담고 있는 객체
-     *
-     * 컨텍스트 패스 상세 조회
-     */
-    CntxtPthVO findByCntxtPthId(String cntxtPthId);
+    String findLatestCntxtPth();
 
     /**
      * @param cntxtPthVO - 컨텍스트 패스 정보
@@ -49,20 +33,4 @@
      * 컨텍스트 패스 등록
      */
     int save(CntxtPthVO cntxtPthVO);
-
-    /**
-     * @param cntxtPthVO - 컨텍스트 패스 정보
-     * @return int - 컨텍스트 패스 수정 결과
-     *
-     * 컨텍스트 패스 수정
-     */
-    int update(CntxtPthVO cntxtPthVO);
-
-    /**
-     * @param cntxtPthId - 컨텍스트 패스 아이디
-     * @return int - 컨텍스트 패스 삭제 결과
-     *
-     * 컨텍스트 패스 삭제
-     */
-    int delete(String cntxtPthId);
 }
src/main/java/com/takensoft/cms/cntxtPth/service/CntxtPthService.java
--- src/main/java/com/takensoft/cms/cntxtPth/service/CntxtPthService.java
+++ src/main/java/com/takensoft/cms/cntxtPth/service/CntxtPthService.java
@@ -16,22 +16,11 @@
 public interface CntxtPthService {
 
     /**
-     * @param params - 검색조건 및 페이징 정보
-     * @return Map<String, Object>
-     *  - list : 컨텍스트 패스 목록
-     *  - pagination : 페이징 정보
+     * @return String - 컨텍스트 패스 경로
      *
-     * 컨텍스트 패스 목록 조회
+     * 최신 컨텍스트 패스 조회
      */
-    public Map<String, Object> findAllCntxtPth(Map<String, String> params);
-
-    /**
-     * @param cntxtPthId - 컨텍스트 패스 아이디
-     * @return CntxtPthVO - 컨텍스트 패스 정보를 담고 있는 객체
-     *
-     * 컨텍스트 패스 상세 조회
-     */
-    Map<String, Object> findByCntxtPthId(String cntxtPthId);
+    String findLatestCntxtPth();
 
     /**
      * @param cntxtPthVO - 컨텍스트 패스 정보
@@ -40,20 +29,4 @@
      * 컨텍스트 패스 등록
      */
     public int cntxtPthSave(CntxtPthVO cntxtPthVO);
-
-    /**
-     * @param cntxtPthVO - 컨텍스트 패스 정보
-     * @return int - 컨텍스트 패스 수정 결과
-     *
-     * 컨텍스트 패스 수정
-     */
-    public int cntxtPthUpdate(CntxtPthVO cntxtPthVO);
-
-    /**
-     * @param cntxtPthId - 컨텍스트 패스 아이디
-     * @return int - 컨텍스트 패스 삭제 결과
-     *
-     * 컨텍스트 패스 삭제
-     */
-    public int cntxtPthDelete(String cntxtPthId);
 }
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
@@ -11,6 +11,8 @@
 import com.takensoft.common.util.JWTUtil;
 import lombok.RequiredArgsConstructor;
 import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.dao.DataAccessException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -25,6 +27,7 @@
  * @modification
  *     since    |    author    | description
  *  2025.03.31  |    하석형     | 최초 등록
+ *  2025.04.02  |    하석형     | 이력 관리 및 최신 컨텍스트 패스 조회 형식으로 변경
  *
  * EgovAbstractServiceImpl : 전자정부 상속
  * CntxtPthService : 컨텍스트 패스 정보 관련 인터페이스 상속
@@ -39,54 +42,22 @@
     private final IdgenService cntxtPthIdgn;
 
     /**
-     * @param params - 검색조건 및 페이징 정보
-     * @return Map<String, Object>
-     *  - list : 컨텍스트 패스 목록
-     *  - pagination : 페이징 정보
-     *  @throws DataAccessException - db 관련 예외 발생 시
-     *  @throws Exception - 그 외 예외 발생 시
-     *
-     * 컨텍스트 패스 목록 조회
-     */
-    @Override
-    public Map<String, Object> findAllCntxtPth(Map<String, String> params) {
-        try {
-            Map<String, Object> result = new HashMap<String, Object>(); // 반환 객체 생성
-            Pagination search = new Pagination(0, params); // 검색조건 객체 생성
-            int cnt = cntxtPthDAO.findAllCnt(search); // 게시물 갯수
-            Pagination pagination = new Pagination(cnt, params); // 게시물 갯수 조회 후 검색조건 객체 초기화
-            List<CntxtPthVO> list = cntxtPthDAO.findAll(pagination); // 목록 조회
-
-            result.put("list", list);
-            result.put("pagination", pagination);
-
-            return result;
-        } catch (DataAccessException dae) {
-            throw dae;
-        } catch (Exception e) {
-            throw e;
-        }
-    }
-
-    /**
-     * @param cntxtPthId - 컨텍스트 패스 코드
-     * @return AuthorVO - 컨텍스트 패스 정보를 담고 있는 객체
+     * @return String - 컨텍스트 패스 경로
      * @throws DataAccessException - db 관련 예외 발생 시
      * @throws Exception - 그 외 예외 발생 시
      *
-     * 컨텍스트 패스 상세 조회
+     * 최신 컨텍스트 패스 조회
      */
     @Override
-    public Map<String, Object> findByCntxtPthId(String cntxtPthId) {
+//    @Cacheable(value = "cntxtPthInfo", key = "'cntxtPth'")
+    public String findLatestCntxtPth() {
         try {
-            Map<String, Object> result = new HashMap<String, Object>(); // 반환 객체 생성
-            CntxtPthVO cntxtPth = new CntxtPthVO();
-            if (cntxtPthId != null && !cntxtPthId.equals("")) {
-                cntxtPth = cntxtPthDAO.findByCntxtPthId(cntxtPthId);
+            String cntxtPth = cntxtPthDAO.findLatestCntxtPth();
+            if (cntxtPth != null && !cntxtPth.equals("")) {
+                return cntxtPth;
+            } else {
+                return "/"; // 기본값 설정
             }
-            result.put("cntxtPth", cntxtPth);
-
-            return result;
         } catch (DataAccessException dae) {
             throw dae;
         } catch (Exception e) {
@@ -104,6 +75,7 @@
      * 컨텍스트 패스 등록
      */
     @Override
+//    @CacheEvict(value = "cntxtPthInfo", allEntries = true)
     @Transactional(rollbackFor = Exception.class)
     public int cntxtPthSave(CntxtPthVO cntxtPthVO) {
         try {
@@ -113,58 +85,6 @@
             int result = cntxtPthDAO.save(cntxtPthVO);
             if(result == 0) {
                 throw new CustomInsertFailException("컨텍스트 패스 등록에 실패했습니다.");
-            }
-
-            return result;
-        } catch (DataAccessException dae) {
-            throw dae;
-        } catch (Exception e) {
-            throw e;
-        }
-    }
-
-    /**
-     * @param cntxtPthVO - 컨텍스트 패스 정보
-     * @return int - 컨텍스트 패스 수정 결과
-     * @throws CustomUpdateFailException - 컨텍스트 패스 수정 예외 발생 시
-     * @throws DataAccessException - db 관련 예외 발생 시
-     * @throws Exception - 그 외 예외 발생 시
-     *
-     * 컨텍스트 패스 수정
-     */
-    @Override
-    public int cntxtPthUpdate(CntxtPthVO cntxtPthVO) {
-        try {
-            // 등록된 토큰에서 사용자 정보 조회
-            cntxtPthVO.setMdfr(jwtUtil.getWriter());
-            int result = cntxtPthDAO.update(cntxtPthVO);
-            if(result == 0) {
-                throw new CustomUpdateFailException("컨텍스트 패스 수정에 실패했습니다.");
-            }
-
-            return result;
-        } catch (DataAccessException dae) {
-            throw dae;
-        } catch (Exception e) {
-            throw e;
-        }
-    }
-
-    /**
-     * @param cntxtPthId - 컨텍스트 패스 정보
-     * @return int - 컨텍스트 패스 삭제 결과
-     * @throws CustomDeleteFailException - 컨텍스트 패스 삭제 예외 발생 시
-     * @throws DataAccessException - db 관련 예외 발생 시
-     * @throws Exception - 그 외 예외 발생 시
-     *
-     * 컨텍스트 패스 삭제
-     */
-    @Override
-    public int cntxtPthDelete(String cntxtPthId) {
-        try {
-            int result = cntxtPthDAO.delete(cntxtPthId);
-            if(result == 0) {
-                throw new CustomDeleteFailException("컨텍스트 패스 삭제에 실패했습니다.");
             }
 
             return result;
src/main/java/com/takensoft/cms/cntxtPth/vo/CntxtPthVO.java
--- src/main/java/com/takensoft/cms/cntxtPth/vo/CntxtPthVO.java
+++ src/main/java/com/takensoft/cms/cntxtPth/vo/CntxtPthVO.java
@@ -11,6 +11,7 @@
  * @modification
  *     since    |    author    | description
  *  2025.03.31  |    하석형     | 최초 등록
+ *  2025.04.02  |    하석형     | 이력 관리 및 최신 컨텍스트 패스 조회 형식으로 변경
  *
  * 컨텍스트 패스 정보 관련 VO
  */
@@ -22,13 +23,8 @@
 
     private String cntxtPthId;       // 컨텍스트 패스 아이디
     private String path;             // 경로
-    private String useYn;            // 사용여부
-    private String sysPvsnYn;        // 시스템 제공 여부 ( 0: 시스템, 1: 사용자 ) -> 시스템에서 제공되는 데이터는 사용자가 제거하지 못하도록 하기 위한 설정값
     private String rgtr;             // 등록자
     private String rgtrNm;           // 등록자명
     private String regDt;            // 등록일
-    private String mdfr;             // 수정자
-    private String mdfrNm;           // 수정자명
-    private String mdfcnDt;          // 수정일
 
 }
src/main/java/com/takensoft/cms/cntxtPth/web/CntxtPthController.java
--- src/main/java/com/takensoft/cms/cntxtPth/web/CntxtPthController.java
+++ src/main/java/com/takensoft/cms/cntxtPth/web/CntxtPthController.java
@@ -7,10 +7,7 @@
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.HashMap;
 import java.util.List;
@@ -22,6 +19,7 @@
  * @modification
  *     since    |    author    | description
  *  2025.03.31  |    하석형     | 최초 등록
+ *  2025.04.02  |    하석형     | 이력 관리 및 최신 컨텍스트 패스 조회 형식으로 변경
  *
  * 컨텍스트 패스 정보 관련 컨트롤러
  */
@@ -35,6 +33,18 @@
     private final CntxtPthService cntxtPthService;
 
     /**
+     * @return ResponseEntity - 최신 컨텍스트 패스 조회 결과를 포함하는 응답
+     *
+     * 최신 컨텍스트 패스 조회
+     */
+    @GetMapping("/findLatestCntxtPth.json")
+    public ResponseEntity<?> findLatestCntxtPth() {
+        // 최신 컨텍스트 패스 조회
+        String ctx = cntxtPthService.findLatestCntxtPth();
+        return resUtil.successRes(ctx, MessageCode.COMMON_SUCCESS);
+    }
+
+    /**
      * @param cntxtPthVO - 컨텍스트 패스 정보
      * @return ResponseEntity - 컨텍스트 패스 등록 결과를 포함하는 응답
      *
@@ -44,54 +54,6 @@
     public ResponseEntity<?> saveProc(@RequestBody CntxtPthVO cntxtPthVO) {
         // 컨텍스트 패스 등록
         int result = cntxtPthService.cntxtPthSave(cntxtPthVO);
-        return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
-    }
-
-    /**
-     * @param params - 검색조건 및 페이징 정보
-     * @return ResponseEntity - 컨텍스트 패스 목록 조회 결과를 포함하는 응답
-     *
-     * 컨텍스트 패스 목록 조회
-     */
-    @PostMapping("/findAll.json")
-    public ResponseEntity<?> findAll(@RequestBody Map<String, String> params) {
-        Map<String, Object> result = cntxtPthService.findAllCntxtPth(params);
-        return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
-    }
-
-    /**
-     * @param cntxtPthVO - 컨텍스트 패스 정보
-     * @return ResponseEntity - 컨텍스트 패스 상세 조회 결과를 포함하는 응답
-     *
-     * 컨텍스트 패스 상세 조회
-     */
-    @PostMapping("/findByCntxtPth.json")
-    public ResponseEntity<?> findByCntxtPth(@RequestBody CntxtPthVO cntxtPthVO) {
-        Map<String, Object> result = cntxtPthService.findByCntxtPthId(cntxtPthVO.getCntxtPthId());
-        return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
-    }
-
-    /**
-     * @param cntxtPthVO - 컨텍스트 패스 정보
-     * @return ResponseEntity - 컨텍스트 패스 수정 결과를 포함하는 응답
-     *
-     * 컨텍스트 패스 수정
-     */
-    @PostMapping("/updateProc.json")
-    public ResponseEntity<?> updateProc(@RequestBody CntxtPthVO cntxtPthVO) {
-        int result = cntxtPthService.cntxtPthUpdate(cntxtPthVO);
-        return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
-    }
-
-    /**
-     * @param cntxtPthVO - 컨텍스트 패스 정보
-     * @return ResponseEntity - 컨텍스트 패스 삭제 결과를 포함하는 응답
-     *
-     * 컨텍스트 패스 삭제
-     */
-    @PostMapping("/deleteProc.json")
-    public ResponseEntity<?> deleteProc(@RequestBody CntxtPthVO cntxtPthVO) {
-        int result = cntxtPthService.cntxtPthDelete(cntxtPthVO.getCntxtPthId());
         return resUtil.successRes(result, MessageCode.COMMON_SUCCESS);
     }
 }
src/main/java/com/takensoft/common/config/SecurityConfig.java
--- src/main/java/com/takensoft/common/config/SecurityConfig.java
+++ src/main/java/com/takensoft/common/config/SecurityConfig.java
@@ -1,14 +1,12 @@
 package com.takensoft.common.config;
 
 import com.takensoft.cms.accesCtrl.service.AccesCtrlService;
+import com.takensoft.cms.cntxtPth.service.CntxtPthService;
 import com.takensoft.cms.loginPolicy.service.LoginModeService;
 import com.takensoft.cms.loginPolicy.service.LoginPolicyService;
 import com.takensoft.cms.mber.service.LgnHstryService;
 import com.takensoft.cms.token.service.RefreshTokenService;
-import com.takensoft.common.filter.AccesFilter;
-import com.takensoft.common.filter.JWTFilter;
-import com.takensoft.common.filter.LoginFilter;
-import com.takensoft.common.filter.SessionAuthFilter;
+import com.takensoft.common.filter.*;
 import com.takensoft.common.util.HttpRequestUtil;
 import com.takensoft.common.exception.CustomAccessDenieHandler;
 import com.takensoft.common.exception.CustomAuthenticationEntryPoint;
@@ -26,6 +24,7 @@
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.security.web.SecurityFilterChain;
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
+import org.springframework.security.web.context.SecurityContextPersistenceFilter;
 import org.springframework.web.cors.CorsConfiguration;
 import org.springframework.web.cors.CorsConfigurationSource;
 
@@ -50,6 +49,7 @@
     private final JWTUtil jwtUtil;
     private final RefreshTokenService refreshTokenService;
     private final LgnHstryService lgnHstryService;
+    private final CntxtPthService cntxtPthService;
     private final AccesCtrlService accesCtrlService;
     private final CustomAuthenticationEntryPoint authenticationEntryPoint;
     private final CustomAccessDenieHandler accessDenieHandler;
@@ -78,13 +78,14 @@
      * @param redisTemplate
 *
      */
-    public SecurityConfig(AuthenticationConfiguration authenticationConfiguration, JWTUtil jwtUtil, RefreshTokenService refreshTokenService, AccesCtrlService accesCtrlService, AppConfig appConfig,
+    public SecurityConfig(AuthenticationConfiguration authenticationConfiguration, JWTUtil jwtUtil, RefreshTokenService refreshTokenService, CntxtPthService cntxtPthService, AccesCtrlService accesCtrlService, AppConfig appConfig,
                           LgnHstryService lgnHstryService, CustomAuthenticationEntryPoint authenticationEntryPoint, CustomAccessDenieHandler accessDenieHandler, HttpRequestUtil httpRequestUtil,
                           LoginModeService loginModeService, LoginPolicyService loginPolicyService, SessionUtil sessionUtil, @Value("${front.url}") String fUrl, @Value("${jwt.accessTime}") long aTime, @Value("${jwt.refreshTime}") long rTime, @Value("${cookie.time}") int ctime, RedisTemplate<String, String> redisTemplate) {
 
         this.authenticationConfiguration = authenticationConfiguration;
         this.refreshTokenService = refreshTokenService;
         this.lgnHstryService = lgnHstryService;
+        this.cntxtPthService = cntxtPthService;
         this.accesCtrlService = accesCtrlService;
         this.authenticationEntryPoint = authenticationEntryPoint;
         this.accessDenieHandler = accessDenieHandler;
@@ -156,6 +157,9 @@
         // 세션 설정
         http.sessionManagement((session) -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
 
+        // Context Path 검증 필터
+        http.addFilterBefore(new ContextPathFilter(cntxtPthService), SecurityContextPersistenceFilter.class);
+
         http.exceptionHandling((exception) -> exception
                 .authenticationEntryPoint(authenticationEntryPoint) // 접근 권한이 없는 경우에 호출
                 .accessDeniedHandler(accessDenieHandler) // 인증되지 않은 상태로 접근 했을 때 호출
 
src/main/java/com/takensoft/common/filter/ContextPathFilter.java (added)
+++ src/main/java/com/takensoft/common/filter/ContextPathFilter.java
@@ -0,0 +1,77 @@
+package com.takensoft.common.filter;
+
+import com.takensoft.cms.cntxtPth.service.CntxtPthService;
+import com.takensoft.common.config.AppConfig;
+import com.takensoft.common.util.ErrorResponse;
+import com.takensoft.common.util.HttpRequestUtil;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.RequestDispatcher;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
+import org.springframework.web.filter.OncePerRequestFilter;
+
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author 하석형
+ * @since 2025.04.02
+ * @modification
+ *     since    |    author    | description
+ *  2025.04.02  |    하석형     | 최초 등록
+ *
+ * OncePerRequestFilter - 한 번의 요청마다 단 한 번만 필터링 작업을 수행하는 필터를 제공하는 클래스
+ *
+ * Context Path 검증 필터
+ */
+public class ContextPathFilter extends OncePerRequestFilter {
+
+    private final CntxtPthService cntxtPthService;
+
+    /**
+     * @param cntxtPthService 컨텍스트 패스 관련 인터페이스의 인스턴스
+     *
+     * ContextPathFilter 생성자
+     */
+    public ContextPathFilter(CntxtPthService cntxtPthService) {
+        this.cntxtPthService = cntxtPthService;
+    }
+    /**
+     * @param request HttpServletRequest 객체
+     * @param response HttpServletResponse 객체
+     * @param filterChain 필터 체인을 통해 다음 필터로 요청을 전달
+     * @throws ServletException 필터 처리 중 발생한 서블릿 예외
+     * @throws IOException 필터 처리 중 발생한 IO 예외
+     *
+     * Context Path 검증 및 일반화
+     */
+    @Override
+    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
+        try {
+            String uri = request.getRequestURI(); // 요청 URI
+
+            String dbCtx = cntxtPthService.findLatestCntxtPth(); // DB에서 최신 컨텍스트 패스 조회
+
+            // 요청 URI와 DB에서 가져온 컨텍스트 패스 비교
+            if (dbCtx != null && !dbCtx.equals("/") && uri.startsWith(dbCtx)) {
+                String newUri = uri.substring(dbCtx.length()); // DB에서 가져온 컨텍스트 패스를 제외한 URI
+                if (newUri.isEmpty()) {
+                    newUri = "/";
+                }
+                RequestDispatcher dispatcher = request.getRequestDispatcher(newUri); // 새로운 URI로 요청을 전달
+                dispatcher.forward(request, response);
+                return;
+            }
+
+            filterChain.doFilter(request, response);
+        } catch (Exception e) {
+            // 시스템 에러 발생
+            e.printStackTrace();
+        }
+    }
+}
src/main/resources/mybatis/mapper/cntxtPth/cntxtPth-SQL.xml
--- src/main/resources/mybatis/mapper/cntxtPth/cntxtPth-SQL.xml
+++ src/main/resources/mybatis/mapper/cntxtPth/cntxtPth-SQL.xml
@@ -7,61 +7,20 @@
     |    수 정 일    |    수 정 자    |    내    용
     ========================================================================================================
     |  2025.03.31   |     하석형     | - 최초 등록
+    |  2025.04.02   |     하석형     | - 이력 관리 및 최신 컨텍스트 패스 조회 형식으로 변경
     ========================================================================================================
 -->
 <mapper namespace="com.takensoft.cms.cntxtPth.dao.CntxtPthDAO">
-    <sql id="selectCntxtPth">
-         SELECT cpm.cntxt_pth_id
-             , cpm.path
-             , cpm.use_yn
-             , cpm.sys_pvsn_yn
-             , cpm.rgtr
-             , (SELECT mbr_nm FROM mbr_info WHERE mbr_id = cpm.rgtr) AS rgtr_nm
-             , TO_CHAR(cpm.reg_dt, 'YYYY-MM-DD HH24:MI') AS reg_dt
-             , cpm.mdfr
-             , (SELECT mbr_nm FROM mbr_info WHERE mbr_id = cpm.mdfr) AS mdfr_nm
-             , TO_CHAR(cpm.mdfcn_dt, 'YYYY-MM-DD HH24:MI') AS mdfcn_dt
-          FROM cntxt_pth_mng cpm
-    </sql>
-
-    <sql id="selectRequirement">
-        <if test="searchText != null and searchText != ''">
-            AND cpm.path LIKE '%' || #{searchText} || '%'
-        </if>
-    </sql>
-
     <!--
         작 성 자 : 하석형
-        작 성 일 : 2025.03.31
-        내   용 : 컨텍스트 패스 목록 조회
+        작 성 일 : 2025.04.02
+        내   용 : 최신 컨텍스트 패스 조회
     -->
-    <select id="findAll" parameterType="Pagination" resultType="CntxtPthVO">
-        <include refid="selectCntxtPth" />
-         WHERE 1=1
-        <include refid="selectRequirement" />
-        LIMIT #{recordSize} OFFSET #{limitStart}
-    </select>
-
-    <!--
-        작 성 자 : 하석형
-        작 성 일 : 2025.03.31
-        내   용 : 컨텍스트 패스 목록 갯수 조회
-    -->
-    <select id="findAllCnt" parameterType="Pagination" resultType="Integer">
-        SELECT COUNT(cpm.cntxt_pth_id)
-          FROM cntxt_pth_mng cpm
-         WHERE 1=1
-        <include refid="selectRequirement" />
-    </select>
-
-    <!--
-        작 성 자 : 하석형
-        작 성 일 : 2025.03.31
-        내   용 : 컨텍스트 패스 상세 조회
-    -->
-    <select id="findByCntxtPthCode" parameterType="String" resultType="CntxtPthVO">
-        <include refid="selectCntxtPth" />
-         WHERE cpm.cntxt_pth_id = #{cntxtPthId}
+    <select id="findLatestCntxtPth" resultType="String">
+        SELECT path
+        FROM cntxt_pth_mng cpm
+        ORDER BY reg_dt DESC
+        LIMIT 1
     </select>
 
     <!--
@@ -73,41 +32,13 @@
         INSERT INTO cntxt_pth_mng (
             cntxt_pth_id
             , path
-            , use_yn
-            , sys_pvsn_yn
             , rgtr
             , reg_dt
         ) VALUES (
             #{cntxtPthId}
             , #{path}
-            , 'Y'
-            , 1
             , #{rgtr}
             , NOW()
         )
     </insert>
-
-    <!--
-        작 성 자 : 하석형
-        작 성 일 : 2025.03.31
-        내   용 : 컨텍스트 패스 수정
-    -->
-    <update id="update" parameterType="CntxtPthVO">
-        UPDATE cntxt_pth_mng
-           SET path = #{path}
-             , use_yn = #{useYn}
-             , mdfr = #{mdfr}
-             , mdfcn_dt = NOW()
-        WHERE cntxt_pth_id = #{cntxtPthId}
-    </update>
-
-    <!--
-        작 성 자 : 하석형
-        작 성 일 : 2025.03.31
-        내   용 : 컨텍스트 패스 삭제
-    -->
-    <delete id="delete" parameterType="String">
-        DELETE FROM cntxt_pth_mng
-        WHERE cntxt_pth_id = #{cntxtPthId}
-    </delete>
 </mapper>
(파일 끝에 줄바꿈 문자 없음)
Add a comment
List