ํฐ์คํ ๋ฆฌ ๋ทฐ
STEP 13.์ฝ์ํธ ํธ๋ํฝ ์ฒ๋ฆฌ + ํ ํฐ ์ ๋ต (ํฅํด99 ๋ฐฑ์๋ 5๊ธฐ)
dev_0hoon 2024. 7. 31. 23:28๐คท ์ฝ์ํธ ์์ฝ ํ๋ก๊ทธ๋จ
์ผ๋ฐ์ ์ผ๋ก ์ฝ์ํธ๋ฅผ ์์ฝํ ๋์๋ '์ธ๊ธฐ๊ฐ์'์ 'ํฌ'๋ค์ด ๋ชฐ๋ฆฌ๊ฒ ๋๋ฉฐ ํธ๋ํฝ์ด ๋ฐ์ํ๋ค. ๊ณง ์๋ฒ๊ฐ ๋ถํ๋ฅผ ๋ฐ๊ฒ ๋๋ค. ์ ์ ๋ถํ๋ก ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ ์ค ์ฌ์ฉ ํ ํฐ ์ ๋ต์ด ์๋ค.
Token (feat Redis)
in-memory ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ Redis๋ฅผ ์ด์ฉํ token ๋๊ธฐ์ด
์ฝ์ํธ ์์ฝํ๋ก๊ทธ๋จ์ ๋๊ธฐ์ด ๋ฐฉ์์
1. ์ฌ์ฉ์ ์ฒ์ ๋ฑ์ฅ -> ํ ํฐ ์์ฑ -> ํ ํฐ ๋๊ธฐ์ด๋ก ๋ค์ด๊ฐ
2. ํ ํฐ ๋๊ธฐ์ด -> ์๋ฒ์ ๋ฐ๋ผ ํ์ฑํ ํ ํฐ์ผ๋ก ์ ํ (์๋ฒ์ ์ํ์ ๋ฐ๋ผ ๋๊ธฐ ์๊ฐ์ด ์ ํด์ง)
3. ํ์ฑํ ํ ํฐ -> ์์ฝ, ๊ฒฐ์ ๋ฑ์ด ๊ฐ๋ฅํด์ง
์ด ์๋ค.
์ด๊ณณ์์ ํ ํฐ ๊ด๋ฆฌ๋ ๋๊ฐ์ง๋ก ๋๋๊ฒ ๋๋ค.
- ๋๊ธฐ์ด ํ ํฐ (Waiting Tokens)
- ํ์ฑํ ํ ํฐ (Active Tokens)
๋๊ธฐ์ด ํ ํฐ (Waiting Tokens)
๊ธฐ์กด์ ๋๊ธฐ์ด ํ ํฐ์ ์ํ๊ฐ์ ๋ฐ๋ผ DB์ ์ ์ฅํ์ฌ ๊ด๋ฆฌํ๋ค.
//ํ ํฐ์กฐํ
public TokenCommand.TokenCreateResDto getTokenInfo(String token) {
Token findToken = tokenRepository.findByToken(token);
if (findToken.getStatus() == TokenStatus.WAIT ){
long order = findOrder(findToken);
return TokenCommand.tokenInfo(findToken, order);
}
return TokenCommand.tokenInfo(findToken, 0L);
}
//ํ ํฐ์์ฑ
public TokenCommand.TokenCreateResDto createToken(Long userId) {
Token token = tokenRepository.findByUserId(userId);
//ํ ํฐ์ด ์ด๋ฏธ ์กด์ฌํ ๊ฒฝ์ฐ
if (!ObjectUtils.isEmpty(token)) {
//ํ ํฐ์ด ์ด๋ฏธ active์ผ ๊ฒฝ์ฐ์๋ updateAt ๋น๊ต
//ํ ํฐ์ด Wait๋ผ๋ฉด accessTime ๋น๊ต
//5๋ถ์ด ์ง๋ฌ์ผ๋ฉด
...
return TokenCommand.tokenInfo(token, order);
} else {
//ํ ํฐ ๋ฐ๊ธ
Token saveToken = tokenRepository.save(Token.create(user, status));
return TokenCommand.tokenInfo(saveToken, order);
}
}
์์ ๋ฐฉ์์ ํ ํฐ์ ์์ฑ, ์กฐํํ ๋๋ง๋ค DB์ ์ปค๋ฅ์ ๋๊ฒ ๋๋ค.
์ฆ ์ฌ์ฉ์๊ฐ ๋ช๋ง๋ช ์ด ๋์์ poliing์ ํ ๊ฒฝ์ฐ DB์ ๊ฐํ ๋ถํ๋ฅผ ์ฃผ๊ฒ ๋๋ค. ๊ทธ๋์ ์ค๊ฐ์ In-Memory์ธ Redis๋ฅผ ๋์ด ๋ถํ๋ฅผ ๋ถ์ฐํด์ฃผ๋ ค ํ๋ค.
๐คท API ๋ชฉ๋ก๋ณ ์กฐ์น ๋ชฉํ
- ๋๊ธฐ์ด ํ ํฐ ๋ฑ๋ก POST /token
1. ์ฌ์ฉ์๊ฐ ์์ฒญ์ ๋ณด๋ธ๋ค.
2. ํ ํฐ์ ์์ฑ
3. ํ ํฐ์ redis์ ZADD ๋ช ๋ น์ด๋ก Waiting Tokens(Sorted Set ์๋ฃ๊ตฌ์กฐ)์ ๋จผ์ ๋ฃ๋๋ค.
4. 'ZRANK Waiting Tokens ์ฌ์ฉ์' ๋ช ๋ น์ด๋ก ์๋ฒ์ ๊ตฌํด์ค๋ค.
5. ์์ฌ๋๊ธฐ์๊ฐ์ ๊ณ์ฐํด ๋ฆฌํดํ๋ค.
- ํ ํฐ ์ฌ์ฉ๊ฐ๋ฅ ์ฌ๋ถ ์กฐํ GET /token
1. ํด๋ผ์ด์ธํธ์์ ์ผ์ ๊ธฐ๊ฐ(5์ด)๋ง๋ค ํด๋น API๋ฅผ ํธ์ถํ์ฌ ๋๊ธฐ์๋ฒ ๋ฑ์ ์ ๋ณด๋ฅผ ๊ฐฑ์ ํ๋ค.(polling ๋ฐฉ์)
2. ํ ํฐ์ด Active Tokens์ ์๋์ง ํ์ธ
3. ์์ ๊ฒฝ์ฐ, 'ZRANK Waiting Tokens ์ฌ์ฉ์' ๋ช ๋ น์ด๋ก ์๋ฒ์ ๊ตฌํด์ค๋ค.
5. ์์ฌ๋๊ธฐ์๊ฐ์ ๊ณ์ฐํด ๋ฆฌํดํ๋ค.
- ์ฝ์ํธ ์ข์ ์กฐํ GET /concert-seats
1. ํ ํฐ์ด Active Tokens์ ์๋์ง ํ์ธ
2. ํ ํฐ์ ๋ง๋ฃ์๊ฐ์ ํ์ธํ๋ฉฐ, 5๋ถ์ด ์ง๋์ง ์์๋ค๋ฉด
3. concertSeats ์ ๋ณด๋ฅผ ๋ฆฌํดํ๋ค.
- ์ฝ์ํธ ์ข์ ์์ฝ POST /seat
1. ํ ํฐ์ด Active Tokens์ ์๋์ง ํ์ธ
2. ํ ํฐ์ ๋ง๋ฃ์๊ฐ์ ๊ตณ์ด ์ฌ์ฉํ์ง ์๋๋ค. ์ด์ ๋ ๊ฒฐ์ ๊น์ง ์์ ๋ง๋ฃ์๊ฐ์ผ๋ก ํ๊ธธ ๊ฒฝ์ฐ ํ๊ฐ ๋ง์ด ๋ ๊ฒ์ด๋ค. (ํ์ฌ ์ ์ฅ์์๋ ๋์ ๋ฐ๋๊ฒ ๋ ์ค์ํ ๊ฑฐ๋ผ ์๊ฐ์ด ๋ฌ feat.ํํ์ฐ ์ฝ์น๋ )
3. ๊ฒฐ์ ํ Active Tokens์์ ์ ๊ฑฐํ๋ค.
+ Active Token ์ ํ ์ค์ผ์ฅด๋ฌ
1. 10์ด ๋ง๋ค 3,000๋ช ์ฉ Active Tokens์ผ๋ก ์ ํํ๋ค.
Redis์์ ์ฌ์ฉ ๋ ์๋ฃ๊ตฌ์กฐ๋ 2๊ฐ์ง
sorted set (Waiting Tokens ์ฌ์ฉ)
- zadd๋ก ๋ฑ๋ก ํ๋ค (์์ : zadd waitingTokens 20240901030101 tokenUUID)
- score๋ถ๋ถ(20240901030101)์ผ๋ก ์์๋ฅผ ๋งค๊ธธ ์ ์๋ค. ์ ํ๋ก์ ํธ ๊ฐ์ ๊ฒฝ์ฐ ์ ์ฅ ์์ผ๋ก ์์๋ฅผ ๋งค๊ธธ ์ ์๋ ์ฅ์ ์ด ์๋ค.
- zrank๋ ํ value์ ์๋ฒ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
- zrange๋ ์ํ๋ ์๋ฒ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ์ ์ ํฉํ๋ค.
set (Active Tokens ์ฌ์ฉ)
- ์ปฌ๋ผ๋น ์ถ๊ฐ, ์ ๊ฑฐ, ์กด์ฌ ์ ๋ฌด ์ฒดํฌ์ ์๋ชจ๋๋ ์๊ฐ์ด ์ผ์ ํ๋ฉฐ ๋งค์ฐ ๋น ๋ฅด๋ค.
- ์ต๋ ์์์ ์๊ฐ 42์ต๊ฐ๋ฅผ ๋๊ธด๋ค๊ณ ํ๋ค.
- sadd ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด ๋ฑ๋ก์ด ๊ฐ๋ฅ (์์ : sadd activeToken tokenUUID)
- sadd activeToken tokenUUID:20240303010203 ์์ผ๋ก ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ์๊ฐ์ผ๋ก ๋๋ฉด ๋ง๋ฃ์๊ฐ์ ๊ตฌํ๊ธฐ ์์ํ ๊ฒ์ด๋ค.
'ํฅํด99' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฑํฐ 3-3 8์ฃผ์ฐจ ๋ถํ๋ฅผ ์ ์ ํ๊ฒ ์ถ์ํ๊ธฐ - ํธ๋์ญ์ ๋ฒ์ (0) | 2024.08.06 |
---|---|
์ฑํฐ 3-3 8์ฃผ์ฐจ ๋ถํ๋ฅผ ์ ์ ํ๊ฒ ์ถ์ํ๊ธฐ - ์ธ๋ฑ์ค (index) (0) | 2024.08.06 |
STEP 13.์ฝ์ํธ ํธ๋ํฝ ์ฒ๋ฆฌ +์บ์ฑ ์ ๋ต (ํฅํด99 ๋ฐฑ์๋ 5๊ธฐ) (0) | 2024.07.31 |
7์ฃผ์ฐจ ํ๊ณ ๋ ธํธ (0) | 2024.07.27 |
ํฅํด ํ๋ฌ์ค ๋ฐฑ์๋ 5์ฃผ์ฐจ ํ๊ณ .. (0) | 2024.07.20 |
- Total
- Today
- Yesterday
- ์คํ๋ง๊ณต๋ถ
- thymleaf
- ํญํดํ๋ฌ์ค
- filter
- Intercepter
- JPA
- rejectValue
- exception
- ๋ก๊ทธ์ธ
- reject
- SpringBoot
- ํฅํดํ๋ฌ์ค๋ฐฑ์๋
- React
- ArgumentResolver
- ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ญ๋
- ํฅํดํ๋ฌ์ค
- HTTP
- ํฅํด99
- react์คํ
- ์ธํฐ์ ํฐ
- jpa api
- ๋ฐฑ์๋ ๊ฐ๋ฐ์ ๊ณต๋ถ
- BindingResult
- ์ปจํธ
- Java
- ์คํ๋ง๋ถํธ
- ํญํด99
- ๋ฆฌํฐ๋ด
- hypertexttransferprotocol
- ์์ธ์ฒ๋ฆฌ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |