dsjang 2024-08-07
Multi DBMS 설정 기능 개선
@b517754d014f3736fb00ca8bd0a5e6040e1c4be7
build.gradle
--- build.gradle
+++ build.gradle
@@ -43,6 +43,13 @@
     implementation 'org.jdom:jdom2:2.0.6.1'
     // https://mvnrepository.com/artifact/org.apache.commons/commons-configuration2
     implementation 'org.apache.commons:commons-configuration2:2.10.1'
+    // https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc11
+    implementation group: 'com.oracle.database.jdbc', name: 'ojdbc11', version: '23.5.0.24.07'
+    // https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc
+    implementation group: 'com.microsoft.sqlserver', name: 'mssql-jdbc', version: '12.8.0.jre11'
+    // https://mvnrepository.com/artifact/org.postgresql/postgresql
+    implementation group: 'org.postgresql', name: 'postgresql', version: '42.7.3'
+
 }
 
 tasks.named('test') {
src/main/java/com/munjaon/client/config/DataSourceConfig.java
--- src/main/java/com/munjaon/client/config/DataSourceConfig.java
+++ src/main/java/com/munjaon/client/config/DataSourceConfig.java
@@ -1,7 +1,6 @@
 package com.munjaon.client.config;
 
 import com.zaxxer.hikari.HikariDataSource;
-import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.configuration2.ex.ConfigurationException;
@@ -11,7 +10,6 @@
 import org.mybatis.spring.annotation.MapperScan;
 import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.jdbc.DataSourceBuilder;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.annotation.Bean;
@@ -28,6 +26,7 @@
 @EnableTransactionManagement
 @MapperScan(basePackages= "com.munjaon.client.**.mapper")
 public class DataSourceConfig {
+    //public class DataSourceConfig implements BeanDefinitionRegistryPostProcessor {
     @Autowired
     private ApplicationContext applicationContext;
     private final ServerConfig serverConfig;
@@ -51,12 +50,15 @@
     @Primary
     @Bean(name = "factory")
     public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
+        String dbms = serverConfig.getString("DB.DBMS");
+        System.out.println("dbms : " + dbms);
         SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
         sqlSessionFactory.setVfs(SpringBootVFS.class);
         sqlSessionFactory.setDataSource(dataSource);
         sqlSessionFactory.setTypeAliasesPackage("com.munjaon.client.**.dto");
         sqlSessionFactory.setConfigLocation(applicationContext.getResource("classpath:mybatis-config.xml"));
         sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/sqlmap/**/*.xml"));
+//        sqlSessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:/sqlmap/" + dbms.toLowerCase() + "/*.xml"));
         return sqlSessionFactory.getObject();
     }
 
@@ -65,4 +67,22 @@
     public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) {
         return new SqlSessionTemplate(sqlSessionFactory);
     }
+
+//    @Override
+//    public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
+//        String dbms = null;
+//        try {
+//            dbms = serverConfig.getString("DB.DBMS");
+//        } catch (ConfigurationException e) {
+//            throw new RuntimeException(e);
+//        }
+//        AbstractBeanDefinition mapperScannerConfigurer = BeanDefinitionBuilder
+//                .genericBeanDefinition(MapperScannerConfigurer.class)
+//                .addPropertyValue("sqlSessionFactoryBeanName", "factory")
+//                .addPropertyValue("basePackage", "com.munjaon.client.**.dto")
+//                .addPropertyValue("annotationClass", MapperType.value(dbms).getClass())
+//                .getBeanDefinition();
+//
+//        registry.registerBeanDefinition("MapperScanner", mapperScannerConfigurer);
+//    }
 }
src/main/java/com/munjaon/client/mariadb/service/MariaDBService.java
--- src/main/java/com/munjaon/client/mariadb/service/MariaDBService.java
+++ src/main/java/com/munjaon/client/mariadb/service/MariaDBService.java
@@ -13,14 +13,14 @@
 @Service
 @RequiredArgsConstructor
 public class MariaDBService {
-    private final MariaDBMapper mariaDBMapper;
+    private final MariaDBMapper deliverBMapper;
 
     public boolean checkTableExists() {
         boolean isExist = false;
         try {
-            int msgCount = mariaDBMapper.checkTableForMessage();
-            int logCount = mariaDBMapper.checkTableForLog();
-            if (msgCount > 0 && logCount > 0) {
+            int msgCount = deliverBMapper.checkTableForMessage();
+            int logCount = deliverBMapper.checkTableForLog();
+            if (msgCount >= 0 && logCount >= 0) {
                 isExist = true;
             }
         } catch (Exception e) {
@@ -30,25 +30,25 @@
         return isExist;
     }
     public List<MunjaonMsg> selectToDeliver(String msgType) {
-        return mariaDBMapper.selectToDeliver(msgType);
+        return deliverBMapper.selectToDeliver(msgType);
     }
     public int updateToDeliver(String msgId) {
-        return mariaDBMapper.updateToDeliver(msgId);
+        return deliverBMapper.updateToDeliver(msgId);
     }
     public int updateToReport(MunjaonMsg params) {
-        return mariaDBMapper.updateToReport(params);
+        return deliverBMapper.updateToReport(params);
     }
     public List<MunjaonMsg> selectToMove() {
-        return mariaDBMapper.selectToMove();
+        return deliverBMapper.selectToMove();
     }
     public List<MunjaonMsg> selectToExpire(String expireTime) {
-        return mariaDBMapper.selectToExpire(expireTime);
+        return deliverBMapper.selectToExpire(expireTime);
     }
     public int insertToLog(String msgId) {
-        return mariaDBMapper.insertToLog(msgId);
+        return deliverBMapper.insertToLog(msgId);
     }
     public int deleteFromDeliver(String msgId) {
-        return mariaDBMapper.deleteFromDeliver(msgId);
+        return deliverBMapper.deleteFromDeliver(msgId);
     }
 
     @Transactional
 
src/main/java/com/munjaon/client/mssql/mapper/MssqlMapper.java (added)
+++ src/main/java/com/munjaon/client/mssql/mapper/MssqlMapper.java
@@ -0,0 +1,20 @@
+package com.munjaon.client.mssql.mapper;
+
+import com.munjaon.client.model.MunjaonMsg;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface MssqlMapper {
+    String checkTime();
+    int checkTableForMessage();
+    int checkTableForLog();
+    List<MunjaonMsg> selectToDeliver(String msgType);
+    int updateToDeliver(String msgId);
+    int updateToReport(MunjaonMsg params);
+    List<MunjaonMsg> selectToMove();
+    List<MunjaonMsg> selectToExpire(String expireTime);
+    int insertToLog(String msgId);
+    int deleteFromDeliver(String msgId);
+}
 
src/main/java/com/munjaon/client/mssql/service/MssqlService.java (added)
+++ src/main/java/com/munjaon/client/mssql/service/MssqlService.java
@@ -0,0 +1,66 @@
+package com.munjaon.client.mssql.service;
+
+import com.munjaon.client.model.MunjaonMsg;
+import com.munjaon.client.mssql.mapper.MssqlMapper;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class MssqlService {
+    private final MssqlMapper deliverBMapper;
+
+    public boolean checkTableExists() {
+        boolean isExist = false;
+        try {
+            int msgCount = deliverBMapper.checkTableForMessage();
+            int logCount = deliverBMapper.checkTableForLog();
+            if (msgCount >= 0 && logCount >= 0) {
+                isExist = true;
+            }
+        } catch (Exception e) {
+            log.error("Check table exists error : {}", e);
+        }
+
+        return isExist;
+    }
+    public List<MunjaonMsg> selectToDeliver(String msgType) {
+        return deliverBMapper.selectToDeliver(msgType);
+    }
+    public int updateToDeliver(String msgId) {
+        return deliverBMapper.updateToDeliver(msgId);
+    }
+    public int updateToReport(MunjaonMsg params) {
+        return deliverBMapper.updateToReport(params);
+    }
+    public List<MunjaonMsg> selectToMove() {
+        return deliverBMapper.selectToMove();
+    }
+    public List<MunjaonMsg> selectToExpire(String expireTime) {
+        return deliverBMapper.selectToExpire(expireTime);
+    }
+    public int insertToLog(String msgId) {
+        return deliverBMapper.insertToLog(msgId);
+    }
+    public int deleteFromDeliver(String msgId) {
+        return deliverBMapper.deleteFromDeliver(msgId);
+    }
+
+    @Transactional
+    public void moveToDeliver() {
+        List<MunjaonMsg> list = selectToMove();
+        if (list == null || list.size() == 0) {
+            return;
+        }
+        log.debug("[CLASS : {} : MOVE_COUNT : {}", this.getClass(), list.size());
+        for (MunjaonMsg msg : list) {
+            insertToLog(msg.getMsgId());
+            deleteFromDeliver(msg.getMsgId());
+        }
+    }
+}
 
src/main/java/com/munjaon/client/mysql/mapper/MysqlMapper.java (added)
+++ src/main/java/com/munjaon/client/mysql/mapper/MysqlMapper.java
@@ -0,0 +1,20 @@
+package com.munjaon.client.mysql.mapper;
+
+import com.munjaon.client.model.MunjaonMsg;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface MysqlMapper {
+    String checkTime();
+    int checkTableForMessage();
+    int checkTableForLog();
+    List<MunjaonMsg> selectToDeliver(String msgType);
+    int updateToDeliver(String msgId);
+    int updateToReport(MunjaonMsg params);
+    List<MunjaonMsg> selectToMove();
+    List<MunjaonMsg> selectToExpire(String expireTime);
+    int insertToLog(String msgId);
+    int deleteFromDeliver(String msgId);
+}
src/main/java/com/munjaon/client/mysql/service/MysqlService.java
--- src/main/java/com/munjaon/client/mysql/service/MysqlService.java
+++ src/main/java/com/munjaon/client/mysql/service/MysqlService.java
@@ -1,11 +1,66 @@
 package com.munjaon.client.mysql.service;
 
+import com.munjaon.client.model.MunjaonMsg;
+import com.munjaon.client.mysql.mapper.MysqlMapper;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
 
 @Slf4j
 @Service
 @RequiredArgsConstructor
 public class MysqlService {
+    private final MysqlMapper deliverBMapper;
+
+    public boolean checkTableExists() {
+        boolean isExist = false;
+        try {
+            int msgCount = deliverBMapper.checkTableForMessage();
+            int logCount = deliverBMapper.checkTableForLog();
+            if (msgCount >= 0 && logCount >= 0) {
+                isExist = true;
+            }
+        } catch (Exception e) {
+            log.error("Check table exists error : {}", e);
+        }
+
+        return isExist;
+    }
+    public List<MunjaonMsg> selectToDeliver(String msgType) {
+        return deliverBMapper.selectToDeliver(msgType);
+    }
+    public int updateToDeliver(String msgId) {
+        return deliverBMapper.updateToDeliver(msgId);
+    }
+    public int updateToReport(MunjaonMsg params) {
+        return deliverBMapper.updateToReport(params);
+    }
+    public List<MunjaonMsg> selectToMove() {
+        return deliverBMapper.selectToMove();
+    }
+    public List<MunjaonMsg> selectToExpire(String expireTime) {
+        return deliverBMapper.selectToExpire(expireTime);
+    }
+    public int insertToLog(String msgId) {
+        return deliverBMapper.insertToLog(msgId);
+    }
+    public int deleteFromDeliver(String msgId) {
+        return deliverBMapper.deleteFromDeliver(msgId);
+    }
+
+    @Transactional
+    public void moveToDeliver() {
+        List<MunjaonMsg> list = selectToMove();
+        if (list == null || list.size() == 0) {
+            return;
+        }
+        log.debug("[CLASS : {} : MOVE_COUNT : {}", this.getClass(), list.size());
+        for (MunjaonMsg msg : list) {
+            insertToLog(msg.getMsgId());
+            deleteFromDeliver(msg.getMsgId());
+        }
+    }
 }
 
src/main/java/com/munjaon/client/oracle/mapper/OracleMapper.java (added)
+++ src/main/java/com/munjaon/client/oracle/mapper/OracleMapper.java
@@ -0,0 +1,20 @@
+package com.munjaon.client.oracle.mapper;
+
+import com.munjaon.client.model.MunjaonMsg;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface OracleMapper {
+    String checkTime();
+    int checkTableForMessage();
+    int checkTableForLog();
+    List<MunjaonMsg> selectToDeliver(String msgType);
+    int updateToDeliver(String msgId);
+    int updateToReport(MunjaonMsg params);
+    List<MunjaonMsg> selectToMove();
+    List<MunjaonMsg> selectToExpire(String expireTime);
+    int insertToLog(String msgId);
+    int deleteFromDeliver(String msgId);
+}
 
src/main/java/com/munjaon/client/oracle/service/OracleService.java (added)
+++ src/main/java/com/munjaon/client/oracle/service/OracleService.java
@@ -0,0 +1,66 @@
+package com.munjaon.client.oracle.service;
+
+import com.munjaon.client.model.MunjaonMsg;
+import com.munjaon.client.oracle.mapper.OracleMapper;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class OracleService {
+    private final OracleMapper deliverBMapper;
+
+    public boolean checkTableExists() {
+        boolean isExist = false;
+        try {
+            int msgCount = deliverBMapper.checkTableForMessage();
+            int logCount = deliverBMapper.checkTableForLog();
+            if (msgCount >= 0 && logCount >= 0) {
+                isExist = true;
+            }
+        } catch (Exception e) {
+            log.error("Check table exists error : {}", e);
+        }
+
+        return isExist;
+    }
+    public List<MunjaonMsg> selectToDeliver(String msgType) {
+        return deliverBMapper.selectToDeliver(msgType);
+    }
+    public int updateToDeliver(String msgId) {
+        return deliverBMapper.updateToDeliver(msgId);
+    }
+    public int updateToReport(MunjaonMsg params) {
+        return deliverBMapper.updateToReport(params);
+    }
+    public List<MunjaonMsg> selectToMove() {
+        return deliverBMapper.selectToMove();
+    }
+    public List<MunjaonMsg> selectToExpire(String expireTime) {
+        return deliverBMapper.selectToExpire(expireTime);
+    }
+    public int insertToLog(String msgId) {
+        return deliverBMapper.insertToLog(msgId);
+    }
+    public int deleteFromDeliver(String msgId) {
+        return deliverBMapper.deleteFromDeliver(msgId);
+    }
+
+    @Transactional
+    public void moveToDeliver() {
+        List<MunjaonMsg> list = selectToMove();
+        if (list == null || list.size() == 0) {
+            return;
+        }
+        log.debug("[CLASS : {} : MOVE_COUNT : {}", this.getClass(), list.size());
+        for (MunjaonMsg msg : list) {
+            insertToLog(msg.getMsgId());
+            deleteFromDeliver(msg.getMsgId());
+        }
+    }
+}
 
src/main/java/com/munjaon/client/postgresql/mapper/PostgresqlMapper.java (added)
+++ src/main/java/com/munjaon/client/postgresql/mapper/PostgresqlMapper.java
@@ -0,0 +1,20 @@
+package com.munjaon.client.postgresql.mapper;
+
+import com.munjaon.client.model.MunjaonMsg;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface PostgresqlMapper {
+    String checkTime();
+    int checkTableForMessage();
+    int checkTableForLog();
+    List<MunjaonMsg> selectToDeliver(String msgType);
+    int updateToDeliver(String msgId);
+    int updateToReport(MunjaonMsg params);
+    List<MunjaonMsg> selectToMove();
+    List<MunjaonMsg> selectToExpire(String expireTime);
+    int insertToLog(String msgId);
+    int deleteFromDeliver(String msgId);
+}
 
src/main/java/com/munjaon/client/postgresql/service/PostgresqlService.java (added)
+++ src/main/java/com/munjaon/client/postgresql/service/PostgresqlService.java
@@ -0,0 +1,66 @@
+package com.munjaon.client.postgresql.service;
+
+import com.munjaon.client.model.MunjaonMsg;
+import com.munjaon.client.postgresql.mapper.PostgresqlMapper;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class PostgresqlService {
+    private final PostgresqlMapper deliverBMapper;
+
+    public boolean checkTableExists() {
+        boolean isExist = false;
+        try {
+            int msgCount = deliverBMapper.checkTableForMessage();
+            int logCount = deliverBMapper.checkTableForLog();
+            if (msgCount >= 0 && logCount >= 0) {
+                isExist = true;
+            }
+        } catch (Exception e) {
+            log.error("Check table exists error : {}", e);
+        }
+
+        return isExist;
+    }
+    public List<MunjaonMsg> selectToDeliver(String msgType) {
+        return deliverBMapper.selectToDeliver(msgType);
+    }
+    public int updateToDeliver(String msgId) {
+        return deliverBMapper.updateToDeliver(msgId);
+    }
+    public int updateToReport(MunjaonMsg params) {
+        return deliverBMapper.updateToReport(params);
+    }
+    public List<MunjaonMsg> selectToMove() {
+        return deliverBMapper.selectToMove();
+    }
+    public List<MunjaonMsg> selectToExpire(String expireTime) {
+        return deliverBMapper.selectToExpire(expireTime);
+    }
+    public int insertToLog(String msgId) {
+        return deliverBMapper.insertToLog(msgId);
+    }
+    public int deleteFromDeliver(String msgId) {
+        return deliverBMapper.deleteFromDeliver(msgId);
+    }
+
+    @Transactional
+    public void moveToDeliver() {
+        List<MunjaonMsg> list = selectToMove();
+        if (list == null || list.size() == 0) {
+            return;
+        }
+        log.debug("[CLASS : {} : MOVE_COUNT : {}", this.getClass(), list.size());
+        for (MunjaonMsg msg : list) {
+            insertToLog(msg.getMsgId());
+            deleteFromDeliver(msg.getMsgId());
+        }
+    }
+}
src/main/java/com/munjaon/client/server/service/CollectClientService.java
--- src/main/java/com/munjaon/client/server/service/CollectClientService.java
+++ src/main/java/com/munjaon/client/server/service/CollectClientService.java
@@ -13,7 +13,6 @@
 import java.net.InetSocketAddress;
 import java.nio.ByteBuffer;
 import java.nio.channels.SocketChannel;
-import java.nio.file.Files;
 import java.util.List;
 
 public class CollectClientService extends Service {
src/main/java/com/munjaon/client/service/DatabaseService.java
--- src/main/java/com/munjaon/client/service/DatabaseService.java
+++ src/main/java/com/munjaon/client/service/DatabaseService.java
@@ -5,6 +5,9 @@
 @Getter
 public enum DatabaseService {
     MARIADB_SERVICE,
+    MSSQL_SERVICE,
+    ORACLE_SERVICE,
+    POSTGRESQL_SERVICE,
     MYSQL_SERVICE;
 
     private Object service;
src/main/java/com/munjaon/client/service/DatabaseServiceInjector.java
--- src/main/java/com/munjaon/client/service/DatabaseServiceInjector.java
+++ src/main/java/com/munjaon/client/service/DatabaseServiceInjector.java
@@ -1,7 +1,10 @@
 package com.munjaon.client.service;
 
 import com.munjaon.client.mariadb.service.MariaDBService;
+import com.munjaon.client.mssql.service.MssqlService;
 import com.munjaon.client.mysql.service.MysqlService;
+import com.munjaon.client.oracle.service.OracleService;
+import com.munjaon.client.postgresql.service.PostgresqlService;
 import jakarta.annotation.PostConstruct;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -13,7 +16,13 @@
     @Autowired
     private MariaDBService mariaDBService;
     @Autowired
+    private MssqlService mssqlService;
+    @Autowired
     private MysqlService mysqlService;
+    @Autowired
+    private OracleService oracleService;
+    @Autowired
+    private PostgresqlService postgresqlService;
 
     @PostConstruct
     public void postConstruct() {
@@ -21,8 +30,14 @@
             switch (svc) {
                 case MARIADB_SERVICE:       svc.setService(mariaDBService);
                     break;
+                case MSSQL_SERVICE:         svc.setService(mssqlService);
+                    break;
                 case MYSQL_SERVICE:         svc.setService(mysqlService);
                     break;
+                case ORACLE_SERVICE:        svc.setService(oracleService);
+                    break;
+                case POSTGRESQL_SERVICE : svc.setService(postgresqlService);
+                    break;
                 default:                    break;
             }
         }
src/main/java/com/munjaon/client/service/DatabaseTypeWorker.java
--- src/main/java/com/munjaon/client/service/DatabaseTypeWorker.java
+++ src/main/java/com/munjaon/client/service/DatabaseTypeWorker.java
@@ -2,6 +2,10 @@
 
 import com.munjaon.client.mariadb.service.MariaDBService;
 import com.munjaon.client.model.MunjaonMsg;
+import com.munjaon.client.mssql.service.MssqlService;
+import com.munjaon.client.mysql.service.MysqlService;
+import com.munjaon.client.oracle.service.OracleService;
+import com.munjaon.client.postgresql.service.PostgresqlService;
 import lombok.Getter;
 
 import java.util.EnumSet;
@@ -64,50 +68,224 @@
             mariaDBService.moveToDeliver();
         }
     },
-    TYPE_OF_MYSQL("MYSQL") {
+    TYPE_OF_ORACLE("ORACLE") {
         @Override
         public boolean checkTableExists() {
-            return false;
+            OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
+            return oracleService.checkTableExists();
         }
 
         @Override
         public List<MunjaonMsg> selectToDeliver(String msgType) {
-            return List.of();
+            OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
+            return oracleService.selectToDeliver(msgType);
         }
 
         @Override
         public int updateToDeliver(String msgId) {
-            return 0;
+            OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
+            return oracleService.updateToDeliver(msgId);
         }
 
         @Override
         public int updateToReport(MunjaonMsg params) {
-            return 0;
+            OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
+            return oracleService.updateToReport(params);
         }
 
         @Override
         public List<MunjaonMsg> selectToMove() {
-            return List.of();
+            OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
+            return oracleService.selectToMove();
         }
 
         @Override
         public List<MunjaonMsg> selectToExpire(String expireTime) {
-            return List.of();
+            OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
+            return oracleService.selectToExpire(expireTime);
         }
 
         @Override
         public int insertToLog(String msgId) {
-            return 0;
+            OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
+            return oracleService.insertToLog(msgId);
         }
 
         @Override
         public int deleteFromDeliver(String msgId) {
-            return 0;
+            OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
+            return oracleService.deleteFromDeliver(msgId);
         }
 
         @Override
         public void moveToDeliver() {
+            OracleService oracleService = (OracleService) DatabaseService.ORACLE_SERVICE.getService();
+            oracleService.moveToDeliver();
+        }
+    },
+    TYPE_OF_MSSQL("MSSQL") {
+        @Override
+        public boolean checkTableExists() {
+            MssqlService mssqlService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
+            return mssqlService.checkTableExists();
+        }
 
+        @Override
+        public List<MunjaonMsg> selectToDeliver(String msgType) {
+            MssqlService mssqlService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
+            return mssqlService.selectToDeliver(msgType);
+        }
+
+        @Override
+        public int updateToDeliver(String msgId) {
+            MssqlService mssqlService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
+            return mssqlService.updateToDeliver(msgId);
+        }
+
+        @Override
+        public int updateToReport(MunjaonMsg params) {
+            MssqlService mssqlService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
+            return mssqlService.updateToReport(params);
+        }
+
+        @Override
+        public List<MunjaonMsg> selectToMove() {
+            MssqlService mssqlService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
+            return mssqlService.selectToMove();
+        }
+
+        @Override
+        public List<MunjaonMsg> selectToExpire(String expireTime) {
+            MssqlService mssqlService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
+            return mssqlService.selectToExpire(expireTime);
+        }
+
+        @Override
+        public int insertToLog(String msgId) {
+            MssqlService mssqlService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
+            return mssqlService.insertToLog(msgId);
+        }
+
+        @Override
+        public int deleteFromDeliver(String msgId) {
+            MssqlService mssqlService = (MssqlService) DatabaseService.ORACLE_SERVICE.getService();
+            return mssqlService.deleteFromDeliver(msgId);
+        }
+
+        @Override
+        public void moveToDeliver() {
+            MssqlService oracleService = (MssqlService) DatabaseService.MSSQL_SERVICE.getService();
+            oracleService.moveToDeliver();
+        }
+    },
+    TYPE_OF_POSTGRESQL("POSTGRESQL") {
+        @Override
+        public boolean checkTableExists() {
+            PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
+            return postgresqlService.checkTableExists();
+        }
+
+        @Override
+        public List<MunjaonMsg> selectToDeliver(String msgType) {
+            PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
+            return postgresqlService.selectToDeliver(msgType);
+        }
+
+        @Override
+        public int updateToDeliver(String msgId) {
+            PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
+            return postgresqlService.updateToDeliver(msgId);
+        }
+
+        @Override
+        public int updateToReport(MunjaonMsg params) {
+            PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
+            return postgresqlService.updateToReport(params);
+        }
+
+        @Override
+        public List<MunjaonMsg> selectToMove() {
+            PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
+            return postgresqlService.selectToMove();
+        }
+
+        @Override
+        public List<MunjaonMsg> selectToExpire(String expireTime) {
+            PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
+            return postgresqlService.selectToExpire(expireTime);
+        }
+
+        @Override
+        public int insertToLog(String msgId) {
+            PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
+            return postgresqlService.insertToLog(msgId);
+        }
+
+        @Override
+        public int deleteFromDeliver(String msgId) {
+            PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
+            return postgresqlService.deleteFromDeliver(msgId);
+        }
+
+        @Override
+        public void moveToDeliver() {
+            PostgresqlService postgresqlService = (PostgresqlService) DatabaseService.POSTGRESQL_SERVICE.getService();
+            postgresqlService.moveToDeliver();
+        }
+    },
+    TYPE_OF_MYSQL("MYSQL") {
+        @Override
+        public boolean checkTableExists() {
+            MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
+            return mysqlService.checkTableExists();
+        }
+
+        @Override
+        public List<MunjaonMsg> selectToDeliver(String msgType) {
+            MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
+            return mysqlService.selectToDeliver(msgType);
+        }
+
+        @Override
+        public int updateToDeliver(String msgId) {
+            MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
+            return mysqlService.updateToDeliver(msgId);
+        }
+
+        @Override
+        public int updateToReport(MunjaonMsg params) {
+            MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
+            return mysqlService.updateToReport(params);
+        }
+
+        @Override
+        public List<MunjaonMsg> selectToMove() {
+            MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
+            return mysqlService.selectToMove();
+        }
+
+        @Override
+        public List<MunjaonMsg> selectToExpire(String expireTime) {
+            MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
+            return mysqlService.selectToExpire(expireTime);
+        }
+
+        @Override
+        public int insertToLog(String msgId) {
+            MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
+            return mysqlService.insertToLog(msgId);
+        }
+
+        @Override
+        public int deleteFromDeliver(String msgId) {
+            MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
+            return mysqlService.deleteFromDeliver(msgId);
+        }
+
+        @Override
+        public void moveToDeliver() {
+            MysqlService mysqlService = (MysqlService) DatabaseService.MYSQL_SERVICE.getService();
+            mysqlService.moveToDeliver();
         }
     };
 
 
src/main/resources/sqlmap/mssql/mssql_sql.xml (added)
+++ src/main/resources/sqlmap/mssql/mssql_sql.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.munjaon.client.mssql.mapper.MssqlMapper">
+    <select id="checkTime" resultType="String">
+        /* MariaDBMapper.checkTime */
+        SELECT GETDATE()
+    </select>
+    <select id="checkTableForMessage" resultType="int">
+        /* MariaDBMapper.checkTableForMessage */
+--         SELECT 1 FROM MUNJAON_MSG WHERE 1=1 LIMIT 1
+        <![CDATA[
+        SELECT TOP 1 COUNT(MSG_ID) FROM MUNJAON_MSG WHERE 1=1
+        ]]>
+    </select>
+    <select id="checkTableForLog" resultType="int">
+        /* MariaDBMapper.checkTableForLog */
+        <![CDATA[
+        SELECT TOP 1 COUNT(MSG_ID) FROM MUNJAON_MSG_LOG WHERE 1=1
+        ]]>
+    </select>
+    <select id="selectToDeliver" resultType="com.munjaon.client.model.MunjaonMsg">
+        /* MariaDBMapper.selectToDeliver */
+        <![CDATA[
+        SELECT
+            TOP 100
+            MSG_ID
+            , MSG_TYPE
+             , REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(20),REQUEST_DATE,120),'-',''),' ',''),':','') RESERVE_DATE
+             , REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(20),GETDATE(),120),'-',''),' ',''),':','') REQUEST_DATE
+            , RECV_PHONE
+            , SEND_PHONE
+            , SUBJECT
+            , MESSAGE
+            , FILENAME01
+            , FILENAME02
+            , FILENAME03
+            , KAKAO_SENDER_KEY
+            , KAKAO_TEMPLATE_CODE
+            , KAKAO_JSON_FILE
+        FROM MUNJAON_MSG
+        WHERE SEND_STATUS = '0'
+            AND MSG_TYPE = #{msgType}
+            AND REQUEST_DATE <= GETDATE()
+        ORDER BY REQUEST_DATE ASC
+        ]]>
+    </select>
+    <update id="updateToDeliver">
+        /* MariaDBMapper.updateToDeliver */
+        UPDATE MUNJAON_MSG SET
+            SEND_STATUS = '1'
+            , DELIVER_DATE = GETDATE()
+        WHERE MSG_ID = #{msgId}
+    </update>
+    <update id="updateToReport">
+        /* MariaDBMapper.updateToReport */
+        UPDATE MUNJAON_MSG SET
+            SEND_STATUS = #{sendStatus}
+            , SENT_DATE = CAST(#{sendDate} AS DATETIME)
+            , REPORT_DATE = SYSDATE
+            , TELECOM = #{telecom}
+        WHERE MSG_ID = #{msgId}
+    </update>
+    <select id="selectToMove" resultType="com.munjaon.client.model.MunjaonMsg">
+        /* MariaDBMapper.selectToMove */
+        <![CDATA[
+        SELECT TOP 100
+            MSG_ID, CONVERT(VARCHAR(6),REQUEST_DATE,112) REQUEST_DATE
+        FROM MUNJAON_MSG
+        WHERE SEND_STATUS NOT IN ('0', '1')
+        ]]>
+    </select>
+    <select id="selectToExpire" resultType="com.munjaon.client.model.MunjaonMsg">
+        /* MariaDBMapper.selectToExpire */
+        <![CDATA[
+            SELECT TOP 100
+                MSG_ID, CONVERT(VARCHAR(6),REQUEST_DATE,112) REQUEST_DATE
+            FROM MUNJAON_MSG
+            WHERE REQUEST_DATE < CAST(#{expireTime} AS DATETIME)
+                AND SEND_STATUS = '1'
+        ]]>
+    </select>
+    <insert id="insertToLog">
+        /* MariaDBMapper.insertToLog */
+        INSERT INTO MUNJAON_MSG_LOG
+        (
+            MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
+            RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
+            FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
+        )
+        SELECT
+            MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
+            RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
+            FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
+        FROM MUNJAON_MSG
+        WHERE MSG_ID = #{msgId}
+    </insert>
+    <delete id="deleteFromDeliver">
+        /* MariaDBMapper.deleteFromDeliver */
+        DELETE FROM MUNJAON_MSG
+        WHERE MSG_ID = #{msgId}
+    </delete>
+</mapper>(No newline at end of file)
 
src/main/resources/sqlmap/mysql/mysql_sql.xml (added)
+++ src/main/resources/sqlmap/mysql/mysql_sql.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.munjaon.client.mysql.mapper.MysqlMapper">
+    <select id="checkTime" resultType="String">
+        /* MariaDBMapper.checkTime */
+        SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i%s')
+    </select>
+    <select id="checkTableForMessage" resultType="int">
+        /* MariaDBMapper.checkTableForMessage */
+--         SELECT 1 FROM MUNJAON_MSG WHERE 1=1 LIMIT 1
+        SELECT COUNT(*)
+        FROM   information_schema.tables
+        WHERE TABLE_NAME = 'MUNJAON_MSG'
+    </select>
+    <select id="checkTableForLog" resultType="int">
+        /* MariaDBMapper.checkTableForLog */
+        SELECT COUNT(*)
+        FROM   information_schema.tables
+        WHERE TABLE_NAME = 'MUNJAON_MSG_LOG'
+--                 SELECT 1 FROM MUNJAON_MSG_LOG WHERE 1=1 LIMIT 1
+    </select>
+    <select id="selectToDeliver" resultType="com.munjaon.client.model.MunjaonMsg">
+        /* MariaDBMapper.selectToDeliver */
+        SELECT
+            MSG_ID
+            , MSG_TYPE
+            , DATE_FORMAT(REQUEST_DATE,'%Y%m%d%H%i%s') RESERVE_DATE
+            , DATE_FORMAT(NOW(),'%Y%m%d%H%i%s') REQUEST_DATE
+            , RECV_PHONE
+            , SEND_PHONE
+            , SUBJECT
+            , MESSAGE
+            , FILENAME01
+            , FILENAME02
+            , FILENAME03
+            , KAKAO_SENDER_KEY
+            , KAKAO_TEMPLATE_CODE
+            , KAKAO_JSON_FILE
+        FROM MUNJAON_MSG
+        WHERE SEND_STATUS = '0'
+            AND MSG_TYPE = #{msgType}
+            AND REQUEST_DATE <![CDATA[<=]]> SYSDATE()
+        ORDER BY REQUEST_DATE ASC
+        LIMIT 100
+    </select>
+    <update id="updateToDeliver">
+        /* MariaDBMapper.updateToDeliver */
+        UPDATE MUNJAON_MSG SET
+            SEND_STATUS = '1'
+            , DELIVER_DATE = NOW()
+        WHERE MSG_ID = #{msgId}
+    </update>
+    <update id="updateToReport">
+        /* MariaDBMapper.updateToReport */
+        UPDATE MUNJAON_MSG SET
+            SEND_STATUS = #{sendStatus}
+            , SENT_DATE = FROM_UNIXTIME(UNIX_TIMESTAMP(#{sendDate}))
+            , REPORT_DATE = NOW()
+            , TELECOM = #{telecom}
+        WHERE MSG_ID = #{msgId}
+    </update>
+    <select id="selectToMove" resultType="com.munjaon.client.model.MunjaonMsg">
+        /* MariaDBMapper.selectToMove */
+        SELECT MSG_ID, DATE_FORMAT(REQUEST_DATE, '%Y%m') REQUEST_DATE
+        FROM MUNJAON_MSG
+        WHERE SEND_STATUS NOT IN ('0', '1')
+            LIMIT 100
+    </select>
+    <select id="selectToExpire" resultType="com.munjaon.client.model.MunjaonMsg">
+        /* MariaDBMapper.selectToExpire */
+        SELECT MSG_ID, DATE_FORMAT(REQUEST_DATE, '%Y%m') REQUEST_DATE
+        FROM MUNJAON_MSG
+        WHERE REQUEST_DATE <![CDATA[<]]> FROM_UNIXTIME(UNIX_TIMESTAMP(#{expireTime}))
+            AND SEND_STATUS = '1'
+        LIMIT 100
+    </select>
+    <insert id="insertToLog">
+        /* MariaDBMapper.insertToLog */
+        INSERT INTO MUNJAON_MSG_LOG
+        (
+            MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
+            RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
+            FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
+        )
+        SELECT
+            MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
+            RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
+            FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
+        FROM MUNJAON_MSG
+        WHERE MSG_ID = #{msgId}
+    </insert>
+    <delete id="deleteFromDeliver">
+        /* MariaDBMapper.deleteFromDeliver */
+        DELETE FROM MUNJAON_MSG
+        WHERE MSG_ID = #{msgId}
+    </delete>
+</mapper>(No newline at end of file)
 
src/main/resources/sqlmap/oracle/oracle_sql.xml (added)
+++ src/main/resources/sqlmap/oracle/oracle_sql.xml
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.munjaon.client.oracle.mapper.OracleMapper">
+    <select id="checkTime" resultType="String">
+        /* MariaDBMapper.checkTime */
+        SELECT TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') FROM DUAL
+    </select>
+    <select id="checkTableForMessage" resultType="int">
+        /* MariaDBMapper.checkTableForMessage */
+--         SELECT 1 FROM MUNJAON_MSG WHERE 1=1 LIMIT 1
+        <![CDATA[
+        SELECT COUNT(MSG_ID) FROM MUNJAON_MSG WHERE 1=1 AND rownum <= 1
+        ]]>
+    </select>
+    <select id="checkTableForLog" resultType="int">
+        /* MariaDBMapper.checkTableForLog */
+        <![CDATA[
+        SELECT COUNT(MSG_ID) FROM MUNJAON_MSG_LOG WHERE 1=1 AND rownum <= 1
+        ]]>
+    </select>
+    <select id="selectToDeliver" resultType="com.munjaon.client.model.MunjaonMsg">
+        /* MariaDBMapper.selectToDeliver */
+        <![CDATA[
+        SELECT
+            MSG_ID
+            , MSG_TYPE
+            , TO_CHAR(REQUEST_DATE,'YYYYMMDDHH24MISS') RESERVE_DATE
+            , TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') REQUEST_DATE
+            , RECV_PHONE
+            , SEND_PHONE
+            , SUBJECT
+            , MESSAGE
+            , FILENAME01
+            , FILENAME02
+            , FILENAME03
+            , KAKAO_SENDER_KEY
+            , KAKAO_TEMPLATE_CODE
+            , KAKAO_JSON_FILE
+        FROM MUNJAON_MSG
+        WHERE SEND_STATUS = '0'
+            AND MSG_TYPE = #{msgType}
+            AND REQUEST_DATE <= SYSDATE
+            AND ROWNUM <= 100
+        ORDER BY REQUEST_DATE ASC
+        ]]>
+    </select>
+    <update id="updateToDeliver">
+        /* MariaDBMapper.updateToDeliver */
+        UPDATE MUNJAON_MSG SET
+            SEND_STATUS = '1'
+            , DELIVER_DATE = SYSDATE
+        WHERE MSG_ID = #{msgId}
+    </update>
+    <update id="updateToReport">
+        /* MariaDBMapper.updateToReport */
+        UPDATE MUNJAON_MSG SET
+            SEND_STATUS = #{sendStatus}
+            , SENT_DATE = TO_DATE(#{sendDate}, 'YYYYMMDDHH24MISS')
+            , REPORT_DATE = SYSDATE
+            , TELECOM = #{telecom}
+        WHERE MSG_ID = #{msgId}
+    </update>
+    <select id="selectToMove" resultType="com.munjaon.client.model.MunjaonMsg">
+        /* MariaDBMapper.selectToMove */
+        <![CDATA[
+        SELECT MSG_ID, TO_CHAR(REQUEST_DATE, 'YYYYMM') REQUEST_DATE
+        FROM MUNJAON_MSG
+        WHERE SEND_STATUS NOT IN ('0', '1')
+            AND ROWNUM <= 100
+        ]]>
+    </select>
+    <select id="selectToExpire" resultType="com.munjaon.client.model.MunjaonMsg">
+        /* MariaDBMapper.selectToExpire */
+        <![CDATA[
+            SELECT MSG_ID, TO_CHAR(REQUEST_DATE, 'YYYYMM') REQUEST_DATE
+            FROM MUNJAON_MSG
+            WHERE REQUEST_DATE < TO_DATE(#{expireTime}, 'YYYYMMDDHH24MISS')
+                AND SEND_STATUS = '1'
+                AND ROWNUM <= 100
+        ]]>
+    </select>
+    <insert id="insertToLog">
+        /* MariaDBMapper.insertToLog */
+        INSERT INTO MUNJAON_MSG_LOG
+        (
+            MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
+            RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
+            FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
+        )
+        SELECT
+            MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
+            RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
+            FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
+        FROM MUNJAON_MSG
+        WHERE MSG_ID = #{msgId}
+    </insert>
+    <delete id="deleteFromDeliver">
+        /* MariaDBMapper.deleteFromDeliver */
+        DELETE FROM MUNJAON_MSG
+        WHERE MSG_ID = #{msgId}
+    </delete>
+</mapper>(No newline at end of file)
 
src/main/resources/sqlmap/postgresql/postresql_sql.xml (added)
+++ src/main/resources/sqlmap/postgresql/postresql_sql.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.munjaon.client.postgresql.mapper.PostgresqlMapper">
+    <select id="checkTime" resultType="String">
+        /* MariaDBMapper.checkTime */
+        SELECT TO_CHAR(NOW(), 'YYYYMMDDHH24MISS') FROM DUAL
+    </select>
+    <select id="checkTableForMessage" resultType="int">
+        /* MariaDBMapper.checkTableForMessage */
+        SELECT COUNT(MSG_ID) FROM MUNJAON_MSG WHERE 1=1 LIMIT 1
+    </select>
+    <select id="checkTableForLog" resultType="int">
+        /* MariaDBMapper.checkTableForLog */
+        SELECT COUNT(MSG_ID) FROM MUNJAON_MSG_LOG WHERE 1=1 LIMIT 1
+    </select>
+    <select id="selectToDeliver" resultType="com.munjaon.client.model.MunjaonMsg">
+        /* MariaDBMapper.selectToDeliver */
+        <![CDATA[
+        SELECT
+            MSG_ID
+            , MSG_TYPE
+            , TO_CHAR(REQUEST_DATE,'YYYYMMDDHH24MISS') RESERVE_DATE
+            , TO_CHAR(NOW(),'YYYYMMDDHH24MISS') REQUEST_DATE
+            , RECV_PHONE
+            , SEND_PHONE
+            , SUBJECT
+            , MESSAGE
+            , FILENAME01
+            , FILENAME02
+            , FILENAME03
+            , KAKAO_SENDER_KEY
+            , KAKAO_TEMPLATE_CODE
+            , KAKAO_JSON_FILE
+        FROM MUNJAON_MSG
+        WHERE SEND_STATUS = '0'
+            AND MSG_TYPE = #{msgType}
+            AND REQUEST_DATE <= NOW()
+        ORDER BY REQUEST_DATE ASC
+            LIMIT 100
+        ]]>
+    </select>
+    <update id="updateToDeliver">
+        /* MariaDBMapper.updateToDeliver */
+        UPDATE MUNJAON_MSG SET
+            SEND_STATUS = '1'
+            , DELIVER_DATE = NOW()
+        WHERE MSG_ID = #{msgId}
+    </update>
+    <update id="updateToReport">
+        /* MariaDBMapper.updateToReport */
+        UPDATE MUNJAON_MSG SET
+            SEND_STATUS = #{sendStatus}
+            , SENT_DATE = TO_DATE(#{sendDate}, 'YYYYMMDDHH24MISS')
+            , REPORT_DATE = SYSDATE
+            , TELECOM = #{telecom}
+        WHERE MSG_ID = #{msgId}
+    </update>
+    <select id="selectToMove" resultType="com.munjaon.client.model.MunjaonMsg">
+        /* MariaDBMapper.selectToMove */
+        <![CDATA[
+        SELECT MSG_ID, TO_CHAR(REQUEST_DATE, 'YYYYMM') REQUEST_DATE
+        FROM MUNJAON_MSG
+        WHERE SEND_STATUS NOT IN ('0', '1')
+            LIMIT 100
+        ]]>
+    </select>
+    <select id="selectToExpire" resultType="com.munjaon.client.model.MunjaonMsg">
+        /* MariaDBMapper.selectToExpire */
+        <![CDATA[
+            SELECT MSG_ID, TO_CHAR(REQUEST_DATE, 'YYYYMM') REQUEST_DATE
+            FROM MUNJAON_MSG
+            WHERE REQUEST_DATE < TO_DATE(#{expireTime}, 'YYYYMMDDHH24MISS')
+                AND SEND_STATUS = '1'
+                LIMIT 100
+        ]]>
+    </select>
+    <insert id="insertToLog">
+        /* MariaDBMapper.insertToLog */
+        INSERT INTO MUNJAON_MSG_LOG
+        (
+            MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
+            RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
+            FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
+        )
+        SELECT
+            MSG_ID, MSG_TYPE, SEND_STATUS, REQUEST_DATE,
+            RECV_PHONE, SEND_PHONE, SUBJECT, MESSAGE, TELECOM,
+            FILENAME01, FILENAME02, FILENAME03, DELIVER_DATE, SENT_DATE, REPORT_DATE
+        FROM MUNJAON_MSG
+        WHERE MSG_ID = #{msgId}
+    </insert>
+    <delete id="deleteFromDeliver">
+        /* MariaDBMapper.deleteFromDeliver */
+        DELETE FROM MUNJAON_MSG
+        WHERE MSG_ID = #{msgId}
+    </delete>
+</mapper>(No newline at end of file)
 
src/test/java/com/munjaon/client/MunjaonClientApplicationTests.java (deleted)
--- src/test/java/com/munjaon/client/MunjaonClientApplicationTests.java
@@ -1,13 +0,0 @@
-package com.munjaon.client;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class MunjaonClientApplicationTests {
-
-    @Test
-    void contextLoads() {
-    }
-
-}
Add a comment
List