diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/application/DefaultDeployerService.java b/src/main/java/inc/sdt/blokworks/devicedeployer/application/DefaultDeployerService.java
index c0b73e1..b98998b 100644
--- a/src/main/java/inc/sdt/blokworks/devicedeployer/application/DefaultDeployerService.java
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/application/DefaultDeployerService.java
@@ -3,7 +3,7 @@ package inc.sdt.blokworks.devicedeployer.application;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import inc.sdt.blokworks.devicedeployer.domain.AssetApp;
-import inc.sdt.blokworks.devicedeployer.domain.DeployMessage;
+import inc.sdt.blokworks.devicedeployer.domain.OutboundMessage;
 import inc.sdt.blokworks.devicedeployer.domain.OperationType;
 import inc.sdt.blokworks.devicedeployer.infrastructure.mqtt.InboundDeployMessagePayload;
 import inc.sdt.blokworks.devicedeployer.infrastructure.mqtt.OutboundMessagePayload;
@@ -12,6 +12,7 @@ import org.eclipse.paho.client.mqttv3.MqttException;
 import org.eclipse.paho.client.mqttv3.MqttMessage;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 import reactor.core.publisher.Mono;
 
@@ -32,15 +33,14 @@ public class DefaultDeployerService implements DeployerService{
     }
 
     @Override
-    public void publish(DeployMessage deployMessage, String assetCode) {
+    public void publish(OutboundMessage deployMessage, String assetCode) {
         log.info("[publish]");
         try {
             OutboundMessagePayload payload = new OutboundMessagePayload(
                     deployMessage.getUrl(),
                     deployMessage.getName(),
-                    deployMessage.getPorts(),
-                    deployMessage.getEnv(),
                     deployMessage.getCommand(),
+                    deployMessage.getEnv(),
                     OperationType.DEPLOY,
                     deployMessage.getRequestId()
             );
@@ -59,10 +59,18 @@ public class DefaultDeployerService implements DeployerService{
     public Mono<Void> apply(InboundDeployMessagePayload inboundDeployMessagePayload) {
         log.info("[apply] inboundDeployMessagePayload = {}", inboundDeployMessagePayload);
         // 배포된 앱 정보 저장
-        deployerRepositoryDelegate.save(fromMessage(inboundDeployMessagePayload));
+        // request Id 판별
+
+        AssetApp assetApp = deployerRepositoryDelegate.save(fromMessage(inboundDeployMessagePayload));
         return null;
     }
 
+    @Override
+    public Page<AssetApp> getAll(String assetCode, int page, int size) {
+        log.debug("[getAll] assetCode = {}, page = {}, size = {}", assetCode, page, size);
+        return deployerRepositoryDelegate.findAllByAssetCode(assetCode, page, size);
+    }
+
     private AssetApp fromMessage(InboundDeployMessagePayload payload) {
         return AssetApp.builder()
                 .assetCode(payload.assetCode())
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerRepositoryDelegate.java b/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerRepositoryDelegate.java
index 79eeaff..51eb118 100644
--- a/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerRepositoryDelegate.java
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerRepositoryDelegate.java
@@ -1,8 +1,9 @@
 package inc.sdt.blokworks.devicedeployer.application;
 
 import inc.sdt.blokworks.devicedeployer.domain.AssetApp;
-import inc.sdt.blokworks.devicedeployer.domain.DeployMessage;
+import org.springframework.data.domain.Page;
 
 public interface DeployerRepositoryDelegate {
     AssetApp save(AssetApp assetApp);
+    Page<AssetApp> findAllByAssetCode(String assetCode, int page, int size);
 }
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerService.java b/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerService.java
index e635b19..083f550 100644
--- a/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerService.java
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/application/DeployerService.java
@@ -1,11 +1,14 @@
 package inc.sdt.blokworks.devicedeployer.application;
 
-import inc.sdt.blokworks.devicedeployer.domain.DeployMessage;
+import inc.sdt.blokworks.devicedeployer.domain.AssetApp;
+import inc.sdt.blokworks.devicedeployer.domain.OutboundMessage;
 import inc.sdt.blokworks.devicedeployer.infrastructure.mqtt.InboundDeployMessagePayload;
+import org.springframework.data.domain.Page;
 import reactor.core.publisher.Mono;
 
 import java.util.function.Function;
 
 public interface DeployerService extends Function<InboundDeployMessagePayload, Mono<Void>> {
-    void publish(DeployMessage assetApp, String assetCode);
+    void publish(OutboundMessage assetApp, String assetCode);
+    Page<AssetApp> getAll(String assetCode, int page, int size);
 }
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/domain/AssetApp.java b/src/main/java/inc/sdt/blokworks/devicedeployer/domain/AssetApp.java
index a7a8ac8..cdbdf40 100644
--- a/src/main/java/inc/sdt/blokworks/devicedeployer/domain/AssetApp.java
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/domain/AssetApp.java
@@ -1,7 +1,5 @@
 package inc.sdt.blokworks.devicedeployer.domain;
 
-import java.sql.Timestamp;
-
 public class AssetApp {
     private String assetCode;
     private String name;
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/domain/DeployMessage.java b/src/main/java/inc/sdt/blokworks/devicedeployer/domain/OutboundMessage.java
similarity index 84%
rename from src/main/java/inc/sdt/blokworks/devicedeployer/domain/DeployMessage.java
rename to src/main/java/inc/sdt/blokworks/devicedeployer/domain/OutboundMessage.java
index 9b72d08..113ec55 100644
--- a/src/main/java/inc/sdt/blokworks/devicedeployer/domain/DeployMessage.java
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/domain/OutboundMessage.java
@@ -3,16 +3,15 @@ package inc.sdt.blokworks.devicedeployer.domain;
 import java.util.HashMap;
 import java.util.Set;
 
-public class DeployMessage {
+public class OutboundMessage {
     private String url;
     private String name;
-    private Set<Port> ports;
     private HashMap<String, String> env;
     private String command;
     private OperationType operationType;
     private String requestId;
 
-    protected DeployMessage() {}
+    protected OutboundMessage() {}
 
     public String getUrl() {
         return url;
@@ -22,10 +21,6 @@ public class DeployMessage {
         return name;
     }
 
-    public Set<Port> getPorts() {
-        return ports;
-    }
-
     public HashMap<String, String> getEnv() {
         return env;
     }
@@ -51,7 +46,6 @@ public class DeployMessage {
         return "AssetApp{" +
                 "url='" + url + '\'' +
                 ", name='" + name + '\'' +
-                ", ports=" + ports +
                 ", env=" + env +
                 ", command='" + command + '\'' +
                 ", operationType=" + operationType +
@@ -66,7 +60,6 @@ public class DeployMessage {
     public static final class Builder {
         private String url;
         private String name;
-        private Set<Port> ports;
         private HashMap<String, String> env;
         private String command;
         private OperationType operationType;
@@ -82,11 +75,6 @@ public class DeployMessage {
             return this;
         }
 
-        public Builder ports(Set<Port> ports) {
-            this.ports = ports;
-            return this;
-        }
-
         public Builder env(HashMap<String, String> env) {
             this.env = env;
             return this;
@@ -107,11 +95,10 @@ public class DeployMessage {
             return this;
         }
 
-        public DeployMessage build() {
-            DeployMessage deployMessage = new DeployMessage();
+        public OutboundMessage build() {
+            OutboundMessage deployMessage = new OutboundMessage();
             deployMessage.url = this.url;
             deployMessage.name = this.name;
-            deployMessage.ports = this.ports;
             deployMessage.env = this.env;
             deployMessage.command = this.command;
             deployMessage.operationType = this.operationType;
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/InboundDeployMessagePayload.java b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/InboundDeployMessagePayload.java
index 6fdf3b8..c01bdd5 100644
--- a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/InboundDeployMessagePayload.java
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/InboundDeployMessagePayload.java
@@ -8,6 +8,7 @@ public record InboundDeployMessagePayload(
         String name,
         Long size,
         Long releasedAt,
-        Long modifiedAt
+        Long modifiedAt,
+        String requestId
 ) {
 }
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/OutboundMessagePayload.java b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/OutboundMessagePayload.java
index 0e971a6..0be144e 100644
--- a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/OutboundMessagePayload.java
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/mqtt/OutboundMessagePayload.java
@@ -11,9 +11,8 @@ import java.util.Set;
 public record OutboundMessagePayload(
         String url,
         String name,
-        Set<Port> ports,
-        HashMap<String, String> env,
         String command,
+        HashMap<String, String> env,
         OperationType operationType,
         String requestId
 ) {
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppEntity.java b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppEntity.java
index 60f6fd4..06f944a 100644
--- a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppEntity.java
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppEntity.java
@@ -23,8 +23,7 @@ class AssetAppEntity {
 
     protected AssetAppEntity() {}
 
-    public AssetAppEntity(String id, String assetCode, String name, long size, Long releasedAt, Long modifiedAt) {
-        this.id = id;
+    public AssetAppEntity(String assetCode, String name, long size, Long releasedAt, Long modifiedAt) {
         this.assetCode = assetCode;
         this.name = name;
         this.size = size;
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppJpaRepository.java b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppJpaRepository.java
index 6dbecc7..cf12018 100644
--- a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppJpaRepository.java
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppJpaRepository.java
@@ -1,7 +1,9 @@
 package inc.sdt.blokworks.devicedeployer.infrastructure.relational;
 
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 public interface AssetAppJpaRepository extends JpaRepository<AssetAppEntity, String> {
-
+    Page<AssetAppEntity> findAllByAssetCode(String assetCode, Pageable pageable);
 }
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppRelationalRepository.java b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppRelationalRepository.java
index e3afce1..7e8bfcd 100644
--- a/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppRelationalRepository.java
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/infrastructure/relational/AssetAppRelationalRepository.java
@@ -2,9 +2,12 @@ package inc.sdt.blokworks.devicedeployer.infrastructure.relational;
 
 import inc.sdt.blokworks.devicedeployer.application.DeployerRepositoryDelegate;
 import inc.sdt.blokworks.devicedeployer.domain.AssetApp;
-import inc.sdt.blokworks.devicedeployer.domain.DeployMessage;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Component;
 
 @Component
@@ -17,10 +20,40 @@ public class AssetAppRelationalRepository implements DeployerRepositoryDelegate
         this.assetAppJpaRepository = assetAppJpaRepository;
     }
 
+    // 앱 정보 저장
     @Override
-    public AssetApp save(AssetApp deployMessage) {
+    public AssetApp save(AssetApp assetApp) {
+        AssetAppEntity entity = this.toEntity(assetApp);
+        assetAppJpaRepository.save(entity);
+        return assetApp;
+    }
 
-        return null;
+    @Override
+    public Page<AssetApp> findAllByAssetCode(String assetCode, int page, int size) {
+        log.debug("[findAllByAssetCode] assetCode = {}", assetCode);
+        Pageable pageable = page < 0 ? Pageable.unpaged() : PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "releasedAt"));
+        return assetAppJpaRepository.findAllByAssetCode(assetCode, pageable)
+                .map(this::fromEntity);
+    }
+
+    private AssetAppEntity toEntity(AssetApp assetApp) {
+        return new AssetAppEntity(
+                assetApp.getAssetCode(),
+                assetApp.getName(),
+                assetApp.getSize(),
+                assetApp.getReleaseAt(),
+                assetApp.getModifiedAt()
+        );
+    }
+
+    private AssetApp fromEntity(AssetAppEntity entity) {
+        return AssetApp.builder()
+                .assetCode(entity.getAssetCode())
+                .name(entity.getName())
+                .size(entity.getSize())
+                .releasedAt(entity.getReleasedAt())
+                .modifiedAt(entity.getModifiedAt())
+                .build();
     }
 
 }
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResource.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResource.java
index 3176add..360757e 100644
--- a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResource.java
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResource.java
@@ -1,18 +1,10 @@
 package inc.sdt.blokworks.devicedeployer.presentation;
 
-import org.wildfly.common.annotation.NotNull;
-
-import java.util.HashMap;
-import java.util.Set;
-
 record AssetAppResource(
-        @NotNull
-        String url,
-        @NotNull
+        String assetCode,
         String name,
-        Set<PortResource> ports,
-        HashMap<String, String> env,
-        String command
+        Long size,
+        Long releaseAt,
+        Long modifiedAt
 ) {
-
 }
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResourceConverter.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResourceConverter.java
index 47f271a..de0d664 100644
--- a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResourceConverter.java
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/AssetAppResourceConverter.java
@@ -1,41 +1,28 @@
 package inc.sdt.blokworks.devicedeployer.presentation;
 
-import inc.sdt.blokworks.devicedeployer.domain.DeployMessage;
+import inc.sdt.blokworks.devicedeployer.domain.AssetApp;
 import org.springframework.stereotype.Component;
 
-import java.util.HashSet;
-import java.util.stream.Collectors;
-
 @Component
 public class AssetAppResourceConverter {
-    private final PortResourceConverter portResourceConverter;
 
-    public AssetAppResourceConverter(PortResourceConverter portResourceConverter) {
-        this.portResourceConverter = portResourceConverter;
+    public AssetApp fromResource(AssetAppResource resource) {
+        return AssetApp.builder()
+                .assetCode(resource.assetCode())
+                .name(resource.name())
+                .size(resource.size())
+                .releasedAt(resource.releaseAt())
+                .modifiedAt(resource.modifiedAt())
+                .build();
     }
 
-    public AssetAppResource toResource(DeployMessage deployMessage) {
+    public AssetAppResource toResource(AssetApp assetApp) {
         return new AssetAppResource(
-                deployMessage.getUrl(),
-                deployMessage.getName(),
-                deployMessage.getPorts() != null
-                ? deployMessage.getPorts().stream().map(portResourceConverter::toResource).collect(Collectors.toSet())
-                : null,
-                deployMessage.getEnv(),
-                deployMessage.getCommand()
+                assetApp.getAssetCode(),
+                assetApp.getName(),
+                assetApp.getSize(),
+                assetApp.getReleaseAt(),
+                assetApp.getModifiedAt()
         );
     }
-
-    public DeployMessage fromResource(AssetAppResource resource) {
-        return DeployMessage.builder()
-                .url(resource.url())
-                .name(resource.name())
-                .ports(resource.ports() != null
-                        ? resource.ports().stream().map(portResourceConverter::fromResource).collect(Collectors.toSet())
-                        : new HashSet<>())
-                .env(resource.env())
-                .command(resource.command())
-                .build();
-
-    }
 }
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/DeployerController.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/DeployerController.java
index e6b83d1..134b751 100644
--- a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/DeployerController.java
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/DeployerController.java
@@ -1,24 +1,33 @@
 package inc.sdt.blokworks.devicedeployer.presentation;
 
 import inc.sdt.blokworks.devicedeployer.application.DeployerService;
-import inc.sdt.blokworks.devicedeployer.domain.DeployMessage;
+import inc.sdt.blokworks.devicedeployer.domain.AssetApp;
+import inc.sdt.blokworks.devicedeployer.domain.OperationType;
+import inc.sdt.blokworks.devicedeployer.domain.OutboundMessage;
+import jakarta.servlet.http.HttpSession;
 import jakarta.validation.Valid;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.data.domain.Page;
 import org.springframework.http.HttpStatus;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.UUID;
+
 @RestController
 public class DeployerController {
     private final Logger log;
     private final DeployerService deployerService;
-    private final AssetAppResourceConverter appResourceConverter;
+    private final OutboundMessageResourceConverter outboundMessageResourceConverter;
+    private final AssetAppResourceConverter assetAppResourceConverter;
 
     public DeployerController(DeployerService deployerService,
-                              AssetAppResourceConverter appResourceConverter) {
+                              OutboundMessageResourceConverter outboundMessageResourceConverter,
+                              AssetAppResourceConverter assetAppResourceConverter) {
         this.log = LoggerFactory.getLogger(this.getClass());
         this.deployerService = deployerService;
-        this.appResourceConverter = appResourceConverter;
+        this.outboundMessageResourceConverter = outboundMessageResourceConverter;
+        this.assetAppResourceConverter = assetAppResourceConverter;
     }
 
     /**
@@ -29,20 +38,24 @@ public class DeployerController {
     @ResponseStatus(HttpStatus.CREATED)
     @PostMapping("/assets/{assetCode}/apps")
     public void deploy(@PathVariable String assetCode,
-                       @Valid @RequestBody AssetAppResource assetAppResource) {
+                       @Valid @RequestBody OutboundMessageResource assetAppResource) {
         log.info("[deploy] assetCode = {}, assetAppResource = {}", assetCode, assetAppResource);
-        DeployMessage deployMessage = appResourceConverter.fromResource(assetAppResource);
-        deployMessage.setRequestId("requestId");
-        deployerService.publish(appResourceConverter.fromResource(assetAppResource), assetCode);
+        OutboundMessage outboundMessage = outboundMessageResourceConverter.fromResource(assetAppResource);
+        outboundMessage.setRequestId("requestId");
+        deployerService.publish(outboundMessageResourceConverter.fromResource(assetAppResource), assetCode);
     }
 
     /**
-     * 배포된 앱 정보 조회
+     * 배포된 앱 정보 조회 (페이지 조회)
      * @param assetCode 자산 코드
      */
     @ResponseStatus(HttpStatus.OK)
     @GetMapping("/assets/{assetCode}/apps")
-    public void get(@PathVariable String assetCode) {
-        log.info("[get] assetCode = {}", assetCode);
+    public PageableResponse<AssetAppResource> get(@PathVariable String assetCode,
+                                                         @RequestParam(required = false, defaultValue = "0") int page,
+                                                         @RequestParam(required = false, defaultValue = "20") int size) {
+        log.info("[get] assetCode = {}, page = {}, size = {}", assetCode, page, size);
+        Page<AssetApp> assetApps = deployerService.getAll(assetCode, page, size);
+        return PageableResponse.from(assetApps, assetAppResourceConverter::toResource);
     }
 }
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/MqttMessageHandler.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/MqttMessageHandler.java
index 8206914..5b8bd5e 100644
--- a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/MqttMessageHandler.java
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/MqttMessageHandler.java
@@ -1,5 +1,6 @@
 package inc.sdt.blokworks.devicedeployer.presentation;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
 import inc.sdt.blokworks.devicedeployer.application.DeployerService;
 import inc.sdt.blokworks.devicedeployer.application.ProcessService;
 import inc.sdt.blokworks.devicedeployer.infrastructure.mqtt.InboundDeployMessagePayload;
@@ -8,6 +9,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.integration.annotation.MessageEndpoint;
 import org.springframework.integration.annotation.ServiceActivator;
+import org.springframework.integration.mqtt.support.MqttHeaders;
 import org.springframework.messaging.Message;
 
 @MessageEndpoint
@@ -15,16 +17,19 @@ public class MqttMessageHandler {
     private final Logger log;
     private final DeployerService deployerService;
     private final ProcessService processService;
+    private final ObjectMapper objectMapper;
     private final MqttMessageConverter<InboundDeployMessagePayload> deployMessagePayloadConverter;
     private final MqttMessageConverter<InboundProcessMessagePayload> processMessagePayloadConverter;
 
     public MqttMessageHandler(DeployerService deployerService,
                               ProcessService processService,
+                              ObjectMapper objectMapper,
                               MqttMessageConverter<InboundDeployMessagePayload> deployMessagePayloadConverter,
                               MqttMessageConverter<InboundProcessMessagePayload> processMessagePayloadConverter) {
         this.log = LoggerFactory.getLogger(this.getClass());
         this.deployerService = deployerService;
         this.processService = processService;
+        this.objectMapper = objectMapper;
         this.deployMessagePayloadConverter = deployMessagePayloadConverter;
         this.processMessagePayloadConverter = processMessagePayloadConverter;
     }
@@ -34,7 +39,20 @@ public class MqttMessageHandler {
         log.debug("[handleMessage] message={}", message);
 
         if(!message.getPayload().contains("pid")) {
+            String topic = String.valueOf(message.getHeaders().get(MqttHeaders.RECEIVED_TOPIC));
+            String id = topic.split("/")[1];
+
+            log.info("[handleMessage] topic = {}, id = {}", topic, id);
+
             deployMessagePayloadConverter.convertFromByte(message.getPayload(), InboundDeployMessagePayload.class)
+                    .map(p -> new InboundDeployMessagePayload(
+                            p.status(),
+                            p.assetCode(),
+                            p.name(),
+                            p.size(),
+                            p.releasedAt(),
+                            p.modifiedAt(),
+                            id))
                     .flatMap(deployerService)
                     .subscribe();
         }else {
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/OutboundMessageResource.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/OutboundMessageResource.java
new file mode 100644
index 0000000..26418d3
--- /dev/null
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/OutboundMessageResource.java
@@ -0,0 +1,16 @@
+package inc.sdt.blokworks.devicedeployer.presentation;
+
+import org.wildfly.common.annotation.NotNull;
+
+import java.util.HashMap;
+
+record OutboundMessageResource(
+        @NotNull
+        String url,
+        @NotNull
+        String name,
+        String command,
+        HashMap<String, String> env
+) {
+
+}
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/OutboundMessageResourceConverter.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/OutboundMessageResourceConverter.java
new file mode 100644
index 0000000..109f661
--- /dev/null
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/OutboundMessageResourceConverter.java
@@ -0,0 +1,27 @@
+package inc.sdt.blokworks.devicedeployer.presentation;
+
+import inc.sdt.blokworks.devicedeployer.domain.OutboundMessage;
+import org.springframework.stereotype.Component;
+
+@Component
+public class OutboundMessageResourceConverter {
+
+    public OutboundMessageResource toResource(OutboundMessage outboundMessage) {
+        return new OutboundMessageResource(
+                outboundMessage.getUrl(),
+                outboundMessage.getName(),
+                outboundMessage.getCommand(),
+                outboundMessage.getEnv()
+        );
+    }
+
+    public OutboundMessage fromResource(OutboundMessageResource resource) {
+        return OutboundMessage.builder()
+                .url(resource.url())
+                .name(resource.name())
+                .command(resource.command())
+                .env(resource.env())
+                .build();
+
+    }
+}
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResource.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResource.java
new file mode 100644
index 0000000..c3c093a
--- /dev/null
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResource.java
@@ -0,0 +1,8 @@
+package inc.sdt.blokworks.devicedeployer.presentation;
+
+interface PageableResource {
+    long getTotalElements();
+    int getTotalPages();
+    int getSize();
+    int getPage();
+}
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResourceImpl.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResourceImpl.java
new file mode 100644
index 0000000..135641a
--- /dev/null
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResourceImpl.java
@@ -0,0 +1,45 @@
+package inc.sdt.blokworks.devicedeployer.presentation;
+
+import org.springframework.data.domain.Page;
+
+class PageableResourceImpl implements PageableResource {
+    private final long totalElements;
+    private final int totalPages;
+    private final int size;
+    private final int page;
+
+    PageableResourceImpl(long totalElements, int totalPages, int size, int page) {
+        this.totalElements = totalElements;
+        this.totalPages = totalPages;
+        this.size = size;
+        this.page = page;
+    }
+
+    static <T> PageableResourceImpl from(Page<T> page) {
+        return new PageableResourceImpl(
+                page.getTotalElements(),
+                page.getTotalPages(),
+                page.getSize(),
+                page.getPageable().getPageNumber());
+    }
+
+    @Override
+    public long getTotalElements() {
+        return 0;
+    }
+
+    @Override
+    public int getTotalPages() {
+        return 0;
+    }
+
+    @Override
+    public int getSize() {
+        return 0;
+    }
+
+    @Override
+    public int getPage() {
+        return 0;
+    }
+}
diff --git a/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResponse.java b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResponse.java
new file mode 100644
index 0000000..7b854ca
--- /dev/null
+++ b/src/main/java/inc/sdt/blokworks/devicedeployer/presentation/PageableResponse.java
@@ -0,0 +1,28 @@
+package inc.sdt.blokworks.devicedeployer.presentation;
+
+import org.springframework.data.domain.Page;
+
+import java.util.List;
+import java.util.function.Function;
+
+class PageableResponse<T> {
+    private final List<T> content;
+    private final PageableResource pageable;
+
+    PageableResponse(List<T> content, PageableResource pageable) {
+        this.content = content;
+        this.pageable = pageable;
+    }
+
+    static <T, U> PageableResponse<U> from(Page<T> page, Function<T, U> converter) {
+        return new PageableResponse<>(page.map(converter).getContent(), PageableResourceImpl.from(page));
+    }
+
+    public List<T> getContent() {
+        return content;
+    }
+
+    public PageableResource getPageable() {
+        return pageable;
+    }
+}
diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml
index a33f789..c5b7052 100644
--- a/src/main/resources/application-local.yml
+++ b/src/main/resources/application-local.yml
@@ -16,9 +16,5 @@ inbound:
     username: sdt
     password: 251327
     topics:
-      - /assets/+/apps/process
-      - /assets/+/apps/deploy
-outbound:
-  mqtt:
-    topic:
-      - /assets/+/command-req/+
\ No newline at end of file
+      - /assets/+/command-req/+
+      - /assets/+/apps/process
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 56cacee..90a30bd 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -12,9 +12,5 @@ inbound:
     username: sdt
     password: 251327
     topics:
-      - /assets/+/apps/process
-      - /assets/+/apps/deploy
-outbound:
-  mqtt:
-    topic:
-      - /assets/+/command-req/+
\ No newline at end of file
+      - /assets/+/command-req/+
+      - /assets/+/apps/process
\ No newline at end of file