๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
HTTP 1.1 VS HTTP2.0/Capstone design

HTTP2 Json ๋กœ๊ทธ์˜ ํŒŒ์ผ ๊ตฌ์กฐ / json parsing ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์งœ๊ธฐ

by ๋„์บ๋ฆฌ๐Ÿฑ 2021. 6. 11.
๋ฐ˜์‘ํ˜•

์•„์ฃผ ๊ธด ๋„คํŠธ์›Œํฌ ๋กœ๊ทธ ์ด์ง€๋งŒ ๊ฐ„๋‹จํ•œ ๊ตฌ์กฐ๋ฅผ ์‚ดํŽด๋ณด๋‹ˆ,  ์•„๋ž˜์™€ ๊ฐ™์•˜๋‹ค.

params์˜ ์ •๋ณด๋“ค์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ๊ฝค ์žˆ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ํ•ด๋‹น ๊ฐ’์˜ ๋‚ด๋ถ€์— ์ ‘๊ทผ ์‹œ์—๋Š” "try~ except~" ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ์—ˆ๋‹ค. 

{

"constants" : {},

"events": {[
 	{ 
    	"params": {}   
        "phase": 
        "source": {
                "id": 
                "start_time": 
                "type":
         },
         "time": 
         "type":
     } , {} ,{} ,{} ,{}
]},

"polledData":{}

 

 

์ฒซ๋ฒˆ์งธ "constants"

: "constants" Key๊ฐ’์˜ Value๊ฐ’์€ ์•„๋ž˜ ์‚ฌ์ง„ ๊ฐ™์€ ํ‚ค๊ฐ’์œผ๋กœ ๋ถ„๋ฅ˜๋˜์–ด ์žˆ์—ˆ๊ณ ,

value๊ฐ’์ธ int ๋กœ ์•„๋ž˜์— ๊ธฐ๋ก ๋˜๋Š” ๋ถ€๋ถ„์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์›ํ•˜๋Š” ๊ฐ’์— ๋Œ€ํ•ด์„œ๋งŒ ํ™•์ธ์„ ํ•ด๋‘์—ˆ๋‹ค.

์–ธ์ œ๋“ ์ง€ ์•„๋ž˜์—์„œ ๋ชจ๋ฅด๋Š” ์ˆซ์ž ์ฝ”๋“œ๊ฐ€ ์žˆ์œผ๋ฉด VSCode ์—์„œ๋Š” (โŒ˜ + G) ๋กœ ํ•ด๋‹น ์ˆซ์ž ์ฝ”๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ๋ฌด์—‡์„ ๋œปํ•˜๋Š”์ง€ ์ฐพ์•„๋ณด๋ฉด ์ˆ˜์›”ํ•ด์ง„๋‹ค.

"constants"์˜ value ๋“ค

 

๋‘๋ฒˆ์งธ "events"

: events๋ผ๋Š” ํ‚ค ์•ˆ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋“ค์–ด๊ฐ€์žˆ๊ณ , 

params ํƒœ๊ทธ๊ฐ€ ์•„์˜ˆ ์—†๋Š” ๊ฒฝ์šฐ ๋„ ์žˆ๋‹ค. ๋˜ํ•œ params์•ˆ์— ๊ฐ’๋“ค์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. (์•„๋ž˜์— ์ฝ”๋“œ ์ฒจ๋ถ€)

์ด ๋ถ€๋ถ„์— ์›ํ•˜๋Š” ์ •๋ณด๊ฐ€ ๋ชจ๋‘ ์žˆ๋‹ค. 

"events" ์•ˆ์— ๋“ค์–ด ์žˆ๋Š”  [ {}, {}, {}]
๋‹ค์–‘ํ•˜๊ฒŒ ์ƒ๊ธด params ์˜ ํ˜•ํƒœ

 

์„ธ๋ฒˆ์งธ  "polledData" 

: ๋ผ๋Š” ํ‚ค ์•ˆ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋“ค์–ด๊ฐ€์žˆ๋‹ค.

polledData ์˜ value

 


๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๊ณ  ์žˆ๋Š” ์„œ๋น„์Šค์—์„œ ์šฐ๋ฆฌ๋Š” ์›ํ•˜๋Š” ํ˜ธ์ŠคํŠธ ๊ฐ’์„ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. ( ์˜ˆ: "dojii.shop" )

json ํŒŒ์ผ์„ ๋ณด๋‹ˆ ํ•ด๋‹น ํ˜ธ์ŠคํŠธ ์ฃผ์†Œ ๊ฐ’๋งˆ๋‹ค source_id ๋กœ ๊ตฌ๋ถ„๋˜์–ด์„œ "events" ๋ถ€๋ถ„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


HTTP2_SESSION_SEND_HEADERS ์— ๋Œ€ํ•œ ์ •๋ณด์˜ ์‹œ๊ฐ„์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค.

"HTTP2_SESSION_SEND_HEADERS": 188,

๊ทธ๋ฆฌ๊ณ , HTTP2_SESSION_RECV_DATA --> fin = true ์— ๋Œ€ํ•œ ์ •๋ณด์˜ ์‹œ๊ฐ„์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค.

"HTTP2_SESSION_RECV_DATA": 205,

 

๊ฐ™์€ host ๋„ค์ž„์ผ ์‹œ์—, source์—์„œ id๊ฐ€ 323457๋กœ ๊ฐ™๋‹ค. 

 


๐Ÿค” ๊ฒฐ๋ก ์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์งœ์•ผ ํ• ๊นŒ? 

1. ์‚ฌ์šฉ์ž์—๊ฒŒ ํ˜ธ์ŠคํŠธ ๋ช…(dojii.shop)์„ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. 

2. json ์—์„œ ๋ชจ๋“  ์ด๋ฒคํŠธ ์š”์†Œ๋ฅผ ์‚ดํŽด ๋ณด๋Š”๋ฐ, ํ˜ธ์ŠคํŠธ๋ช…์ด ๋‚˜์˜ค๋ฉด ํ•ด๋‹น source์˜ id ๊ฐ’์„ ์ €์žฅํ•ด ๋‘”๋‹ค.

3. ์ €์žฅํ•œ ์ดํ›„ ๋ถ€ํ„ฐ๋Š” source id๊ฐ€ 323457 ์ธ ๊ฒƒ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

4. ๊ทธ ์ดํ›„ ์—๋Š” source id ๊ฐ€ 323457 ์ธ๋ฐ, params ์˜ fin ์ด true ์ธ ๊ฒƒ์„ ํ™•์ธํ•œ๋‹ค.

5.  start_time ๊ณผ "time" ์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ์žˆ๋‹ค. ์ด ์ฐจ๊ฐ€ st ๊ฐ’์ด๋ฏ€๋กœ ํ•ด๋‹น ๋‘๊ฐ€์ง€ ๊ฐ’์˜ ์ฐจ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.

6.  ๊ฐ€์žฅ ์ž์ค‘์— ๋‚˜์˜จ 6๋ฒˆ๊ฐ’์ด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์š”์†Œ์— ๋Œ€ํ•ด ๋ฐ›์€ ๊ฐ’์ด๋ฏ€๋กœ ๋๋‚ ๋•Œ๊นŒ์ง€ ๊ฐฑ์‹ ํ•œ๋‹ค.

7.  (์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ) first_sent ๋Š” 542113910 , last_sent๋Š” 542113918 ์œผ๋กœ ์ฐจ๊ฐ’์€ 8์ด๋‹ค.

8. DB ๋‚ด์— 3๊ฐ€์ง€ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ๋‹ด๋Š”๋‹ค. 

9. ๊ทธ๋ž˜ํ”„์˜ ๊ฐ’์œผ๋กœ๋Š” 8 ๊ฐ’์„ ๋‹ด๋Š”๋‹ค.


๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป ์ง  ์•Œ๊ณ ๋ฆฌ์ฆ˜

: ์žฅ๊ณ ์™€ ์—ฐ๊ฒฐํ•ด์ค˜์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ ๋นผ๊ณ , ๋™์ž‘๋ฐฉ์‹๋งŒ ๊ตฌํ˜„ํ•œ ๋ถ€๋ถ„์ด๋‹ค. (์œ„์˜ 2๋ฒˆ~ 7๋ฒˆ)

# polledData ์— ์žˆ๋Š” SpdySessionInfo ์—์„œ ํ•ด๋‹น source_id ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.

import json 

user_input_host = "dojii.shop" # ์žฅ๊ณ  ๊ฐ’์—์„œ ๊ฐ€์ ธ์™€์•ผํ•จ
user_host_id = 0 # temp ๊ฐ’
result_send = 0
result_recv = 0
result_diff = 0

'''ํŒŒ์ผ์—์„œ ํ•ด๋‹น url ์— ๋Œ€ํ•œ '''
with open('/Users/dojiyeong/Desktop/capstone/http2/http_2.0_imgS_1.json','r') as f:
    json_data = json.load(f)
    
# ์›ํ•˜๋Š” ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•ด์„œ source_id ๊ตฌํ•˜๊ธฐ
for data in json_data['polledData']['spdySessionInfo']:
    if(user_input_host in data['host_port_pair']):
        user_host_id = data['source_id']
        # print(data['source_id'])
        
# 205 == HTTP2_SESSION_RECV_DATA, 188 == HTTP2_SESSION_SEND_HEADERS
for data in json_data['events']:
    try:
        temp_param = data['params']
        temp_source = data['source']
        temp_type = data['type']
        temp_time = data['time']
        
        if(temp_source['id'] == user_host_id):
            if(temp_type == 205):
                if (temp_param['fin'] == True):
                    start = int(temp_source['start_time'])
                    last = int(temp_time)
                    diff = last - start
                    
                    result_send = start
                    result_recv = last
                    result_diff = diff
 
    except:
        pass

print("first_send : "+ str(result_send))
print("last recv : " + str(result_recv))
print("result time : " + str(result_diff))
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€