โ ๋ธ๋กํน๊ณผ ๋ ผ๋ธ๋กํน
๋ธ๋กํน๊ณผ ๋ ผ๋ธ๋กํน์ I/O ์์ ์์ ํ ์์ ์ด ๋๋ ๋๊น์ง ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ๊ฐ๋
โก๏ธ ๋ธ๋กํน์ด๋?
ํ ์์ ์ด ๋๋ ๋๊น์ง ๋ค๋ฅธ ์์ ์ ์ํํ์ง ์๋ ๊ฒ
ex) ํ์ผ์ ์ฝ๋ ์์ ์์ ๋ธ๋กํน์ด ๋ฐ์?
โถ ํ์ผ์ ์ฝ๋ ์์ ์ด ๋๋ ๋๊น์ง ๋ค๋ฅธ ์์ ์ ์ํํ์ง ์์
(๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ ค์ง ์ ์์)
๋ธ๋กํน I/O๋ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ์ค๋ ๋๊ฐ ์ฐจ๋จ๋๋ ๋ฐฉ์์ ๋๋ค. ์๋ฅผ ๋ค์ด, ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ์ ์ค๋ ๋๋ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ ์ถ๋ ฅ ์์ ์ ์ํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ธฐ ์ ๊น์ง๋ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
์ด๋ ์ค๋ ๋๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ํ๋ฉฐ, ๋์ ์ฒ๋ฆฌ๋๊ณผ ๋ฎ์ ์ง์ฐ ์๊ฐ์ ์๊ตฌํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ ํฉํ์ง โ
โก๏ธ ๋ ผ๋ธ๋กํน์ด๋?
ํ ์์ ์ด ์๋ฃ๋์ง ์์๋ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋ ๊ฒ
ex) ํ์ผ์ ์ฝ๋ ์์ ์์ ๋ ผ๋ธ๋กํน์ด ๋ฐ์?
โถ ํ์ผ์ ์ฝ๋ ์์ ์ด ์๋ฃ๋์ง ์์๋ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์์
(๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๋ ์๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ์ ์ฒด์ ์ธ ์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฅผ ์ ์์)
๋ ผ๋ธ๋กํน I/O๋ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ์๊ณ ์ ์ถ๋ ฅ ์์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์ํํ๋ ๋ฐฉ์์ ๋๋ค. ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ์ ์ค๋ ๋๋ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์์ํ ํ, ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ง ์๊ณ ๋ค๋ฅธ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์ ์ถ๋ ฅ ์์ ์ด ์๋ฃ๋๋ฉด ํด๋น ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
์ด ๋ฐฉ์์ ์ค๋ ๋๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋์ ์ฒ๋ฆฌ๋๊ณผ ๋ฎ์ ์ง์ฐ ์๊ฐ์ ์๊ตฌํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋งค์ฐ ํจ๊ณผ์ ! ๐
โ ๋ธ๋กํน๊ณผ ๋ ผ๋ธ๋กํน์ ์ฅ๋จ์
โก๏ธ ๋ธ๋กํน์ ์ฅ๋จ์
1. ์ฅ์
1) ๋จ์์ฑ: ๋ธ๋กํน ๋ฐฉ์์ ๊ตฌํํ๊ธฐ ์ฌ์ฐ๋ฉฐ, ๊ฐ๋ฐ์๋ค์ด ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
2) ์์ ์ฑ: ๋ธ๋กํน ๋ฐฉ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ์ฌ์๋ํ ํ์ ์์ด ์์ธ์ฒ๋ฆฌ๋ฅผ ํ๋ฉด ๋ฉ๋๋ค.
3) ์ง๊ด์ฑ: ๋ธ๋กํน ๋ฐฉ์์ ๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ฏ๋ก, ์ฝ๋์ ํ๋ฆ์ ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
2. ๋จ์
1) ๋๊ธฐ ์๊ฐ: ๋ธ๋กํน ๋ฐฉ์์ ๋ค๋ฅธ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๋๊ธฐํด์ผ ํ๋ฏ๋ก, ๋๊ธฐ ์๊ฐ์ด ๊ธธ์ด์ง ์ ์์ต๋๋ค.
2) ์๋ฒ ์์ ๋ญ๋น: ๋ธ๋กํน ๋ฐฉ์์ ํ ๋ฒ์ ํ๋์ ์์ฒญ๋ง ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์, ์๋ฒ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ชปํ๊ณ ๋ญ๋น๋ ์ ์์ต๋๋ค.
โก๏ธ ๋ ผ๋ธ๋กํน์ ์ฅ๋จ์
1. ์ฅ์
1) ๋๊ธฐ ์๊ฐ ๊ฐ์: ๋ ผ๋ธ๋กํน ๋ฐฉ์์ ๋ค๋ฅธ ์์ ์ ์คํํ๋ฉด์ ๊ธฐ๋ค๋ฆด ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์, ๋๊ธฐ ์๊ฐ์ด ๊ฐ์ํฉ๋๋ค.
2) ์๋ฒ ์์ ํ์ฉ๋ ์ฆ๊ฐ: ๋ ผ๋ธ๋กํน ๋ฐฉ์์ ์ฌ๋ฌ ๊ฐ์ ์์ฒญ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์, ์๋ฒ ์์์ ํ์ฉ๋๊ฐ ์ฆ๊ฐํฉ๋๋ค.
2. ๋จ์
1) ๋ณต์ก์ฑ: ๋ ผ๋ธ๋กํน ๋ฐฉ์์ ๊ตฌํํ๊ธฐ ์ด๋ ค์ฐ๋ฉฐ, ๊ฐ๋ฐ์๋ค์ด ์ดํดํ๊ธฐ ์ด๋ ต์ต๋๋ค
2) ์์ธ์ฒ๋ฆฌ: ๋ ผ๋ธ๋กํน ๋ฐฉ์์ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ฏ๋ก, ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ์๋ ์ฌ์๋๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ๋ณ๋๋ก ๊ตฌํํด์ผ ํฉ๋๋ค.
3) ์ฑ๋ฅ: ๋ ผ๋ธ๋กํน ๋ฐฉ์์ ๋ณ๋ ฌ์ ์ผ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ์์๋ค๊ณผ์ ์ํธ์์ฉ๊ณผ ๋๊ธฐํ๊ฐ ํ์ํฉ๋๋ค. ์ด๋ก ์ธํด ์ฑ๋ฅ์ด ๊ฐ์ํ ์ ์์ต๋๋ค.
โก๏ธ ๊ฒฐ๋ก
์คํ๋ง์์ ๋ธ๋กํน ๋ฐฉ์๊ณผ ๋ ผ๋ธ๋กํน ๋ฐฉ์์ ๊ฐ๊ฐ ๋ค๋ฅธ ์ํฉ์์ ์ฌ์ฉ๋ฉ๋๋ค.
๋ ผ๋ธ๋กํน : ์ ์ถ๋ ฅ ์์ ์ด ํ์ํ ๋ฉ์๋
(์๋ฅผ ๋ค์ด, I/O ์ฒ๋ฆฌ์ ๊ฐ์ด ๋๊ธฐ ์๊ฐ์ด ๊ธด ์์ )
๋ธ๋กํน : ์ ์ถ๋ ฅ ์์ ์ด ํ์ํ์ง ์์ ๋ฉ์๋
(์๋ฅผ ๋ค์ด, CPU๊ฐ ๋ง์ด ์ฌ์ฉ๋๋ ๊ณ์ฐ ์์ )
์ด๋ ๊ฒ ํจ์ผ๋ก์จ ์๋ฒ์ ์ฒ๋ฆฌ๋์ ์ต๋ํ ๋์ผ ์ ์์ต๋๋ค.
๋ธ๋กํน ๋ฐฉ์์ผ๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์์ ํ๋ ๊ฒ์ ์ฝ์ง ์์ ์์ !
๋ฐ๋ผ์ ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๊ฐ๋ฅํ๋ฉด ํผํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
โ ์คํ๋ง(Spring)์์ ๋ธ๋กํน๊ณผ ๋ ผ๋ธ๋กํน ๋ฐฉ์์ ์ฌ์ฉ
โก๏ธ ๋ธ๋กํน ๋ฐฉ์ ์ฌ์ฉ ์์
์คํ๋ง์์ ๋ธ๋กํน ๋ฐฉ์์ ์ฃผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ์ ๊ฐ์ด ์ ์ถ๋ ฅ ์์ ์ด ํ์ํ ๋ฉ์๋์์ ์ฌ์ฉ๋ฉ๋๋ค.
์ด ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ๋๊ธฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค.
@GetMapping("/user/{userId}") public String getUserInfo(@PathVariable String userId) {
User user = userRepository.findById(userId); return user.toString(); }
์ด ์ฝ๋์์ userRepository.findById() ๋ฉ์๋๊ฐ ์คํ๋๋ ๋์ ์ค๋ ๋๋ ๋๊ธฐํฉ๋๋ค.
์ด๋ ๋ค๋ฅธ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์, ์คํ๋ง์์๋ ์ด๋ฌํ ์ฝ๋๋ฅผ ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
โก๏ธ ๋ ผ๋ธ๋กํน ๋ฐฉ์ ์ฌ์ฉ ์์
์คํ๋ง์์ ๋ ผ๋ธ๋กํน ๋ฐฉ์์ ์ฃผ๋ก ๋คํธ์ํฌ ํต์ ๊ณผ ๊ฐ์ ์ ์ถ๋ ฅ ์์ ์ด ํ์ํ ๋ฉ์๋์์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ ์ค๋ ๋๊ฐ ๋๊ธฐํ์ง ์๊ณ ๋ค๋ฅธ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค.
@GetMapping("/user/{userId}") public CompletableFuture<String> getUserInfo(@PathVariable String userId){
return CompletableFuture.supplyAsync(() -> {
User user = userRepository.findById(userId);
return user.toString();
}
);
}
์ด ์ฝ๋์์๋ supplyAsync() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ userRepository.findById() ๋ฉ์๋๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์คํํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ค๋ ๋๊ฐ ๋๊ธฐํ์ง ์๊ณ ๋ค๋ฅธ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋ฉ๋๋ค.
โ ๋๊ธฐ์ ๋น๋๊ธฐ์ฒ๋ฆฌ
์ฝ๋๊ฐ ์คํ๋๋ ๋ฐฉ์๊ณผ ์์์ ๊ด๋ จ
โก๏ธ ๋๊ธฐ์ฒ๋ฆฌ๋?
๋๊ธฐ ์ฒ๋ฆฌ๋ ์ฝ๋๊ฐ ์์ฐจ์ ์ผ๋ก ์คํ๋๋ฉฐ, ํ ์์ ์ด ์๋ฃ๋๊ธฐ ์ ๊น์ง ๋ค๋ฅธ ์์ ์ ์ํํ์ง ์์.
๋ค๋ฅธ ์์ ์ ์ํํ๊ธฐ ์ํด์๋ ํ์ฌ ์ํ ์ค์ธ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํจ
์ด๋ฌํ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ฝ๋์ ์์๋ฅผ ๋ณด์ฅํ๋ฏ๋ก, ์์ ์ ์คํํ๋ ์์์ ๊ฒฐ๊ณผ๊ฐ ์์ ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง ํ ์์ ์ด ๋๋๊ธฐ ์ ๊น์ง ๋ค๋ฅธ ์์ ์ ์คํํ์ง ๋ชปํ๋ฏ๋ก, ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ด ์์ ๊ฒฝ์ฐ์๋ ์ ์ฒด์ ์ธ ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ ค์ง ์ ์์ต๋๋ค.
โก๏ธ ๋น๋๊ธฐ์ฒ๋ฆฌ๋?
๋๊ธฐ ์ฒ๋ฆฌ๋ ์์ ์ ์คํํ๋ ์์์ ๊ฒฐ๊ณผ๊ฐ ์์ธก ๋ถ๊ฐ๋ฅ
์์ ์ด ์๋ฃ๋์ง ์์๋ ๋ค๋ฅธ ์์ ์ ์คํํ ์ ์์ผ๋ฏ๋ก, ์ ์ฒด์ ์ธ ์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฆ
์ด๋ฌํ ์ฒ๋ฆฌ ๋ฐฉ์์ ๋๊ฐ ์ฝ๋ฐฑ(callback) ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ด ์๋ฃ๋ ๋ ์คํํ ํจ์๋ฅผ ๋ฑ๋ก
๐ก์ฝ๋ฐฑ์ด๋?
https://steadily-hyunjin.tistory.com/67
โก๏ธ ๋๊ธฐ vs ๋น๋๊ธฐ
์๋ฅผ ๋ค์ด, ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์๊ฐ ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํ๋ ์์ ์ ์ํํ๋ค๊ณ ๊ฐ์
1๏ธโฃ ๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์์์๋ ์ด๋ฏธ์ง๊ฐ ์ ๋ก๋๋ ๋๊น์ง ๋ค๋ฅธ ์์ ์ ์ํํ์ง ์์ผ๋ฏ๋ก, ์ฌ์ฉ์๋ ์ด๋ฏธ์ง ์ ๋ก๋๊ฐ ์๋ฃ๋ ๋๊น์ง ๋๊ธฐ
2๏ธโฃ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์์์๋ ์ด๋ฏธ์ง ์ ๋ก๋ ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ํํ ์ ์์ผ๋ฏ๋ก, ์ฌ์ฉ์๋ ๋ค๋ฅธ ์์ ์ ์ํํ๋ฉด์ ์ด๋ฏธ์ง ์ ๋ก๋๊ฐ ์๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์์๋ ๋ฉ๋๋ค.
โ ๋๊ธฐ ์ฒ๋ฆฌ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ฅ์
โก๏ธ ๋๊ธฐ ์ฒ๋ฆฌ์ ์ฅ๋จ์
1. ์ฅ์
1) ๊ฐ๋จํ๊ณ ์ง๊ด์ ์ธ ์ฝ๋ ์์ฑ์ด ๊ฐ๋ฅํฉ๋๋ค.
2) ๋๋ฒ๊น ์ด ์ฝ๊ณ ์๋ฌ๊ฐ ๋ฐ์ํ ๋ ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค.
3) ์์๋๋ก ์คํ๋๋ฏ๋ก ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฒ ์ ๋ฐ์ดํธํ๋ ๋ฑ์ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
2. ๋จ์
1) ์ฒ๋ฆฌ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ฉด ๋ธ๋กํน์ด ๋ฐ์ํ์ฌ ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
2) ๋๊ธฐํ๋ ๋์ CPU ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฏ๋ก ๋นํจ์จ์ ์ ๋๋ค.
3) ๋๋ถ๋ถ์ ๋๊ธฐ API๋ ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์ด ์์ผ๋ฏ๋ก ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ๋นํด ๊ตฌํ์ด ์ด๋ ต์ต๋๋ค.
โก๏ธ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ฅ๋จ์
1. ์ฅ์
1. ์ฌ๋ฌ ์์ ์ ๋์์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฏ๋ก ์ฒ๋ฆฌ ์๊ฐ์ด ๋จ์ถ๋ฉ๋๋ค.
2. ๋ธ๋กํน์ด ๋ฐ์ํ์ง ์์ ๋๊ธฐ ์๊ฐ์ด ์ต์ํ๋ฉ๋๋ค.
3. ๋์ฉ๋ ์ฒ๋ฆฌ์ ์ ํฉํ๋ฉฐ ์๋ฒ์ ํ์ฅ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
2. ๋จ์
1. ์ฝ๋๊ฐ ๋ณต์กํด์ง๋ฉฐ ๋๋ฒ๊น ์ด ์ด๋ ต์ต๋๋ค.
2. ๋น๋๊ธฐ API๋ฅผ ์ ๊ณตํ์ง ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํธํ์ฑ์ด ๋ฎ์ต๋๋ค.
3. ์์๊ฐ ๋ณด์ฅ๋์ง ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ฃผ์ํด์ผ ํฉ๋๋ค.
๋๊ธฐ ์ฒ๋ฆฌ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ ํํ ๋๋ ์ฒ๋ฆฌ ์๊ฐ, ๋์ฉ๋ ์ฒ๋ฆฌ ์ฌ๋ถ, ์ฝ๋์ ๋ณต์ก๋, API ์ง์ ์ฌ๋ถ ๋ฑ์ ๊ณ ๋ คํ์ฌ ์ ํ!
โ ์คํ๋ง(Spring)์์ ๋๊ธฐ ์ฒ๋ฆฌ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ฌ์ฉ
โก๏ธ ๋๊ธฐ ์ฒ๋ฆฌ์ ์ฌ์ฉ ์์
1. RestTemplate
์คํ๋ง์์๋ RestTemplate์ ์ฌ์ฉํ์ฌ RESTful API๋ฅผ ๋๊ธฐ์ ์ผ๋ก ํธ์ถํ ์ ์์ต๋๋ค.
์์) RestTemplate์ ์ฌ์ฉํ GET ์์ฒญ
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject("https://api.example.com/data", String.class);
์ ์ฝ๋๋ api.example.com ์๋ฒ์ /data API์ GET ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ต ๊ฒฐ๊ณผ๋ฅผ String ํํ๋ก ๋ฐ์์ต๋๋ค.
์ด๋ ๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ฉฐ, ์์ฒญ์ด ์๋ฃ๋ ๋๊น์ง ๋ธ๋กํน๋์ด ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
2. JdbcTemplate
JdbcTemplate์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ๋๊ธฐ์ ์ผ๋ก ์ํํ ์ ์์ต๋๋ค.
์์) JdbcTemplate์ ์ฌ์ฉํ SELECT ์ฟผ๋ฆฌ
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
List<User> users = jdbcTemplate.query("SELECT * FROM users", new BeanPropertyRowMapper<>(User.class));
์ ์ฝ๋๋ dataSource๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ณ , users ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ค,
User ํด๋์ค์ ์ธ์คํด์ค๋ก ๋งคํํ์ฌ ๋ฆฌ์คํธ๋ก ๋ฐํํฉ๋๋ค.
์ด ์ญ์ ๋๊ธฐ์ ์ผ๋ก ์คํ๋๋ฉฐ, ์ฟผ๋ฆฌ๊ฐ ์๋ฃ๋ ๋๊น์ง ๋ธ๋กํน๋ฉ๋๋ค.
โก๏ธ ๋๊ธฐ ์ฒ๋ฆฌ์ ์ฌ์ฉ ์์
1. @Async ์ด๋ ธํ ์ด์
@Async ์ด๋ ธํ ์ด์ ์ ์คํ๋ง์ด ์ ๊ณตํ๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฐฉ์ ์ค ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋๋ค.(ํด๋น ๋ฉ์๋๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ)
์์) ๋ค์๊ณผ ๊ฐ์ด ๋ฉ์๋๋ฅผ ์ ์ธํ๊ณ @Async ์ด๋ ธํ ์ด์ ์ ๋ถ์ด๋ฉด ํด๋น ๋ฉ์๋๋ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋ฉ๋๋ค.
@Service public class MyService { @Async public void doSomething() { // ... } }
์์ ๊ฐ์ด ๋น๋๊ธฐ ๋ฉ์๋๋ฅผ ์ ์ธํ๊ณ ํธ์ถํ๋ฉด, ํด๋น ๋ฉ์๋๊ฐ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋์ด ์๋ ํธ์ถํ ์ค๋ ๋๋ ๋ค๋ฅธ ์์ ์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋ฉ๋๋ค.
2. WebFlux
WebFlux๋ ์คํ๋ง 5๋ถํฐ ์ถ๊ฐ๋ ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ ๋ชจ๋์ ๋๋ค.
์ด ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
WebFlux๋ Reactor ํ๋ก์ ํธ์ Mono์ Flux๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ์ ์ผ๋ก HTTP ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
@RestController public class MyController {
@GetMapping("/hello") public Mono<String> hello() {
return Mono.just("Hello, world!");
}
}
์์ ์ฝ๋์์ Mono๋ 0 ๋๋ 1๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๋ฆฌ์กํฐ๋ธ ํ์ ์ ๋๋ค.
Mono.just() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ ๋ฌธ์์ด์ ๋ฐํํฉ๋๋ค.
์ด๋ฅผ ์คํํ๋ฉด ๋น๋๊ธฐ์ ์ผ๋ก "Hello, world!" ๋ฌธ์์ด์ด ๋ฐํ๋ฉ๋๋ค.
โก๏ธ ๊ฒฐ๋ก
์คํ๋ง์์๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ค์ํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๊ณ ์์ต๋๋ค.
@Async ์ด๋ ธํ ์ด์ ์ ๋น๋๊ธฐ์ ์ผ๋ก ์คํ๋ ๋ฉ์๋๋ฅผ ๊ฐ๋จํ๊ฒ ์ ์ํ ์ ์๊ณ ,
WebFlux๋ ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ์ฌ ๋น๋๊ธฐ์ ์ผ๋ก HTTP ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ด๋ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ง๋ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์, ์ ์ ํ ๋ฐฉ๋ฒ์ ์ ํํ์ฌ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
'๐ป Extracurricular > ๋ฉ์์ด์ฌ์์ฒ๋ผ11๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ ์คํฐ๋] JAVA / CS (1) | 2023.05.02 |
---|---|
[3์ฃผ์ฐจ] Java ๊ณผ์ (1) (0) | 2023.04.05 |
[2์ฃผ์ฐจ] HTML && CSS && JavaScript (0) | 2023.04.05 |
[1์ฃผ์ฐจ] Shell ๊ณผ์ (0) | 2023.03.23 |
[0์ฃผ์ฐจ] WSL2 ์ค์น / ๋ฆฌ๋ ์ค(์ฐ๋ถํฌ) ์ฌ์ฉ (0) | 2023.03.11 |