Skip to content

wafflestudio20-5/team2-server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

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

Repository files navigation

Logo

"์„ธ์ƒ์˜ ๋ชจ๋“  ์งˆ๋ฌธ์—๋Š” ๋‹ต๋ณ€์ด ์žˆ๋‹ค"

์ง€์‹2n

ktlint check Deploy

๐Ÿ“˜ ์ง€์‹2n์€ ์–ด๋–ค ์„œ๋น„์Šค์ธ๊ฐ€์š”?


์ง€์‹2n์€ ์„ธ์ƒ์˜ ๋ชจ๋“  ์งˆ๋ฌธ์—๋Š” ๋‹ต๋ณ€์ด ์žˆ๋‹ค๋Š” ์บ์น˜ํ”„๋ ˆ์ด์ฆˆ๋ฅผ ๊ฐ€์ง„, ์งˆ๋ฌธํ•˜๊ณ  ๋‹ต๋ณ€ํ•˜๋Š” ์•ฑ์ž…๋‹ˆ๋‹ค.
์ด๊ณณ์—์„œ ์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ์–ด๋– ํ•œ ๊ถ๊ธˆํ•œ ๊ฑฐ๋ผ๋„ ์งˆ๋ฌธํ•  ์ˆ˜ ์žˆ๊ณ , ๋‚ด๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ์–ด๋–ค ์ง€์‹๋„ ๋‹ต๋ณ€์„ ๋‹ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฆ„์˜ ์œ ๋ž˜๋Š” '์„ธ์ƒ์— ์งˆ๋ฌธ์ด n๊ฐœ ์žˆ๋‹ค๋ฉด, ๊ทธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€๋„ n๊ฐœ ์žˆ์ง€ ์•Š์„๊นŒ?'
'๊ทธ๋ ‡๋‹ค๋ฉด ์ด 2n๊ฐœ์˜ ๊ธ€์ด ๋‹ฌ๋ฆฌ์ง€ ์•Š์„๊นŒ?'์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.
Team2์—์„œ ๋งŒ๋“  ๊ณต๊ฐ„์—์„œ ์ฆ๊ฒ๊ฒŒ ๋›ฐ์–ด๋†€์•„ ์ฃผ์„ธ์š”.

๐Ÿ‘ช ๋ˆ„๊ฐ€ ๋งŒ๋“ค์—ˆ๋‚˜์š”?

Spring developer: ์šฐํ˜์ค€, ์ด์ง€์›, ์กฐ์„ฑ๊ทœ
iOS developer: ๊น€๋ น๊ต, ๋ฐ•์ •ํ—Œ, ๋ฐ•์ฑ„ํ˜„, ํ™ํฌ์ฃผ

๐Ÿ€ ์›Œํฌํ”Œ๋กœ์šฐ

ํ•ต์‹ฌ์ ์ธ ๊ธฐ๋Šฅ๋“ค์„ ์ถ”๋ฆฐ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.




๐Ÿ—๏ธ ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜

image

๐Ÿ”€ Git Branch ์ „๋žต (Git Flow)

Branch ์ด๋ฆ„ ๋‚ด์šฉ
main ์‹ค์ œ ๋ฐฐํฌ branch
develop ๊ฐœ๋ฐœ ๋ฒ„์ „ branch
feature ๊ธฐ๋Šฅ ์ถ”๊ฐ€
hotfix ๋ฒ„๊ทธ ์ˆ˜์ •
ci_cd CI/CD ๊ด€๋ จ ์„ค์ •

๐Ÿซ ์ง€์‹2n ์‚ฌ์šฉ ์„ค๋ช…์„œ

์ง€์‹2n์€ ์งˆ๋ฌธํ•˜๊ณ , ๋‹ต๋ณ€ํ•ด์„œ, ๋ฐ˜์‘ํ•˜๊ธฐ์„ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์œผ๋กœ ํ•˜๋ฉฐ, ๊ทธ๋ฐ–์—๋„ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์‹œ์—ฐ์—์„œ๋Š” ์ง์ ‘ ๋‘๋ˆˆ์œผ๋กœ ๋ณด์—ฌ๋“œ๋ ธ์ง€๋งŒ, ๋‹ค๋ฅธ ํŒ€๊บผ ๋ณธ๋‹ค๊ณ /์ง์ ‘ ๋ฐœํ‘œํ•œ๋‹ค๊ณ /๊ฐœ์ธ์ƒ์˜ ์ผ์ • ๋•Œ๋ฌธ์— ๋“ฑ๋“ฑ์˜ ์ด์œ ๋กœ ๋ชป ๋ณธ ๋ถ„๋“ค์„ ์œ„ํ•ด!
์ง€์‹2n ์‚ฌ์šฉ ์„ค๋ช…์„œ์—์„œ ์ง€์‹2n์€ ์–ด๋–ค ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ”๊ณ  ์žˆ๋Š”์ง€ ๊น”๋”ํ•˜๊ฒŒ ์„ค๋ช…ํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ˜Š
(์—ฌ๋‹ด์œผ๋กœ, ์ง€์‹2n๋งŒ์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์œผ๋กœ๋Š” ์งˆ๋ฌธ์— ๊ณต๊ฐ, ๊ณต๊ฐ์ˆœ ์ •๋ ฌ, ๋žœ๋ค์งˆ๋ฌธ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค!)

์ง€์‹2n์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.





์ด์™ธ์—๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๋‹ด์•˜์Šต๋‹ˆ๋‹ค.






โœจ ์ง€์‹2n์˜ ์ž๋ž‘๊ฑฐ๋ฆฌ๋“ค

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

์•„๋ž˜์˜ ๊ธ€๋ถ€ํ„ฐ๋Š”, ์ง€์‹2n์—์„œ ์ž๋ž‘ํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ์„ ํ•˜๋‚˜์”ฉ ์งš์–ด๊ฐ€๋ฉฐ ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.
Team2 ๋ฆฌ๋“œ๋ฏธ์˜ ํ•˜์ด๋ผ์ดํŠธ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋„ค์š”:blush:
๊ทธ๋Ÿฌ๋ฉด ์ง€๊ธˆ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!
(์•„๋ž˜์˜ ์‚ฌ์ง„๋ถ€ํ„ฐ๋Š” ๋ฐœํ‘œ ์ž๋ฃŒ๋กœ, ๋ฐœํ‘œ ์ž๋ฃŒ๋ฅผ ๋ณด๊ฐ•ํ•˜๋Š” ๋‚ด์šฉ์„ ๊ธ€๋กœ ์ ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.)

1. ์†Œ์…œ ๋กœ๊ทธ์ธ(์นด์นด์˜ค)


์™€ํ”Œ ํ† ์ดํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ฉฐ ํ•„์ˆ˜์ ์œผ๋กœ ๋„์ž…ํ•˜๋ผ๊ณ  ํ•œ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์˜€๋˜ ์†Œ์…œ ๋กœ๊ทธ์ธ!
์ง€์‹2n์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์†Œ์…œ ๋กœ๊ทธ์ธ ์ค‘ ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ๋„์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
๋ฐœํ‘œ ์ž๋ฃŒ์—์„œ ๋„์‹ํ™”๋˜์–ด ์žˆ๋Š” ๋‚ด์šฉ์„ ์กฐ๊ธˆ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…ํ•˜์ž๋ฉด,
์ €ํฌ๋Š” ๋จผ์ € Kakao Developer์— ์ง€์‹2n์•ฑ์„ ๋“ฑ๋กํ•˜๊ณ , iOS๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— iOS ํ”Œ๋žซํผ์„ ๋„์ž…ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
์นด์นด์˜ค ๋กœ๊ทธ์ธ์€ ํ† ํฐ์„ ํ†ตํ•ด ์ธ์ฆ์ด ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ,
iOS๋Š” ์นด์นด์˜ค ํ† ํฐ์„ ๋ฐ›์Œ->๋ฐ›์€ ์นด์นด์˜ค ํ† ํฐ์„ ์Šคํ”„๋ง์— ์ „๋‹ฌ->
์Šคํ”„๋ง์€ ๋‹ค์‹œ ์นด์นด์˜คํ•œํ…Œ ํ† ํฐ์„ ์ค˜์„œ ์œ ์ € ์ •๋ณด๋ฅผ ์ „๋‹ฌ๋ฐ›์Œ->์ „๋‹ฌ๋ฐ›์€ ์œ ์ € ์ •๋ณด๋ฅผ ์Šคํ”„๋ง db์— ์ „๋‹ฌ

์ˆœ์„œ๋กœ ๋กœ๊ทธ์ธ์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ํ•œ๋ฒˆ๋„ ํ•˜์ง€ ์•Š์€ ํšŒ์›์ด๋ผ๋ฉด db์— ์ƒˆ๋กœ์šด ์œ ์ € ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ ,
์ด์ „์— ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ํ–ˆ๋˜ ์œ ์ €๋ผ๋ฉด db์˜ last_login ์นผ๋Ÿผ์— ํ˜„์žฌ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์ด ๊ณผ์ •์„ ํ†ตํ•ด, ์ง€์‹2n์€ ์นด์นด์˜ค ์œ ์ €๋“ค์ด ๊ฐ„ํŽธํ•˜๊ฒŒ ์•ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

2. ์ •๋ ฌ&ํŽ˜์ด์ง€๋„ค์ด์…˜


๋‹ต๋ณ€ํ•˜๊ธฐ, ๋‚˜์˜์งˆ๋ฌธ ๋“ฑ ์ง€์‹2n์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์งˆ๋ฌธ์„ ๋‹ค๋ฃจ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ์ค€์— ๋”ฐ๋ฅธ ์ •๋ ฌ๊ณผ ํŽ˜์ด์ง€๋„ค์ด์…˜์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด QueryDsl์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
orderBy์™€ desc๋ฅผ ํ†ตํ•ด ์ตœ์‹ ์ˆœ, ์ข‹์•„์š”์ˆœ, ๋‹ต๋ณ€์ˆ˜์ˆœ์„ ํ†ตํ•ด ์งˆ๋ฌธ๋“ค์„ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ์ •๋ ฌํ•˜์˜€์œผ๋ฉฐ(๋‹ต๋ณ€์ˆ˜์ˆœ์€ ์•ฑ ๋‚ด์—์„œ๋Š” ๋ฏธ๋ฐ˜์˜)
offset(page*amount), limit(amount)๋ฅผ ํ†ตํ•ด ๊ฐ ํŽ˜์ด์ง€์—์„œ ์ฒซ๋ฒˆ์งธ ๊ธ€๋ถ€ํ„ฐ amount ๋ฒˆ์งธ๊นŒ์ง€์˜ ๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ค๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

3. Https


Https๋Š” Http์— SSL ๋ณด์•ˆ์„ ์–น์€ ๊ฒƒ์œผ๋กœ, Http์— ๋น„ํ•ด ๋ณด์•ˆ์„ฑ๊ณผ ์‚ฌ์ดํŠธ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋›ฐ์–ด๋‚ฉ๋‹ˆ๋‹ค.
์ง€์‹2n์˜ Https ๊ตฌํ˜„์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ์ €ํฌ์˜ ๋ฐฐํฌ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์•Œ์•„๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ €ํฌ๋Š” AWS์˜ Elastic Beanstalk๋ฅผ ํ†ตํ•ด ๋ฐฑ ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.
Elastic Beanstalk๋Š” EC2(์ธ์Šคํ„ด์Šค), RDS(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค) ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ
์•ฑ ๋ฐฐํฌํ™” ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ, ํ”„๋กœ๋น„์ €๋‹, ์˜คํ†  ์Šค์ผ€์ผ๋ง ๋“ฑ์˜ ์ž‘์—…๋“ค์„ ์ž๋™์œผ๋กœ ํ•ด์ค๋‹ˆ๋‹ค.
๊ทธ๋กœ ์ธํ•ด, ๋‹ค์–‘ํ•œ ํ•ญ๋ชฉ์„ ์™”๋‹ค๊ฐ”๋‹ค ํ•˜์ง€ ์•Š์€ ์ฑ„ ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ฒŒ ์•ฑ์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.


๊ทธ๋Ÿฐ๋ฐ Elastic Beanstalk๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ์™€ Https๊ฐ€ ๋ฌด์Šจ ์ƒ๊ด€์ด๋ƒ๊ณ ์š”?
Elastic Beanstalk์˜ ๋‹ค์–‘ํ•œ ์ตœ์ ํ™” ์ค‘ ์šฐ๋ฆฌ๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์— ์ฃผ๋ชฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์€ ์„œ๋ฒ„์˜ ๊ณผ๋ถ€ํ™”๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํŠธ๋ž˜ํ”ฝ์„ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐํ•˜๋Š” ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
Https์„ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ, ์ €ํฌ๋Š” ๋จผ์ € ๊ฐ€๋น„์•„๋ผ๋Š” ์‚ฌ์ดํŠธ์—์„œ Https ๋„๋ฉ”์ธ์„ ๊ตฌ๋งคํ•˜์˜€์Šต๋‹ˆ๋‹ค.
๊ตฌ๋งคํ•œ ๋„๋ฉ”์ธ์€ AWS์˜ Route 53์— ๋“ฑ๋กํ•œ ์ดํ›„, DNS๋ฅผ Elastic Beanstalk์˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์™€ ์—ฐ๊ฒฐ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  Amazon Certificate Manager๋ฅผ ํ†ตํ•ด ์ธ์ฆ์„œ๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์•„ Beanstalk๊นŒ์ง€์˜ ์—ฐ๊ฒฐ์„ Https๋กœ ์—ฐ๊ฒฐ๋˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โญ 4. ์ธ์ฆ๊ณผ ๊ถŒํ•œ


Interceptor๋Š” Request๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ์˜ Handler๋กœ ๋“ค์–ด์˜ค๊ธฐ ์ „์— ๋‚š์•„์ฑ„์–ด ์›ํ•˜๋Š” ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ ํ›„ Handler๋กœ ๋ณด๋‚ด๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
์ €ํฌ ํŒ€์€ ์ดˆ๋ฐ˜์—๋Š” ์ฃผ๋กœ Interceptor์—๊ฒŒ Authorization์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰์‹œ์ผœ,
ํ† ํฐ์„ ๋ฐ›์œผ๋ฉด ํ•ด๋‹น ํ† ํฐ์˜ ์œ ์ € ์ •๋ณด๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์ฆํ•˜๊ณ , ๋งŒ์•ฝ ํ‹€๋ ธ๊ฑฐ๋‚˜ ํ† ํฐ ์ž์ฒด๊ฐ€ ์—†๋‹ค๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์„ ํ• ์ˆ˜๋ก ์ด๋Ÿฌํ•œ ๋กœ์ง์—๋Š” โ—๋ฌธ์ œโ—๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์•ž์„œ ๋งํ–ˆ๋“ฏ Authorization์˜ Interceptor๋Š” ํ† ํฐ์ด ์—†์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜์‹œํ‚ค๋Š”๋ฐ,
๋งŒ์•ฝ ํ† ํฐ์ด ์žˆ๋“  ์—†๋“  ๊ฐ๊ฐ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋‚ด๋†“์•„์•ผ ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ• ๊นŒ์š”?

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


์ €ํฌ๋Š” ์ด๋Ÿฐ ์ƒํ™ฉ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด์˜ Interceptor๋ฅผ ๋ถ„ํ™”์‹œ์ผœ AuthInterceptor1, AuthInterceptor2๋กœ ๋‘ ๊ฐœ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  AuthInterceptor1์—์„œ๋Š” ๋ชจ๋“  Api์— ์ ‘๊ทผํ•˜์—ฌ ํ† ํฐ์ด ์žˆ๋‹ค๋ฉด ์œ ์ € ์ •๋ณด๋ฅผ, ํ† ํฐ์ด ์—†๋‹ค๋ฉด null์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜์˜€๊ณ ,
AuthInterceptor2์—์„œ๋Š” ํŠน์ • Api์— ์ ‘๊ทผํ•˜์—ฌ ์œ ์ € ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋กœ์ง์„ ์‹คํ–‰์‹œํ‚ค๋„๋ก, null๋งŒ ์žˆ๋‹ค๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด์— ์žˆ๋˜, ๋งŒ๋ฃŒ๋œ ํ† ํฐ์€ 401 ์˜ˆ์™ธ๋ฅผ ๋ฐ˜ํ™˜(401 ๋ฐ˜ํ™˜ ์ฆ‰์‹œ ํ”„๋ก ํŠธ์—์„œ ์žฌ๋ฐœ๊ธ‰ ์š”์ฒญ)์‹œํ‚ค๋Š” ์ผ๊ณผ
ํƒˆํ‡ดํ•œ ์œ ์ €์˜ ํ† ํฐ์€ ์ ‘๊ทผ์ด ์•ˆ๋˜๊ฒŒ ํ•˜๋„๋ก ํ•˜๋Š” ์ผ์€ AuthInterceptor1์—๊ฒŒ ๋งก๊ฒผ์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ํ†ตํ•ด, ์งˆ๋ฌธ๋“ฑ๋ก/๋‹ต๋ณ€์ˆ˜์ •/ํ”„๋กœํ•„์ˆ˜์ • ๋“ฑ Authorization์ด ํ•„์š”ํ•œ ์ผ๊ณผ
ํ•˜ํŠธ์ƒ‰๊น”/์ฑ„ํƒํ•˜๊ธฐ๋ฒ„ํŠผ๋“ฑ์žฅ ๊ฐ™์ด Authentication๋งŒ ํ•„์š”ํ•œ ์ผ ๋ชจ๋‘๋ฅผ ํ›Œ๋ฅญํ•˜๊ฒŒ ์†Œํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

5. ์Šคํฌ๋กค๋ทฐ


์ง€์‹2n์„ ์ฒ˜์Œ ์“ฐ๋Š” ๋ถ„๋“ค์ด ์ œ์ผ ๋จผ์ € ๋งŒ๋‚˜๋Š” ํ™ˆํ™”๋ฉด!
ํ™ˆํ™”๋ฉด์€ ์ƒ๋‹จ์€ 4๊ฐœ์˜ ์ด๋ฏธ์ง€๋ฅผ ์˜†์œผ๋กœ ์Šค์™€์ดํ”„ํ•  ์ˆ˜ ์žˆ๊ณ , ํ•˜๋‹จ์—์„œ๋Š” ๋‚˜์˜ ์งˆ๋ฌธ๋“ค์„ ์•„๋ž˜๋กœ ์Šค์™€์ดํ”„ํ•˜๋ฉฐ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์–ด๋–ป๊ฒŒ ํ•œ ํ™”๋ฉด์— ๋‘ ๋ฐฉํ–ฅ์˜ ์Šค์™€์ดํ”„๊ฐ€ ๊ฐ€๋Šฅํ• ๊นŒ์š”?

์ด๊ฑธ ์œ„ํ•ด์„œ ์ €ํฌ๋Š” ํ•˜๋‚˜์˜ ํ™”๋ฉด์— ๋‘๊ฐœ์˜ ๋‹ค๋ฅธ View๋ฅผ ๊ฑธ์–ด๋†จ์Šต๋‹ˆ๋‹ค.
์ƒ๋‹จ์˜ View์—์„œ๋Š” ScrollView๋ฅผ ๊ฑธ์–ด๋†จ๊ณ , ๊ทธ ์•ˆ์— 4๊ฐœ์˜ ์ด๋ฏธ์ง€๋ฅผ StackView๋กœ ๋ฌถ์–ด๋†” StackView๋ฅผ ScrollView ์•ˆ์— ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.
ScrollView๋Š” ์ž๊ธฐ๋ณด๋‹ค ํฐ ์ด๋ฏธ์ง€๊ฐ€ ๊ฑธ๋ ค์žˆ์œผ๋ฉด ์Šคํฌ๋กค์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋†’์ด๋Š” ๊ฐ™๊ณ  ๊ฐ€๋กœ๋กœ๋งŒ ๊ธด StackView๋Š” ํšก์Šคํฌ๋กค์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— ์•„๋ž˜์ชฝ์— ์žˆ๋Š” ๋‚˜์˜ ์งˆ๋ฌธ์€ TableView๋ฅผ ๊ฑธ์–ด๋†“์•˜์Šต๋‹ˆ๋‹ค.
๊ฐ๊ฐ์˜ ์งˆ๋ฌธ๋“ค์ด ๋งˆ์น˜ ๋ณด์ด์ง€ ์•Š๋Š” ์„ ์œผ๋กœ ์ด๋ค„์ง„ ํ‘œ์ฒ˜๋Ÿผ ์ƒ๊ฒผ๋Š”๋ฐ์š”.
TableView๋Š” ํ™”๋ฉด์„ ๋„˜๊ธฐ๋ฉด ์ž๋™์œผ๋กœ ์Šคํฌ๋กคํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์งˆ๋ฌธ์ด ๋งŽ์ด ์Œ“์ด๋ฉด ์•„๋ž˜๋กœ ์Šค์™€์ดํ”„๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

โญ 6. ์‚ฌ์ง„ ์—…๋กœ๋“œ


์ง€์‹2n์„ ๋งŒ๋“œ๋Š” ๋ฐ์— ๊ฐ€์žฅ ํฐ ๋‚œ๊ด€์ด์—ˆ๋˜ ์‚ฌ์ง„ ์—…๋กœ๋“œ!
์ €ํฌ๋Š” ์งˆ๋ฌธ๋“ฑ๋ก/๋‹ต๋ณ€๋“ฑ๋ก/ํ”„์‚ฌ ์ˆ˜์ •์— ์‚ฌ์ง„ ์—…๋กœ๋“œ๊ฐ€ ํ•„์š”ํ•˜์˜€๊ณ ,
๊ทธ๋Ÿฌํ•œ ์‚ฌ์ง„๋“ค์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด AWS์—์„œ ์ œ๊ณตํ•˜๋Š” ํŒŒ์ผ ์„œ๋น„์Šค์ธ S3์„ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
S3์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„œ๋ฒ„์™€ S3 ๊ฐ„์˜ ํ†ต์‹ ์ด ์ค‘์š”ํ•œ๋ฐ, ์ด๋ฅผ ์œ„ํ•ด S3 ๋ฒ„ํ‚ท์„ ๋งŒ๋“ค๊ณ  ์Šคํ”„๋ง ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐํ•˜์˜€์–ด์š”.
์‚ฌ์ง„์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด์„œ iOS์—์„œ ๊ฐ–๊ณ  ์žˆ๋Š” ์‚ฌ์ง„์„ ์Šคํ”„๋ง์— ๋„˜๊ธฐ๊ณ ,
์Šคํ”„๋ง์€ ๋‹ค์‹œ ๊ทธ๊ฑธ S3์— ๋„˜๊ฒจ์„œ ํŒŒ์ผ ์ด๋ฆ„์„ ์ „๋‹ฌ๋ฐ›๋Š” ๊ณผ์ •์ด ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ €ํฌ๋Š” ํ”„๋กœํ•„ ์‚ฌ์ง„์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” ๋‹จ๋…์œผ๋กœ, ์งˆ๋ฌธ์— ์‚ฌ์ง„๋“ค์„ ์˜ฌ๋ฆด ๋•Œ๋Š” ์‚ฌ์ง„ ์ˆœ์„œ์— ๋งž๊ฒŒ order๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ
์›ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์‚ฌ์ง„์„ ์ถ”๊ฐ€ํ•˜๊ณ ์ž ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

โญ 6-1. ์‚ฌ์ง„ ์—…๋กœ๋“œ - ์งˆ๋ฌธ์„ ์ˆ˜์ •ํ•  ๋•Œ ์‚ฌ์ง„์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์—†์•ค๋‹ค๋ฉด?


์ด์ œ ๊ธฐ๋ณธ ๊ตฌํ˜„ ๋ฐฉ์‹์„ ์•Œ์•˜์œผ๋‹ˆ๊นŒ, ์‚ฌ์ง„ ์—…๋กœ๋“œ์˜ ์‘์šฉ ๋ฒ„์ „์œผ๋กœ ๋“ค์–ด๊ฐ€๋ด…์‹œ๋‹ค.
3์žฅ์˜ ์‚ฌ์ง„๊ณผ ํ•จ๊ป˜ ์งˆ๋ฌธ์„ ์˜ฌ๋ ธ๋Š”๋ฐ, ๊ทธ ์ค‘ 2๋ฒˆ์งธ ์‚ฌ์ง„์„ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ์šด ์‚ฌ์ง„์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?
ํœด๋Œ€ํฐ์—์„œ ๋‘๋ฒˆ์งธ ์‚ฌ์ง„์„ ์‚ญ์ œํ•˜๊ณ  ๋‹ต๋ณ€๋“ฑ๋ก ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, iOS์—์„œ๋Š” ์‚ญ์ œ๋œ ์‚ฌ์ง„์€ ๋นผ๊ณ , ์ƒˆ๋กœ์šด ์‚ฌ์ง„์€ ๋„ฃ์–ด์„œ
์ด 3๊ฐœ์˜ ์‚ฌ์ง„์„ order์— ๋งž๊ฒŒ List ํ˜•ํƒœ๋กœ ๋ฐฐ์—ดํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜์ •๋œ List์„ ํฌํ•จํ•˜์—ฌ ์งˆ๋ฌธ์„ ์Šคํ”„๋ง์— ์ „์†กํ•˜๋ฉด,
์Šคํ”„๋ง์€ ์‚ญ์ œํ•  ์‚ฌ์ง„์€ ์‚ญ์ œํ•˜๊ณ , ์ถ”๊ฐ€๋œ ์‚ฌ์ง„์€ ์ถ”๊ฐ€ํ•˜๊ณ , ๊ธฐ์กด์˜ ์‚ฌ์ง„๋“ค์„ order ๊ฐ’์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์‚ญ์ œํ•  ์‚ฌ์ง„๊ณผ ์ถ”๊ฐ€๋œ ์‚ฌ์ง„์€ S3์— ๋ณด๋‚ด๊ณ , S3๋Š” ์‚ญ์ œ๋œ ์‚ฌ์ง„ ๊ฐ์ฒด๋“ค์€ ์ œ๊ฑฐํ•˜๊ณ  ์ถ”๊ฐ€๋œ ์‚ฌ์ง„๋“ค์€ ๋‹ค์‹œ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์ˆ˜์ •๋˜๋ฉด ์งˆ๋ฌธ๋‹ต๋ณ€์—์„œ๋Š” ์ƒˆ๋กœ์šด ์‚ฌ์ง„๋“ค์ด ์‹ค๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ ํŠนํžˆ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์‚ฌ์ง„์ด ๋ฐฐ์—ด๋œ๋‹ค๋Š” ์ ์„ ์ž˜ ๋ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค:blush:

7. ๋žœ๋ค์งˆ๋ฌธ, ์šด์˜์ž์งˆ๋ฌธ


ํ™ˆํ™”๋ฉด์—์„œ ๊ฐ์ดˆ ์—ญํ• ์„ ํ†กํ†กํžˆ ํ–ˆ๋˜ ๋žœ๋ค์งˆ๋ฌธ๊ณผ ์šด์˜์ž์งˆ๋ฌธ, ์ด ๋‘˜์€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜์˜€์„๊นŒ์š”?
๋จผ์ € ๋žœ๋ค์งˆ๋ฌธ์€, ์‚ฌ์‹ค ์„œ๋ฒ„๊ฐ€ ๊ฐˆ์•„์—Ž์–ด์ง€๊ณ  ์งˆ๋ฌธ๋“ค์ด ์‚ฌ๋ผ์ง€๊ณค ํ•ด์„œ ์ผ๋ฐ˜์ ์ธ findById๋กœ๋Š” ๊ตฌํ˜„์ด ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.
์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋งค๋ฒˆ ๋‹ค๋ฅธ ์งˆ๋ฌธ์„ ๋ถ€๋ฅผ ์ˆ˜ ์žˆ์„๊นŒ? ์ •๋‹ต์€ idx๋ฅผ ๊ฑธ์–ด๋‘๊ณ  ํŽ˜์ด์ง€๋„ค์ด์…˜์„ ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
๋จผ์ € ์งˆ๋ฌธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ผ ํ›„, (0~1๊นŒ์ง€ ์ž„์˜์˜ ์ˆ˜)*(์งˆ๋ฌธ์˜ ๊ฐœ์ˆ˜)->Longํ™”๋ฅผ ํ†ตํ•ด ์ธ๋ฑ์Šค๋ฅผ ๊ตฌํ•˜๊ณ ,
offset๊ณผ limit์œผ๋กœ ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ์งˆ๋ฌธ ํ•˜๋‚˜๋งŒ์„ ์ถ”์ถœํ•˜๋‹ˆ ๋งค๋ฒˆ ๋‹ค๋ฅธ ์งˆ๋ฌธ์„ ๋“ค๊ณ ์˜ฌ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์šด์˜์ž์งˆ๋ฌธ์€, ๋‹ต๋ณ€ํ•˜๊ธฐํƒญ์— ์žˆ๋Š” ์ˆ˜๋งŽ์€ ์งˆ๋ฌธ๋“ค ์ค‘ "๋‚˜์˜ 2023๋…„ ๋ชฉํ‘œ๋Š”?"๋งŒ ์šด์˜์ž ์งˆ๋ฌธ์ธ๋ฐ์š”.
์ € ์งˆ๋ฌธ์€ ๋‹จ์ˆœํžˆ ์ €ํฌ๊ฐ€ ์šด์˜์ž ์งˆ๋ฌธ์œผ๋กœ ์ •ํ•œ ๊ฒŒ ์•„๋‹ˆ๋ผ, ์‹ค์ œ๋กœ ์šด์˜์ž ์ „์šฉ ๊ณ„์ •(๋‹‰๋„ค์ž„ ์ง€์‹๋‚ญ์ž)์„ ์ƒ์„ฑํ•˜์—ฌ ๋งŒ๋“  ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ฝ”๋“œ๋ฅผ ๋œฏ์–ด๋ณด๋ฉด ADMIN_ID๊ฐ€ ๊ณ ์ • ์œ ์ € ์•„์ด๋””๋กœ ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ์ƒ์ˆ˜๋Š” common ํŒจํ‚ค์ง€์— ์ €์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹จ์ˆœํžˆ ์•„์ด๋””๋กœ ์ถ”์ถœํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์ง€์‹๋‚ญ์ž ๋‹˜์ด ์ƒˆ๋กœ์šด ์งˆ๋ฌธ์„ ๋งŒ๋“ค๋ฉด ๊ทธ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์งˆ๋ฌธ์ด ์—…๋ฐ์ดํŠธ๋˜๊ฒ ์ฃ :blush:

๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ - ๊ฐœ๋ฐœ์ž ํ›„๊ธฐ ํ™”๋ฉด


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


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

2ํŒ€๋„, ๋‹ค๋ฅธ ํŒ€๋„, ์™€ํ”Œ ์šด์˜์ง„ ๋ถ„๋“ค๊นŒ์ง€ ๋ชจ๋‘ ์ˆ˜๊ณ ๋งŽ์œผ์…จ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์šฐ๋ฆฌ 2ํŒ€์€ ๋‹ค๋“ค ์ •๋ง๋กœ ๊ณ ์ƒํ•˜์…จ์–ด์š”!!:blush:
๊ทธ๋Ÿผ ์ €ํฌ๋Š” ๋‹ค์Œ์— ๋˜ ๋งŒ๋‚˜์š” ๋ฐ”์ด๋ฐ”์ด:wave:

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •