diff --git a/Server_CoAP/CoAPthon3/coapserver.py b/Server_CoAP/CoAPthon3/coapserver.py
index 86cac8a02db4c751112e28f76bd2159da917678f..373183afc4ffa7ad5622999ce4fb6228e20d9591 100644
--- a/Server_CoAP/CoAPthon3/coapserver.py
+++ b/Server_CoAP/CoAPthon3/coapserver.py
@@ -1,7 +1,8 @@
 #!/usr/bin/env python
-
 import getopt
 import sys
+import threading
+import _thread
 from coapthon.server.coap import CoAP
 from exampleresources import BleInfoResource, RasbpNodeInfoResource, RasbpGraphInfoResource
 
@@ -16,6 +17,10 @@ class CoAPServer(CoAP):
         print(("CoAP Server start on " + host + ":" + str(port)))
         print((self.root.dump()))
 
+    def updateUserLocation(self):
+        
+        pass
+
 
 def usage():  # pragma: no cover
     print("coapserver.py -i <ip address> -p <port>")
@@ -43,7 +48,10 @@ def main(argv):  # pragma: no cover
 
     server = CoAPServer(ip, port, multicast)
     try:
+        updateUserLocationThread = threading.Thread(target = server.updateUserLocation)
+        updateUserLocationThread.start()
         server.listen(10)
+
     except KeyboardInterrupt:
         print("Server Shutdown")
         server.close()
diff --git a/Server_CoAP/CoAPthon3/exampleresources.py b/Server_CoAP/CoAPthon3/exampleresources.py
index dd9dc62ad7c5f6c2471c8058f477b5c48eb8c593..cffc127728f3e74371313766ad8ea857673ff30e 100644
--- a/Server_CoAP/CoAPthon3/exampleresources.py
+++ b/Server_CoAP/CoAPthon3/exampleresources.py
@@ -4,7 +4,6 @@ from pymongo import MongoClient
 from coapthon import defines
 from coapthon.resources.resource import Resource
 
-
 class RasbpNodeInfoResource(Resource):
     def __init__(self, name="RasbpNodeInfo"):
         super(RasbpNodeInfoResource, self).__init__(name)
@@ -20,7 +19,11 @@ class RasbpNodeInfoResource(Resource):
         self.payload = request.payload
         from coapthon.messages.response import Response
         assert(isinstance(response, Response))
-        response.payload = self.postRasbpNodeInfoInDB(self.payload)
+        self.payload = json.loads(self.payload)
+        if self.payload['option'] == 1:
+            self.calculateNodePosition(sefl.payload)
+        else :
+            response.payload = self.postRasbpNodeInfoInDB(self.payload)
         response.code = defines.Codes.CREATED.number
         return self, response
 
@@ -28,21 +31,23 @@ class RasbpNodeInfoResource(Resource):
         self.payload = request.payload
         from coapthon.messages.response import Response
         assert(isinstance(response, Response))
-        response.payload = self.postRasbpNodeInfoInDB(self.payload)
+        self.payload = json.loads(self.payload)
+        if self.payload['option'] == 1:
+            self.calculateNodePosition(self.payload)
+        else :
+            response.payload = self.postRasbpNodeInfoInDB(self.payload)
         response.code = defines.Codes.CHANGED.number
         return self, response
 
-
     def postRasbpNodeInfoInDB(self, info):
-        info = info.decode('ascii')
+        info = info['myMAC']
         self.collection.delete_many({ 'rasbpMAC' : info })
         ruuid = "52528282"+str(uuid.uuid4())[8:]
+        ruuid = ruuid.replace("-","")
         if self.collection.count() == 0:
             payload = {
                 'rasbpMAC' : info,
-                'uuid' : ruuid,
-                'x' : '0',
-                'y' : '0'
+                'uuid' : ruuid
             }
             self.collection.insert_one(payload)
 
@@ -54,27 +59,34 @@ class RasbpNodeInfoResource(Resource):
             payload = {
                 'rasbpMAC' : info,
                 'uuid' : ruuid,
-                'x' : '-1',
-                'y' : '-1'
             }
             self.collection.insert_one(payload)
 
             response = json.dumps({
-                'uuid' : str(ruuid),
+                'uuid' : ruuid,
                 'operate' : 1
             })
-
-
-        # else :
-        #     mydocList = list(mydoc)
-        #     if mydocList[0]['operation'] != '1':
-        #         self.collection.update_one(mydocList[0], { "$set" : {"operation" : '1'}})
-        #         response = "re-operate"
-        #     else :
-        #         response = "already operate"
-
         return response
 
+    def calculateNodePosition(self, info):
+        print("Start calculateNodePosition")
+        info = info['myuuid']
+        graphColletion = self.db.RasbpGraphData
+        mydoc = self.collection.find({'uuid': info})
+            if mydoc.count() == 1:
+                if self.collection.count() == 1:
+                    pass
+                else if self.collection.count() == 2:
+                    pass
+                else if self.collection.count() == 3:
+                    pass
+                else:
+                    pass
+
+            else :
+                print("This is not registered Node")
+        
+
 class RasbpGraphInfoResource(Resource):
     def __init__(self, name="RasbpGraphInfo"):
         super(RasbpGraphInfoResource, self).__init__(name)
@@ -115,13 +127,27 @@ class RasbpGraphInfoResource(Resource):
         return True, response
 
     def postRasbpGraphInfoInDB(self, info):
-        """
         info = json.loads(info)
-        mydoc = self.collection.find({ 'v1' : info['v1'], 'v2' : info['v2'] })
-            if mydoc.count() == 0:
-                mydoc = self.collection.find({ 'v1' : info['v2'], 'v2' : info['v1']})
-        """
-        pass
+        mydoc = self.collection.find({'v1':info['v1'], 'v2':info['v2']})
+        if mydoc.count() > 0:
+            distance = (mydoc[0]['sum']+info['distance']) / (mydoc[0]['count'] + 1)
+
+            self.collection.update({ 'v1' : info['v1'], 'v2':info['v2']}, {
+                'v1':info['v1'], 
+                'v2': info['v2'],
+                'distance' : distance,
+                'sum': mydoc[0]['sum']+float(info['distance']),
+                'count': mydoc[0]['count']+1
+                }, upsert=True)
+
+        if mydoc.count() == 0:
+            self.collection.update({ 'v1' : info['v1'], 'v2':info['v2']}, {
+                'v1':info['v1'], 
+                'v2': info['v2'],
+                'distance' : float(info['distance']),
+                'sum': float(info['distance']),
+                'count': 1
+                }, upsert=True)
 
 class BleInfoResource(Resource):
     def __init__(self, name="BleInfo"):
@@ -164,8 +190,4 @@ class BleInfoResource(Resource):
         return True, response
 
     def postBLEInfoInDB(self, payload):
-        j = json.loads(payload)
-
-        for i in j:
-            self.collection
         self.collection.insert_many(json.loads(payload))
diff --git a/Server_Vue_Express/backend/models/tracking.js b/Server_Vue_Express/backend/models/tracking.js
new file mode 100644
index 0000000000000000000000000000000000000000..3d74d63da317633222d0d66c05b94d0117ee23c7
--- /dev/null
+++ b/Server_Vue_Express/backend/models/tracking.js
@@ -0,0 +1,16 @@
+var mongoose = require('mongoose');
+const Schema = mongoose.Schema;
+ 
+const trackingSchema = new Schema({
+    rasbpID: { type: String, default: ""  },
+    uuid: { type: String, default: ""  },
+    distance: { type: Number, default: 0  },
+    updateTime : { type: Number, default: 0  }
+}, { collection : 'TrackingData', // 컬렉션명 지정 
+    versionKey : false, // "__v" 필드 생성X 
+    strict : false }
+);
+ 
+
+//users collection
+module.exports = mongoose.model('TrackingData', trackingSchema);
\ No newline at end of file
diff --git a/Server_Vue_Express/backend/routes/api.js b/Server_Vue_Express/backend/routes/api.js
index 4d0ec53047392f78ddca626d296e1325c1b70b96..054519273c6480c7e1e7ca61d71317b654467e8d 100644
--- a/Server_Vue_Express/backend/routes/api.js
+++ b/Server_Vue_Express/backend/routes/api.js
@@ -2,7 +2,7 @@ var express = require('express');
 var router = express.Router();
 var uuidv1 = require('uuid/v1');
 var User = require('../models/users');
-
+var Tracking = require('../models/tracking');
 
 /*
 var User = require('../models/users');
@@ -50,13 +50,25 @@ router.post('/DeleteUser', function(req, res) {
     // ( SINCE DELETE OPERATION IS IDEMPOTENT, NO NEED TO SPECIFY )
     //if(!output.result.n) return res.status(404).json({ error: "user not found" });
     //res.json({ message: "user deleted" });
-    
-
     res.json({message: output, res : req.body});
   })
 });
 
 
+router.post('/findByUUID', function(req, res) {
+  uuid  = req.body.uuid
+  
+  Tracking.find({uuid:req.body.uuid}, function(err, output){
+    if(err) return res.status(500).json({ error: "database failure" });
+
+    // ( SINCE DELETE OPERATION IS IDEMPOTENT, NO NEED TO SPECIFY )
+    //if(!output.result.n) return res.status(404).json({ error: "user not found" });
+    //res.json({ message: "user deleted" });
+
+    res.json({message: output, res : req.body});
+  })
+});
+
 router.post('/', function(req, res, next) {
   console.log(req.body)
   res.render('index', { title: 'Express' });