๐๊ฐ์
ํ ํ๋ก์ ํธ๋ก ์๋ฐ ์์ฝ ์๋น์ค๋ฅผ ๋ง๋ค๋ฉด์ ์ ๋ด๋น ๋๋ฉ์ธ์ ํต์ฌ ๋๋ฉ์ธ์ธ ์๋ฐ ๋๋ฉ์ธ์ ๋งก๊ฒ ๋์์ต๋๋ค.
์๋ฐ์ํฐํฐ์๋ ์ฌ๋ฌ ํ๋ ๊ฐ๋ค์ ๊ฐ๊ณ ์๋๋ฐ ๊ทธ์ค ๋ํ์ ์ธ ํ๋๋ก ์นดํ
๊ณ ๋ฆฌ์ ์ง์ญ์ด ์์ต๋๋ค.
๋ฒค๋ ์ฌ์ดํธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋ฐ ๋ฐ์ดํฐ๋ค์ ๊ณต๊ณต๊ธฐ๊ด API ์์ ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์, ๋๋ฏธ ๋ฐ์ดํฐ๋ก ๋ฃ์ด์ฃผ์์ต๋๋ค.
ํ๋ก์ ํธ์ ๊ธฐ๋ฅ ๊ตฌํ์ ๋ชจ๋ ๋ง์น๊ณ ๋์, ๊ธฐ๋ฅ๋ค์ ๋์ ๋ณด์์ ๋ ์๋ฐ ์กฐํ์ ๋ง์ WHERE ์ ์กฐ๊ฑด์ ๋ฐ์ง๋ค๊ณ ์๊ฐํ๊ณ , ์ด๊ฑด ์ฑ๋ฅ ๋ฌธ์ ๋ก ์ด์ด์ง ์๋ ์๊ฒ ๋ค๋ ์๊ฐ์ ํด๋ณด์์ต๋๋ค.
์กฐํ์ ์ฑ๋ฅ์ ๋ ๋์ผ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ๊ฒ ๋์๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์ด๋ธ์์ ๊ฒ์ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ธ ์ธ๋ฑ์ค์ ๋ํด ํ์ตํ๊ฒ ๋์ต๋๋ค.
ํ
์คํธ ํด์ ์ํ์น ์ ์ด๋ฏธํฐ๋ฅผ ์ฌ์ฉํ์๊ณ , ํ
์คํธ ์๋ฒ๋ ํ
์คํธ RDS์์ ์ค์ํ์์ต๋๋ค.
๐ ์ธ๋ฑ์ค
์ธ๋ฑ์ค ์ค์บ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๊ธฐ ์ํด ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ๊ฒ์ํ๋ ๋์ , ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฅด๊ฒ ํน์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๊ฐ๋๋ค. ์ด๋ ๊ฒ์ ๋์์ด ๋๋ ๋ฐ์ดํฐ ์์ ์๋นํ ์ค์ฌ ์ฃผ์ด ์ฒ๋ฆฌ ์๊ฐ์ ๋จ์ถ์ํต๋๋ค.
Table์ Column์ ์์ธํ ํ์ฌ ๋ฐ๋ก ํ์ผ๋ก ์ ์ฅํ๊ฒ ๋ฉ๋๋ค.
ํด๋น Table์ ์ธ๋ฑ์ค ์กฐํ๊ฐ ์ผ์ด๋ ์ Record๋ฅผ Table Full scan ํ์ง ์์ง์๊ณ , ์์ธํ ๋ Index ํ์ผ ๊ฒ์์ผ๋ก ๊ฒ์ ์๋ ํฅ์ํ๊ฒ ๋ฉ๋๋ค.
์ฆ, ๊ธฐ๋ณธ ์กฐํ ๋ฐฉ๋ฒ์ธ Table Full scan์ ํ๋ค๋ฉด ๊ธฐ๋ณธํค๋ก ์ ๋ ฌ๋์ด ์๋ ํ
์ด๋ธ ๋ฐ์ดํฐ์์ WHERE ์ ์ ์กฐ๊ฑด์ ํ๋ ๊ฑฐ๋ฅด๊ณ ๊ทธ๋ค์ ๊ฑฐ๋ฅด๊ณ ๋ ๊ทธ๋ค์ ๊ฑธ๋ฌ์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ป๋ ๋ฐฉ์์ด๋ผ๋ฉด, Index range scan ์ WHERE ์ ์ ์กฐ๊ฑด์ด ์ธ๋ฑ์คํ ๋์ด ์์ผ๋ฉด, ๊ทธ ์ธ๋ฑ์ค๋ก ์์ธํ ๋์ด ๊ตฌ์กฐํ ๋ ํ์ผ์์ ๋น ๋ฅด๊ฒ ๊ฒ์์ด ๊ฐ๋ฅํ๋ค๋ ์ ์
๋๋ค.
์ ๋ RDBMS๋ก MySQL์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ B-Tree ์๋ฃ๊ตฌ์กฐ๋ก ์์ธํ ๋ ์ธ๋ฑ์ค๋ฅผ ๊ฐ๊ฒ ๋๊ณ , ๋ค๋ฅธ ์ธ๋ฑ์ค ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ ํด์ ํ
์ด๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ ํด์ ์ธ๋ฑ์ค ๋ฑ์ด ์์ต๋๋ค.
์ฅ์
- ๊ฒ์ ์๋ ํฅ์: ๋ฐ์ดํฐ ๊ฒ์ ์๋๋ฅผ ํฅ์์ํค๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ์ธ๋ฑ์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์์ด ์ฟผ๋ฆฌ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
- ์ ๋ ฌ๋ ๊ฒฐ๊ณผ ์ ๊ณต: ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌ๋ ์ํ๋ก ์ ์ฅํ์ฌ ์ ๋ ฌ ์์ ์ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
๋จ์
- ๊ณต๊ฐ ๋น์ฉ: ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์ถ๊ฐ์ ์ธ ๋์คํฌ ๊ณต๊ฐ์ด ํ์ํฉ๋๋ค.
- ์ฑ๋ฅ ์ ํ: ๋ฐ์ดํฐ ์ฝ์ , ์ญ์ , ๊ฐฑ์ ์ ์ธ๋ฑ์ค๋ฅผ ๊ฐฑ์ ํด์ผ ํ๋ฏ๋ก ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ฅ๋จ์ ์ด ์๊ธฐ์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฉํ๊ธฐ ์ข์ ๊ฒฝ์ฐ๊ฐ ์๊ณ , ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ ์ข์ง ์์ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์์ต๋๋ค.
ํจ์จ์ ์ธ ์ธ๋ฑ์ค ์ค๊ณ | ํผํด์ผํ ์ธ๋ฑ์ค ์ค๊ณ |
WHERE ์ ์ ์ฌ์ฉ๋๋ ์ด (WHERE ์ ์ ์ฌ์ฉ๋๋ ์ด์ด๋ผ๋ ์์ฃผ ์ฌ์ฉํด์ผ ๊ฐ์น๊ฐ ์์) | DML์ด ์์ฃผ ์ผ์ด๋๋ Column |
SELECT ์ ์ ์์ฃผ ๋ฑ์ฅํ๋ ์ปฌ๋ผ๋ค์ ์ ์กฐํฉํด์ INDEX๋ก ๋ง๋ค์ด๋๋ฉด INDEX ์กฐํ ํ ๋ค์ ๋ฐ์ดํฐ์์ ์กฐํํ ํ์๊ฐ ์์ผ๋ฏ๋ก ๋น ๋ฅด๊ฒ ๊ฒ์์ด ๊ฐ๋ฅํ๋ค. | Data ์ค๋ณต๋๊ฐ ๋์ Column(์ด์ ์ต๋ฑ์ค ํจ๊ณผ๊ฐ ์๋ค. ์๋ฅผ ๋ค์ด ์ฑ๋ณ ์ด์ M, F๋ง ์๋ค๊ณ ํ๋ฉด ์ธ๋ฑ์ค๋ฅผ ์์ฐ๋ ๊ฒ ๋ซ๋ค.๋ฐ๋ผ์ ์ผ๋ฐ ๋ณด์กฐ ์ธ๋ฑ์ค๋ณด๋ค unique ๋ณด์กฐ ์ธ๋ฑ์ค๊ฐ ๋น ๋ฅธ ์ด์ ๊ฐ ์ด๊ฒ์ด๋ค.) |
JOIN์ ์ ์์ฃผ ์ฌ์ฉ๋๋ ์ด์๋ ์ธ๋ฑ์ค์ ํจ์จ์ด ์ข์. | ์์ฃผ ์ฌ์ฉ๋์ง ์์ผ๋ฉด ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ ์ ์์. (INSERT๋ง ์ฃผ๊ตฌ์ฅ์ฐฝ ํ๋ ์์คํ ์ด๋ผ๋ฉด, ์ฌ์ฉํด๋ณด์ง๋ ๋ชปํ๊ณ ๋ฐ์ดํฐ ์ ๋ ฅ์ ๊ฑธ๋ฆฌ๋ ์์ ๋๋ง ๋ง์์ง. ์ฌ์ฉํ์ง ์๋ ์ธ๋ฑ์ค๋ ์ ๊ฑฐํ๋ ๊ฒ์ด ๋ฐ๋์งํจ.) |
์ธ๋ํค๊ฐ ์ฌ์ฉ๋๋ Column (๋จ, ์ธ๋ํค๋ ์๋์ผ๋ก ์ธ๋ํค ์ธ๋ฑ์ค ๋ง๋ฆ. ๋ฐ๋ผ์ ์ ์ฝ ์กฐ๊ฑด์ ๋ฌถ์ง ์์์ ์์ ์ฌ์ฉํ ์ ์์.) |
INDEX ์์ต๋ถ๊ธฐ์
ํ ์ด๋ธ์ด ๊ฐ์ง๊ณ ์๋ ์ ์ฒด ๋ฐ์ดํฐ์์ 10% ~ 15%์ด๋ด์ ๋ฐ์ดํฐ๊ฐ ์ถ๋ ฅ ๋ ๋๋ง INDEX๋ฅผ ํ๋๊ฒ ํจ์จ์ ์ด๊ณ , ๊ทธ ์ด์์ด ๋ ๋์๋ ์คํ๋ ค ํ์ค์บ์ด ๋ ๋น ๋ฅด๋ค๊ณ ํฉ๋๋ค.
๐ป ํ๋ก์ ํธ ์ผ์ด์ค
์ ์๋ฐ ์ํฐํฐ ์ค๊ณ์ ์ธ๋ฑ์ค ์ค๊ณ๋ฅผ ์ ๋ชฉ ์์ผ ๋ดค์ ๋ ํฉ๋นํ๋ ํ๋จ์ด ๋ด๋ ค์ก์ต๋๋ค.
1. ์๋ฐ ๋ฐ์ดํฐ๋ ๋๋ฏธ ๋ฐ์ดํฐ ์ ์ฅํ ๊ฐ์ผ๋ก(์ด๋ฏธ ์๋ฐ ์ ๊ณต์๊ฐ ๋ฑ๋ก์ ๋ค ํ๋ค๋ ์ ์ ํ์) ์ถ๊ฐ, ์ญ์ , ๋ณ๊ฒฝ์ด ์ผ์ด๋์ง ์์ต๋๋ค. ์์ฝ ๋ฐ์ดํฐ๋ง ์ฆ์ ์์ , ์ถ๊ฐ, ์ญ์ ์ฐ์ฐ์ด ์ผ์ด๋ฉ๋๋ค.
2. ์๋ฐ ๋ฐ์ดํฐ ์กฐํ์, ๋งค๋ฒ WHERE ์ ์ ENUM ๊ฐ์ผ๋ก ์ง์ญ๊ณผ ์นดํ
๊ณ ๋ฆฌ๋ฅผ ํตํด ๊ฒ์ํฉ๋๋ค.
3. ์ง์ญ๊ณผ ์นดํ
๊ณ ๋ฆฌ ๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค(๋ณตํฉ ์ธ๋ฑ์ค)๋ฅผ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ์ ํ์๊ณ , Cardinality ๋ฅผ ๋ฐ์ ธ ์ง์ญ์ ๋ ์์์ ๋ฐฐ์นํ์ต๋๋ค.
์นด๋๋๋ฆฌํฐ
์นด๋๋๋ฆฌํฐ(Cardinality)๊ฐ ๋๋ค๋ ๊ฒ์ ํน์ ์ปฌ๋ผ์ ๊ฐ๋ค์ด ๊ณ ์ ํ ๊ฐ์ ๊ฐ์๊ฐ ๋ง๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฆ, ํด๋น ์ปฌ๋ผ์ ์ ์ฅ๋ ๊ฐ๋ค์ด ์ค๋ณต์ด ์ ๊ณ ๋ค์ํ ๊ฐ์ ๊ฐ์ง๋ค๋ ๋ป์
๋๋ค. ์นด๋๋๋ฆฌํฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ ์ต์ ํ์์ ์ค์ํ ๊ฐ๋
์ผ๋ก, ์ธ๋ฑ์ค์ ํจ์จ์ฑ๊ณผ ๋ฐ์ ํ ๊ด๋ จ์ด ์์ต๋๋ค.
๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค
๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค๋ ๋๊ฐ ์ด์์ ํ๋๋ฅผ ์กฐํฉํด์ ์์ฑํ INDEX ์
๋๋ค. (MySQL์ INDEX์ ์ต๋ 15๊ฐ ์ปฌ๋ผ์ผ๋ก ๊ตฌ์ฑ ๊ฐ๋ฅ)
1๋ฒ์งธ ์กฐ๊ฑด๊ณผ ์ด๋ฅผ ๋ง์กฑํ๋ 2๋ฒ์งธ ์กฐ๊ฑด์ ํจ๊ป INDEXํด์ ์ฌ์ฉํฉ๋๋ค.
๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค๋ ๋จ์ผ ์ปฌ๋ผ ์ธ๋ฑ์ค ๋ณด๋ค ๋ ๋นํจ์จ์ ์ผ๋ก INDEX/UPDATE/DELETE๋ฅผ ์ํํ๊ธฐ ๋๋ฌธ์ ์ ์คํด์ผ ํฉ๋๋ค.
๋๋ฌธ์ ๊ฐ๊ธ์ UPDATE๊ฐ ์๋๋ ๊ฐ์ ์ ์ ํด์ผํฉ๋๋ค.
๐ ํธ๋ฌ๋ธ ์ํ 1
๐จ ์ํฉ
์ธ๋ฑ์ค๋ฅผ ์ค์ ํด์ฃผ์์ง๋ง, ์๋ํ์ง ์์์ต๋๋ค.
EXPAIN ๋ฌธ์ ์จ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ์ ๋ ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ธํ์์ต๋๋ค.
์ธ๋ํค๋ ์ธ๋ํค ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ ์กฐํํ์ง๋ง ๋ค์ค ์ปฌ๋ผ ์ธ๋ฑ์ค๋ฅผ ์ค์ ํด์ค ๊ฐ์ ์ฌ์ฉ๋์ง ์์์ต๋๋ค.
EXPLAIN ๋ช ๋ น์ด์ ๊ฒฐ๊ณผ์์ type์ด ALL๋ก ๋ํ๋๋ ๊ฒ์ MySQL์ด ํด๋น ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ ํ ํ ์ด๋ธ ์ค์บ(Full Table Scan)์ ์ํํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
โ ๏ธ ์์ธ
์ง์๋ฌธ์ COALESCE ํจ์๋ฅผ ์ฌ์ฉํด์์์ต๋๋ค.
์ด๊ธฐ ์๋ฐ ์กฐํ ๋ฉ์๋๋ ์๋์ ๊ฐ์ต๋๋ค. ์๋ฐ ์ธ์์ ํ์๋ก ๊ฐ๊ณ , ์ง์ญ๊ณผ ์นดํ ๊ณ ๋ฆฌ๋ ์ ์ฒด(ALL) ์กฐํ๊ฐ ๊ฐ๋ฅํ๋ฏ๋ก, ์ง์ญ ๋๋ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ ์ฒด๋ก ์กฐํ ํ ๋ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์กฐํํ๊ฒ๋ ํ์ต๋๋ค.
๋ค๋ง ์ด๊ฐ์ ๊ฒฝ์ฐ๋ ํ ๊ธฐ๋ฅ(API) ์ ๋๋ฌด ๋ง์ ๋ ํฌ์งํ ๋ฆฌ ๋ฉ์๋๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค ์ ์ฉ ์ ๋ฆฌํฉํ ๋ง์ ์งํ ํ์์ต๋๋ค.
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
31
32
33
34
35
|
@Query("SELECT a FROM Accommodation a "
+ "WHERE a.category = :category "
+ "AND a.region = :region "
+ "AND a.maximumCapacity >= :headCount")
Page<Accommodation> findAccommodationsByCategoryAndRegionAndHeadCount(
@Param("category") Category category,
@Param("region") Region region,
@Param("headCount") Integer headCount,
Pageable pageable
);
@Query("SELECT a FROM Accommodation a "
+ "WHERE a.category = :category "
+ "AND a.maximumCapacity >= :headCount")
Page<Accommodation> findAccommodationsByCategoryAndHeadCount(
@Param("category") Category category,
@Param("headCount") Integer headCount,
Pageable pageable
);
@Query("SELECT a FROM Accommodation a "
+ "WHERE a.region = :region "
+ "AND a.maximumCapacity >= :headCount")
Page<Accommodation> findAccommodationsByRegionAndHeadCount(
@Param("region") Region region,
@Param("headCount") Integer headCount,
Pageable pageable
);
@Query("SELECT a FROM Accommodation a "
+ "WHERE a.maximumCapacity >= :headCount ")
Page<Accommodation> findAccommodationsByHeadCount(
@Param("headCount") Integer headCount,
Pageable pageable
);
|
cs |
๋ฆฌํฉํ ๋ง์ ์งํํ์ฌ OR ์ฐ์ฐ์ด ๋๊ฒ ํ๋ คํ์ง๋ง COALESCE ํจ์๊ฐ ๊ทธ ์ญํ ์ ํ๋ ํจ์์ธ์ค ์๋ชป ์ฐฉ๊ฐํ๊ณ , ํ๋ฆฌ๊ฒ ๋ฆฌํฉํ ๋ง์ ํ์ฌ์ ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ด ์ผ์ด๋์ง ์์๋ ๊ฒ์ ๋๋ค.
COALESCE ํจ์๋ SQL์์ ์ฌ๋ฌ ์ธ์ ์ค ์ฒซ ๋ฒ์งธ๋ก NULL์ด ์๋ ๊ฐ์ ๋ฐํํ๋ ํจ์์ ๋๋ค. ๋ง์ฝ A, B๋ผ๋ ์ปฌ๋ผ์ ์ธ์๋ก COALSESC ํจ์๋ก ์ฃผ๊ฒ ๋๋ฉด A ์ปฌ๋ผ ๊ฐ์ด NULL ๊ฐ์ด ์๋ ๊ฒฝ์ฐ A ๊ฐ์ ๋ฆฌํดํ๊ณ A๊ฐ NULL์ด๊ณ B๊ฐ NULL์ด ์๋ ๊ฒฝ์ฐ B ๊ฐ์ ๋ฆฌํดํฉ๋๋ค. ๋ชจ๋ ์ธ์๊ฐ NULL์ด๋ฉด NULL์ ๋ฐํํฉ๋๋ค.
+ ์ถ๊ฐ๋ก ์ธ๋ฑ์ค๊ฐ ์ ์ฉ ๋์ง ์๋ ์ฟผ๋ฆฌ
โ๏ธ์ธ๋ฑ์ค ์
ํ ์ปฌ๋ผ์ ๊ฐ๊ณต
WHERE SUBSTR(์ปฌ๋ผ๋ช
, 1,4) = ‘2019’
ํด๊ฒฐ → WHERE ์ปฌ๋ผ๋ช
LIKE ‘2019%’
โ๏ธ ์ธ๋ฑ์ค๊ฐ ์๋ ์ด ์ด๋ฆ์๋ ํจ์๋ ์ฐ์ฐ์ ๊ฐํจ
WHERE count*10=100
ํด๊ฒฐ → WHERE count=100/10
โ๏ธ ์ธ๋ฑ์ค ์ปฌ๋ผ์ ๋ฌต์์ ํ๋ณํ(๊ฐ์ ํ์
์ผ๋ก ๋น๊ตํด์ผํจ)
WHERE ์ปฌ๋ผ๋ช
= ‘20190730’
ํด๊ฒฐ → WHERE ์ปฌ๋ผ๋ช
= TO_DATE(‘20190730’, ‘YYYYMMDD’)
โ๏ธ ์ธ๋ฑ์ค ์ปฌ๋ผ ๋ถ์ ํ ๋น๊ต.
WHERE ์ปฌ๋ผ๋ช
!= ‘10’
ํด๊ฒฐ → WHERE ์ปฌ๋ผ๋ช
IN(‘20’, ‘30’)
โ๏ธ LIKE %๊ฐ ์์ ์์น.
WHERE ์ปฌ๋ผ๋ช
LIKE ‘%2019’
ํด๊ฒฐ → OR ์กฐ๊ฑด ์ฌ์ฉ WHERE ์ปฌ๋ผ๋ช
IN(‘102019’,‘202019’,‘302019’)
๐ง๐ป ์ก์
OR ์ฐ์ฐ์๋ฅผ ์จ์ ์ ๋๋ก ๋ ๋ฆฌํฉํ ๋ง์ ์งํํด์ฃผ์์ต๋๋ค.
๐ช ๊ฒฐ๊ณผ
์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ด ์ ๋๋ก ์๋ํ๋ ๊ฑธ EXPAIN ๋ฌธ์ ํตํด ํ์ธํ ์ ์์์ต๋๋ค.
์ ๋๋ก๋ ๋ฆฌํฉํ ๋ง์ ์งํํ ์ ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์๋ชป ์ฌ์ฉํ COALESCE ํจ์๋ฅผ ์ ๋๋ก ํ์ตํ ์ ์์๊ณ , ์ถ๊ฐ์ ์ผ๋ก ์ธ๋ฑ์ค๊ฐ ์ ์ฉ๋์ง ์๋ ์ฟผ๋ฆฌ ์์๋ ๊ณต๋ถํ ์ ์์์ต๋๋ค.
๐ ํธ๋ฌ๋ธ ์ํ 2
๐จ์ํฉ
์ธ๋ฑ์ค ์ค์ ์ ์๋ฐ ์กฐํ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์งํ ์ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.
โ ๏ธ ์์ธ
Thread Group ์ค์ ์ ๋๋ฌด ์ค๋ฒํด์ ์ค์ ์ด ์์ธ์ด์์ต๋๋ค.
์๋ต ๋ฉ์์ง์์๋ ๋๋ฌด ๋ง์ ์ปค๋ฅ์ ์ด ์๋ค๊ณ ๋ํ๋๋ ๊ฑธ ๋ดค์ต๋๋ค.
์ปค๋ฅ์ ์๋ฅผ ๋ณด๊ธฐ ์ํด AWS Cloud Watch๋ก ๋ชจ๋ํฐ๋ง์ ํ์์ต๋๋ค.
ํด๋น ๋ถํํ ์คํธ ์๊ฐ์ ์ต๋ 60์ด ๋๋ ์ปค๋ฅ์ ์๊ฐ ์์๋ ๊ฑธ ํ์ธํ ์ ์์์ต๋๋ค.
๐ง๐ป ์ก์
๋๋ฌด ๋์ ์คํธ๋ ์ค๋ฅผ ์ฃผ์๊ธฐ์ Thread Group ์ค์ ์ ๋ฎ์ท์ต๋๋ค.
๊ธฐ์กด | ๋ณ๊ฒฝ | |
Number of Threads (users) | 1000 | 100 |
Ramp-Up Period (in seconds) | 100 | 300 |
Loop Count | 1 | 1 |
๐ช ๊ฒฐ๊ณผ
๋ชจ๋ ํ ์คํธ๋ค์ด ์ ์์ ์ผ๋ก ๋๋ง์น๊ฑธ ํ์ธํ ์ ์์์ต๋๋ค.
์ ์๋น์ค๊ฐ ์ผ๋ง๋งํผ์ ๋์ฉ๋ ํธ๋ํฝ์ ๊ฒช๊ฒ ๋์ง ์ ๋๋ก ์์ธกํด๋ด์ผ ํ๋ค๋ ์ ์ ๋ฐฐ์ ๊ณ , ์์ง ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ์ง๋ ๋ถ๋ถ์์ ๋ฏธํกํ๋ค๊ณ ๋๊ผ์ต๋๋ค. ์ ์๋น์ค๊ฐ ์ด๋ ์ ๋์ ์ ์ ๋ฅผ ๋ง์ดํ๊ฒ ๋ ์ง, ๊ทธ๋ฆฌ๊ณ ๊ทธ์ ๋์ ํธ๋ํฝ์ด๋ฉด ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ์ด๋ป๊ฒ ์ง์, Thread Group ์ค์ ์ ํ ์ง๋ ์กฐ๊ธ ๋ ํ์ต์ด ํ์ํ๋ค๊ณ ๋๊ผ์ต๋๋ค.
๐ถ ์ธ๋ฑ์ค ์ ์ฉ ์ ์ฑ๋ฅ ํ ์คํธ VS ์ธ๋ฑ์ค ์ ์ฉ ํ ์ฑ๋ฅ ํ ์คํธ ๊ฒฐ๊ณผ
์ธ๋ฑ์ค ์ ์ฉ ์ ๊ณผ ํ Thread Group ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ด ๋์ผํ๊ฒ ์งํ๋์์ต๋๋ค.
Number of Threads (users) : 100
Ramp-Up Period (in seconds) : 300
Loop Count : 1
๊ฒฐ๊ณผ
์ฃ์ง ์ผ์ด์ค๊น์ง ํฌํจํ๊ธฐ์ 99% ์๋ต์๊ฐ ๊ธฐ์ค์ ์งํ๋ก์ ์ ์ฌ์ฉ๋์ง ์๊ณ , 95% ์๋ต์๊ฐ ๊ธฐ์ค์ ์งํ๋ก์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
95% ์๋ต์๊ฐ ๊ธฐ์ค์์ ์ ์ฉ ์ ์ฑ๋ฅ ํ ์คํธ๋ ํ๊ท 481ms ๊ฐ ๊ฑธ๋ ธ๊ณ , ์ ์ฉ ํ ์ฑ๋ฅํ ์คํธ์์๋ ํ๊ท 242ms ๊ฐ ๊ฑธ๋ ธ์ต๋๋ค. ์ด๋ 98.76%์ ๊ฐ์ ์จ์ ๋ณด์ธ ๊ฒ์ด๋ฉฐ, 2๋ฐฐ ๊ฐ๊น์ด ๋น ๋ฅธ ์๋ต์๋๋ฅผ ๋ณด์ฌ์ฃผ์์ต๋๋ค.
JMeter ์์ฒด๋ ์๋ฒ์ CPU ์ฌ์ฉ๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ๋์คํฌ I/O ๋ฑ๊ณผ ๊ฐ์ ์์คํ ๋ฆฌ์์ค ์ฌ์ฉ๋์ ์ง์ ๋ชจ๋ํฐ๋งํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ถํ ํ ์คํธ๋ฅผ ์คํํ๊ธฐ ์ ๊ณผ ์คํํ๋ ๋์์ AWS CloudWatch ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ RDS ์ธ์คํด์ค์ ๋ฉํธ๋ฆญ์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํด๋ณด์์ต๋๋ค. RDS ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์ ์์ CPU ์ฌ์ฉ๋ฅ , ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ ๋ฑ์ ํฐ ์ฐจ์ด๋ ์กด์ฌํ์ง ์์์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
๐ ์ข์๋ ๊ฒ(Liked)
์ค์ ๋ก ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์งํํด๋ณด์์ ๋, 95% ์๋ต์๊ฐ ๊ธฐ์ค์์ 98.76%์ ๊ฐ์ ์จ์ ๋ณด์ด๋ฉฐ, 2๋ฐฐ ๊ฐ๊น์ด ๋น ๋ฅธ ์๋ต์๋๋ฅผ ๊ฒฝํํ์ ๋, '์ด๋์ ์ฑ๋ฅํ ์คํธ๋ฅผ ์งํํ๋ ๊ตฌ๋' ํ๊ณ ๋๊ผ์ต๋๋ค. ์ฑ๋ฅ์ด ํฅ์๋์์ ๋ ๋งค์ฐ ๋ฟ๋ฏํจ๊ณผ ๋ณด๋์ ๋๊ผ๊ณ , ๋ง์ฝ ์ค์ ์ด์ ์๋น์ค์๋ค๋ฉด, ์ฌ์ฉ์์๊ฒ ๋ ๋น ๋ฅธ ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์๋ค๋ ๊ฒ์ผ๋ก, ์ด ์ผ์ ์์ด์ ๋ง์กฑ๊ฐ์ ํฌ๊ฒ ๋๊ผ์ ๊ฒ ๊ฐ์ต๋๋ค.
๐ ๋ฐฐ์ด ๊ฒ(Learned)
์ธ๋ฑ์ค ์ ์ฉ๊ณผ ์ฑ๋ฅํ ์คํธ๋ฅผ ์งํํ๋ฉด์ ๋ง์ ๊ฒ์ ํ์ตํ ์ ์์์ต๋๋ค. ์ธ๋ฑ์ค๊ฐ ๋ฌด์์ธ์ง, ์ธ๋ฑ์ค ์ค์ ์ ์์ฌํญ, ์ฅ๋จ์ ์ ์๊ฒ ๋๊ณ , ์กฐํ ๊ธฐ๋ฅ์ ์์ด์ ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ด ์ผ๋ง๋ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋์ง ๋๊ผ์ต๋๋ค. ๋ํ ์๋ชป๋ ๋ฆฌํฉํ ๋ง์ผ๋ก SQL ํจ์๋ฅผ ํ๋ ๋ค์ ๊ณต๋ถํ๊ฒ ๋๊ณ , ์ด ๊ณผ์ ์์ ๋์ฑ ์ธ๋ฑ์ค๋ฅผ ๊น๊ฒ ๊ณต๋ถํ ์ ์์์ต๋๋ค.
๐ฆ ๋ถ์กฑํ๋ ๊ฒ(Lacked)
์ฑ๋ฅํ ์คํธ๋ฅผ ์งํํ๋ฉด์๋, ์์ง ํ ์คํธ ์๋๋ฆฌ์ค๋, ํ ์คํธ ๊ณํ์ ์ง๋ ๋ฐ์ ๋ฏธ์ํ๋ค๊ณ ๋๊ผ์ต๋๋ค. ์ ๊ฐ ๋ง๋ ์๋น์ค๊ฐ ์ด๋ ์ ๋ ํธ๋ํฝ์ ๋ง์ดํ ๊ป์ง ์ ์ถํ๋ ๋ฅ๋ ฅ๊ณผ ์ ์ถํ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ์ด๋ป๊ฒ ์๋๋ฆฌ์ค๋ฅผ ์งค๊ฒ์ธ์ง๋ ๋ณด๋ค ๋ง์ ํ์ต์ด ํ์ํ ๊ฒ ๊ฐ์ต๋๋ค.
๐ ๋ฐ๋ผ๋ ๊ฒ(Longed for)
ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ๊ฒฝํํ๊ธฐ ์ํด์ ์ญ์ ์ค๋ฌด์์ ์ฌ๋ฌ๊ฐ์ง ๊ฒฝ์ฐ์ ์๋ฅผ ๊ฒช์ผ๋ฉฐ ํ ์คํธ๋ฅผ ํด์ผ ๋ฐฐ์ธ ์ ์๋ค๊ณ ์๊ฐ์ด ๋ญ๋๋ค. ์ข์ ์ฌ์ ๋ถ์ ๋ง๋์ ์ด๋ค ์ผ์ด์ค์ ์ด๋ป๊ฒ ์๋๋ฆฌ์ค๋ฅผ ์ง๋ ๊ฒ ์ข์์ง ๋ฐฐ์ ๋ณด๊ณ ์ถ๊ณ , ๋์๊ฐ ๋๊ท๋ชจ ํธ๋ํฝ์ ๋ง์ดํ๊ฒ ๋๋ฉด ์ง๊ธ ๋ง๋ ์๋น์ค์ ์ํคํ ์ฒ๋ฅผ ์ด๋ป๊ฒ ๋ฐ๊ฟ์ผํ๋ ์ง๋ ๋ฐฐ์๋ณด๊ณ ์ถ์ต๋๋ค.
'Testing' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Apache JMeter : ์ค์น ๋ฐ ์ฌ์ฉ๋ฒ - ์ฑ๋ฅํ ์คํธ (feat. ์๋ฐ ์กฐํ ์ฑ๋ฅ ํฅ์์ ์ํ ํ ์คํธ) (0) | 2024.01.07 |
---|
๋๊ธ