๋ธ๋ก์ฒด์ธ ๊ธฐ๋ฐ ์์คํฑ ๋ถ๋์ฐ ๊ฑฐ๋ ํ๋ซํผ
**"๋ฐฉ์ค"**๋ ๋ถ๋์ฐ ์ค๊ฐ ์์๋ฃ์ ์ฌ๊ธฐ ์ํ์ ์ค์ด๊ธฐ ์ํด
AI์ ๋ธ๋ก์ฒด์ธ์ ๊ฒฐํฉํ์ฌ ๋ง๋ ๋ถ๋์ฐ ๊ฑฐ๋ ํ๋ซํผ์
๋๋ค.
- ๋ง์ถคํ ๋งค๋ฌผ ํ์๋ถํฐ ๊ณ์ฝ ์ฒด๊ฒฐ๊น์ง ํ ๋ฒ์!
- ๊ณ์ฝ์ ์์ฑ์ด ์ด๋ ค์ธ ๋ AI ์ฑ๋ด์ด ๋์๋๋ฆฝ๋๋ค.
- ๊ณ์ฝ์ ๋ธ๋ก์ฒด์ธ์ ๊ธฐ๋ก๋์ด ์๋ณ์กฐ ๊ฑฑ์ ์์ด ํฌ๋ช ํ๊ฒ!
| ๋ถ์ผ | ๊ธฐ์ |
|---|---|
| Frontend | React, Typescript, TailwindCSS, TanStack Query |
| Backend | Spring Boot, Spring Data JPA |
| Database | MySQL, Redis, MongoDB, AWS S3 |
| Infrastructure | AWS EC2, Docker, Nginx |
| Blockchain | Remix, Truffle, Solidity, Web3.0 |
| AI | OpenAI API (GPT ๊ธฐ๋ฐ ์ฑ๋ด) |
-
๋ง์ถคํ ๋ถ๋์ฐ ๋งค๋ฌผ ํ์
- ์ฌ์ฉ์์ ์กฐ๊ฑด ๊ธฐ๋ฐ ํํฐ๋ง (์์น, ๊ฐ๊ฒฉ, ๊ตฌ์กฐ ๋ฑ)
- ์ฆ์ ํ์ธ ๊ฐ๋ฅํ ๋งค๋ฌผ ์นด๋ ๋ทฐ ์ ๊ณต
-
AI ๊ธฐ๋ฐ ์ค๋งํธ ๊ณ์ฝ์ ์ง์
- ๊ณ์ฝ์ ํญ๋ชฉ ์ค์๊ฐ ์ค๋ช
- ๋ฒ๋ฅ ์ฉ์ด ๋ฐ ํน์ฝ ์กฐ๊ฑด ์ดํด ๋ณด์กฐ
-
๋ธ๋ก์ฒด์ธ ๊ธฐ๋ฐ ๊ณ์ฝ์ ๊ด๋ฆฌ
- IPFS ๋ฐ ๋ธ๋ก์ฒด์ธ ๊ธฐ๋ก์ผ๋ก ์๋ณ์กฐ ๋ฐฉ์ง
- ํฌ๋ช ํ๊ณ ์ ๋ขฐ์ฑ ์๋ ๊ฑฐ๋ ์ ๊ณต
-
๋ฑ๊ธฐ๋ถ ๊ธฐ๋ฐ ์ฌ๊ธฐ ์๋ฐฉ ์์คํ
- ๋ฑ๊ธฐ๋ถ๋ฑ๋ณธ ์๋ ํ๋ ๋ฐ ์ํ๋ ๋ถ์
- ์ฌ๊ธฐ ์ํ ๋งค๋ฌผ ์ฌ์ ๊ฒฝ๊ณ ์ ๊ณต
-
๊ณ์ฝ์ ์์ฑ ๋ณด์กฐ ์์คํ
- ์ฑ๋ด ์ฐ๋์ ํตํ ์ฉ์ด/์กฐํญ ์ค์๊ฐ ์ค๋ช
- ์ฌ์ฉ์ ์ค์ฌ์ ์ง๊ด์ ๊ณ์ฝ์ ์์ฑ ํ๊ฒฝ
| ์ด๋ฆ | ์ญํ | ๋ด๋น |
|---|---|---|
| ๊น๋ฒ์ค | PM, Backend, Infra | ์ผ์ ๊ด๋ฆฌ, ์ฑํ /ํฌํธ์, ์๋ฒ |
| ๊ฐํ์ง | Frontend | ๊ณ์ฝ์/์ฑํ /์ฑ๋ด, ์์ ์ ์ |
| ๋ฐฑ์ง๋ฏผ | Frontend | ๋ฉ์ธํ์ด์ง/๋งค๋ฌผ/ํ์/Info |
| ๊ฐ๋ณด์ | AI | OpenAI ์ฑ๋ด ์์คํ |
| ํ์ ์ | Backend, BlockChain | ๋ธ๋ก์ฒด์ธ, ๊ณ์ฝ/์ํธํ |
| ํฉ์ธ์ค | Backend | ํ๊ฒฝ์ค์ , ๋งค๋ฌผ/ํ์/๋ก๊ทธ์ธ |
์ด์ ๋ฐ์ ํ๊ฒฝ
- ํ์๋ง๋ค ๋๋ฉ์ธ์ ๊ตฌํํ๋๋ฐ ์์ด ์ผ๊ด๋๊ณ ๋ช ํํ ์์ธ ๋ฉ์์ง๋ฅผ ๋ฐํํ์ฌ์ผ ํ์ต๋๋ค.
JPA๋ฅผ ์ฌ์ฉํ์ฌPage์ปฌ๋ ์ ์ ๋ฐํํ๋๋ฐ ์ผ๊ด๋ ํ์ด์ง ํํฐ๋ง ์กฐ๊ฑด๊ณผ ๊ธฐ๋ณธ๊ฐ ์ค์ ์ด ํ์ํ์ต๋๋ค.- ์ ์ ํ๋กํ ์ด๋ฏธ์ง, ๋งค๋ฌผ ์ด๋ฏธ์ง, ๊ณ์ฝ ์๋ช
, ๋ฑ๊ธฐ๋ถ๋ฑ๋ณธ PDF ๋ฑ ๋ค์ํ ๋๋ฉ์ธ์์
AWS S3์ ํ์ผ์ ์ ์ฅํ๊ฑฐ๋ ์กฐํ๊ฐ ํ์ํ์ฌ ์ค๋ณต๋ ์ฝ๋๊ฐ ๋ฐ์ํ์์ต๋๋ค. - API ๋ง๋ค ๋ก๊ทธ์ธ ์ ๋ณด๊ฐ ํ์ํ API๊ฐ ์๊ณ ํ์์๋ API๊ฐ ์กด์ฌํ๊ณ , ์ถ๊ฐ์ ์ผ๋ก ์ฐ ๋งค๋ฌผ ์ฌ๋ถ ๊ฐ์ ๋ก๊ทธ์ธ ์ ๋ณด๊ฐ ์๋ค๋ฉด ์ถ๊ฐ์ ์ธ ๋ก์ง์ด ํ์ํ API๋ค์ด ์กด์ฌํ์ต๋๋ค.
์ด์ ํด๊ฒฐ ๊ณ ๋ฏผ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ
- ์ผ๊ด๋ ์ํ์ฝ๋, ์๋ฒ ์์ธ ์ฝ๋, ์์ธ ๋ฉ์์ง ๋ฑ์ ๋ณด์ ํ ๊ฐ์ฒด๊ฐ ํ์ํ๊ณ , ๋๋ฉ์ธ๋ง๋ค ๊ด๋ฆฌ๋ฅผ ํ ์ ์๋๋ก ๋๋ฉ์ธ ๋ณ ์์ธ ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๋๋ก ์ค๊ณ๊ฐ ํ์ํ์์ต๋๋ค. ์ด์ ์์ด ์ํ์ฝ๋, ์๋ฒ ์์ธ ์ฝ๋, ์์ธ ๋ฉ์์ง ๋ฑ์ ์กฐํํ๋ ์ธํฐํ์ด์ค๋ฅผ ๋๋ฉ์ธ ๋ง๋ค ์์ํ
ENUM์์ธ ๊ตฌํ์ฒด๋ฅผ ์์ฑํ์์ต๋๋ค. ๋ํ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๊ฐ์ง๋ ์ปค์คํ ์์ธ ํด๋์ค๋ฅผ ์์ฑํ์ฌ ์ ์ญ์ผ๋ก ์์ธ๋ฅผ ๊ด๋ฆฌํ์์ต๋๋ค. JPA์์๋Page๊ฐ์ฒด๋ฅผ ์ง์ํ์ฌ ์ํฐํฐ๋ค์ ๋ฐ์์ฌ ์ ์๋๋ฐ,Pageable๊ฐ์ฒด๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉํ์ฌ ํน์ ๊ฐ์์ ํ์ด์ง ์กฐํ๊ฐ ๊ฐ๋ฅํ์ต๋๋ค. ์ด์ Util ํด๋์ค๋ฅผ ๊ตฌํํ์ฌ ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํPage๊ฐ์ฒด๋ฅผ ๋ฐํํ์์ต๋๋ค.- ํ๋์ ๋๋ฉ์ธ์์ ๋งค๋ฒ
AWS S3์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๊ณ ์๋ ๊ตฌ์กฐ๊ฐ ์๋ชป๋ ์ค๊ณ๋ก ํ๋จ๋์ด ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ์ด๋ํฐ ํด๋์ค๋ฅผ ๊ตฌํํ์์ต๋๋ค. ์ดํ ๊ฐ ๋๋ฉ์ธ ์๋น์ค ๊ณ์ธต์์ ์ด๋ํฐ ํด๋์ค๋ฅผ ์์กด์ฑ ์ฃผ์ ํ์ฌ ๋ค๋ฅธ ๋๋ฉ์ธ์์ ์ฝ๊ฒ ํ์ผ์ ์ ๋ก๋ํ๋๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. - ์ฐ์ ๋ก๊ทธ์ธ ์ ๋ณด๊ฐ ํ์ํ API์ ์์ด ํํ ๊ณ์ธต์์ ์ปค์คํ
์ด๋
ธํ
์ด์
์ ์ถ๊ฐํ๊ณ ,
ArgumentResolver์์JWT๋ฅผ ํ์ฑํ๊ณ ์ ์ ID๋ฅผ ๋ฐํํ๋๋ก ๊ตฌํํ์ต๋๋ค. ํ์ง๋ง ์์ง ์ฐ ๋งค๋ฌผ ์กฐํ ๊ฐ์ ๋ก๊ทธ์ธ ์ ๋ณด๊ฐ ์๋ค๋ฉด ์ถ๊ฐ์ ์ผ๋ก ๋ก์ง์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๊ณ , ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ปค์คํ ์ด๋ ธํ ์ด์ ๋ด๋ถ์Boolean๊ฐ์ ๋ณ์ ๊ด๋ฆฌ๋ฅผ ํตํด ๊ธฐ๋ณธ๊ฐ์ด ์๋๋ผ๋ฉดnull์ธ ์ ์ ID๋ฅผ ๋ฐํํ๋๋ก ํ์์ต๋๋ค.
๊ฐ์ ๋ ์ฌํญ
- ๋๋ฉ์ธ ๋ง๋ค ์์ธ ๋ฉ์์ง๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ฉ์ดํด์ก๊ณ , ํด๋ผ์ด์ธํธ๋ ์ผ๊ด๋ ํ์์ ์์ธ ๋ฉ์์ง๋ฅผ ๋ฐํ๋ฐ์ ์ ์์์ต๋๋ค.
- ๊ฐ๋จํ๊ฒ
Page๊ฐ์ฒด๋ฅผ ๋ฐํํ ์ ์์๊ณ ,JPA๋ด๋ถ์ ์ผ๋ก ํ์ํ ๊ฐ์์ ์ํฐํฐ๋ง์ ์กฐํํ์ฌ ์ฑ๋ฅ์ด ๊ฐ์ ๋์์ต๋๋ค. AWS S3์ ๋ณด๋ฅผ ๋๋ฉ์ธ๋ง๋ค ๊ด๋ฆฌํ์ง ์๊ณ ํน์ ์ด๋ํฐ ํด๋์ค๊ฐ ๊ด๋ฆฌํ์ฌ ์์กด์ฑ ์ฃผ์ ์ ํตํด ์ฌ์ฉ์ด ์ฉ์ดํด์ง๊ณ , ์ค๋ณต ์ฝ๋๊ฐ ๊ฐ์ํ๋ ๋ฑ ๋ ๊ฐ์ฒด ์งํฅ์ ์ธ ์ฝ๋๋ฅผ ๊ตฌํํ ์ ์์์ต๋๋ค.- ๋ก๊ทธ์ธ ์ ๋ณด๊ฐ ํ์ํ API๋ฅผ ๊ฐ๋ฐ์๋ค์ด ํ๋์ ๋ณด๊ธฐ ์ฉ์ดํด์ก๊ณ , ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ํ์ฑํ๋ ์์ ์ ์ ์ฒ๋ฆฌํ์ฌ ๊ฐ๋จํ๊ฒ ์ ์ ID๋ฅผ ๋ฐํ๋ฐ์ ์ ์์์ต๋๋ค.
์ด์ ๋ฐ์ ํ๊ฒฝ
- ์ํฐํฐ๊ฐ ์ฐ๊ด ๊ด๊ณ์ ์์ด ๋งค๋ฌผ์ ๋ฐ๋ผ๋ณด๋ ์ฌ๋ฌ ์ํฐํฐ๋ค์ด ์กด์ฌํ์ฌ, ์ฌ๋ฌ ์ํฐํฐ ๋ด๋ถ์ ๋งค๋ฌผ ์ ๋ณด๊ฐ ์๋ ๋จ๋ฐฉํฅ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ์์ต๋๋ค.
- ๋จ๋ฐฉํฅ์ผ๋ก ์ ์ฉํ ์ด์ ๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฐ๊ด ๊ด๊ณ๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ณ , ์ํ ์ฐธ์กฐ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋จ๋ฐฉํฅ์ผ๋ก ๊ตฌ์ฑํ์๋๋ฐ ์ดํ ๋งค๋ฌผ ํ์ด์ง ์ ๋ณด๋ค์ ์กฐํํ๊ณ ์ดํ ๋งค๋ฌผ๊ณผ ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋๋ฐ ์์ด ์กฐํํ
Page์ ๊ฐ์ ๋งํผ N + 1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
์ด์ ํด๊ฒฐ ๊ณ ๋ฏผ ๋ฐ ํด๊ฒฐ
- ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ ๋งค๋ฌผ ์ํฐํฐ์์ ์๋ฐฉํฅ ์ฐ๊ด๊ด๊ณ๋ฅผ ์ถ๊ฐํ๊ณ
JPQL์ฝ๋๋ฅผ ํตํด ํ์ํ API ์์ ์ฟผ๋ฆฌ ํ๋ฒ์ ์ํฐํฐ๋ค์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ๊ณผ ๋ค์ดํฐ๋ธ ์ฟผ๋ฆฌ,IN์ ์ ์ฌ์ฉํ ๋ฐฐ์น ์ฒ๋ฆฌ ๋ฑ์ด ์กด์ฌํ์ต๋๋ค. - ์ฐ์
Spring Data JPA๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด, ํ์น ์กฐ์ธ + ํ์ด์ง์ ๊ถ์ฅํ์ง ์์ผ๋ฉฐ, ์๋ฐฉํฅ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ ํ์๊ฐ ์ฐ๊ด ์ํฐํฐ ์ดํด ๋ฐ ์ฌ์ฉ์ ์์ด ์ด๋ ค์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์์ต๋๋ค. - ๋ค์ดํฐ๋ธ ์ฟผ๋ฆฌ์ ๊ฒฝ์ฐ๋ ๋ฐํ๊ฐ์ด ์ํฐํฐ๊ฐ ์๋๋ผ๋ฉด ์์์ฑ ์ปจํ
์ด๋์์ ๊ด๋ฆฌ๋ฅผ ํ์ง ๋ชปํ์ฌ ๊ฐ์ฒด์งํฅ ์ฝ๋ ๊ตฌํ ๋ฐ ์์์ฑ ์ปจํ
์ด๋ ๊ด๋ฆฌ๊ฐ ์ด๋ ค์์ง ๊ฒ ๊ฐ๋ค๊ณ ์๊ฐํ์ฌ,
IN์ ์ ์ฌ์ฉํ ๋ฐฐ์น ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ์์ต๋๋ค. - ์ฐ์ ํ์ด์ง๋งํผ์ ์ํฐํฐ๋ฅผ ์กฐํํ๊ณ , ์กฐํํ ์ํฐํฐ๋ค๊ณผ ์ฐ๊ด๋ ์ํฐํฐ์ ID๋ค์
Map์ผ๋ก ๋ณด๊ดํ์์ต๋๋ค. ํด๋นMap์ ์กฐํํ๊ณ ์ ํ๋ ์ํฐํฐ์ ID๋ค์IN์ ์ผ๋ก ํ๋ฒ์ ์กฐํํ์ต๋๋ค.
// SQL 3๋ฒ ์กฐํ๋จ์ ํ์ธ
Hibernate:
/* <criteria> */ select
r1_0.room_id,
r1_0.available_from,
...
from
room r1_0
where
r1_0.monthly_rent<=?
and (
r1_0.exclusive_area between ? and ?
or r1_0.exclusive_area between ? and ?
or r1_0.exclusive_area between ? and ?
)
and r1_0.room_id in ((select
a1_0.room_id
from
address a1_0
where
a1_0.lat between ? and ?
and a1_0.lng between ? and ?))
limit
?, ?
Hibernate:
select
l1_0.like_id,
l1_0.member_id,
l1_0.room_id
...
from
likes l1_0
where
l1_0.room_id in (?, ?, ?)
and l1_0.member_id=?
Hibernate:
select
i1_0.image_id,
i1_0.image_url,
i1_0.room_id,
...
from
image i1_0
where
i1_0.room_id in (?, ?, ?)
and i1_0.created_at=(
select
max(i2_0.created_at)
from
image i2_0
where
i2_0.room_id=i1_0.room_id
)๊ฐ์ ๋ ์ฌํญ
- ์ด๋ฅผ ํตํด ๋ฐ์ํ๋
Hibernate์กฐํ ์๊ฐ ํด๋น ํ์๋งํผ ๊ฐ์๋ ๊ฒ์ ํ์ธํ์์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฑ๋ก๋ ๋งค๋ฌผ ์กฐํ ๋ฆฌ์คํธ๊ฐ 1 + 2N ๋ฒ ์กฐํ์์ 3๋ฒ ์กฐํ๋๋๋ก ๊ฐ์ ๋์์ต๋๋ค
์ด์ ๋ฐ์ ํ๊ฒฝ
- ๊ณ์ฝ์ ์์ฑ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ณ์ฝ์ ์์ฑ
- ์๋์ธ ๊ณ์ฝ์ ์ ์ฅ
- ์์ฐจ์ธ ๊ณ์ฝ์ ์ ์ฅ
- ์์ฑ๋ ๊ณ์ฝ์๋ฅผ ๊ฐ์ ์ต์ข ์กฐํ ํ ์์
- ์์ฐจ์ธ ์๋ช
- ์๋์ธ ์๋ช
- ๊ณ์ฝ ์ต์ข ์๋ฃ
- ํด๋น ๊ณผ์ ์ ์์ด ์์ฐจ์ธ ์๋ช ํ๋ ๋์ ์๋์ธ์ด ๊ณ์ฝ์๋ฅผ ์์ ํ๊ณ ์๋ ๊ฒฝ์ฐ๊ฐ ์กด์ฌํ๊ณ , ์์ฐจ์ธ์ด ์๋ช ์๋ฃํ๋ ์์ ์ ๋ดค์๋ ๊ณ์ฝ์ ๋ด์ฉ๊ณผ ๋ฌ๋ผ์ง ์ ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
์ด์ ํด๊ฒฐ ๊ณ ๋ฏผ ๋ฐ ํด๊ฒฐ
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ ์ค๋ ๋๊ฐ ์๋์ธ ๊ณ์ฝ์๋ฅผ ์์ ํ๊ณ ์๊ฑฐ๋, ์์ฐจ์ธ์ด ์๋ช ํ๊ณ ์๋ ๊ฒฝ์ฐ ์ ๊ทผํ์ง ๋ชปํ๋ ์๋จ์ด ํ์ํ์ต๋๋ค.
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฝ์ ์ฌ์ฉํ์ฌ ์ ๊ทผ์ ๋ง๋ ๋ฐฉ๋ฒ์ด ํ์ํ๋๋ฐ ๋ฐฉ๋ฒ์ผ๋ก๋ JVM ๋ด๋ถ ๋ฝ(
synchronized,ReentrantLock), ์คํ๋ฝ ๊ตฌํ,Redission๋ถ์ฐ๋ฝ, DB ๋๊ด์ /๋น๊ด์ ๋ฝ ๋ฑ์ด ์กด์ฌํ์ต๋๋ค. - ๊ฒฐ๊ณผ์ ์ผ๋ก Redis๋ฅผ ์ฌ์ฉํ ๋จ์ ๋ฝ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํ์๋๋ฐ, ๊ทธ๋ ๊ฒ ์๊ฐํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ค๋ ๋์ ๋น์ ์์ ์ธ ์ข ๋ฃ์ ๋๋นํ์ฌ ์๋์ผ๋ก ๋ฝ์ ํด์ ํ๋ ๋ฐฉ๋ฒ์ด ํ์ํ๊ณ , ์ด๋ JVM ๋ด๋ถ ๋ฝ์ ํ๊ณ ์กด์ฌ
- Heartbeat Cheking์ ์คํ๋ฝ์ ๊ฒฝ์ฐ ๋ถํ์ํ CPU ์ ์ ๋ฐ์
- ๋ฌผ๋ฆฌ DB๋ฅผ ์ง์ ์กฐํํ๊ณ ์ํ๋ฅผ ํ์ธํ๊ณ ๋ฝ์ ๊ฑฐ๋ ๊ณผ์ ์ด ๋ถํ์ํ ๋ฌผ๋ฆฌ I/O ์ฐ์ฐ์ด๋ ๋ณ๋ชฉ์ ์ถ๊ฐํ๋ค๊ณ ํ๋จ
Redission์ TTL ์๋ ์ฐ์ฅ ๊ฐ์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ์กด์ฌํ์ง๋ง ํ์ฌ ๋ฝ ์๊ตฌ ์์ค์์๋ ๊ณ์ฝ ๊ด๋ จ 2๋ช ๋ง์ด ํ๋์ ๊ณ์ฝ์์ ์ ๊ทผํ๊ณ ์์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์ ์ด ๊ณผ๋ํ๋ค๊ณ ํ๋จ- ํ์ฌ ํ๋ก์ ํธ๋ ๋ชจ๋๋ฆฌ์ ๊ตฌ์กฐ๋ก ๋ถ์ฐ ํ๊ฒฝ์ ๊ณ ๋ คํ ํ์๋ ์์ง๋ง, ์ดํ
MSA๊ตฌ์กฐ๋ก ํ์ฅ์ด ์ฉ์ด - ํด๋น ์ด์๊ฐ ๋ฐ์ํ ์์ ์์ ์ด๋ฏธ ์ฑํ ๊ด๋ จ์ผ๋ก Redis๋ฅผ ์ฌ์ฉํ๊ณ ์์
- ์ด๋ฅผ ํตํด ์ฑ๊ธ ์ค๋ ๋ ๊ธฐ๋ฐ์ธ
Redis์ TTL์ ํตํด ๋ฝ ์๋ ํด์ ๋ฅผ ๋ชฉํ
- ์ด๋ฅผ ํตํด ๊ธฐ์กด ์๋น์ค์์ ํธ์ถํด์ ์ฌ์ฉํ๊ธฐ ์ฉ์ดํ๋๋ก ์๋น์ค ๊ณ์ธต์์ ํผ์ฌ๋ ํจํด์ ์ ์ฉํ์ฌ
Redis Lock์ ์ฌ์ฉํ๋๋ก ํ์์ต๋๋ค.@RedisLock(key = "'contract:' + #requestDto.contractId", errorCode = RedisLockErrorCode.*LANDLORD_IN_PROGRESS*)์ ๊ฐ์ด ์ปค์คํ ์ด๋ ธํ ์ด์ ์ผ๋ก ์๋น์ค ๋ฉ์๋์ ์ ๊ทผํ์์ต๋๋ค.
- ํด๋น ์๋น์ค๋ ๋ฝ์ ์์ ์๋ง ํด์ ํ ์ ์๋๋ก
Lua์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๊ณsetIfAbsent()๋ฉ์๋๋ฅผ ์ฌ์ฉํดRedis๋ด๋ถ์ ์ผ๋กSENTX๋ฅผ ํ์ฉํ์ฌ ๋ฝ์ ์์ ํ ๋จ์ผ ์ค๋ ๋๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก ํ์์ต๋๋ค. - ์ถ๊ฐ์ ์ผ๋ก
CountDownLatch๋ฅผ ์ฌ์ฉํ ๋จ์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ๋์์ฑ ๋ฌธ์ ํด๊ฒฐ์ ํ์ธํ์์ต๋๋ค.
๊ฐ์ ๋ ์ฌํญ
- ๊ธฐ์กด ๋ก์ง์ ๋ณ๊ฒฝํ์ง ์๊ณ , ์ปค์คํ
์ด๋
ธํ
์ด์
์ ํตํด ์ํ๋ ๋๋ฉ์ธ, ํน์ ์๋น์ค์
Redis Lock์ ์ฝ๊ฒ ์ ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค. - ํ ์คํธ ์ฝ๋๋ฅผ ํตํด ํด๋น ๋ก์ง์ด ๋ค๋ฅธ ํ์์๊ฒ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์์์ ๋ณด์ฅํ ์ ์์์ต๋๋ค.













