Skip to content

0821_retrospecitve

rbgus2002 edited this page Sep 2, 2023 · 1 revision

๊ถŒ๋ฏผ์•„

๊ตฌ๋งค๋ฐ์ดํ„ฐ ๋„ฃ๋Š”๊ฑฐํ•˜๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ์•„์ง ๋ชปํ–ˆ๋‹ค.
์˜ค๋Š˜ ์ €๋…์— ์ตœ๋Œ€ํ•œ ๋งŽ์ดํ•˜๊ธฐ๊ฐ€ ๋ชฉํ‘œ

2023/08/21 - API ์ˆ˜์ •..

์˜ค๋Š˜ ํ•œ ์ผ
1. ๋ฐฑ์—”๋“œ ์ฃผ๊ฐ„ ์ˆ˜์—… - ํŠธ๋žœ์žญ์…˜
  - ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ํ•˜๊ธฐ ์œ„ํ•ด ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š”  ๋ฐฉ๋ฒ• -> ์ธ๋ฑ์Šค ์ƒ์„ฑํ•˜๊ธฐ, ์—ญ์ •๊ทœํ™” ํ•˜๊ธฐ
  - ๋ฉ€ํ‹ฐ ์œ ์ € DB๊ฐ€ ๋œ๋‹ค๋ฉด Lock์ด ํ•„์š”ํ•ด์ง. ํ…Œ์ด๋ธ”, ๋ ˆ์ฝ”๋“œ, ์ปฌ๋Ÿผ, ์ธ๋ฑ์Šค ๋‹จ์œ„์˜ ๋ฝ์„ ์ง€์› (๋ ˆ์ฝ”๋“œ ๋‹จ์œ„ ๋ฝ์€ ์ง€์›์€ ํ•˜๋Š”๋ฐ ์‹ค์ œ ๋ฌผ๋ฆฌ์ ์œผ๋กœ๋Š” ์ธ๋ฑ์Šค ๋ฝ์ž„)
  - ํŠธ๋žœ์žญ์…˜์˜ ์„ฑ์งˆ : ACID
    - Atomicity: all or nothing
    - Consistency: ํŠธ๋žœ์žญ์…˜ ์‹คํ–‰ ์ „ํ›„ ํ•ญ์ƒ ์ผ๊ด€๋œ ์ƒํƒœ ์œ ์ง€ (ํ•ญ์ƒ ์ œ์•ฝ์กฐ๊ฑด์„ ๋งŒ์กฑ)
    - Isolation: ํ•œ ํŠธ๋žœ์žญ์…˜์ด ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Œ
    - Durability: ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฐ๊ณผ๊ฐ€ ํ•ญ์ƒ ๋ฐ˜์˜(์ €์žฅ)๋˜์–ด์•ผ ํ•จ
  - ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ๊ด€๋ จ ์ด๋ก  : CAP
  - optimistic concurrency control vs. pessimistic lock
    - ๋‚™๊ด€์  ๋ฝ: ํ•ญ์ƒ ์ถฉ๋Œ์ด ์—†์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐ (์ž ๊ธˆ X)
    - ๋น„๊ด€์  ๋ฝ: ํ•ญ์ƒ ์ถฉ๋Œ์ด ์žˆ์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐ (์ž ๊ธˆ O)
  - serial schedule: ํŠธ๋žœ์žญ์…˜์„ ํ•ญ์ƒ ํ•œ๋ฒˆ์— ํ•˜๋‚˜์”ฉ๋งŒ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ
    - ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์„ serializableํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ์„ฑ๋Šฅ์ด ๊ฐ์†Œ -> isolation level์„ ์กฐ์ •
  - ๊ฐ isolation level ๋งˆ๋‹ค ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ
    1. Read Uncommitted : Dirty Read Problem
    2. Read Committed : Non-repeatable Read Problem
    3. Repeatable Read : Phantom Read Problem
    4. Serializable
    - MySQL์€ Repeatable read๊ฐ€ ๊ธฐ๋ณธ ๊ฐ’์ด์ง€๋งŒ mvcc๋ฅผ ์‚ฌ์šฉํ•ด phantom read ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
2. ๋”๋ฏธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
  - ๋“œ๋””์–ด ๋”๋ฏธ ๋ฐ์ดํ„ฐ ๋งŒ๋“ค๊ธฐ.. ํŒŒ์ด์ฌ์œผ๋กœ ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์€ csv ํŒŒ์ผ์„ ๋งŒ๋“  ํ›„ scp๋กœ mysql์ด ์žˆ๋Š” ec2์— ์ „์†กํ•˜๊ณ  ํŒŒ์ผ์„ ์ฝ์–ด์„œ ํ…Œ์ด๋ธ”์— ๋„ฃ์—ˆ๋‹ค.
3. API ์ˆ˜์ •
  - ํ”„๋ก ํŠธ ์š”์ฒญ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•ด API ์‘๋‹ต ํ˜•ํƒœ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค. ๋•๋ถ„์— ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•˜๋Š”๋ฐ jpa์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ผ๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ fetch joinํ•  ์ˆ˜ ์—†๋‹ค๋ฉฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค. batch size๋ฅผ ์„ค์ •ํ•ด์„œ ์ด ๋‹จ์œ„๋กœ fetchํ•˜๋„๋ก ์ˆ˜์ •ํ•ด ํ•ด๊ฒฐํ–ˆ๋‹ค.

์•„์‰ฌ์šด์ 
1. API ๋ช…์„ธ์„œ ๊ผผ๊ผผํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ
  - ์ž๊พธ ์ˆ˜์ •์‚ฌํ•ญ์ด ์ƒ๊ธฐ๋Š” ๊ฒŒ ์ดˆ๋ฐ˜์— API ๋ช…์„ธ์„œ๋ฅผ ๊ผผ๊ผผํ•˜๊ณ  ํ™•์‹คํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœํ•ด์„œ ๊ทธ๋Ÿฐ ๊ฒƒ ๊ฐ™๋‹ค. ์กฐ๊ธˆ ๋” ํ”„๋ก ํŠธ์—”๋“œ์™€ ์•ˆ๋“œ๋กœ์ด๋“œ ๋ถ„๋“ค๊ณผ ์†Œํ†ตํ•˜๋ฉด์„œ API๋ฅผ ๋งŒ๋“ค์—ˆ์–ด์•ผ ํ–ˆ๋Š”๋ฐ ์•„์‰ฌ์›€์ด ๋งŽ์ด ๋‚จ๋Š”๋‹ค..
2. ๊ธฐ๋ก ์žŠ์ง€ ๋ง๊ธฐ
  - ๊ธ€ ์“ฐ๋Š” ๊ฑด ํ•ญ์ƒ ๊ท€์ฐฎ๋‹ค. ๊ท€์ฐฎ์•„์„œ ๋ฏธ๋ฃจ๋‹ค๊ฐ€ ์ด์ œ๋Š” ์‹œ๊ฐ„์ด ๋ถ€์กฑํ•ด์„œ ์ž˜ ๋ชป ์“ฐ๊ฒ ๋‹ค. ํ•ญ์ƒ ๊ธ€๋กœ ์ •๋ฆฌํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์—ฌ์•ผ ํ•˜๋Š”๋ฐ ์ž˜ ์•ˆ๋˜๋Š” ๊ฒƒ ๊ฐ™์•„ ์•„์‰ฝ๋‹ค.

ํ•œ๋งˆ๋””
์˜ค๋Š˜ ์ผ์ •์ด ๋๋‚œ ํ›„ 304ํ˜ธ์—์„œ ๋ฐฑ์—”๋“œ ํ”„๋ก ํŠธ์—”๋“œ ๋ถ„๋“ค๊ณผ ๊ฐ™์ด ๊ณต๋ถ€ํ•ด์„œ ์ฆ๊ฑฐ์› ๋‹ค. ์ด์ œ ๋งค์ผ ์–ผ๊ตด์„ ๋งˆ์ฃผํ•˜๋Š” ๋‚ ๋„ ์–ผ๋งˆ ๋‚จ์ง€ ์•Š์•˜๋‹ค๋Š” ์‚ฌ์‹ค์ด ์Šฌํ”„๋‹ค..๐Ÿฅฒ

๊น€์œ ๋นˆ

*TODAY
- ๋ธŒ๋žœ์น˜ ๋จธ์ง€
- ์ฝ”๋“œ๋ฆฌ๋ทฐ
- ์™„๋ฃŒ ํ™”๋ฉด api์—ฐ๋™
- ๋กœ๋”ฉํ™”๋ฉด ๊ณ„ํš
- ์˜ต์…˜ api์ˆ˜์ •

๋ฐ•์„ธ์˜

ํ•ด์•ผ ํ•  ์ผ 
์ƒ‰์ƒ api์—ฐ๋™, ux๊ฐœ์„ 
360๋„ ๋จธ๋ฆฌ์•„ํŒŒ..

์Šคํ•€ ์ด๋ฏธ์ง€๊ฐ€ ์•ˆ๋Š๊ธฐ๊ฒŒ ํ•˜๋ ค๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋ฏธ๋ฆฌ ๋ฐ›์•„์™€์„œ ์บ์‹ฑ์„ ํ•ด์•ผํ•˜๋Š”๋ฐ ์บ์‹ฑ์ด ์™œ ์•ˆ๋˜๋Š”๊ฑธ๊นŒ
request log๋Š” ๋ฐ”๋กœ ์ฐํžˆ๋Š”๋ฐ ์‹ค์ œ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค ๋ฐ›์•„์˜ค๋Š”๋ฐ๋Š” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋‚˜๋ณด๋‹ค 
์ด๋ฏธ์ง€๋ฅผ ๋‹ค ๋ฐ›์•„์˜ค๋Š”๊ฑด ์–ด๋–ป๊ฒŒ ํ™•์ธํ•ด์•ผ ํ• ๊นŒ? 
์ฝ”์ผ ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ ๋” ๋’ค์ ธ ๋ด์•ผ๊ฒ ๋‹ค ..

์—„์„ํ›ˆ

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

์ด์Šนํ˜„

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

์ตœ๊ทœํ˜„

### <ํ˜ธ๋ˆ…์Šค๋‹˜ ๊ฐ•์˜>

- ACID์—์„œ Consistency?
    - ํŠธ๋žœ์žญ์…˜ ์ „ํ›„๋กœ *์ œ์•ฝ์กฐ๊ฑด*์ด ์ผ๊ด€์„ฑ์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค!
- ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ CAP ์ด๋ก 
    - Consistency โ‡’ ๋ถ„์‚ฐ๋œ ์–ด๋Š ์„œ๋ฒ„์— ์š”์ฒญํ•˜๋”๋ผ๋„ ๊ฐ™์€ ์š”์ฒญ์— ๋Œ€ํ•ด ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
    - Availability
    - Partition Tolerence
    - 3๊ฐœ ๋ชจ๋‘ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆœ ์—†๊ณ  Consistency๋ฅผ ํฌ๊ธฐํ•จ. But Eventual consistency(๊ณง ์ผ๊ด€์„ฑ์ด ๋งž์ถฐ์งˆ ์ƒํƒœ)๋Š” ๋งŒ์กฑํ•ด์•ผ ํ•จ
- NoSQL์˜ ํŠน์ง•
    - ๊ทธ๋‹ค์ง€ ๊ธฐ์–ตํ•  ํ•„์š”๋Š” ์—†์Œ
    - Basically Available
    - Soft State
    - Eventual Consistency
- ๊ฐœ๋ฐœ์ž๋“ค์€ ๋ง์žฅ๋‚œ์„ ์ข‹์•„ํ•จ
- Serial Schedule
    - ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ์˜ ํŠธ๋žœ์žญ์…˜๋งŒ ์‹คํ–‰
    - A, B, C ํŠธ๋žœ์žญ์…˜์ด ์žˆ์„ ๋•Œ ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ๋“ค์˜ ์ง‘ํ•ฉ โ‡’ 3!๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์Œ (๋ง์…ˆ ๊ด€๋ จ ํŠธ๋žœ์žญ์…˜์ด๋ฉด ๊ฒฐ๊ณผ๊ฐ€ 1)
    - ํŠธ๋žœ์žญ์…˜ ๊ฒฐ๊ณผ๊ฐ€ Serial Schedule์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์ธ ๊ฒฝ์šฐ Serializable์ด๋ผ๊ณ  ํ•จ
- ์Šคํ”„๋ง์—์„œ์˜ ๋‚™๊ด€์  ์ž ๊ธˆ์ด ๋ฌด์—‡์ธ๊ฐ€?
    - ๋ฉด์ ‘์—์„œ ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ์Œ
    - Lock ์—†์ด ํŠธ๋žœ์žญ์…˜์ด ๊ฐ€๋Šฅํ• ๊นŒ?
    - ์ผ๋‹จ lock ์•ˆ๊ฑธ๊ณ  conflict ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์‹œ transaction ์‹คํ–‰ํ•จ
- Transaction์—์„œ ๋™์‹œ์„ฑ ๋ฌธ์ œ
    - Non-repeatable
        - ๊ฐ™์€ ๊ฐ’์„ ๋‘ ๋ฒˆ ์ฝ์—ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ
        - ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์‚ฝ์ž… ํ˜น์€ ์‚ญ์ œ๊ฐ€ ์›์ธ
    - Phantom Read
        - ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์ˆ˜์ •์ด ์›์ธ
    - MySQL์€ Repeatable Read๊ฐ€ default level์ธ๋ฐ phantom read๊ฐ€ innoDB ์ž์ฒด์ ์œผ๋กœ MVCC์— ์˜ํ•ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
    - start transaction, start transaction_isolation ~, commit ๋“ฑ ๋ช…๋ น์–ด๋กœ ์ง์ ‘ ์‹ค์Šต ์ง„ํ–‰ํ•จ
    - transaction๋งˆ๋‹ค ์‚ฌ๋ณธ์„ ๋งŒ๋“ฆ

### <์˜ค๋Š˜ ํ•œ ์ผ>

- ์นด๋งˆ์Šคํ„ฐ ์„ค๋ฌธ ๋ฐ ์นด๋งˆ์Šคํ„ฐ ์ถ”์ฒœ ์˜ต์…˜ ๋”๋ฏธ ๋ฐ์ดํ„ฐ 1๋งŒ๊ฐœ ์ƒ์„ฑ (by python and bulk insert)
- ์นด๋งˆ์Šคํ„ฐ ์„ค๋ฌธ ์กฐํšŒ API ๋ฐ ์นด๋งˆ์Šคํ„ฐ ์„ค๋ฌธ ์ €์žฅ API ๊ฐœ๋ฐœ
- ์นด๋งˆ์Šคํ„ฐ ์„ค๋ฌธ ๊ธฐ๋ฐ˜ ์ฐจ๋Ÿ‰ ์ถ”์ฒœ API ๊ฐœ๋ฐœ ๊ณ„ํš ์ˆ˜๋ฆฝ
- ์Šคํ”„๋ง์œผ๋กœ PDF, ๋ฉ”์ผ ๋ฐœ์†ก ๊ตฌํ˜„ ๋ฐฉ๋ฒ• ํ•™์Šต

๐Ÿ’ป Projects

๐Ÿค Rules

โ˜€๏ธ Meetings

๐ŸŒต Reviews

1์ฃผ์ฐจ
2์ฃผ์ฐจ
3์ฃผ์ฐจ
4์ฃผ์ฐจ

๐ŸŒˆ Scrums

1์ฃผ์ฐจ
2์ฃผ์ฐจ
3์ฃผ์ฐจ
4์ฃผ์ฐจ

๐Ÿ›  Tech Posts & Mini seminar

๐Ÿ’ช๐Ÿผ [BE]

๐Ÿ›ค [FE]

๐Ÿ›ธ [AOS]


Clone this wiki locally