diff --git a/src/main/java/com/aolda/itda/controller/forwarding/ForwardingController.java b/src/main/java/com/aolda/itda/controller/forwarding/ForwardingController.java
index 36e6f9a8138da9fee0f76d6028770260d9fb5679..999707aed33a9f559d2c396c6532df50aada5173 100644
--- a/src/main/java/com/aolda/itda/controller/forwarding/ForwardingController.java
+++ b/src/main/java/com/aolda/itda/controller/forwarding/ForwardingController.java
@@ -30,8 +30,9 @@ public class ForwardingController {
     }
 
     @GetMapping("/forwardings")
-    public ResponseEntity<Object> lists(@RequestParam String projectId) {
-        return ResponseEntity.ok(forwardingService.getForwardings(projectId));
+    public ResponseEntity<Object> lists(@RequestParam String projectId,
+                                        @RequestParam(required = false) String query) {
+        return ResponseEntity.ok(forwardingService.getForwardingsWithSearch(projectId, query));
     }
 
     @PatchMapping("/forwarding")
diff --git a/src/main/java/com/aolda/itda/controller/routing/RoutingController.java b/src/main/java/com/aolda/itda/controller/routing/RoutingController.java
index 4b9d551ada34e56464d8b95e1577adff3f456d36..c96e9106937f891a66aa19b03d4278b61bb824ae 100644
--- a/src/main/java/com/aolda/itda/controller/routing/RoutingController.java
+++ b/src/main/java/com/aolda/itda/controller/routing/RoutingController.java
@@ -31,8 +31,9 @@ public class RoutingController {
     }
 
     @GetMapping("/routings")
-    public ResponseEntity<Object> lists(@RequestParam String projectId) {
-        return ResponseEntity.ok(routingService.getRoutings(projectId));
+    public ResponseEntity<Object> lists(@RequestParam String projectId,
+                                        @RequestParam(required = false) String query) {
+        return ResponseEntity.ok(routingService.getRoutingsWithSearch(projectId, query));
     }
 
     @PatchMapping("/routing")
diff --git a/src/main/java/com/aolda/itda/repository/forwarding/ForwardingRepository.java b/src/main/java/com/aolda/itda/repository/forwarding/ForwardingRepository.java
index c461762a59bc4cce3ca6fbde0f1de3277a4d7293..9a330f0dbc0fe111dd99aed57e29a960ff9f5031 100644
--- a/src/main/java/com/aolda/itda/repository/forwarding/ForwardingRepository.java
+++ b/src/main/java/com/aolda/itda/repository/forwarding/ForwardingRepository.java
@@ -2,6 +2,7 @@ package com.aolda.itda.repository.forwarding;
 
 import com.aolda.itda.entity.forwarding.Forwarding;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
 
 import java.util.List;
 import java.util.Optional;
@@ -11,4 +12,7 @@ public interface ForwardingRepository extends JpaRepository<Forwarding, Long> {
     Optional<Forwarding> findByForwardingIdAndIsDeleted(Long forwardingId, Boolean isDeleted);
     Boolean existsByInstanceIpAndInstancePortAndIsDeleted(String instanceIp, String instancePort, Boolean isDeleted);
     Boolean existsByServerPortAndIsDeleted(String serverPort, Boolean isDeleted);
+
+    @Query("SELECT f FROM Forwarding f WHERE f.projectId = ?1 AND f.isDeleted = ?3 AND (f.instanceIp LIKE %?2% OR f.serverPort LIKE %?2% OR f.name LIKE %?2%)")
+    List<Forwarding> findWithSearch(String projectId, String query, Boolean isDeleted);
 }
diff --git a/src/main/java/com/aolda/itda/repository/routing/RoutingRepository.java b/src/main/java/com/aolda/itda/repository/routing/RoutingRepository.java
index 046296c2df3937d920b4816734d16ce8267b6a1f..44b88aecdc26ff76583c01149a9862503a0c8d79 100644
--- a/src/main/java/com/aolda/itda/repository/routing/RoutingRepository.java
+++ b/src/main/java/com/aolda/itda/repository/routing/RoutingRepository.java
@@ -3,6 +3,7 @@ package com.aolda.itda.repository.routing;
 import com.aolda.itda.entity.forwarding.Forwarding;
 import com.aolda.itda.entity.routing.Routing;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
 
 import java.util.List;
 import java.util.Optional;
@@ -11,4 +12,7 @@ public interface RoutingRepository extends JpaRepository<Routing, Long> {
     List<Routing> findByProjectIdAndIsDeleted(String projectId, Boolean isDeleted);
     Optional<Routing> findByRoutingIdAndIsDeleted(Long routingId, Boolean isDeleted);
     Boolean existsByDomainAndIsDeleted(String domain, Boolean isDeleted);
+
+    @Query("SELECT r FROM Routing r WHERE r.projectId = ?1 AND r.isDeleted = ?3 AND (r.domain LIKE %?2% OR r.instanceIp LIKE %?2% OR r.name LIKE %?2%)")
+    List<Routing> findWithSearch(String projectId, String query, Boolean isDeleted);
 }
diff --git a/src/main/java/com/aolda/itda/service/forwarding/ForwardingService.java b/src/main/java/com/aolda/itda/service/forwarding/ForwardingService.java
index cae38c3229e0d8d221136c726f4452d315dbe8ec..e6fc9d45ee66e4f74ac7898bd2c43de0544de86a 100644
--- a/src/main/java/com/aolda/itda/service/forwarding/ForwardingService.java
+++ b/src/main/java/com/aolda/itda/service/forwarding/ForwardingService.java
@@ -27,6 +27,7 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
 import java.util.List;
+import java.util.regex.Pattern;
 
 @Service
 @Transactional
@@ -52,11 +53,20 @@ public class ForwardingService {
         return forwarding.toForwardingDTO();
     }
 
-    /* 포트포워딩 목록 조회 */
-    public PageResp<ForwardingDTO> getForwardings(String projectId) {
+    /* 포트포워딩 목록 조회 + 검색 */
+    public PageResp<ForwardingDTO> getForwardingsWithSearch(String projectId, String query) {
+
+        /* 입력 검증 */
+        if (query == null || query.isBlank()) {
+            return PageResp.<ForwardingDTO>builder()
+                    .contents(forwardingRepository.findByProjectIdAndIsDeleted(projectId, false)
+                            .stream()
+                            .map(Forwarding::toForwardingDTO)
+                            .toList()).build();
+        }
 
         return PageResp.<ForwardingDTO>builder()
-                .contents(forwardingRepository.findByProjectIdAndIsDeleted(projectId, false)
+                .contents(forwardingRepository.findWithSearch(projectId, query, false)
                         .stream()
                         .map(Forwarding::toForwardingDTO)
                         .toList()).build();
diff --git a/src/main/java/com/aolda/itda/service/routing/RoutingService.java b/src/main/java/com/aolda/itda/service/routing/RoutingService.java
index 769278d2c6aca1a1f7e4f7afb11a3281e8e7fd07..d01eb022236db9162bee3b62907bcca07fbfa05f 100644
--- a/src/main/java/com/aolda/itda/service/routing/RoutingService.java
+++ b/src/main/java/com/aolda/itda/service/routing/RoutingService.java
@@ -28,6 +28,7 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.nio.file.StandardCopyOption;
 import java.util.List;
+import java.util.regex.Pattern;
 
 @Service
 @Transactional
@@ -52,10 +53,26 @@ public class RoutingService {
         return routing.toRoutingDTO();
     }
 
-    /* Routing 목록 조회 */
-    public PageResp<RoutingDTO> getRoutings(String projectId) {
+    /* Routing 목록 조회 + 검색 */
+    public PageResp<RoutingDTO> getRoutingsWithSearch(String projectId, String query) {
+
+        /* 입력 검증 */
+        if (query == null || query.isBlank()) {
+            return PageResp.<RoutingDTO>builder()
+                    .contents(routingRepository.findByProjectIdAndIsDeleted(projectId, false)
+                            .stream()
+                            .map(Routing::toRoutingDTO)
+                            .toList()).build();
+        }
+
+        /* 도메인 패턴 검증 */
+        String domainPattern = "^(\\*\\.)?([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}$";
+        if (Pattern.matches(domainPattern, query) && query.startsWith("*.")) {
+            query = query.substring(2);
+        }
+
         return PageResp.<RoutingDTO>builder()
-                .contents(routingRepository.findByProjectIdAndIsDeleted(projectId, false)
+                .contents(routingRepository.findWithSearch(projectId, query, false)
                         .stream()
                         .map(Routing::toRoutingDTO)
                         .toList()).build();