Skip to content

soolzzak/FE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

520 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Thumbnail

๐Ÿปํ˜ผ์ˆ ์ง (HonSoolZZAK)

  • ์ง‘์—์„œ ์‹ฌ์‹ฌํ•˜๊ณ  ์“ธ์“ธํ•˜๊ฒŒ ํ˜ผ์ˆ ์€ ๊ทธ๋งŒ! ํŽธ์•ˆํ•˜๊ฒŒ ์ง‘์—์„œ ์ˆ ์ง ๋ฉ”์ดํŠธ ์ฐพ๊ธฐ!

๐Ÿ“† ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„

  • 2023๋…„ 5์›” 19์ผ ~ 2023๋…„ 6์›” 30์ผ

โœจ์šฐ๋ฆฌ ํŒ€์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค

์—ญํ•  ์ด๋ฆ„ GitHub
Front-end ๋ฐฐ์ •ํ˜„(L) https://github.com/JungHBae
Front-end ์ตœ์„ฑ๋นˆ https://github.com/sbchoi5451
Front-end ์กฐ์„ ์•„ https://github.com/princesssana
Back-end ์ง€ํ˜„๊ฒฝ(VL) https://github.com/Jello92
Back-end ๊น€์ง€ํ˜„ https://github.com/jihyeon117
Back-end ๊น€์ƒ์šฐ https://github.com/kimsangwoo0505
Designer ๊ณฝ์ค€ํฌ

๐Ÿน ์ฃผ์š” ๊ธฐ๋Šฅ ๋ฐ ์„œ๋น„์Šค

์ง ! ๋ฒ„ํŠผ
  • ์ง  ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ƒ๋Œ€๋ฐฉ๊ณผ ๊ธฐ๋ถ„ ์ข‹๊ฒŒ ์ง ์„ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง _๊ธฐ๋Šฅ
์•„์ด์Šค ๋ธŒ๋ ˆ์ดํ‚น ์นด๋“œ
  • ์ฒ˜์Œ ๋ณธ ์ง๊ฟ๊ณผ ์–ด์ƒ‰ํ•ด์„œ ๋ฌด์Šจ ๋ง์„ ํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅผ๋•Œ! ์•„์ด์Šค ๋ธŒ๋ ˆ์ด์ปค ์งˆ๋ฌธ ์นด๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ง๊ฟ๊ณผ ๋Œ€ํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ด์Šค๋ธŒ๋ ˆ์ด์ปค
์ด์–ด๋งํ•˜๊ธฐ ๊ฒŒ์ž„
  • ์ด์–ด๋งํ•˜๊ธฐ ๊ฒŒ์ž„์„ ํ†ตํ•˜์—ฌ ์ƒ๋Œ€๋ฐฉ๊ณผ ์žฌ๋ฏธ์žˆ๊ฒŒ ๊ฒŒ์ž„๋„ ํ•˜๊ณ  ์นœํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ž„-min
์œ ํŠœ๋ธŒ ๋™์‹œ ์‹œ์ฒญ
  • ์œ ํŠœ๋ธŒ ๋งํฌ๋ฅผ ๋„ฃ์œผ๋ฉด ์ง๊ถ๊ณผ ์›ํ•˜๋Š” ์˜์ƒ์„ ๋™์‹œ ์‹œ์ฒญ ๋ฐ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Youtube_(1) (online-video-cutter com) (1)
ํ•จ๊ป˜ ์‚ฌ์ง„์ฐ๊ธฐ
  • ๋งŒ์•ฝ ์ง๊ฟ๊ณผ ์ฆ๊ฑฐ์šด ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ๋‹ค๋ฉด, ํ•จ๊ป˜ ์‚ฌ์ง„์„ ์ฐ์–ด ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ๋Œ€๋ฐฉ์€ ์‚ฌ์ง„ ์ฐ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์—ฌ๋ถ€๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ง„์ฐ๊ธฐ-min
์ตœ๊ทผ์— ๋งŒ๋‚œ ์œ ์ €, ํŒ”๋กœ์ž‰, ์ฐจ๋‹จ ์œ ์ € ๋ชฉ๋ก
  • ๋งˆ์ดํŽ˜์ด์ง€์—์„œ ์ตœ๊ทผ์— ๋งŒ๋‚œ ์œ ์ €, ํŒ”๋กœ์ž‰ ํ•˜๋Š” ์œ ์ € ๋ฐ ์ฐจ๋‹จํ•œ ์œ ์ € ๋ชฉ๋ก๋“ค์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ดํŽ˜์ด์ง€_๋ชฉ๋ก
๋„์ˆ˜ ๋ ˆ๋ฒจ
  • ๋„์ˆ˜ ๋ ˆ๋ฒจ์€ ์ƒ๋Œ€๋ฐฉ์˜ ๋งค๋„ˆ๋ฅผ ํ‰๊ฐ€ํ•ด์ฃผ๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๋„์ˆ˜๊ฐ€ ๋†’์œผ๋ฉด ๋†’์„ ์ˆ˜๋ก ๋งค๋„ˆ๊ฐ€ ์ข‹์€ ์œ ์ €๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋„์ˆ˜๊ธฐ๋Šฅ-min
์ชฝ์ง€ ๊ธฐ๋Šฅ
  • ์ชฝ์ง€ ๊ธฐ๋Šฅ์„ ํ†ตํ•˜์—ฌ ์œ ์ € ๊ฐ„ ์†Œํ†ตํ•˜๊ณ  ์ชฝ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. KakaoTalk_20230720_230035470
์œ ์ € ์ฐพ๊ธฐ
  • ์œ ์ € ์ฐพ๊ธฐ๋ฅผ ํ†ตํ•˜์—ฌ, ๋‹ค๋ฅธ ์œ ์ €๋ฅผ ์ฐพ์•„์„œ ํŒ”๋กœ์šฐ, ์‹ ๊ณ , ์ฐจ๋‹จ, ์ชฝ์ง€ ๋ณด๋‚ด๊ธฐ ๋ฐ ๋„์ˆ˜ ์˜ฌ๋ฆฌ๊ธฐ ๋“ฑ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ €์ฐพ๊ธฐ-min
๋ฐฉ ๋ณ„ ์นดํ…Œ๊ณ ๋ฆฌ
  • ๋ฐฉ ๋ณ„๋กœ ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์žˆ์–ด, ์›ํ•˜๋Š” ์นดํ…Œ๊ณ ๋ฆฌ์— ๋ฐฉ์„ ์ƒ์„ฑ ํ•˜๊ฑฐ๋‚˜, ์ž…์žฅ ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๋ณ„_์นดํ…Œ๊ณ ๋ฆฌ
๋ฐฉ ์„ค์ • ๊ธฐ๋Šฅ
  • ๋ฐฉ ์„ค์ • ๊ธฐ๋Šฅ์„ ํ†ตํ•˜์—ฌ, ์กฐ๊ธˆ ๋” ์„ธ๋ถ€์ ์œผ๋กœ ์›ํ•˜๋Š” ๋ฐฉ์„ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ_์„ค์ •-min

๐Ÿ›  Project Architecture

์•„ํ‚คํ…์ณ

๐Ÿ“š Tech Stack

FRONTEND

React TypeScript TailwindCSS HTML5 CSS3 JavaScript React Query

BACKEND

Java Spring Hibernate Docker Apache Tomcat Redis Ubuntu Gradle MariaDB MySQL

๐Ÿ’ปTechnical Decisions

์‚ฌ์šฉ ๊ธฐ์ˆ  ๊ธฐ์ˆ  ์„ค๋ช…
๊ณตํ†ต WebRTC ์„œ๋ฒ„์™€ ๊ฐ™์€ ์ค‘๊ฐ„์ž๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ๋ธŒ๋ผ์šฐ์ € ๊ฐ„์„ P2P๋กœ ์—ฐ๊ฒฐ ํ•  ์ˆ˜ ์žˆ๊ณ , ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ํŠน์„ฑ์„ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐœ์ธํ™”๋˜๊ณ  ์ฐธ์—ฌ ์œ ๋„์ ์ธ ์›น ์„œ๋น„์Šค์— ์ ํ•ฉ
๊ณตํ†ต Websockets WebRTC์˜ signal channel๋กœ ์‚ฌ์šฉ
๊ณตํ†ต https WebRTC์—์„œ ์นด๋ฉ”๋ผ ์‚ฌ์šฉ ๊ถŒํ•œ ๋ฐ ๋ณด์•ˆ์„ ์œ„ํ•˜์—ฌ https ์‚ฌ์šฉ
๊ณตํ†ต Oauth2.0 oauth2.0๋ฅผ ์ด์šฉํ•œ ์นด์นด์˜ค ์†Œ์…œ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋”์šฑ ํŽธ๋ฆฌํ•˜๊ฒŒ ๋กœ๊ทธ์ธ ๋ฐ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒํ•จ
๊ณตํ†ต SSE ์„œ๋ฒ„์—์„œ ์ดˆ๊ธฐ ์š”์ฒญ์„ ํ•˜์ง€ ์•Š๊ณ ๋„ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ค„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ชฝ์ง€๋ฅผ ๋ฐ›๊ฑฐ๋‚˜ ํŒ”๋กœ์ž‰ํ•˜๊ณ  ์žˆ๋Š” ์œ ์ €์˜ ๋ฐฉ ๊ฐœ์„ค์‹œ, ์•Œ๋ฆผ์„ ๋ณด๋‚ด์ฃผ๋Š” ์šฉ๋„์ž„์œผ๋กœ SSE๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ๋‹จ๋ฐฉํ–ฅ ์ฑ„๋„์„ ์—ด์–ด์คŒ
FE Typescript ํšจ์œจ์ ์ธ Refactoring, ํ˜‘์—… ๋ฐ ์œ ์ง€๋ณด์ˆ˜ & ์•ˆ์ „ํ•˜๊ฒŒ Type ํ™œ์šฉ ๊ฐ€๋Šฅ
FE React Query ๋น„๋™๊ธฐ ์š”์ฒญ์„ ํ•ด์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ ์บ์‹ฑ, ๋ฌดํšจํ™”, stale time ๋“ฑ์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ๋กœ ์‚ฌ์šฉ
FE Jotai ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ Redux์™€ ๊ฐ™์€ Flux ๊ธฐ๋ฐ˜ ์ƒํƒœ๊ด€๋ฆฌ๋ณด๋‹ค atomic ์ƒํƒœ๊ด€๋ฆฌ ์„ ํƒ. Recoil๋ณด๋‹ค ๋” ๊ฐ€๋ณ๊ณ  boilerplate๊ฐ€ ์ ์€ Jotai ์„ ํƒ
FE CloudFront React ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ฐฐํฌ๋œ s3 ๋ฒ„ํ‚ท์— HTTPS๋ฅผ ์ ์šฉ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
FE CI/CD (FE) Code Build, Code Deploy & Code Pipeline์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌ
BE CI/CD (BE) Jenkins์™€ Github Actions (CI) + AWS CodeDeploy(CD) ์ค‘ ๊ณ ๋ฏผ์„ ํ•˜์˜€์ง€๋งŒ, Jenkins์˜ ๊ฒฝ์šฐ Docker๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋ฉฐ ๊ทœ๋ชจ๊ฐ€ ์ž‘์€ ํ”„๋กœ์ ํŠธ์ด๋ฏ€๋กœ ์„ค์ •ํ•˜๋Š”๋ฐ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์„ค์ •์ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ณ  ๊ด€๋ฆฌ์— ์šฉ์ดํ•œ GithubAction, Code Deploy ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌ
BE Redis ์ธ๋ฉ”๋ชจ๋ฆฌ DB์ธ Redis๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ ‘๊ทผ์‹œ๊ฐ„์„ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค๊ณ  ํ•œ์ •๋œ ์‹œ๊ฐ„๋งŒ ์œ ํšจํ•œ Refresh Token์— ๋Œ€ํ•ด ์œ ํšจ์‹œ๊ฐ„์„ ์„ค์ •ํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๊ด€๋ฆฌ
BE Swagger ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ์˜ ํšจ์œจ์ ์ด๊ณ  ์ง๊ด€์ ์ธ ์˜์‚ฌ์†Œํ†ต์„ ์œ„ํ•˜์—ฌ API์˜ ๊ธฐ๋Šฅ์„ ๋ฌธ์„œํ™”ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ์œ„ํ•ด ์ ์šฉ
BE S3 ์ด๋ฏธ์ง€๋ฅผ ์ง์ ‘ DB์— ์ €์žฅํ•˜๋ฉด DB์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ ธ์„œ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, S3์™€ ๊ฐ™์€ ์Šคํ† ๋ฆฌ์ง€ ์„œ๋น„์Šค์— ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•˜์—ฌ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ ๊ตฌํ˜„
BE Gradle ์Šคํฌ๋ฆฝํŠธ ๊ธธ์ด์™€ ๊ฐ€๋…์„ฑ ๋ฉด์—์„œ๋„ ์šฐ์ˆ˜ํ•˜๊ณ , ์˜์กด์„ฑ์ด ๋Š˜์–ด๋‚ ์ˆ˜๋ก ์„ฑ๋Šฅ๊ณผ ์Šคํฌ๋ฆฝํŠธ์˜ ํ’ˆ์งˆ์˜ ์ฐจ์ด๊ฐ€ ๋‚˜๋ฉฐ, ๋นŒ๋“œ ํƒ€์ž„ ์†๋„๋„ ๋น ๋ฆ„
BE Junit ํ…Œ์ŠคํŠธ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž์˜ ์ž‘์—… ์‹œ๊ฐ„ ์ ˆ์•ฝ ๋ฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์™€ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ž‘์„ฑ ํ•  ์ˆ˜ ์žˆ์–ด ์œ ์ง€ ๋ณด์ˆ˜์— ํšจ๊ณผ์ ์ž„. ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ํ‘œ์‹œํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ํ˜•์‹ ์ œ๊ณตํ•˜์—ฌ ๊ฐ€๋…์„ฑ์ด ์ข‹์Œ

๐Ÿ“… API ๋ช…์„ธ์„œ

ํ˜ผ์ˆ ์ง! RESTful API

๐Ÿ— ERD

image

โš™ User Feedback ๋ฐ˜์˜

2023.06.17
  • ๋นˆ๋ฐฉ ๋ฒ„๊ทธ ์ˆ˜์ •
2023.06.19
  • Youtube ๊ตฌ์ถ•, ์œ ์ € ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ (๋ฉ”์ธ ํŽ˜์ด์ง€ ํ”„๋กœํ•„ ๋ˆŒ๋ €์„๋•Œ ๊ตญ๋ฌธ์œผ๋กœ ๋ณ€๊ฒฝ)
2023.06.20
  • SSE ๋ฐ ์ชฝ์ง€ ๊ธฐ๋Šฅ / ์œ ์ € ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ํ•˜์—ฌ ๋””์ž์ธ ์ˆ˜์ • ๋ฐ ์ชฝ์ง€, ์œ ์ € ์ฐพ๊ธฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
2023.06.21
  • ์ด์–ด๋งํ•˜๊ธฐ ๊ฒŒ์ž„ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • ๋ฐฉ์ œ๋ชฉ, ๋‹‰๋„ค์ž„ ๊ธธ์ด ์ œํ•œ
  • ๋ฐฉ์—์„œ ๋ฉ”์ธ ํ™ˆ ๋ฐฐ๋„ˆ๋ฅผ ํ†ตํ•ด ์ดํƒˆํ•  ๊ฒฝ์šฐ ํŒ์—… ๋…ธ์ถœ
  • ์ฑ„ํŒ…๋ฐฉ์—์„œ ์œ ์ € ํ”„๋กœํ•„ ๋ˆ„๋ฅด๋ฉด, ๋งˆ์ดํŽ˜์ด์ง€์ฒ˜๋Ÿผ ๋ชจ๋‹ฌ ๋„์šฐ๊ธฐ
  • ๋น„๊ณต๊ฐœ ๋ฐฉ์—ฌ๋ถ€ ์นด๋“œ์— ๋ณด์—ฌ์ฃผ๊ธฐ
  • YouTube ์œ ์ € ์†Œ๋ฆฌ ์—ฐ๊ฒฐ ๋ฐ ์ปจํŠธ๋กค ์ œ์–ด
  • ์œ ์ € ์นด๋“œ ์ด๋ฉ”์ผ ๋…ธ์ถœ X / ๋„์ˆ˜ ๋ ˆ๋ฒจ ๊ด€๋ จ ์„ค๋ช…์„œ ๊ตฌ์ถ•
  • ๋ฉ”์ธํŽ˜์ด์ง€ ๋ฐฉ ์นด๋“œ ๋ฐ ์ž…์žฅ์ „ ๋ชจ๋‹ฌ ๋””์ž์ธ ๋ณ€๊ฒฝ ๋ฐ ๋ฐฉ์žฅ ์ •๋ณด ์ถ”๊ฐ€
  • ์œ ์ €์ฐพ๊ธฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • ๋งˆ์ดํฌ, ์นด๋ฉ”๋ผ state ๊ตญ๋ฌธ์œผ๋กœ ๋ณ€๊ฒฝ ๋ฐ ํ™”๋ฉด๊ณต์œ  ์œ„์น˜ / ๋งˆ์ดํฌ, ํ™”๋ฉด ๋ฒ„ํŠผ ๋ฒ„๊ทธ ์ˆ˜์ •
  • ์‹ ๊ณ ๋ฒ„ํŠผ ๋ชจ๋‹ฌ์ฐฝ ๋‹ซํžˆ๊ธฐ ์ˆ˜์ •
  • ์ƒ๋Œ€๋ฐฉ ๋‚˜๊ฐ€๋ฉด ๋ฐ”๋กœ ํ™”๋ฉด ์ „ํ™˜ ๋  ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ •
  • ๊ฐ•ํ‡ด ๋‹นํ–ˆ์„๋•Œ ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ๊ฐ•ํ‡ด๋˜์—ˆ๋‹ค๋Š” ๋ชจ๋‹ฌ ๋„์šฐ๊ธฐ
  • ๊ฒŒ์ŠคํŠธ๋‚˜ ํ˜ธ์ŠคํŠธ ๋‚˜๊ฐ”์„๋•Œ ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ๋ฉ”์„ธ์ง€ ๋ชจ๋‹ฌ ๋œจ์šฐ๊ธฐ
2023.06.22
  • ์œ ์ €ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ํ•˜์—ฌ ๊ฒŒ์ž„ ์„ค๋ช… ๋ฐ ํ”Œ๋กœ์šฐ ์ถ”๊ฐ€
  • ์•„์ด์Šค๋ธŒ๋ ˆ์ด์ปค ๊ธฐ๋Šฅ ๊ตฌํ˜„ (BE)
  • Lighthouse ์„ฑ๋Šฅ ๊ฐœ์„  ์œ„ํ•ด ๋ฉ”์ธ ๋ฐฐ๋„ˆ webp๋กœ convert
  • ์•„์ด์Šค๋ธŒ๋ ˆ์ด์ปค ๊ธฐ๋Šฅ ๋””์ž์ธ ๋ฐ ๊ตฌํ˜„ ์™„๋ฃŒ
  • ํ•œ์ค„์†Œ๊ฐœ 150์ž ์ œํ•œ
  • ํšŒ์›๊ฐ€์ž… ์นด์นด์˜ค ๋ฒ„ํŠผ ์ถ”๊ฐ€
  • ๋งˆ์ดํฌ, ๋น„๋””์˜ค on/off ๋ฒ„๊ทธ ์ˆ˜์ •
  • ๋ฐฉ ์‚ญ์ œ ๋ฒ„๊ทธ ์ˆ˜์ • ์™„๋ฃŒ
  • ์‚ฌ์ง„์ฐ๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์™„๋ฃŒ
  • ๋ฉ”์„ธ์ง€ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์™„๋ฃŒ / ์ชฝ๊ธฐ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์™„๋ฃŒ
2023.06.23
  • ํšŒ์› ํƒˆํ‡ด ๊ธฐ๋Šฅ
  • ์•„์ด์Šค๋ธŒ๋ ˆ์ด์ปค & ์ชฝ์ง€ ์‚ฌ์šฉ background ์ˆ˜์ •
  • ๋งˆ์ดํŽ˜์ด์ง€์— ์ชฝ์ง€ ๋ฒ„ํŠผ ์ถ”๊ฐ€
2023.06.30
  • Refresh Token Redis ์ ์šฉ
  • ๋ณด์•ˆ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•˜์—ฌ HTTP Only์™€ Secure ์ ์šฉ

โš’ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

FE

๋™์ผ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ ๊ฒฐ๊ณผ๊ฐ’์„ ์ƒˆ๋กœ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š์•˜๋˜ ๋ฌธ์ œ

๋ฌธ์ œ์‚ฌํ•ญ

๊ฒ€์ƒ‰ input์œผ๋กœ ์ด์ „๊ณผ ๋™์ผ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž„๋ ฅํ–ˆ์„ ๋•Œ ๊ฐ’์„ ์ƒˆ๋กœ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š์Œ.

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

๊ฒ€์ƒ‰์–ด๊ฐ€ atom์œผ๋กœ ๋ฉ”์ธํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์— ์ „๋‹ฌ๋˜์–ด ๊ฐ’์˜ update๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ useMutation์œผ๋กœ ๋ฐฉ ๋ฆฌ์ŠคํŠธ ๋ถˆ๋Ÿฌ์˜ด.

๊ทธ๋Ÿฌ๋‚˜ ์ด์ „๊ณผ ๋™์ผ ๊ฐ’์„ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ ๊ฐ’์˜ ๋ณ€ํ™”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, trigger์šฉ boolean atom์„ ๋งŒ๋“ค์–ด์„œ useEffect๋ฅผ ํ™œ์šฉํ•ด ๊ฒ€์ƒ‰ ์„ฑ๊ณต

Input๊ฐ’์ด ๋งŽ์€ ์ปดํฌ๋„ŒํŠธ์— input์ด ๋ฐ”๋€”๋•Œ๋งˆ๋‹ค ์ „์ฒด ๋ Œ๋”๋ง ๋ฐœ์ƒ ๋ฌธ์ œ

๋ฌธ์ œ์‚ฌํ•ญ

CI/CDํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ธฐ์กด์— jarํŒŒ์ผ์„ EC2๋ฅผ ํ†ตํ•ด ๋ฐฐํฌํ•˜๋˜ ๋ฐฉ์‹๊ณผ ํƒ€์ด๋ฐ์ ์œผ๋กœ ์ถฉ๋Œ๋  ๊ฒฝ์šฐ EC2๋ฅผ ์žฌ์‹œ์ž‘ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ  ํƒ„๋ ฅ์  ip๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•„ ์žฌ์‹œ์ž‘ํ•˜๋ฉด IP๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ์ƒ๊ธฐ๋Š” ์„ค์ • ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ

๋ฌธ์ œ๋ถ„์„

์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ๋กœ EC2๋ฅผ ์žฌ์‹œ์ž‘ํ•  ๊ฒฝ์šฐ ๋งค๋ฒˆ IP๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด DNS๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๊ณ  DNS์ „ํŒŒ์‹œ๊ฐ„ ๋•Œ๋ฌธ์— ์•ˆ์ •ํ™”๊นŒ์ง€ ๊ธธ๋ฉด 48์‹œ๊ฐ„๊นŒ์ง€๋„ ๊ฑธ๋ฆด์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

EC2์„ค์ •์„ ํƒ„๋ ฅ์  ip๋กœ ๋ฐ”๊พผ๋‹ค๋ฉด CI/CD๊ตฌ์ถ•๊ณผ์ •์—์„œ ์ƒ๊ธด ์ถฉ๋Œ ๋ฌธ์ œ๋ง๊ณ ๋„ ๋‹ค๋ฅธ ๋ฌธ์ œ์—๋„ ๋Œ€๋น„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ

์˜๊ฒฌ์กฐ์œจ ๋ฐ ์˜์‚ฌ๊ฒฐ์ •

๋‹น์žฅ์— DNS์ „ํŒŒ ์‹œ๊ฐ„์œผ๋กœ ์ธํ•ด ์„œ๋ฒ„๊ฐ€ ๋ถˆ์•ˆ์ •ํ•ด์งˆ ์ˆ˜ ์žˆ๋”๋ผ๋„ CI/CDํ™˜๊ฒฝ ๊ตฌ์ถ•๊ณผ์ •์—์„œ ์ƒ๊ธด ์ถฉ๋Œ๊ฐ™์ด ์–ธ์ œ๋ผ๋„ EC2๋ฅผ ์žฌ์‹œ์ž‘ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํƒ„๋ ฅ์  IP๋กœ ๋ฐ”๊พธ๊ณ  DNS๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ๋กœ ๊ฒฐ์ •

OSX ํ™˜๊ฒฝ์—์„œ Input๊ฐ’์ด ํ‚ค๋ณด๋“œ Enter์ด๋ฒคํŠธ ๋•Œ ์ž…๋ ฅ์ด ๋‘๋ฒˆ ์ด์ƒ ๋‚˜๊ฐ€๋Š” ํ˜„์ƒ

๋ฌธ์ œ์‚ฌํ•ญ

๋ช‡ Mac OS ํ™˜๊ฒฝ์—์„œ Input๊ฐ’์„ ์ž…๋ ฅํ•˜๊ณ  Enter๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ Keydown event๊ฐ€ ๋‘๋ฒˆ ๋‚˜๊ฐ€๋ฉด์„œ ์ž…๋ ฅ์ด ๋‘๋ณ€ ์ธ์‹ ๋˜๋Š” ํ˜„์ƒ์ด ๊ด€์ธก๋จ

๋ฌธ์ œ์žฌํ˜„

์ด ํ˜„์ƒ์„ ์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ŠคํŠธ ํ•ด๋ณธ ๊ฒฐ๊ณผ, ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•œ๊ธ€์„ ์ž…๋ ฅ ํ•  ๋•Œ keycode 229๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Œ. ํ•œ๊ธ€์˜ ์กฐํ•ฉ์„ ํ†ตํ•œ ๊ธ€์ž์ž…๋ ฅ์™„์„ฑ์˜ ํŠน์„ฑ์ƒ ์ž…๋ ฅ ๋„์ค‘ ์ž…๋ ฅ ์™„๋ฃŒ๋กœ ์ธ์‹ํ•˜์ง€ ์•Š๊ณ  ์•„์ง ์ž…๋ ฅ์ค‘์ธ๊ฒƒ์œผ๋กœ ์ธ์‹ํ•˜์—ฌ ์•„์ง IME composing ๋‹จ๊ณ„์—์„œ๋Š” ์•„์ง composing์ด๊ธฐ ๋•Œ๋ฌธ์— 229 ์ฝ”๋“œ๊ฐ€ ๋‚˜ํƒ€๋‚จ.

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

์•„์ง composing ๋‹จ๊ณ„์—์„œ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ ๋˜๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์—, 229๋ฅผ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ.

event.keyCode !== eventTarget.addEventListener("keydown", event => {
if (event.isComposing || event.keyCode === 229) {
return;
}
});

BE

EC2๋ฅผ ์žฌ์‹œ์ž‘ํ•  ๊ฒฝ์šฐ ์ƒ๊ธฐ๋Š” ์„ค์ • ๋ฌธ์ œ

๋ฌธ์ œ์‚ฌํ•ญ

CI/CDํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ธฐ์กด์— jarํŒŒ์ผ์„ EC2๋ฅผ ํ†ตํ•ด ๋ฐฐํฌํ•˜๋˜ ๋ฐฉ์‹๊ณผ ํƒ€์ด๋ฐ์ ์œผ๋กœ ์ถฉ๋Œ๋  ๊ฒฝ์šฐ EC2๋ฅผ ์žฌ์‹œ์ž‘ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ  ํƒ„๋ ฅ์  ip๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์•„ ์žฌ์‹œ์ž‘ํ•˜๋ฉด IP๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด ์ƒ๊ธฐ๋Š” ์„ค์ • ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ

๋ฌธ์ œ๋ถ„์„

์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ๋กœ EC2๋ฅผ ์žฌ์‹œ์ž‘ํ•  ๊ฒฝ์šฐ ๋งค๋ฒˆ IP๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด DNS๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๊ณ  DNS์ „ํŒŒ์‹œ๊ฐ„ ๋•Œ๋ฌธ์— ์•ˆ์ •ํ™”๊นŒ์ง€ ๊ธธ๋ฉด 48์‹œ๊ฐ„๊นŒ์ง€๋„ ๊ฑธ๋ฆด์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

EC2์„ค์ •์„ ํƒ„๋ ฅ์  ip๋กœ ๋ฐ”๊พผ๋‹ค๋ฉด CI/CD๊ตฌ์ถ•๊ณผ์ •์—์„œ ์ƒ๊ธด ์ถฉ๋Œ ๋ฌธ์ œ๋ง๊ณ ๋„ ๋‹ค๋ฅธ ๋ฌธ์ œ์—๋„ ๋Œ€๋น„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋จ

์˜๊ฒฌ์กฐ์œจ ๋ฐ ์˜์‚ฌ๊ฒฐ์ •

๋‹น์žฅ์— DNS์ „ํŒŒ ์‹œ๊ฐ„์œผ๋กœ ์ธํ•ด ์„œ๋ฒ„๊ฐ€ ๋ถˆ์•ˆ์ •ํ•ด์งˆ ์ˆ˜ ์žˆ๋”๋ผ๋„ CI/CDํ™˜๊ฒฝ ๊ตฌ์ถ•๊ณผ์ •์—์„œ ์ƒ๊ธด ์ถฉ๋Œ๊ฐ™์ด ์–ธ์ œ๋ผ๋„ EC2๋ฅผ ์žฌ์‹œ์ž‘ํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํƒ„๋ ฅ์  IP๋กœ ๋ฐ”๊พธ๊ณ  DNS๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ๋กœ ๊ฒฐ์ •

Game ๊ตฌํ˜„ ์ค‘ ์ˆœํ™˜ ์ฐธ์กฐ ์—๋Ÿฌ ๋ฐœ์ƒ

๋ฌธ์ œ์‚ฌํ•ญ KakaoTalk_20230623_214620866

game์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์—์„œ ์ˆœํ™˜ ์ฐธ์กฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚จ

๋ฌธ์ œ๋ถ„์„

KakaoTalk_20230623_233457180

SignalHandler๋Š” IdiomGameService๋ฅผ ์ฐธ์กฐํ•จ

KakaoTalk_20230623_233442770

IdiomGameService๋Š” SignalHandler ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ signalHandler๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

โ†’ ์ˆœํ™˜ ์ฐธ์กฐ ๋ฐœ์ƒ

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

IdiomGameService์—์„œ SignalHandler์˜ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•จ

์˜๊ฒฌ์กฐ์œจ ๋ฐ ์˜์‚ฌ๊ฒฐ์ •

KakaoTalk_20230623_233644761

IdiomGameService๊ฐ€ SignalHandler๋ฅผ ์ง์ ‘ ์˜์กดํ•˜๋Š” ๋Œ€์‹  ApplicationContext๋ฅผ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋กœ ๊ฐ€์ง€๊ณ  startGame๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค SignalHandler ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•จ. ์ง์ ‘์ ์ธ ์˜์กด์„ฑ์ด ์ œ๊ฑฐ๋˜๋ฉฐ ์ˆœํ™˜ ์ฐธ์กฐ ํ•ด๊ฒฐ๋จ

DB์— ์ €์žฅ๋œ ์ž๋ฃŒ๊ฐ€ null๊ฐ’์œผ๋กœ ์กฐํšŒ๋˜๋Š” ๋ฌธ์ œ

๋ฌธ์ œ์‚ฌํ•ญ

๋ฃธ์ƒ์„ฑ๋ถ€๋ถ„์—์„œ save๋กœ ์ •๋ณด๋ฅผ db์— ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ทธ ์ •๋ณด๋ฅผ db์—์„œ ์กฐํšŒํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋Š”๋ฐ ๊ณ„์† null๊ฐ’์ด ์กฐํšŒ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ

๋ฌธ์ œ๋ถ„์„

์ฝ”๋“œ์˜ ๋กœ์ง๊ณผ์ •์—์„œ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ถ€๋ถ„์ด ์กฐํšŒ ์ •๋ณด์˜ saveํ›„ return์ด ๋๋‚˜๊ธฐ ์ด์ „์˜ ๊ณผ์ •์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ œ๋Œ€๋กœ ์กฐํšŒํ•  ์ˆ˜ ์—†์—ˆ์Œ

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

  1. ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ถ€๋ถ„์„ ๋‹ค๋ฅธ ํŒŒํŠธ๋ฅผ ํ†ตํ•ด์„œ ํ•ด๊ฒฐ
  2. ๊ธฐ์กด์— save๋กœ ์ €์žฅํ•˜๋Š” ๋ถ€๋ถ„์„ saveAndFlush๋ฅผ ์จ์„œ ํ•ด๊ฒฐ

์˜๊ฒฌ์กฐ์œจ ๋ฐ ์˜์‚ฌ๊ฒฐ์ •

saveAndFlush๋ฅผ ์จ์„œ ํ•ด๊ฒฐํ•ด๋„ ์„ฑ๋Šฅ์ ์ธ ๋ถ€๋ถ„์—์„œ ๋ฌธ์ œ๊ฐ€ ์—†๊ณ  ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๋„ ๋” ์ข‹์•„ ๋ณด์ด๋ฏ€๋กœ 2๋ฒˆ๋ฐฉ์‹์„ ํ†ตํ•ด์„œ ํ•ด๊ฒฐ

Host๊ฐ€ ๋น„์ •์ƒ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฉ์„ ๋‚˜๊ฐ€๋ฉด ๋ฐฉ์‚ญ์ œ ์•ˆ๋จ

๋ฌธ์ œ์‚ฌํ•ญ

Host User๊ฐ€ ๋ฐฉ์„ ๋งŒ๋“ค๊ณ  ๋‚˜๊ฐ€๊ธฐ ๋ฒ„ํŠผ์„ ํ†ตํ•ด ๋ฐฉ์„ ๋‚˜๊ฐ€๋Š”๊ฒƒ์ด ์•„๋‹Œ ๋น„์ •์ƒ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฉ์„ ๋‚˜๊ฐ€๋ฉด ๋ฐฉ์‚ญ์ œ๊ฐ€ ์•ˆ๋จ. (ex: URL์„ ํ†ตํ•ด ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ๋กœ ์ด๋™, ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒ)

๋ฌธ์ œ๋ถ„์„

๋ฐฉ๋‚˜๊ฐ€๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ์ œ๋Œ€๋กœ ์œ ์ €๊ฐ€ ๋‚˜๊ฐ„๋‹ค๋ฉด ๋ฒ„ํŠผ์— ๋ฐ˜์‘ํ•˜๋Š” ๋กœ์ง์ด ์ž‘๋™๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ๋น„์ •์ƒ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ host๊ฐ€ ๋‚˜๊ฐ„๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ๋กœ์ง์ด ์ž‘๋™ํ•˜์ง€ ์•Š์•„์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด ๊ฒƒ์œผ๋กœ ๋ถ„์„๋จ

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

  1. Session ์ •๋ณด์™€ ์—ฐ๊ฒฐ๋œ user์ •๋ณด ๋ฐ room์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์†Œ์ผ“์ด Close๋์„ ๋•Œ ๋ฐ˜์‘ํ•˜๋Š” ๋กœ์ง์„ ๋งŒ๋“ค์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ

  2. ์œ ์ €๋“ค์—๊ฒŒ ์•ˆ๋‚ด๋ฉ”์„ธ์ง€๋ฅผ ํ†ตํ•ด์„œ ๊ฐ€์ด๋“œ๋ผ์ธ ์ œ์‹œ

  3. Socket์ด Close ๋œ ํ›„, ์ผ์ • ์‹œ๊ฐ„ํ›„ ๋ฐฉ์ด ์ž๋™์œผ๋กœ ์‚ญ์ œ๋˜๋„๋ก ๊ตฌํ˜„

์˜๊ฒฌ์กฐ์œจ ๋ฐ ์˜์‚ฌ๊ฒฐ์ •

์†Œ์ผ“์ด Close๋์„ ๋•Œ ๋ฐ˜์‘ํ•˜๋Š” ๋กœ์ง์„ ํ†ตํ•˜๋Š”๊ฒŒ ๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์ธ๊ฑธ๋กœ ํŒ๋‹จ๋˜์–ด, ์œ ์ €๊ฐ€ ๋“ค์–ด์˜ค๊ณ  MSG_TYPE_JOIN์— ๋ฐ˜์‘ํ•˜๋Š” ๋กœ์ง์„ ์ด์šฉํ•˜์—ฌ ์œ ์ €์˜ Session์ •๋ณด์™€ ์œ ์ €๊ฐ€ ๋“ค์–ด์˜จ ๋ฐฉ์˜ ID๊ฐ’์„ ๋งต์œผ๋กœ ์—ฐ๊ฒฐ์‹œํ‚ค๊ณ , Session์ •๋ณด์™€ ์œ ์ €์˜ ID๊ฐ’์„ ๋งต์œผ๋กœ ์—ฐ๊ฒฐ์‹œ์ผœ ์ €์žฅํ•˜๊ณ  ์ด ์ •๋ณด์™€ ํ•จ๊ป˜ ์†Œ์ผ“์ด ๋‹ซํžˆ๋Š” ๊ฒƒ์— ๋ฐ˜์‘ํ•˜๋Š” afterConnectionClosed๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ

๊ณตํ†ต

https ์ธ์ฆ์„œ ๋ฐ ๋ณด์•ˆ๋ฌธ์ œ๋กœ SDP์ •๋ณด๊ฐ€ ์œ ์ €๊ฐ„์— ์ œ๋Œ€๋กœ ์ „์†ก์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ

๋ฌธ์ œ์‚ฌํ•ญ

  1. https๋Š” SSL/TLS ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ†ต์‹ ์„ ์•”ํ˜ธํ™”ํ•˜๋ฏ€๋กœย ๊ณต๊ฒฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ํƒˆ์ทจํ•  ์ˆ˜ ์—†๊ณ  ์›น ์‚ฌ์ดํŠธ ์„œ๋ฒ„๊ฐ€ ์‹ค์ œ ์„œ๋ฒ„์ž„์„ ํ™•์ธํ•˜๋ฏ€๋กœ ์‚ฌ์นญ์ด ๋ฐฉ์ง€๋จ
  2. ์‹œ๊ทธ๋„ ์ฑ„๋„์ด https๊ฐ€ ์•„๋‹Œ http๋กœ ๋ฐฐํฌ๋˜์—ˆ์„ ๋•Œ SDP์ •๋ณด๊ฐ€ ์œ ์ €๊ฐ„์— ์ œ๋Œ€๋กœ ์ „์†ก์ด ๋˜์ง€ ์•Š์•„ ํ™”์ƒ์—ฐ๊ฒฐ์ด ๋˜์ง€์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ. ๋Œ€๋‹ค์ˆ˜์˜ ์›น๋ธŒ๋ผ์šฐ์ €๋Š” ๋ณด์•ˆ์ด์Šˆ๋กœ ์ธํ•ด WebRTC๊ธฐ๋Šฅ์— ๋Œ€ํ•ด https๋ฅผ ํ†ตํ•ด ํŽ˜์ด์ง€๊ฐ€ ์ œ๊ณต๋˜๋„๋ก ๊ฐ•์ œํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์‹œ๊ทธ๋„ ์ฑ„๋„์ด https๊ฐ€ ์•„๋‹Œ http๋กœ ์ œ๊ณต๋œ๋‹ค๋ฉด sdp์ •๋ณด๊ฐ€ ์ œ๋Œ€๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š๊ฒŒ ๋จ

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

1-1. ๋ฌด๋ฃŒ HTTPS ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ๊ธฐ๊ด€์ธ Letโ€™s Encrypt๋ฅผ ํ†ตํ•ด ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„ https ์ ์šฉ

1-2. AWS์˜ ELB์™€ Route 53, ACM์„ ์ด์šฉํ•˜์—ฌ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„ ์ ์šฉ

  1. ๊ธฐ์กด์— ๋ฐฐํฌ๋˜์—ˆ๋˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋ฅผ http๊ฐ€ ์•„๋‹Œ https๋ฅผ ํ†ตํ•ด ๋ฐฐํฌํ•˜์—ฌ ์œ ์ €๊ฐ„์— sdp์ •๋ณด๊ฐ€ ์ œ๋Œ€๋กœ ์ „๋‹ฌ๋˜๋„๋ก ํ•˜๋ฉด ๋จ

์˜๊ฒฌ์กฐ์œจ ๋ฐ ์˜์‚ฌ๊ฒฐ์ •

1-1. ๋ณดํ†ต ์„œ๋น„์Šค๊ฐ€ ์†Œ๊ทœ๋ชจ๋ผ๋ฉด 1๋Œ€์˜ ์„œ๋ฒ„์— Nginx(ELB ๋Œ€์‹ ์— ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋กœ ์‚ฌ์šฉ)๋ฅผ ์„ค์น˜ํ•˜๊ณ  Let's Encrypt์—์„œ ๋ฐœ๊ธ‰๋ฐ›์€ ์ธ์ฆ์„œ๋ฅผ ๋“ฑ๋กํ•จ. ๊ทธ๋Ÿฌ๋‚˜ ์™€์ผ๋“œ์นด๋“œ ์ธ์ฆ์„œ์˜ ๊ฒฝ์šฐ ์ž๋™ ๊ฐฑ์‹ ์ด ์–ด๋ ต๋‹ค๋Š” ์ ๊ณผ 3๊ฐœ์›”๋งˆ๋‹ค ๊ฐฑ์‹ ์„ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Œ

1-2. AWS์—์„œ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๊ฐฑ์‹ ์ด ํ•„์š” ์—†๋Š” ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Œ

๊ฒฐ๋ก :

1. ์ด๋ฏธ AWS ์„œ๋ฒ„๋ฅผ ์ด์šฉ ์ค‘์ด๋ฏ€๋กœ ELB์™€ Route 53, ACM์„ ์ด์šฉํ•˜์—ฌ ํ•œ๋ฒˆ์— ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋” ๊ฐ„ํŽธํ•˜๊ณ  ์‰ฝ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ACM์„ ์ด์šฉํ•˜์—ฌ ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„ ์ ์šฉํ•จ

2. ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๊ฐ€ https๋กœ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์—…์„ ํ•˜๊ธฐ๋กœ ํ–ˆ์œผ๋ฉฐ, ์™„๋ฃŒ๋˜๊ธฐ ์ „ ์‹œ๊ฐ„๋™์•ˆ์€ http๋กœ ๋ฐฐํฌ๋œ ์„œ๋ฒ„๋ฅผ ์ด์šฉํ•ด์„œ ์ž‘์—…์„ ํ•˜๊ธฐ๋กœ ํ•จ

๋ฐฉ ๊ฐœ์„ค ํ›„ Guest๊ฐ€ 1๋ถ„์•ˆ์— ๋“ค์–ด์˜ค์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ์†Œ์ผ“ ๋Š๊ธฐ๋Š” ํ˜„์ƒ ๋ฐœ์ƒ

๋ฌธ์ œ์‚ฌํ•ญ

๋ฐฉ์„ ๋งŒ๋“ค๊ณ  ์†๋‹˜์ด ์•ˆ๋“ค์–ด์˜จ ์ƒํƒœ๋กœ 1๋ถ„์ •๋„ ์ง€์†๋˜๋ฉด ์ž๋™์œผ๋กœ ์†Œ์ผ“์ด ๋Š๊ธฐ๋Š” ํ˜„์ƒ ๋ฐœ์ƒ

๋ฌธ์ œ๋ถ„์„

๋”ฐ๋กœ ์ถ”๊ฐ€์ ์ธ ์„ค์ •์„ ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์†Œ์ผ“๋‚ด์— ํŠน์ • ํ™œ๋™์ด ์—†์œผ๋ฉด 1๋ถ„๋‚ด ๋Š๊ธฐ๋Š” ๊ฒƒ์ด Default๊ฐ’์ธ ๊ฒƒ์œผ๋กœ ๋ถ„์„

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

  1. ์†Œ์ผ“์˜ ํƒ€์ž„์•„์›ƒ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜์—ฌ ์†Œ์ผ“์ด ๋” ๊ธธ๊ฒŒ ์ง€์†๋˜๋„๋ก ํ•จ
  2. ์ฃผ๊ธฐ์ ์œผ๋กœ Ping๋ฉ”์„ธ์ง€๋ฅผ ์†Œ์ผ“์— ๋ณด๋‚ด, ํŠน์ • ํ™œ๋™์„ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค ์—ฐ๊ฒฐ ์œ ์ง€

์˜๊ฒฌ์กฐ์œจ ๋ฐ ์˜์‚ฌ๊ฒฐ์ •

ํƒ€์ž„์•„์›ƒ ์„ค์ •์„ ํ•ด๋„ ํŠน์ • ์‹œ์ ์—์„œ ๋Š๊ธฐ๋ฏ€๋กœ Ping๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ณด๋‚ด์„œ ์†Œ์ผ“์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ

Guest ํ‡ด์žฅ ํ›„, Host๊ฐ€ ๋‚˜๊ฐ€๋ฉด ๋ฐฉ์ด ์‚ญ์ œ๊ฐ€ ์•ˆ๋˜๋Š” ๋ฌธ์ œ

๋ฌธ์ œ์‚ฌํ•ญ

host๊ฐ€ ๋ฐฉ์„ ๋งŒ๋“ค๊ณ  ๋‚˜๊ฐ€๊ฑฐ๋‚˜, guest๋ž‘ ๋งŒ๋‚˜๊ณ  host๊ฐ€ ๋จผ์ € ๋ฐฉ์„ ๋‚˜๊ฐ€๋ฉด ๋ฐฉ์ด ์ œ๋Œ€๋กœ ์‚ญ์ œ๊ฐ€ ๋˜๋Š”๋ฐ guest ๋จผ์ € ๋‚˜๊ฐ€๊ณ  ๊ทธ๋‹ค์Œ host๊ฐ€ ๋‚˜๊ฐ€๋ฉด ๋ฐฉ์ด ์‚ญ์ œ๊ฐ€ ์•ˆ๋จ

๋ฌธ์ œ๋ถ„์„

ํŠน์ •์œ ์ €์˜ ์†Œ์ผ“์ด ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ๊ทธ ์œ ์ €์—๊ฒŒ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ์†Œ์ผ“์ด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์ดํ›„๋ถ€ํ„ฐ ๋กœ์ง์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๊ฒŒ๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋ถ„์„๋จ

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

ํŠน์ • ์œ ์ €์—๊ฒŒ ์ •๋ณด๋ฅผ ๋ณด๋‚ด๊ธฐ์ „ if๋ฌธ๊ณผ isOpen์„ ์ด์šฉํ•ด session์ด ๋ฏธ๋ฆฌ ์—ด๋ ค์žˆ๋‚˜ ์ฒดํฌํ•˜๋„๋ก ๋กœ์ง์„ ์งœ์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ

์˜๊ฒฌ์กฐ์œจ ๋ฐ ์˜์‚ฌ๊ฒฐ์ •

์†Œ์ผ“์— ์—ฐ๊ฒฐ๋œ ์œ ์ €์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ๋‚ ๋ฆด ๋•Œ ์—ฐ๊ฒฐ๋œ ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ์œ ์ €์—๊ฒŒ ๋กœ์ง์„ ๋‚ ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ ๊ฒ€ํ•˜๊ณ  isOpen๊ณผ if๋ฌธ์„ ์ด์šฉํ•ด ์†Œ์ผ“์ด ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ์œ ์ €์—๊ฒŒ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด ์ฃผ๋Š” ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐ

Guest 2๋ช…์ด ๋™์‹œ์— ์ž…์žฅํ•˜๋ฉด 3๋ช…์ด ์ž…์žฅ๋˜๋Š” ์˜ค๋ฅ˜

๋ฌธ์ œ์‚ฌํ•ญ

๋ฐฉ์žฅ์ด ๋ฐฉ์„ ๋งŒ๋“ค๊ณ  ๋‘๋ช…์ด ๋ฃธ์ฒดํฌ๋ฅผ ํ•˜๊ณ  ๋น„์Šทํ•œ ํƒ€์ด๋ฐ์— ์ž…์žฅํ•˜๋ฉด 3๋ช…์ด ์ž…์žฅํ•˜๋Š” ์˜ค๋ฅ˜๋ฐœ์ƒ

๋ฌธ์ œ๋ถ„์„

์ฒดํฌ๋ฃธ์˜ GET ์š”์ฒญ์„ ํ†ตํ•ด์„œ ์ธ์›์ด 2๋ช…๋ณด๋‹ค ๋งŽ์„ ๊ฒฝ์šฐ ๋กœ์ง์ด ํ†ต๊ณผ๋˜์ง€ ์•Š๋„๋ก ์ œํ•œ์‹œ์ผฐ๋Š”๋ฐ, ๋ฐฉ์ธ์›์ด 1๋ช…์ผ ๊ฒฝ์šฐ ๋ฉ”์ธํ™”๋ฉด์˜ 2๋ช…์˜ ์œ ์ €๊ฐ€ ๋น„์Šทํ•œ ํƒ€์ด๋ฐ์— ๋ฐฉ ์ž…์žฅ์„ ๋ˆ„๋ฅด๊ณ  ์ž…์žฅ์ „ ์ฒดํฌ ๋ชจ๋‹ฌ์ด ๋œจ๋ฉด ๋‘˜๋‹ค ์ฒดํฌ๋ฃธ์˜ ๋กœ์ง์ด ํ†ต๊ณผ๋˜์–ด 3๋ช…์ด ์ž…์žฅ๋˜๋Š” ์˜ค๋ฅ˜ ๋ฐœ์ƒ

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

  1. ๋ฃธ ์—”ํ„ฐ๋ถ€๋ถ„์—์„œ๋„ ํ•œ๋ฒˆ๋” ์ธ์›์„ ์ œํ•œํ•˜๋Š” ์‹์œผ๋กœ ํ†ต์ œ
  2. ์†Œ์ผ“์—์„œ ์ธ์›์ด 2๋ช…๋ณด๋‹ค ๋งŽ์„ ๊ฒฝ์šฐ ๋‚จ์€ ์ธ์›์˜ ์†Œ์ผ“์ด ์ œ๋Œ€๋กœ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ํ†ต์ œ

์˜๊ฒฌ์กฐ์œจ ๋ฐ ์˜์‚ฌ๊ฒฐ์ •

๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์€ ์†Œ์ผ“์—ฐ๊ฒฐ ์ž์ฒด๊ฐ€ ์•ˆ๋˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ์˜๊ฒฌ์ด ์ฑ„ํƒ๋˜์–ด MSG_TYPE_JOIN์„ ํ†ตํ•ด ๋กœ์ง์ด ์‹คํ–‰๋ ๋•Œ ๋ฐฉ์ธ์›์„ ์ฒดํฌํ•˜๊ณ  2๋ช…๋ณด๋‹ค ๋งŽ์€๊ฒฝ์šฐ ์กฐ๊ธˆ์ด๋ผ๋„ ๋А๋ ธ๋˜ ๋‚˜๋จธ์ง€ ํ•œ์‚ฌ๋žŒ์˜ ์†Œ์ผ“์„ ๋Š์–ด์„œ ํ•ด๊ฒฐ

๐Ÿ† Project Award

KakaoTalk_20230720_172231853

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors