๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ณด๊ณ ๋“ฃ๊ณ ์ƒ๊ฐํ•˜๊ณ ์ฝ๋Š”๊ฒƒ๋“ค

2020-2021 ๊ฐœ๋ฐœ ํšŒ๊ณ  - ๊ด€์ œ ์‹œ์Šคํ…œ

by ์ด๋…ธํ‚ค_ 2021. 12. 4.

๋“œ๋ก  ๊ด€์ œ ์‹œ์Šคํ…œ

  • C++, qt
  • lib
  1. boost beast : http client
  2. crow : rest api server crow git
  3. nlohman json : json parser nlohman json

ํšŒ์‚ฌ ์ƒํ™œ์„ ํ•˜๋ฉด์„œ ๋งค๋ฒˆ c++๋ฅผ ์œ„์ฃผ๋กœ๋งŒ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค, ์ฒ˜์Œ์œผ๋กœ ์›น ๊ธฐ์ˆ ์„ ์ด์šฉํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค.
๊ด€์ œ ์‹œ์Šคํ…œ์˜ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์— ๋“ค์–ด๊ฐ€๊ธฐ์ „ ์–ด๋–ค ์–ธ์–ด๋กœ ๊ฐœ๋ฐœ์„ ํ• ๊นŒ ๊ณ ๋ฏผ์„ ํ–ˆ์—ˆ๋‹ค.
node, flask, .net, spring ์ด์•ผ๊ธฐ๋ฅผ ํ–ˆ์—ˆ์œผ๋‚˜ ํด๋ผ์ด์–ธํŠธ์ชฝ์—์„œ epoll์„ ์ด์šฉํ•ด๋‹ฌ๋ผ๋Š” ์š”๊ตฌ์‚ฌํ•ญ์ด ์žˆ์—ˆ๋‹ค.
์ง€๊ธˆ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋„ epoll๊ณผ ๋น„์Šทํ•œ ์ˆ˜์ค€์˜ ํ†ต์‹  ๊ธฐ๋ฒ•๋“ค์ด ์กด์žฌํ• ํ…๋ฐ
๋‹น์‹œ์—” '์•„, epoll ์จ๋‹ฌ๋ผ๊ณ  ํ•˜๋‹ˆ c++์„ ์จ์•ผ๊ฒ ๋‹ค.' ์ •๋„ ์ˆ˜์ค€์—์„œ c++๋กœ ๊ฐœ๋ฐœ์„ ์‹œ์ž‘ํ–ˆ๋‹ค.
์–ด์ฐŒ๋ณด๋ฉด ๋‚˜ ๋˜ํ•œ ์›น์—๋Œ€ํ•œ ์ง€์‹์˜ ๋งŽ์ง€ ์•Š์•˜๊ณ , ํŒ€์„ ์ด๋Œ์–ด๊ฐ€์•ผํ•˜๋Š” pl๋„ ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๋งŒ ํ•˜์…จ๋˜ ๋ถ„์ด๋ผ
c++๋กœ ํ•˜๋ฉด ์–ด์ฐŒ์–ด์ฐŒ ๊ฐœ๋ฐœํ•˜์ง€ ์•Š์„๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์ด์—ˆ์ง€ ์•Š์•˜์„๊นŒ.

rest api server, crow

Rest API ์„œ๋ฒ„๋กœ๋Š” ms์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์นด์‚ฌ๋ธ”๋ž‘์นด๋„ ์‚ฌ์šฉํ•ด๋ณด์•˜์ง€๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ—ค๋”ํŒŒ์ผ๋งŒ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” crow๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.
์‚ฌ์šฉ ๋ฐฉ๋ฒ• ๋˜ํ•œ ๊ฐ„๋‹จํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€ ์•Š์•˜๋‹ค.

visual sutdio

08๋…„๋„ ํ•™๋ถ€์ƒํ™œ๋•Œ๋ถ€ํ„ฐ ์šฐ๋ฆฌ์˜ ๋‹จ์ง์ด์—ˆ์„ MS์˜ visual studio.
IDE๋กœ์„œ ํƒ€์˜ ์ถ”์ข…์„ ๋ถˆํ—ˆํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
ํšŒ์‚ฌ๋Š” ํ˜„์žฌ 2017๋…„ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ(์˜ˆ์ „ ํ•™๋ถ€์ƒ์ผ๋•Œ๋Š” vs 6.0์ด ๋‚˜์˜ ์ฒซ vs๋ฒ„์ „์ด์—ˆ๋‹ค.) cross platform ์ด๋ผ๋Š” ๊ธฐ๋Šฅ์€ ์ •๋ง๋กœ ๋ง‰๊ฐ•ํ•˜์˜€๋‹ค.
์ „ ์ง์žฅ์—์„œ๋„ ide๋กœ vs๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ ๋‹น์‹œ์—๋Š” ๋‚ด๊ฐ€ ๋ชฐ๋ž๋˜๊ฑด์ง€ ์•„๋‹ˆ๋ฉด ํšŒ์‚ฌ๊ฐ€ ๋ชฐ๋ž๋˜๊ฑด์ง€ centos์— ๋Œ์•„๊ฐˆ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ• ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์ณค๋‹ค.

  1. ์œˆ๋„์šฐ์—์„œ ์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ •, ์‹คํ–‰, ํ…Œ์ŠคํŠธ ์™„๋ฃŒ
  2. ํ•ด๋‹น ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ๊ณต์žฅ๋™(๋‹น์‹œ ๋ฐœ์ „์†Œ์— ๋‚ฉํ’ˆํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“œ๋Š” ํšŒ์‚ฌ์— ์žˆ์—ˆ๋Š”๋ฐ ๋ณด์•ˆ ๋ฌธ์ œ ๋•Œ๋ฌธ์ธ์ง€ ๊ฐœ๋ฐœํ•˜๋Š” ์‚ฌ๋ฌด์‹ค๊ณผ ๊ณต์žฅ๋™ ์‚ฌ๋ฌด์‹ค์˜ ๋„คํŠธ์›Œํฌ๋Š” ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ฐจ๋‹จ๋˜์–ด์žˆ์—ˆ๋‹ค. ๊ฐœ๋ฐœํ•˜๊ธฐ ๋„ˆ๋ฌด ํž˜๋“ค์—ˆ๋‹ค.)์œผ๋กœ usb์— ๋‹ด์•„๊ฐ„๋‹ค. (usb์— ์†Œ์Šค์ฝ”๋“œ ๋‹ด์•„๊ฐ€๋Š”๊ฒƒ๊ณผ ftp, scp๋กœ ํŒŒ์ผ ์ง‘์–ด๋„ฃ๋Š”๊ฒƒ์— ๋ณด์•ˆ ๊ด€์ ์—์„  ๋‘˜๋‹ค ์ทจ์•ฝํ•œ๊ฒƒ ์•„๋‹Œ์ง€...)
  3. ๋ฆฌ๋ˆ…์Šค์—์„œ ๋‹ค์‹œ ๋นŒ๋“œํ•œ๋‹ค.
  4. ์‹คํ–‰ํ•œ๋‹ค. ํ…Œ์ŠคํŠธํ•œ๋‹ค.... ์ˆ˜์ •ํ•œ๋‹ค. 1๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์š”์ฆ˜ vs์—์„œ๋Š” ์‹ค์ œ ํƒ€๊ฒŸ ์„œ๋ฒ„(์ฆ‰, ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋žจ์— ์‹คํ–‰๋  ๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„)์˜ ์•„์ดํ”ผ ์ฃผ์†Œ์™€ ๊ณ„์ • ์ •๋ณด๋งŒ ์•Œ๋ฉด ๋ฆฌ๋ˆ…์Šค ์ข…๋ฅ˜ ๋ฐ ๋ฒ„์ „์— ๋งž๊ฒŒ ์•Œ์•„์„œ ๋ฆฌ๋ˆ…์Šค๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ฝ‘์•„๋‚ผ์ˆ˜ ์žˆ๋‹ค. ์‹ฌ์ง€์–ด ๋””๋ฒ„๊น…๋„ vs์—์„œ ๊ฐ€๋Šฅํ•˜๋‹ค.

์ •๋ง ํ˜๋ช…์ ์ธ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ !!! ๋‚˜๋Š” ์ƒ๊ฐํ–ˆ๋‹ค.
์–ธ์ œ ๋‚˜์˜จ ๋ฐฉ๋ฒ•์ธ์ง€๋Š” ๋ชฐ๋ž์œผ๋‚˜ ์ด ํšŒ์‚ฌ์— ์˜ค๊ธฐ๊นŒ์ง€ ๋‚œ ๊ทธ ์‚ฌ์‹ค์„ ๋ชฐ๋ž๋‹ค. (๋‚˜.. ๋„ˆ๋ฌด ๋Š๋ฆฐ๊ฑธ๊นŒ.?)

json library

์ง€๊ธˆ๊ป ์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ๋ฐœํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋˜ ๋ฐฉ๋ฒ•์€

  1. ๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜
  2. char buffer[]์— copy
  3. writeํ•œ๋‹ค.
    ์˜€๋‹ค.
    ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„  ๋ชจ๋“  ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฉ”์‹œ์ง€๋Š” json์ด์–ด์•ผํ–ˆ๋‹ค.
    ์–ด์ฐจํ”ผ ์ฃผ๊ณ ๋ฐ›๋Š” ๋ฉ”์‹œ์ง€์•ผ ๋‹ค ๋ฌธ์ž์—ด๋“ค๋กœ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฒƒ์ด์ง€๋งŒ ๊ฒฐ๊ตญ์—” ๋ฉ”์‹œ์ง€๋ฅผ ๊นŒ์„œ jsonํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ–ˆ๋˜ ๊ฒƒ์ด๋‹ค.

์ฒ˜์Œ์—” json ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์€ ๊ฐ€ํžˆ ์‹ ์„ธ๊ณ„์˜€๋‹ค.
๊ตณ์ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋ฌด์—‡์ด๋“  key, value๋กœ ์ง‘์–ด๋„ฃ์„์ˆ˜ ์žˆ์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด๋Š” ๊ฒฐ๊ตญ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ side-effect๋ฅผ ์ผ์œผํ‚ค๊ฒŒ ๋œ๋‹ค.
์‚ฌ์‹ค ๊ฐœ๋ฐœ์ž ํƒ“์ด๋‹ค. ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ธ๋•Œ, git์—์„œ ์ œ๊ณตํ•˜๋Š” ๋งŽ์€ ์˜ˆ์ œ์™€ ์„ค๋ช…๋“ค์„ ์ œ๋Œ€๋กœ๋งŒ ์ฝ์–ด๋ณด์•˜๋”๋ผ๋ฉด ์ด๋Ÿฐ ๋ฌธ์ œ๋“ค์„ ์‚ฌ์ „์— ์˜ˆ๋ฐฉํ• ์ˆ˜ ์žˆ์—ˆ์„ํ…๋ฐ.
ํ•˜์ง€๋งŒ ์–ด์ฐŒ๋๋“  ๊ทธ ๋ฌธ์ œ๋ฅผ ํ™•์ธํ•˜๊ณ , ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์ด๋ฅผ ๋‹ค์‹œ ์ฝ”๋“œ์— ์ ์šฉํ•˜๋Š” ์ž‘์—…์„ ๊ณ„์† ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค.
์•„์ง๋„ ์กฐ๊ธˆ ๋” ๋‚จ์•˜์„์ง€ ๋ชจ๋ฅธ๋‹ค. ๊ณ„์† ์ˆ˜์ •ํ•ด๋‚˜๊ฐ€์•ผํ•  ๋ถ€๋ถ„์ด๊ฒ ๋‹ค.

QT

์ •๋ง ๋˜ ๋‚ด๊ฐ€ qt๋กœ ๋ญ˜ ๋งŒ๋“ค๊ฒŒ ๋ ๊บผ๋ผ๊ณ ๋Š” ์ƒ๊ฐ์„ ๋ชปํ–ˆ๋‹ค.
์‚ฌํšŒ์ƒํ™œ์„ ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ, ๋‚ด๊ฐ€ ์ฒ˜์Œ ๋งŒ์ง€๊ฒŒ๋œ ํ”„๋กœ์ ํŠธ๋Š” MFC๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์ด์—ˆ๋‹ค.
๊ทธ ํ”„๋กœ์ ํŠธ๋Š” ๋ฌด์ธ์ž ์ˆ˜ํ•จ๊ณผ ํ†ต์‹ ํ•˜๋Š” GUI๋ฅผ ํฌํ•จํ•œ ๊ด€์ œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด์—ˆ๋Š”๋ฐ ๋‹น์‹œ ํšŒ์‚ฌ์—์„œ๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๊ฐœ๋ฐœ์„ MFC๋กœ๋งŒ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.
mfc๋Š” ์—ฌ์ „ํžˆ ์žฅ๋น„์—…์ฒด์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์–ธ์–ด๋ผ๊ณ ๋Š” ํ•˜์ง€๋งŒ ์ด์ œ๋Š” ์ •๋ง old fashioned์ด ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
ms์—์„œ ์ง€์›์„ ํ•ด์ฃผ๊ณ  ์žˆ๋Š”์ง€๋„ ํ˜„์žฌ ๋ฏธ์ง€์ˆ˜๋‹ค.
์–ด์ฐŒ๋๋“  ๋‹ค์‹œ ์ด์•ผ๊ธฐ๋กœ ๋Œ์•„๊ฐ€์„œ ์ด๋ฒˆ ๊ด€์ œ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ ํ†ต์‹  ๋Œ€์ƒ์€ ๋“œ๋ก ์ด๋‹ค.
๋“œ๋ก ๊ณผ ํ†ต์‹ ์„ ํ•ด์•ผํ•˜๋Š”๋ฐ ์ด ํด๋ผ์ด์–ธํŠธ๋Š” ๋“œ๋ก ์„ ๋ณด์—ฌ์ค€์ ์ด ์—†๋‹ค. ๊ฑฐ์˜ 1๋…„ ๋ฐ˜์ด ๋„˜๋Š” ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„๋™์•ˆ ๋ช‡์ฃผ์ „ ์ธ์ฆ์‹œํ—˜์ด ์žˆ์„ ๋•Œ, ์ฒ˜์Œ์œผ๋กœ ๋‚œ ๊ทธ ์‹ค๋ฌผ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐœ์„ ํ•ด์•ผํ•˜๊ณ , ๋“œ๋ก ์€ ์ค€๋น„๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š๊ณ . ๊ทธ๋Ÿผ ์–ด์ฉŒ๊ฒ ๋Š”๊ฐ€.
๋‚ด๊ฐ€ ๋“œ๋ก ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ชจ์‚ฌํ•  ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.
์˜ˆ์ „์— ์ •๋ง ๊น”์ง ํ•œ๋ฒˆ ๋งŒ๋“ค์–ด๋ณธ ๊ฒƒ ๋นผ๊ณค ๊ฒฝํ—˜์€ ์—†์—ˆ์ง€๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ gui๋ฅผ ์งœ๊ธฐ์—, ๊ฑฐ๊ธฐ๋‹ค๊ฐ€ ์šฐ๋ถ„ํˆฌ์—์„œ๋„ ๋Œ์•„๊ฐ€์•ผ ํ–ˆ์œผ๋‹ˆ qt๋Š” ๊ทธ๋•Œ๋‚˜ ์ง€๊ธˆ์ด๋‚˜ ๋‚˜์—๊ฒŒ ์žˆ์–ด์„  ์ตœ์„ ์˜ ์„ ํƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ , ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋Š๋ผ ๋งŽ์ด ๊ณ ์ƒ๋„ ํ–ˆ์ง€๋งŒ ์ง€๊ธˆ ์ƒ๊ฐํ–ˆ์„ ๋•Œ, ๋‚ด๊ฐ€ ๋‹ค์‹œ ๊ทธ๋•Œ๋กœ ๋Œ์•„๊ฐ„๋‹ค๋ฉด ๋ฐ”๊พธ๊ณ  ์‹ถ์€ ๊ฒฐ์ •์ด ํ•˜๋‚˜ ์žˆ๋‹ค.

c++๋กœ rest api ์„œ๋ฒ„ ๋งŒ๋“ค์ง€ ๋ง™์‹œ๋‹ค.

๋Œ“๊ธ€