diff --git a/Dockerfile b/Dockerfile
index 6a46a0d8bcb62b0b418a2da0fa8eab95fda381c9..8739ce67d61cb068f53df2813adcca7e66020cd2 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -9,5 +9,8 @@ COPY . /var/www/html
 # Expose port 80 for the web server
 EXPOSE 80
 
+# Install mysqli dependency
+RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
+
 # Start Apache in the foreground
 CMD ["apache2-foreground"]
diff --git a/client/js/cart.js b/client/js/cart.js
index 30454e6413c7872dabd19f00d72d0ff8b606ce54..75f32df1b7a2fd2525fc99752d2699c9fcdfc41b 100644
--- a/client/js/cart.js
+++ b/client/js/cart.js
@@ -42,24 +42,22 @@ cartList = () => {
 
 submitCheckout = () => {
     // send cartDataArray back as post method
-    const cartData = new FormData();
-    cartData.append("data", cartDataArray);
     const xhr = new XMLHttpRequest();
     xhr.open('POST', '../../server/controllers/transaction.php', true);
-    xhr.send(cartData);
+    xhr.send();
     xhr.onreadystatechange = function () {
         if (xhr.readyState === 4 && xhr.status === 200) {
             try {
                 // Process the response data here
                 var responseData = JSON.parse(xhr.responseText);
                 if (responseData.success) {
-                    alert("Check out success")
-                    location.reload();
+                    alert("transaction success");
+                    location.href = "catalog.php";
                 } else {
-                    alert("error: " + responseData.message)
+
                 }
             } catch (error) {
-                alert(error)
+
             }
         } else if (xhr.status === 404) {
             var responseData = JSON.parse(xhr.responseText);
diff --git a/client/js/catalog.js b/client/js/catalog.js
index 6ae7e2325be0cdca0b829f5c6dd9ded1e1389dea..1044e5c8a85c3849a8e7d44f70f0aff7b56cd32f 100644
--- a/client/js/catalog.js
+++ b/client/js/catalog.js
@@ -1,37 +1,35 @@
 var activePage;
 
 //Promise is to syncronize asyncronous process
-const input = document.getElementById("Searchinput");
-var myPromises = new Promise(function(resolve, reject){
-    const formdata = new FormData();
-    try {
+try{
+    const input = document.getElementById("Searchinput");
+    var myPromises = new Promise(function(resolve, reject){
+        const formdata = new FormData();
         formdata.append('search', document.getElementById("Searchinput").value);
-    } catch (error) {
-        
-    }
-    // console.log(input.value);
-    
-    const xhr = new XMLHttpRequest();
-    xhr.open('GET', '../../server/controllers/catalog.php', true);
-    xhr.send(formdata);
-    xhr.onreadystatechange = function(){
-        if (xhr.readyState === 4 && xhr.status === 200){
-            var responseData = JSON.parse(xhr.responseText);
-            if (responseData.success){
-                //if expected process occur during promise get the expected value
-                resolve(Math.ceil(responseData.total[0]/10));
-            } else {
-                alert("error: " + responseData.message);
-                //unexpected process occur during promise
+        const xhr = new XMLHttpRequest();
+        xhr.open('GET', '../../server/controllers/catalog.php', true);
+        xhr.send(formdata);
+        xhr.onreadystatechange = function(){
+            if (xhr.readyState === 4 && xhr.status === 200){
+                var responseData = JSON.parse(xhr.responseText);
+                if (responseData.success){
+                    //if expected process occur during promise get the expected value
+                    resolve(Math.ceil(responseData.total[0]/10));
+                } else {
+                    alert("error: " + responseData.message);
+                    //unexpected process occur during promise
+                    reject("error");
+                }
+            } else if (xhr.status === 404){
+                var response = JSON.parse(xhr.responseText);
+                console.log(response.message);
                 reject("error");
             }
-        } else if (xhr.status === 404){
-            var response = JSON.parse(xhr.responseText);
-            console.log(response.message);
-            reject("error");
         }
-    }
-});
+    });
+} catch (error){
+    
+}
 
 var numPages;
 //get the value of promise
diff --git a/client/pages/login-page.php b/client/pages/login-page.php
index 01640a232edc94ac7c02420f6a5178d98a9d0a71..ff9d1999c5f52db458da8c7e0e3b6a3e51f06751 100644
--- a/client/pages/login-page.php
+++ b/client/pages/login-page.php
@@ -19,10 +19,9 @@
     <link rel="stylesheet" href="../css/navbar.css">
     <script src="https://kit.fontawesome.com/8505941c5b.js" crossorigin="anonymous"></script>
     <script src="../js/navbar.js"></script>
-
 </head>
 <body>
-<div class="container">
+    <div class="container">
     <img class="icon" src="../image/logoregis.svg" width="58%" height="26%">
     <div class="form-box">
         <h1 id="title">SIGN UP</h1>
diff --git a/docker-compose.yml b/docker-compose.yml
index b7827be1723cd92bacf31c2ec5aeaa5aab8db987..8a7bb0ce1f8a8b834bcf8bc6f93b37799eb79fcd 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -7,5 +7,5 @@ services:
     ports:
       - 8008:80
     environment:
-      DB_URL: mysql://db-php-app/saranghaengbok_php
+      DB_HOST: db-php-app
   
diff --git a/server/controllers/connect_database.php b/server/controllers/connect_database.php
index 7a7f49b2ddfff508b3823c52951bcff4f98afb20..d64c7ea6c180986dedf7b5daa74dab664dd9a96c 100644
--- a/server/controllers/connect_database.php
+++ b/server/controllers/connect_database.php
@@ -1,7 +1,7 @@
 <?php
     function connect_database(){
     // Create a connection
-    $conn = new mysqli('db-php-app', 'saranghaengbok_db_admin', 'BOOMbitchgetouttheway', 'saranghaengbok_php');
+    $conn = new mysqli('db-php-app', 'root', 'admin', 'saranghaengbok_php');
 
     // Check connection
     if ($conn->connect_error) {
diff --git a/server/controllers/transaction.php b/server/controllers/transaction.php
index 69007d508c2f05fcc64662cfad92748a7b8bc7bc..c7b12e6a851689f69aedd6cef0c0e5bede9fbef7 100644
--- a/server/controllers/transaction.php
+++ b/server/controllers/transaction.php
@@ -1,3 +1,38 @@
 <?php
-    
+    session_start();
+    require_once "connect_database.php";
+    require_once "../model/transaction.php";
+
+    if ($_SERVER["REQUEST_METHOD"] == "POST"){
+        $username = $_SESSION["username"];
+        $conn = connect_database();
+
+        $query = "SELECT `c`.`cart_username`, `i`.`seller_username`,
+                         `c`.`item_id`, `c`.`item_quantity` 
+                         FROM `cart` AS `c` JOIN `item` AS `i`
+                         ON `c`.`item_id`=`i`.`item_id`
+                         WHERE `c`.`cart_username` = (?)";
+        $stmt = $conn->prepare($query);
+        if (!$stmt) {
+            die("Error in query preparation". $conn->error);
+        }
+
+        $stmt->bind_param("s", $username);
+        $result = $stmt->execute();
+        $resultSet = $stmt->get_result();
+        $data_request = $resultSet->fetch_all(MYSQLI_ASSOC);
+
+        $transaction = new Transaction($data_request);
+        
+        $data_response = $transaction->createTransaction();
+
+        if (!$result) {
+            $response = array("success" => "false", "message" => $stmt->error);
+            die ("Error in query execution: " . $stmt->error);
+        } else {
+            $response = array("success" => "true", "message" => $data_response);
+        }
+        echo json_encode($response);
+        mysqli_close($conn);
+    }
 ?>
\ No newline at end of file
diff --git a/server/controllers/update_profile.php b/server/controllers/update_profile.php
index e2ebe564206327e2fddb8c035fa9ef2e0e71f638..6c8c7ba04b3d069ba795fe3c4f947349f95d8ebb 100644
--- a/server/controllers/update_profile.php
+++ b/server/controllers/update_profile.php
@@ -1,9 +1,9 @@
 <?php
     session_start();
     require_once "connect_database.php";
-    global $username_current; $username_current = $_SESSION["username"];
-    global $email_current; $email_current = $_SESSION["email"];
-    global $conn; $conn = connect_database();
+    $username_current = $_SESSION["username"];
+    $email_current = $_SESSION["email"];
+    $conn = connect_database();
     function username_query($param){
         global $conn;
         $query = "SELECT * FROM user WHERE username = ?";
@@ -24,7 +24,9 @@
     }
 
     function update_profile($target_username, $target_email, $target_password){
-        global $conn; global $username_current;
+        global $conn;
+        global $username_current;
+        global $email_current;
         $query = "UPDATE user SET username = ?, email = ?, `password` = ? WHERE `username` = ?";
         //handling if user doesnt want to change some of the column
         if ($target_username == '%') {
diff --git a/server/models/csv/Item (1).csv b/server/data/csv/Item (1).csv
similarity index 100%
rename from server/models/csv/Item (1).csv
rename to server/data/csv/Item (1).csv
diff --git a/server/models/csv/Item (10).csv b/server/data/csv/Item (10).csv
similarity index 100%
rename from server/models/csv/Item (10).csv
rename to server/data/csv/Item (10).csv
diff --git a/server/models/csv/Item (2).csv b/server/data/csv/Item (2).csv
similarity index 100%
rename from server/models/csv/Item (2).csv
rename to server/data/csv/Item (2).csv
diff --git a/server/models/csv/Item (3).csv b/server/data/csv/Item (3).csv
similarity index 100%
rename from server/models/csv/Item (3).csv
rename to server/data/csv/Item (3).csv
diff --git a/server/models/csv/Item (4).csv b/server/data/csv/Item (4).csv
similarity index 100%
rename from server/models/csv/Item (4).csv
rename to server/data/csv/Item (4).csv
diff --git a/server/models/csv/Item (5).csv b/server/data/csv/Item (5).csv
similarity index 100%
rename from server/models/csv/Item (5).csv
rename to server/data/csv/Item (5).csv
diff --git a/server/models/csv/Item (6).csv b/server/data/csv/Item (6).csv
similarity index 100%
rename from server/models/csv/Item (6).csv
rename to server/data/csv/Item (6).csv
diff --git a/server/models/csv/Item (7).csv b/server/data/csv/Item (7).csv
similarity index 100%
rename from server/models/csv/Item (7).csv
rename to server/data/csv/Item (7).csv
diff --git a/server/models/csv/Item (8).csv b/server/data/csv/Item (8).csv
similarity index 100%
rename from server/models/csv/Item (8).csv
rename to server/data/csv/Item (8).csv
diff --git a/server/models/csv/Item (9).csv b/server/data/csv/Item (9).csv
similarity index 100%
rename from server/models/csv/Item (9).csv
rename to server/data/csv/Item (9).csv
diff --git a/server/models/csv/Item.csv b/server/data/csv/Item.csv
similarity index 100%
rename from server/models/csv/Item.csv
rename to server/data/csv/Item.csv
diff --git a/server/models/csv/User.csv b/server/data/csv/User.csv
similarity index 100%
rename from server/models/csv/User.csv
rename to server/data/csv/User.csv
diff --git a/server/models/db+mock.sql b/server/data/db+mock.sql
similarity index 100%
rename from server/models/db+mock.sql
rename to server/data/db+mock.sql
diff --git a/server/models/db.sql b/server/data/db.sql
similarity index 100%
rename from server/models/db.sql
rename to server/data/db.sql
diff --git a/server/models/mock_datas.sql b/server/data/mock_datas.sql
similarity index 100%
rename from server/models/mock_datas.sql
rename to server/data/mock_datas.sql
diff --git a/server/models/mock_datas_for_demo.sql b/server/data/mock_datas_for_demo.sql
similarity index 100%
rename from server/models/mock_datas_for_demo.sql
rename to server/data/mock_datas_for_demo.sql
diff --git a/server/model/transaction.php b/server/model/transaction.php
new file mode 100644
index 0000000000000000000000000000000000000000..0d8029ff8e2d623cc787c7d5f75c2dcd11095b74
--- /dev/null
+++ b/server/model/transaction.php
@@ -0,0 +1,103 @@
+<?php
+    require_once '../controllers/connect_database.php';
+    class Transaction{
+        private $buyer;
+        private $seller;
+        private $list_item_id;
+        private $list_quantity;
+        private $conn;
+
+        public function __construct($data){
+            $this->buyer = $data[0]["cart_username"];
+            $this->seller = "";
+            $this->list_item_id = "";
+            $this->list_quantity = "";
+            for ($i=0; $i < count($data); $i++) {
+                $this->seller .= $data[$i]["seller_username"]; 
+                $this->list_item_id .= $data[$i]["item_id"];
+                $this->list_quantity .= $data[$i]["item_quantity"];
+                if ($i < count($data)-1){
+                    $this->seller .= ",";        
+                    $this->list_item_id .= ",";
+                    $this->list_quantity .= ",";
+                }
+            }
+        }
+        
+        public function createTransaction(){
+            $this->conn = connect_database();
+            $query1 = "DELETE FROM `cart` WHERE `cart_username` = (?)";
+            $stmt1 = $this->conn->prepare($query1);
+            if (!$stmt1) {
+                die("Error in query preparation". $this->conn->error);
+            }
+            $stmt1->bind_param("s", $this->buyer);
+            $stmt1->execute();
+
+            $headers = array(
+                "Content-Type: text/xml;charset=\"utf-8\"",
+                "X-API-Key: php",
+                "Host". $_SERVER['REMOTE_ADDR']
+            );
+    
+            $request_param = '<?xml version="1.0" encoding="utf-8"?>
+            <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+                <soap:Body>
+                    <createTransaction xmlns="http://service.saranghaengbok.org/">
+                        <buyer_username xmlns="http://service.saranghaengbok.org/">'. $this->getBuyer(). '</buyer_username>
+                        <seller_username xmlns="http://service.saranghaengbok.org/">'. $this->getSeller(). '</seller_username>
+                        <item_id xmlns="http://service.saranghaengbok.org/">'. $this->getlistItem(). '</item_id>
+                        <quantity xmlns="http://service.saranghaengbok.org/">'. $this->getlistQuantity(). '</quantity>
+                    </createTransaction>
+                </soap:Body>
+            </soap:Envelope>
+            ';
+    
+            $ch = curl_init();
+            curl_setopt($ch, CURLOPT_POST, true);
+            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+            curl_setopt($ch, CURLOPT_POSTFIELDS, $request_param);
+            curl_setopt($ch, CURLOPT_URL, "http://host.docker.internal:8081/ws/transaction");
+            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+    
+            $response = curl_exec($ch);
+            curl_close($ch);
+            if ($response === FALSE) {
+                printf("CURL error (#%d): %s<br>\n", curl_errno($ch),
+                htmlspecialchars(curl_error($ch)));
+            }
+    
+            $response1 = str_replace('<?xml version="1.0" ?>
+            <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
+                <S:Body>
+                    <ns2:createTransactionResponse xmlns:ns2="http://service.saranghaengbok.org/">
+                        <return>',"",$response);
+            $response2 = str_replace("</return>
+            </ns2:createTransactionResponse>
+        </S:Body>
+    </S:Envelope>","",$response1);
+    
+            $stmt1->close();
+            return $$response2;
+            //init webservice with wsdl
+        }
+
+        public function getBuyer(){
+            return $this->buyer;
+        }
+
+        
+        public function getSeller(){
+            return $this->seller;
+        }
+
+        
+        public function getlistItem(){
+            return $this->list_item_id;
+        }
+
+        public function getlistQuantity(){
+            return $this->list_quantity;
+        }
+    }
+?>
\ No newline at end of file