forked from mingulmangul/H6-CaArt
-
Notifications
You must be signed in to change notification settings - Fork 0
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, ๋ฉ์ผ ๋ฐ์ก ๊ตฌํ ๋ฐฉ๋ฒ ํ์ต
๐ป [H6-CaArt] โDone is better than perfectโ ๐ป
- [์ต๊ทํ] Sentry ๋์ ๊ธฐ (feat. ๋ก๊ทธ ๊ด๋ฆฌ)
- [์ต๊ทํ] GPT3.5 ๋ชจ๋ธ์ ํ์ฉํด์ ์ถ์ฒ ๋ฌธ๊ตฌ ์์ฝํ๊ธฐ
- [์ต๊ทํ] ์คํ๋ง์์ OpenAI API ์ฑ๋ฅ ๊ฐ์ ๊ธฐ
- [๊ถ๋ฏผ์] CaArt CI/CD ๊ตฌ์ถ ๊ณผ์
- [๊ถ๋ฏผ์] ์ฑํ๋ฅ ๊ณ์ฐ ๋ก์ง ๊ฐ์ - Index tuning๊ณผ Batch processing
- [์ด์นํ] useReducer, useContext๋ฅผ ์ฌ์ฉํ ์ ์ญ ์ํ ๊ด๋ฆฌ with React, TS
- [์ด์นํ] ํ๋กํ ํ์ ํจํด์ด๋?
- [์ด์นํ] UX ๊ฐ์ ์ ์ํ ์ด๋ฏธ์ง ํ๋ฆฌ๋ก๋ฉ With Promise
- [์์ํ] ํ์ ์คํฌ๋ฆฝํธ ์ ๋ค๋ฆญ์ด๋?
- [๋ฐ์ธ์] Android์ Data Binding: DataBindingUtil vs Binding.inflate
- [๋ฐ์ธ์] DI, Hilt ๋ฝ๊ฐ๊ธฐ
- [๋ฐ์ธ์] Retrofit ๋์ ๊ธฐ
- [๋ฐ์ธ์] 360๋ Spin Image Touble Shooting
- [๊น์ ๋น] ์ปค์คํ ๋ค์ด์ผ๋ก๊ทธ ๊ตฌํ