Skip to content

Jaehwi-So/didacto-api

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

DIDACTO-API

ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ๊ธฐ๊ฐ„

2024.03 - 2024.11

ํŒ€์› ๋ฐ ์—ญํ• 

์—ญํ•  ์ด๋ฆ„ ๋‹ด๋‹น
ํŒ€์žฅ ์†Œ์žฌํœ˜ Back-end, ์ „์—ญ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ฐ ์ธํ”„๋ผ ๊ตฌ์ถ•, P2P ๋ฐ ์›๊ฒฉ์ œ์–ด
ํŒ€์› ์•ˆ์œคํ˜ธ Back-end, ๊ฐ•์˜ ๊ด€๋ จ API, ๋‹ค๋Œ€์ผ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ตฌํ˜„
ํŒ€์› ์ด์›๋นˆ Back-end, ํšŒ์› ๊ด€๋ จ API, ์ธ์ฆ, ๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค ๋ฐ IAMPORT ์—ฐ๋™
ํŒ€์› ๊น€ํƒœ์˜ Front-end, ๊ต์ˆ˜์ž์šฉ Web Application
ํŒ€์› ์ด์ง€๋ฏผ Front-end, ํ•™์ƒ์šฉ Desktop Application (Web to App)

Repository

Organization
Core API Server
Event Server

์ž‘์—… ์ปจ๋ฒค์…˜ ๋ฐ Docs

๊ธฐ๋ณธ ์ฝ”๋“œ ์ž‘์„ฑ ์ปจ๋ฒค์…˜
์ž‘์—… ์ปจ๋ฒค์…˜ (Git)
๊ณ„์ธต๋ณ„ ๋ชจ๋“ˆ์˜ ์ฃผ์š” ์ฑ…์ž„ ๋ฐ ๊ณ ๋ คํ•  ์ 
ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ์ „๋žต
Web RTC ์—ฐ๋™ํ•˜๊ธฐ


์ฃผ์ œ ๋ฐ ๋ฌธ์ œ ์ •์˜

4์ฐจ ์‚ฐ์—… ์‹œ๋Œ€๋ฅผ ๋งž์•„, ์ดˆ๋“ฑ ๊ต์œก๊ธฐ๊ด€๋ถ€ํ„ฐ ๊ณ ๋“ฑ ๊ต์œก๊ธฐ๊ด€๊นŒ์ง€ ์•„์šธ๋Ÿฌ ์ปดํ“จํ„ฐ๋ฅผ ํ™œ์šฉํ•œ ์‹ค์Šต ์ˆ˜์—…์ด ์ ์  ํ™•๋Œ€๋˜๋Š” ์ถ”์„ธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ๋“ค์ด ๋ช‡๋ช‡ ์žˆ๋‹ค.

  • ๊ต๊ฐ•์‚ฌ์˜ ์‹œ๊ฐ„ ๊ด€๋ฆฌ ๋ฐ ์ˆ˜์—… ํšจ์œจ์„ฑ: ๊ต๊ฐ•์‚ฌ๋Š” ์งˆ๋ฌธ์ด ๋“ค์–ด์˜ค๋ฉด ์ž๋ฆฌ๋กœ ๊ฐ€์„œ ํ•˜๋‚˜ํ•˜๋‚˜ ๋ด์ฃผ๋Š” ๋ชจ์Šต์€ ํ”ํžˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ๊ณผ์ •์ด ์ถ•์ ๋˜๋ฉด ์‹œ๊ฐ„์†Œ๋ชจ, ์ง„๋„๋„ ์ œ๋Œ€๋กœ ๋ชป๋‚˜๊ฐ€๊ณ  ์–‘์งˆ์˜ ๊ต์œก์„ ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค.
  • ํ•™์ƒ๋“ค์˜ ํ•™์Šต ํ™˜๊ฒฝ ๋ฐ ํ–‰๋™ ๊ด€๋ฆฌ: ๋ถ€์ •ํ–‰์œ„๋‚˜ ์ˆ˜์—… ์‹œ๊ฐ„ ์ค‘ ์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์—… ์™ธ์ ์ธ ํ–‰์œ„๋ฅผ ํ•˜๋Š” ๋“ฑ ํ•™์ƒ๋“ค์˜ ํ†ต์ œ์˜ ์–ด๋ ค์›€
  • ์‹ค์Šตํ™˜๊ฒฝ์˜ ์šด์˜ ๋ฐ ๊ด€๋ฆฌ: ๊ต์œก๊ธฐ๊ด€์€ ์–‘์งˆ์˜ ๊ต์œก์„ ์œ„ํ•ด ์‹ค์Šตํ™˜๊ฒฝ์„ ์ œ๊ณตํ•  ์ฑ…์ž„์ด ์žˆ์œผ๋‚˜, ์‹ค์Šตํ™˜๊ฒฝ์˜ ์šด์˜ ๋ฐ ๊ด€๋ฆฌ๊ฐ€ ๋ฏธํกํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ.

์ง„์งœ ๋ฌธ์ œ ์ •์˜

์ ์  ํ™•๋Œ€๋˜๋Š” ์ปดํ“จํ„ฐ ์‹ค์Šต ๊ธฐ๋ฐ˜์˜ ๊ต์œก ํ™˜๊ฒฝ์—์„œ ํ•™์ƒ๋“ค์˜ ์–‘์งˆ์˜ ๊ต์œก์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹ค์Šต ์ธํ”„๋ผ๋ฅผ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” SW ์†”๋ฃจ์…˜์„ ๊ฐœ๋ฐœํ•˜์ž.

์ฃผ์ œ ๊ตฌ์ฒดํ™”

๋ชจ๋‹ˆํ„ฐ๋ง

๊ต์ˆ˜์ž๊ฐ€ ํ•™์ƒ ์ฐธ์—ฌ์ž๋“ค์˜ ์Šคํฌ๋ฆฐ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ 1:N ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค

  • ํ•™์ƒ ์‚ฌ์šฉ์ž๊ฐ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ดˆ๊ธฐ ์‹คํ–‰์‹œ ํ•™์ƒ ์‚ฌ์šฉ์ž์˜ ์นด๋ฉ”๋ผ, ์Œ์„ฑ, ๋ชจ๋‹ˆํ„ฐ ํ™”๋ฉด์˜ ์ ‘๊ทผ ์—ฌ๋ถ€ ๊ถŒํ•œ ํ—ˆ์šฉ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
  • ๊ทธ ํ›„ ๊ต์ˆ˜์ž๊ฐ€ ์ƒ์„ฑํ•œ ๊ฐ•์˜์‹ค์— ๋“ค์–ด๊ฐ€๋ฉด ๊ต์ˆ˜์ž๋Š” ํ•™์ƒ ์‚ฌ์šฉ์ž์˜ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. (๊ต์ˆ˜ 1 : ํ•™์ƒ N)

ํ™”๋ฉด ๊ณต์œ 

๊ต์ˆ˜์ž๊ฐ€ ํ•™์ƒ ์ฐธ์—ฌ์ž์ค‘ ํ•œ ๋ช…์„ ์„ ํƒ์‹œ(๋ชจ๋‹ˆํ„ฐ๋ง ํŠน์ • ํ•™์ƒ ํ™”๋ฉดํด๋ฆญ) ์ง€๋ชฉํ•œ ํ•™์ƒ ์‚ฌ์šฉ์ž์™€ 1๋Œ€1๋กœ P2P๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ์„œ๋น„์Šค

  • ์„œ๋กœ ๊ตํ™˜ํ•˜๋Š” ๋ฏธ๋””์–ด๋Š” [๊ต์ˆ˜์ž : ์Œ์„ฑ, ์นด๋ฉ”๋ผ(์–ผ๊ตด)], [ํ•™์ƒ : ์ปดํ“จํ„ฐ ์Šคํฌ๋ฆฐ]
  • ๊ต์ˆ˜์ž๊ฐ€ ์ƒ์„ฑํ•œ ๋ฐฉ์— ๋“ค์–ด์™€์žˆ๋Š” ํ•™์ƒ ์ฐธ์—ฌ์ž์ค‘ ๊ต์ˆ˜์ž๊ฐ€ ์„ ํƒํ•œ ํ•ด๋‹น ํ•™์ƒ ์‚ฌ์šฉ์ž์™€ ๊ต์ˆ˜์ž๊ฐ€ 1๋Œ€ 1๋กœ ์Œ์„ฑ ๋ฐ ํ™”๋ฉด์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋•Œ ํ•™์ƒ์€ ๊ต์ˆ˜์ž์˜ ์บ  ํ™”๋ฉด๊ณผ ์Œ์„ฑ์„ ๋“ค์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ต์ˆ˜์ž๋Š” ํ•™์ƒ์˜ ๋ชจ๋‹ˆํ„ฐ ํ™”๋ฉด ๋ฐ ์Œ์„ฑ์„ ๋“ค์„ ์ˆ˜ ์žˆ๋‹ค.

์›๊ฒฉ ๋ฐ์Šคํฌํ†ฑ

๊ต์ˆ˜์ž๊ฐ€ ํ•™์ƒ ์‚ฌ์šฉ์ž์˜ ์ปดํ“จํ„ฐ์— ์ ‘๊ทผํ•˜์—ฌ ์ง์ ‘ ์ฝ”๋“œ ์ˆ˜์ • ๋ฐ ์ผ์ • ์•ก์…˜์„ ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค

  • ๊ต์ˆ˜์ž๊ฐ€ ํ•™์ƒ ์‚ฌ์šฉ์ž์˜ ์ปดํ“จํ„ฐ์— ์ ‘๊ทผํ•˜์—ฌ ํŠน์ • ์•ก์…˜์„ ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค.(๋งˆ์šฐ์Šค ํด๋ฆญ, ํ‚ค๋ณด๋“œ ํด๋ฆญ)

์ˆ˜์ต์„ฑ ๋ชจ๋ธ

SaaS์˜ ์ˆ˜์ต์„ฑ ๋ชจ๋ธ๋กœ์˜ ํ™•์žฅ์„ ์œ„ํ•œ ๊ฒฐ์ œ ๋ชจ๋“ˆ ์—ฐ๋™



๊ฒฐ๊ณผ๋ฌผ

ํ•™์ƒ์šฉ Desktop Application

Untitled

๊ต์ˆ˜์ž์šฉ Web Application

Untitled

๋ชจ๋‹ˆํ„ฐ๋ง

Untitled

P2P ๋ฐ ์›๊ฒฉ์ œ์–ด

Untitled



์ƒ์„ธ

A. ERD ๋ฐ ์œ ์ € ํ”Œ๋กœ์šฐ (User Flow)

Untitled

๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ERD ๋‹ค์ด์–ด๊ทธ๋žจ์ด๋‹ค. ์ตœ์†Œ ์ˆ˜์ค€ MVP๋ฅผ ์œ„ํ•œ ์ตœ์†Œ ํ…Œ์ด๋ธ”์„ ์ •์˜ํ•˜์˜€๋‹ค.

Untitled

์‚ฌ์šฉ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ์›น์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ณผ์ •์„ ์‹œ๊ฐ์  ํ‘œํ˜„ํ•œ ํ”Œ๋กœ์šฐ์ด๋‹ค. ํ•ด๋‹น ๋ฆฌ์†Œ์Šค์˜ ์ฃผ์š” ์ •์˜์‚ฌํ•ญ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ์ธ์ฆ ํŽ˜์ด์ง€ : ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์‚ฌ์šฉ์ž ๋“ฑ๋ก ๋ฐ ์‚ฌ์šฉ์ž ์ธ์ฆ๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ. ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์€ ๊ต์ˆ˜์ž์™€ ํ•™์ƒ์œผ๋กœ ๋‚˜๋‰œ๋‹ค.
  2. ๋ฉ”์ธ ํŽ˜์ด์ง€ : ์‚ฌ์šฉ์ž๋“ค์€ ์ž์‹ ์ด ์†Œ์†๋œ ๊ฐ•์˜๋“ค์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฒดํฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ต์ˆ˜์ž๋Š” ๊ฐ•์˜๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ  ํ•™์ƒ์€ ์ฐธ์—ฌ์š”์ฒญ์„ ๊ฐ•์˜์— ์†Œ์†๋  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
  3. ๊ฐ•์˜ ์ƒ์„ธ : ๊ต์ˆ˜์ž๋“ค์€ ์•„๋ž˜์˜ ์ฃผ์š” ๊ธฐ๋Šฅ๋“ค์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    1. ๋ชจ๋‹ˆํ„ฐ๋ง : ํ•™์ƒ๋“ค์˜ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋“œ ํ˜•ํƒœ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•œ๋‹ค. ์ด๋Š” ํ•™์ƒ์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ ‘์† + ๊ต์ˆ˜์ž์˜ ๊ฐ•์˜ ํ™œ์„ฑํ™”๋ฅผ ์ „์ œ๋กœ ํ•œ๋‹ค.
    2. P2P ์ŠคํŠธ๋ฆฌ๋ฐ : ๋ชจ๋‹ˆํ„ฐ๋ง ์ค‘์ธ ํ•™์ƒ์˜ ๊ทธ๋ฆฌ๋“œ๋ฅผ ํด๋ฆญ ์‹œ P2P ํ†ต์‹ ์„ ์‹œ์ž‘ํ•œ๋‹ค. ์„œ๋กœ ๊ตํ™˜๋˜๋Š” ๋ฏธ๋””์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค โ†’ํ•™์ƒ : ์ž์‹ ์˜ ์Šคํฌ๋ฆฐ, ๊ต์ˆ˜์ž : ์Œ์„ฑ๊ณผ ์บ ์ฝ”๋”
    3. ์›๊ฒฉ ์ œ์–ด : P2P ์ŠคํŠธ๋ฆฌ๋ฐ ์ค‘ ๊ต์ˆ˜์ž๊ฐ€ ํ•™์ƒ์˜ ์Šคํฌ๋ฆฐ์„ ์›๊ฒฉ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.




B. ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ณ

Untitled

  1. ํ•™์ƒ์šฉ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ : ๊ฐ ํ•™์ƒ๋“ค์€ ์‹ค์Šต ์ปดํ“จํ„ฐ์— ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜์—ฌ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. ํ•ด๋‹น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ Electron์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•œ๋‹ค.
    1. Electron์€ ์›น ํ‘œ์ค€ ๊ธฐ์ˆ (HTML/Javascript)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ ํ™˜๊ฒฝ์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋นŒ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ๊ณผ ์ƒ์ดํ•œ OS ํ™˜๊ฒฝ์—์„œ์˜ ์ง€์›์„ ๋ชฉํ‘œ๋กœ ํ•˜์—ฌ ์ฑ„ํƒํ•˜์˜€๋‹ค.
  2. Front-end Server : ์‚ฌ์šฉ์ž๋“ค์˜ ํšŒ์› ๊ธฐ๋Šฅ, ๊ฐ•์˜์‹ค ์ƒ์„ฑ ๋ฐ ์ฐธ์—ฌ ๋“ฑ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ต์ˆ˜์ž์˜ ํ•™์ƒ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ P2P, ์›๊ฒฉ ๋ฐ์Šคํฌํƒ‘์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก UI๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
  3. API Server : ํ•„์š”ํ•œ API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. ๋” ๋‚˜์•„๊ฐ€์„œ ์„œ๋น„์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ฒ€ํ† ๋ฅผ ์ˆ˜ํ–‰์ค‘์ด๋‹ค.
    1. Core-API : ์ธ์ฆ, ์‚ฌ์šฉ์ž ์‹๋ณ„, ๊ฐ•์˜์‹ค ์ƒ์„ฑ ๋ฐ ์ฐธ์—ฌ ๋“ฑ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ ์ˆ˜ํ–‰
    2. Monitoring-API : ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ๋ถ€ํ„ฐ ์ฃผ๊ธฐ์ ์œผ๋กœ ์Šคํฌ๋ฆฐ ํ™”๋ฉด ๋ฐ ์ ‘์†์‹œ๊ฐ„์„ Push๋ฐ›๊ณ , ์›น ํŽ˜์ด์ง€์—๊ฒŒ ์ง€์†์ ์œผ๋กœ ํ•ด๋‹น ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฆฌ์ŠคํŠธ๋ฅผ Pollingํ•˜๋„๋ก ๋น„๋™๊ธฐ ๋™์ž‘์— ํŠนํ™”๋œ API๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค.
  4. Event Server : P2P ํ†ต์‹ ์„ ์‹œ์ž‘ํ•  ๋•Œ ํ•„์š”ํ•œ ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„(Signaling Server)์˜ ์—ญํ• ์„ ํ•˜๋ฉด์„œ ์›๊ฒฉ ๋ฐ์Šคํฌํ†ฑ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ด๋ฒคํŠธ ์ค‘์‹ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋ฒ„์ด๋‹ค.



C. ๋ชจ๋‹ˆํ„ฐ๋ง

Untitled

  1. ํ•™์ƒ๋“ค์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์ง€์†์ ์œผ๋กœ ์‚ฌ์šฉ์ž์˜ ์Šคํฌ๋ฆฐ ์ด๋ฏธ์ง€์™€ Timestamp๋ฅผ ์„œ๋ฒ„๋กœ Pushํ•œ๋‹ค. ๊ฐ๊ฐ์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๋…๋ฆฝ์ ์ธ ๊ฐ„๊ฒฉ์— ๋”ฐ๋ผ์„œ Pushํ•œ๋‹ค.
  2. ๊ต์ˆ˜์ž์˜ ์›น(๋ชจ๋‹ˆํ„ฐ๋ง ํ™”๋ฉด)์—์„œ๋Š” ์ผ์ • ๊ฐ„๊ฒฉ๋งˆ๋‹ค ํ•ด๋‹น ๋ชจ๋‹ˆํ„ฐ๋ง ์ •๋ณด์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ Pollingํ•˜์—ฌ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ•™์ƒ๋“ค์˜ ์Šคํฌ๋ฆฐ๊ณผ ์ ‘์† ์—ฌ๋ถ€(Timestamp)๋ฅผ ์ฒดํฌํ•œ๋‹ค.



D. ์‹ค์‹œ๊ฐ„ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ ์›๊ฒฉ ์ œ์–ด

D-1. ์š”๊ตฌ์‚ฌํ•ญ

  • ๊ต์ˆ˜์ž์™€ ํ•™์ƒ์ด ๊ฐ์ž์˜ ์บ ์ฝ”๋” ํ™”๋ฉด(๊ต์ˆ˜์ž)๊ณผ ์ปดํ“จํ„ฐ ์Šคํฌ๋ฆฐ ํ™”๋ฉด(ํ•™์ƒ)์„ 1:1 ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
  • ๊ณต์œ ๋œ ํ™”๋ฉด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ต์ˆ˜์ž๊ฐ€ ํ•™์ƒ์˜ ์ปดํ“จํ„ฐ๋ฅผ ์›๊ฒฉ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

D-2. Web RTC

https://blog.kakaocdn.net/dn/OMX6R/btsDxTDaSP5/P9Tqv6xOOrlDI8gAKvWKAk/img.png

๊ต์ˆ˜์ž๊ฐ€ ํ•™์ƒ๊ณผ 1:1๋กœ ๋ฏธ๋””์–ด๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ Web RTC ๊ธฐ์ˆ ์„ ์ฑ„ํƒํ•˜์˜€๋‹ค.

  • WebRTC(Web Real-Time Communication)๋Š” ์›น ๋ธŒ๋ผ์šฐ์ € ๊ฐ„์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ์Œ์„ฑ, ์˜์ƒ ๋ฐ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค.
  • Google Meet, Zoom, Facebook Messenger ๋“ฑ ์‹ค์‹œ๊ฐ„ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆฌ๋ฐ์ด ์‚ฌ์šฉ๋˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋งŽ์ด ์‚ฌ์šฉ
  • ์ดˆ๊ธฐ ์—ฐ๊ฒฐ์— ์„ฑ๊ณตํ•œ ์ดํ›„์—๋Š” P2P Connection์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค๋Š” ํŠน์ง•

Web RTC์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ตฌํ˜„ ๊ณ„ํš

Untitled

Untitled

  • STUN ์„œ๋ฒ„ : ํด๋ผ์ด์–ธํŠธ๋“ค์ด ์„œ๋กœ์—๊ฒŒ ์ง์ ‘ ์—ฐ๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ฃผ์†Œ์™€ ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• . ํด๋ผ์ด์–ธํŠธ๋Š” STUN ์„œ๋ฒ„์—๊ฒŒ ์ž์‹ ์˜ Public IP ์ฃผ์†Œ ๋ฐ ํฌํŠธ๋ฅผ ์š”์ฒญํ•˜๊ณ , ์ด ์ •๋ณด๋ฅผ ์ƒ๋Œ€ Peer์™€ ๊ณต์œ ํ•œ๋‹ค.
    • STUN ์„œ๋ฒ„๋กœ๋Š” Google์—์„œ ์ œ๊ณตํ•˜๋Š” STUN ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉ
  • ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„ย :ย ํ†ต์‹  ์‹œ์ž‘์„ ์œ„ํ•œ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ์ค‘๊ณ„ ์„œ๋ฒ„์˜ ์—ญํ• . ํด๋ผ์ด์–ธํŠธ๋“ค์ด ์„œ๋กœ์˜ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ด๊ณ  ํ†ต์‹ ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค.ย ํด๋ผ์ด์–ธํŠธ๋“ค ๊ฐ„์˜ ์—ฐ๊ฒฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ ํ†ต์‹ ์„ ์œ„ํ•œ ์ œ์–ด ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•ด์ค€๋‹ค.
    • ์‹œ๊ทธ๋„๋ง ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ๋ฌธ์„œ ์ƒ๋‹จ์—์„œ ์„ค๋ช…ํ–ˆ๋˜ Event Server๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ์„œ๋กœ์˜ Connection ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•˜๋„๋ก ์ค‘๊ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•œ๋‹ค.
  • Connection ๊ณผ์ • : Offer/Answer(SDP ๊ตํ™˜) โ†’ ICE Candidate ๊ณผ์ •์„ ๊ฑฐ์ณ ์„œ๋กœ์˜ ๋ฏธ๋””์–ด ์ŠคํŠธ๋ฆผ Connection ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•œ๋‹ค.

Web RTC๋ฅผ ์ฑ„ํƒํ•œ ์ด์œ 

  1. P2P Connection : WebRTC๋Š” P2P ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋ฉฐ ์ดˆ๊ธฐ ์—ฐ๊ฒฐ ๊ณผ์ •์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์„œ๋ฒ„๋ฅผ ๊ฒฝ์œ ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ Latency๊ฐ€ ๋งค์šฐ ๋‚ฎ๊ณ  ์„œ๋ฒ„์˜ ์˜์กด๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  2. Bandwidth ์ž๋™ ์กฐ์ ˆ: ๋„คํŠธ์›Œํฌ ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ด์— ๋งž์ถ”์–ด ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. ๋ฏธ๋””์–ด ํผํฌ๋จผ์Šค : ์ €๋น„์šฉ์œผ๋กœ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ๋•Œ ๋น„๊ต์  ์˜์ƒ์˜ ์ดˆ๋‹น ํ”„๋ ˆ์ž„ ์ˆ˜๊ฐ€ ๋†’๊ณ , ์ž์ฒด์ ์ธ ์ฝ”๋ฑ์— ์˜ํ•ด ์„ ๋ช…ํ•œ ํ™”์งˆ์„ ์œ ์ง€ํ•˜๋ฉฐ ์˜์ƒ์„ ์ŠคํŠธ๋ฆฌ๋ฐ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  4. ๋ณด์•ˆ: ์ŠคํŠธ๋ฆผ์„ ์•”ํ˜ธํ™”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ธฐ๋ฐ€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๊ตํ™˜ํ•˜๋Š” ํ™”๋ฉด ๊ณต์œ  ๊ณผ์ •์˜ ๋ณด์•ˆ์„ฑ์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.



D-3. ์†Œ์ผ“ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ณ„ ์„ธ์…˜ ์ œ์–ด์™€ ์ปค์Šคํ…€ ๋ฝ

P2P ์—ฐ๊ฒฐ์„ ํ•  ๋•Œ, Websocket์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ทธ๋„๋ง ์—ญํ• ์„ ํ•œ๋‹ค. ์šฐ๋ฆฌ์˜ ์š”๊ตฌ์‚ฌํ•ญ์—์„œ ์ ‘์†์€ ๋ฐ˜๋“œ์‹œ ๊ต์ˆ˜์ž์™€ ํ•™์ƒ์ด 1:1๋กœ ๋งค์นญ๋˜์–ด์•ผ ํ•˜๋ฉฐ ์ ‘์† ์ˆœ์„œ์— ๋Œ€ํ•œ ๊ทœ์น™์ด ์žˆ์—ˆ๋‹ค.

Connection ๊ทœ์น™ : ์ด์ƒ์ ์ธ P2P๋Š” A ์ ‘์†์ž๋ผ๋ฆฌ 1:1 ํ†ต์‹ , B ์ ‘์†์ž๋ผ๋ฆฌ 1:1 ํ†ต์‹ ์„ ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

  • ๊ต์ˆ˜์ž๋Š” ํ•™์ƒ์ด ์ ‘์†ํ•˜์ง€ ์•Š์€ Room์—๋Š” ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ (ํ•™์ƒ์˜ ํ™”๋ฉด์ด ์—†์œผ๋ฏ€๋กœ ๊ฐ์‹œํ•  ํ•„์š”๋„ ์—†๋‹ค.)
  • ๊ต์ˆ˜์ž๋Š” ํ•™์ƒ์˜ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋ฉด ํ•จ๊ป˜ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ ธ์•ผ ํ•œ๋‹ค.
  • ํ•™์ƒ์ด Room์— ์ ‘์† ๋„์ค‘, ๋™์ผํ•œ ํ•™์ƒ์˜ ๋‹ค๋ฅธ ์„ธ์…˜์ด ๊ฐ™์€ Room์— ์ ‘์†ํ•  ๋•Œ ๊ธฐ์กด ์ ‘์†์ค‘์ด๋˜ ์„ธ์…˜์€ ๊ฐ•์ œ ์ ‘์† ์ข…๋ฃŒ๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ๊ต์ˆ˜์ž๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ธŒ๋ผ์šฐ์ €์—์„œ Room์— ์ ‘์† ๋„์ค‘, ๋˜๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฐ™์€ Room์— ์ ‘์†ํ•  ๋•Œ ๊ธฐ์กด ์ ‘์†์ค‘์ด๋˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ฐ•์ œ๋กœ ์ ‘์† ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•œ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์ ‘์† ๊ทœ์น™์„ ์œ„ํ•ด์„œ ์†Œ์ผ“ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ณ„ ์„ธ์…˜์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ Locking์˜ ๊ตฌํ˜„์ด ํ•„์š”ํ–ˆ๋‹ค. RDBMS Locking, Zookeeper ๋“ฑ ๋‹ค์–‘ํ•œ Locking์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋“ค์ด ์žˆ์—ˆ์œผ๋ฉฐ ๊ทธ ์ค‘ Redis๋ฅผ ์ฑ„ํƒํ•˜์—ฌ ์ปค์Šคํ…€ ๋ฝ์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

Redis๋ฅผ ์ฑ„ํƒํ•œ ์ด์œ 

  • Redis์˜ In-Memory์˜ ํŠน์„ฑ ์ƒ ๋†’์€ ํผํฌ๋จผ์Šค๋ฅผ ๋ฐœํœ˜ํ•œ๋‹ค.
  • ํœ˜๋ฐœ์„ฑ ๋ฐ์ดํ„ฐ์ธ Connection์˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์ ํ•ฉํ•˜๋‹ค.
  • ๋ถ„์‚ฐ ๋ฝ์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ์˜ ๋™๊ธฐํ™” ๋“ฑ์˜ ์ด์Šˆ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ ๋ฆฌํ•˜๋‹ค.

์ปค์Šคํ…€ ๋ฝ์˜ ํ”„๋กœ์„ธ์Šค

  1. ๋ฝ ํš๋“ : ํ•™์ƒ์ด๋‚˜ ๊ต์ˆ˜์ž๊ฐ€ Room์— ์ ‘์†ํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ๋จผ์ € Redis์—์„œ ํ•ด๋‹น Room์— ๋Œ€ํ•œ ๋ฝ์„ ํš๋“ํ•œ๋‹ค. ๋งŒ์•ฝ ์ด๋ฏธ ๋ฝ์ด ์กด์žฌํ•˜๋ฉด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์† ์ค‘์ž„์„ ์˜๋ฏธํ•˜๋ฏ€๋กœ, ์ƒˆ๋กœ์šด ์ ‘์† ์‹œ๋„๋ฅผ ๊ฑฐ๋ถ€ํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์ ‘์†์„ ์ข…๋ฃŒํ•œ๋‹ค.
  2. ๋ฝ ํ•ด์ œ : ํ•™์ƒ์ด๋‚˜ ๊ต์ˆ˜์ž๊ฐ€ Room์—์„œ ๋‚˜๊ฐ€๋ฉด Redis์—์„œ ๋ฝ์„ ํ•ด์ œํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ Room์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
  3. ์ž๋™ ํ•ด์ œ : ๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ์—ฐ๊ฒฐ์ด ๋Š์–ด์กŒ์„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ Disconnection์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐ ๋ฝ์— TTL์„ ์„ค์ •ํ•˜์—ฌ ์ž๋™์œผ๋กœ ํ•ด์ œ๋˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.



D-4. ์›๊ฒฉ ์ œ์–ด ํ”„๋กœ์„ธ์Šค

Untitled

  1. Event Sever์—๋Š” P2P ์—ฐ๊ฒฐ์— ์‚ฌ์šฉํ•œ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž(๊ฐ•์˜ - ํ•™์ƒ)์œผ๋กœ ๊ตฌ๋ถ„๋˜๋Š” Room์ด ์กด์žฌํ•˜๋ฉฐ, ํ•ด๋‹น ๊ทธ๋ฃน ๋‚ด์— ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ๋ผ๋ฆฌ์˜ ์ด๋ฒคํŠธ Subscribe์™€ Publish๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.
  2. P2P ์ŠคํŠธ๋ฆฌ๋ฐ์ด ์ง„ํ–‰ ์ค‘์ผ ๋•Œ Event-Driven ๋ฐฉ์‹์œผ๋กœ ์›๊ฒฉ ์ œ์–ด๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.

์›๊ฒฉ ์ œ์–ด ํ”„๋กœ์„ธ์Šค

์›๊ฒฉ ๋ฐ์Šคํฌํƒ‘์˜ ์ž‘๋™ ๋ฐฉ์‹์€ ์œ„์˜ ์ฐจํŠธ์™€ ๊ฐ™์ด ๋‹ค์Œ ๊ณผ์ •์„ ๋”ฐ๋ฅธ๋‹ค.

  1. ๊ต์ˆ˜์ž์˜ ์ด๋ฒคํŠธ ๋ฐœ์ƒ(๋งˆ์šฐ์Šค Up/Down, ํ‚ค๋ณด๋“œ Up/Down ๋“ฑ) ์‹œ Event ์„œ๋ฒ„๋กœ Publishํ•œ๋‹ค.
  2. ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ Listenํ•˜๊ณ  ์žˆ๋˜ ํ•™์ƒ์ด Message๋ฅผ Subscribeํ•œ๋‹ค.
  3. ํ•™์ƒ์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ O์— I/O ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค



E. ๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค

๊ฒฐ์ œ ์š”๊ตฌ ์‚ฌํ•ญ

  • ์‚ฌ์šฉ์ž๊ฐ€ DIDACTO ํ”„๋ฆฌ๋ฏธ์—„ ์ด์šฉ๊ถŒ์„ ์ธํ„ฐ๋„ท ๊ฒฐ์ œ๋กœํ•˜์—ฌ๊ธˆ ๊ตฌ๋… ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•œ๋‹ค.
  • ๊ฒฐ์ œ ๊ณผ์ •์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฐ์ œ๋ฅผ ์š”์ฒญํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ทจ์†Œ๋˜๊ฒŒ๋” ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•œ๋‹ค.

IAMPORT

๊ตญ๋‚ด PG๊ฒฐ์ œ ์—ฐ๋™์„ ์‰ฝ๊ฒŒํ•ด์ฃผ๋Š” ๊ฒฐ์ œ API์ž…๋‹ˆ๋‹ค. 
PG๋ž€ Payment gateway์˜ ์•ฝ์ž์ธ๋ฐ, ์‹ ์šฉ์นด๋“œ์‚ฌ์™€ ์ง์ ‘ ๊ณ„์•ฝํ•˜๊ธฐ ์–ด๋ ค์šด ์˜จ๋ผ์ธ ์‡ผํ•‘๋ชฐ์„ ๋Œ€์‹ ํ•ด ๊ฒฐ์ œ์™€ ์ •์‚ฐ ์—…๋ฌด๋ฅผ ๋Œ€ํ–‰ํ•ด ์ฃผ๋Š” ์—…์ฒด์ž…๋‹ˆ๋‹ค.
์‹ ์šฉ์นด๋“œ, ์‹ค์‹œ๊ฐ„ ๊ณ„์ขŒ์ด์ฒด, ๊ฐ€์ƒ๊ณ„์ขŒ, ๊ฐ„ํŽธ๊ฒฐ์ œ ์„œ๋น„์Šค(์˜ˆ: ์นด์นด์˜คํŽ˜์ด, ํŽ˜์ด์ฝ”) ๋“ฑ์— ์“ฐ์ด๋ฉฐ ๋ณด์•ˆ์„ ์ค‘์‹œํ•ฉ๋‹ˆ๋‹ค.

Untitled

PortOne ๊ฒฐ์ œ ์ „์ฒด ํ๋ฆ„


Untitled

ํฌํŠธ์›์˜ ๋™์ž‘ ๊ณผ์ •์€ ๊ฒฐ์ œ โ†’ ์™„๋ฃŒ โ†’ ๊ฒฐ์ œ ์ •๋ณด๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†ก โ†’ ์„œ๋ฒ„์—์„œ ๊ฒ€์ฆ์ฒ˜๋ฆฌํ›„ ๊ฒฐ์ œ ์™„๋ฃŒ ์˜ ์ˆœ์„œ๋Œ€๋กœ ์ง„ํ–‰์ด ๋œ๋‹ค.

IMP ๊ฒฐ์ œ ํ”„๋กœ์„ธ์Šค(ํ”„๋ก ํŠธ์™€ ๋ฐฑ๊ด€์ )

ํšŒ์›์ด DIDACTO ํ”„๋ฆฌ๋ฏธ์—„ ์„œ๋น„์Šค๋ฅผ ๊ตฌ๋…ํ•˜๊ธฐ ์œ„ํ•ด ๊ฒฐ์ œ ํ–‰์œ„๋ฅผ ํ–‰ํ• ์‹œ ๋‹ค์Œ ๊ณผ์ •์„ ๋”ฐ๋ฅธ๋‹ค.

  1. ๋“ฑ๋ก๋˜์–ด์žˆ๋Š” ์‹ค์ œ ์•„์ž„ํฌํŠธ ID๋ฅผ ํ†ตํ•˜์—ฌ IMP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐํ™”
  2. ์„œ๋ฒ„์— ์ฃผ๋ฌธ ์ƒ์„ฑ ํ›„ ๋ฐ›์•„์˜จ ์ฃผ๋ฌธID๋ฅผ ํ†ตํ•˜์—ฌ IMP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ๊ฒฐ์ œ ๋ฐฉ์‹๊ณผ ๊ฒฐ์ œ ๊ธˆ์•ก, ์ฃผ๋ฌธ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด๋กœ ๊ฒฐ์ œ ์š”์ฒญ์„ ๋ณด๋ƒ„
  3. IMP ๊ฒฐ์ œ ์„ฑ๊ณต์‹œ ๊ฒฐ์ œ ๊ณ ์œ  ๋ฒˆํ˜ธ์™€ ์ฃผ๋ฌธ๋ฒˆํ˜ธ ์„œ๋ฒ„์— ์ „๋‹ฌ
  4. ์„œ๋ฒ„ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์ฃผ๋ฌธID ๋ฏธ์ƒ์„ฑ or ๊ฒฐ์ œ ๊ธˆ์•ก์„ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์˜๋„์ ์œผ๋กœ ์กฐ์ž‘์‹œ ๊ฒฐ์ œ ์ทจ์†Œ ๋ฐ ๊ฒฐ์ œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋„๋ก ๋กœ์ง ์„ค๊ณ„

PortOne API๋ฅผ ์ด์šฉํ•œ ๊ฒฐ์ œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ

๊ฒฐ์ œ ๊ฒ€์ฆ๋ถ€๋ถ„

iamportClient.cancelPaymentByImpUid(new CancelData(iamportResponse.getResponse().getImpUid(), true, new BigDecimal(iamportPrice)));
            throw new RuntimeException("๊ฒฐ์ œ๊ธˆ์•ก ์œ„๋ณ€์กฐ ์˜์‹ฌ");

PortOne์ชฝ์˜ API๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฒฐ์ œ ์ทจ์†Œ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•ด๋†“์€ ๊ฐ€๊ฒฉ์„ ์ž„์˜๋กœ ์กฐ์ž‘ํ•˜์—ฌ ๊ฒฐ์ œ๋ฅผ ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์‹ค์ œ ๊ฒฐ์ œ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์–ด๋„ ์„œ๋ฒ„์ธก์—์„œ ๊ฒฐ์ œ์ทจ์†Œ๋ฅผ ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

Webhook๋„์ž…

์›นํ›…์ด๋ž€ ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์„ ๋•Œ(๊ฒฐ์ œ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์„ ๋•Œ) ์„ค์ •ํ•ด๋†“์€ URL๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

๋งŒ์•ฝ ๊ฒฐ์ œ๊ฐ€ ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•ด๋†“์€ URL๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

curl -H "Content-Type: application/json" -X POST -d '{ "imp_uid": "imp_1234567890", "merchant_uid": "order_id_8237352", "status": "paid" }' { NotificationURL }

  • imp_uid : ๊ฒฐ์ œ๋ฒˆํ˜ธ
  • merchant_uid : ์ฃผ๋ฌธ ๋ฒˆํ˜ธ
  • status : ๊ฒฐ์ œ์ƒํƒœ

์›นํ›…์„ ๋„์ž…ํ•˜๋Š” ์ด์œ 

  • ๋ณดํ†ต ์›นํ›…์€ ๊ฐ€์ƒ๊ณ„์ขŒ์— ๋ˆ์ด ์ž…๊ธˆ๋˜์—ˆ๋Š”์ง€ ์•ˆ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์šฉ๋„๋กœ ๋งŽ์ด์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ฐ€์ƒ๊ณ„์ขŒ๋Š” ์ฆ‰์‹œ ๋ˆ์ด ์ž…๊ธˆ๋˜์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์— ํฌํŠธ์›์ชฝ์—์„œ ๋Œ€๊ธฐ๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ๋ˆ์„ ์ž…๊ธˆํ–ˆ๋‹ค! ๋ผ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ ๋•Œ ๋ฐฑ์—”๋“œ๋‹จ์—์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ๊ฐ€์ƒ๊ณ„์ขŒ์— ๋ˆ์„ ์ž…๊ธˆํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์ผ๋‹จ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์žˆ์œผ๋‹ˆ ๋ฐฐ์ œํ•˜๊ณ  ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ๋Š๊น€, ๋ธŒ๋ผ์šฐ์ € ์ž๋™ ์ƒˆ๋กœ๊ณ ์นจ ๋“ฑ์˜ ์ด์œ ๋กœ ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ฒฐ์ œ ์™„๋ฃŒ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ฐ„ํ—์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•ด ์›นํ›…์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค.

About

DIDACTO Core API Server

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 97.3%
  • JavaScript 1.4%
  • Other 1.3%