๐ฑ Sprout Framework
Spring์ด ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๊ธฐ ์ํด ์ฒ์๋ถํฐ ๊ตฌ์ถํ ๊ฒฝ๋ Java ์น ํ๋ ์์ํฌ์ ๋๋ค.
Sprout์ ํ๋ Java ์น ๊ฐ๋ฐ์ ํต์ฌ ๊ฐ๋ ์ ๋ฐ๋ฅ๋ถํฐ ๊ตฌํํ ํฌ๊ด์ ์ธ ์น ํ๋ ์์ํฌ์ ๋๋ค. ์์ ํ ์๋ํ๋ NIO & ํ์ด๋ธ๋ฆฌ๋ ์๋ฒ์ ๋น๋๊ธฐ WebSocket ์คํ์ ํตํด ๋ช ํ์ฑ, ํดํน ๊ฐ๋ฅ์ฑ, ํ์ฅ์ฑ์ ์ค์ ์ ๋๊ณ ์์ต๋๋ค.
์ Sprout์ธ๊ฐ?โ
๊ต์ก์ ๋ชฉ์ : Spring๊ณผ ๊ฐ์ ํ๋ ์์ํฌ๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ๋น์ทํ ๊ธฐ๋ฅ์ ์ฒ์๋ถํฐ ๊ตฌ์ถํ์ฌ ์ดํดํฉ๋๋ค.
์ง์ค๋ ๋ฒ์: ์ปจํ ์ด๋/AOP/์น/์๋ฒ ๋ด๋ถ์ ์๋์ ์ผ๋ก ์ง์ค. v1.0์์๋ ์์ ํ ORM์ด ๋ฒ์์์ ์ ์ธ๋์ด ํ๋ฉด์ ์ ๊ด๋ฆฌ ๊ฐ๋ฅํ๊ฒ ์ ์งํ๊ณ ์ฝ๋๋ฅผ ์ฝ๊ฒ ๊ฐ์ฌํ ์ ์์ต๋๋ค.
์ฃผ์ ๊ธฐ๋ฅโ
๐๏ธ IoC / DI ์ปจํ ์ด๋โ
@Component
,@Service
,@Controller
,@Repository
,@Configuration
,@Aspect
์ค์บ- ์๋
List<T>
์ฑ์ฐ๊ธฐ์ ํจ๊ป ์์ฑ์ ๊ธฐ๋ฐ ์ฃผ์ - ์์ ์ ๋ ฌ์ ์ฌ์ฉํ ์ํ ์์กด์ฑ ๊ฐ์ง
- ํฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ๊ฐ์ ์ํ
BeanDefinitionRegistrar
๋ฅผ ํตํ ์๋ ๊ตฌ์ฑ
๐ฏ AOP (๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ)โ
- ์ด๋
ธํ
์ด์
์ฃผ๋ (
@Before
,@After
,@Around
) - ์์ผ๋์นด๋(
*
,..
,?
)๋ฅผ ํฌํจํ AspectJ ์คํ์ผ ํฌ์ธํธ์ปท - CGLIB ์๋ธํด๋์ฑ + Objenesis ํด๋ฐฑ (์ธ์๊ฐ ์๋ ์์ฑ์ ๋ถํ์)
- ํ๊ฒ๋ณ ํ๋ก์๊ฐ ์๋ ์ ๋ ฌ๋ ์ด๋๋ฐ์ด์ ์ฒด์ธ
๐ ์น ๋ ์ด์ดโ
- ์ ์ธ์ ๋ผ์ฐํ
(
@GetMapping
,@PostMapping
๋ฑ) - ๊ฒฝ๋ก ๋ณ์(
{id}
)์ ์์ฒญ ๋งค๊ฐ๋ณ์ ๋ฐ์ธ๋ฉ - ํฌ๊ด์ ์ธ ์ธ์ ๋ฆฌ์กธ๋ฒ ๋ฐ ์๋ต ์ฒ๋ฆฌ
@ControllerAdvice
๋ฅผ ํตํ ์์ธ ์ฒ๋ฆฌ
โก ๊ณ ์ฑ๋ฅ ์๋ฒโ
java.nio.channels
๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋ NIO ์๋ฒ- ํ์ด๋ธ๋ฆฌ๋ ๋ชจ๋: ๊ฐ์ ์ค๋ ๋๋ฅผ ํตํ HTTP, NIO๋ฅผ ํตํ WebSocket
- ํ์ต ๋ฐ ๋๋ฒ๊น ์ ์ํ ๋ธ๋กํน ํด๋ฐฑ
- ๊ตฌ์ฑ ๊ฐ๋ฅํ ์คํ ๋ชจ๋ ๋ฐ ์ค๋ ๋ ์ ํ
๐ ๋ณด์ ์์คํ โ
- ๋ชจ๋์ ์ธ์ฆ (
AuthenticationManager
,UserDetailsService
) @PreAuthorize
๋ฅผ ํตํ ๋ฉ์๋ ๋ณด์ (AOP ๊ธฐ๋ฐ)- URL ์ธ๊ฐ ๋ฐ ์ญํ ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด
- ์์ฒญ๋ณ
ThreadLocal
์ ๊ฐ์งSecurityContextHolder
๐ WebSocket ์ง์โ
- RFC6455 ํธํ ํธ๋์ ฐ์ดํฌ ๋ฐ ํ๋ ์ ์ฒ๋ฆฌ
- ์ฐ์ํ ์ฐ๊ฒฐ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ง ๋ ผ๋ธ๋กํน ์ฐ๊ธฐ ํ
- ํฐ ๋ฉ์์ง๋ฅผ ์ํ ๋ถํ ์ง์
- ์๋ช
์ฃผ๊ธฐ ํ
(
@OnOpen
,@OnMessage
,@OnClose
,@OnError
)
ํ์ง & ํ ์คํธโ
ํฌ๊ด์ ์ธ ํ ์คํธ ์ํธ๋ ๋ค์์ ๋ค๋ฃน๋๋ค:
- ํต์ฌ ์ปจํ ์ด๋ ๊ธฐ๋ฅ (์ค์บ, ์ฃผ์ , ์๋ช ์ฃผ๊ธฐ)
- AOP ์ด๋๋ฐ์ด์ค ๋น๋์ ์ธํฐ์ ํฐ
- MVC ์์ฒญ/์๋ต ์ฒ๋ฆฌ
- ๋ณด์ ์ธ์ฆ ๋ฐ ์ธ๊ฐ
- ์๋ฒ ๊ตฌํ (๋ธ๋กํน/NIO/ํ์ด๋ธ๋ฆฌ๋)
- WebSocket ํ๋กํ ์ฝ ์ค์
์์ํ๊ธฐโ
Sprout์ผ๋ก ๊ตฌ์ถํ ์ค๋น๊ฐ ๋์ จ๋์? ๋น ๋ฅธ ์์ ๊ฐ์ด๋๋ฅผ ํ์ธํ์ฌ ๋ช ๋ถ ์์ ์์ํด๋ณด์ธ์.
์ํคํ ์ฒ๋ฅผ ์ดํดํ๊ณ ์ถ์ผ์ ๊ฐ์? ์ํคํ ์ฒ ๊ฐ์ด๋๋ฅผ ํ์ํ์ฌ Sprout์ด IoC, AOP, ์น ์๋น์ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์์๋ณด์ธ์.
์ปค๋ฎค๋ํฐ & ์ง์โ
- ๐ ๋ฌธ์ - ํฌ๊ด์ ์ธ ๊ฐ์ด๋ ๋ฐ API ์ฐธ์กฐ
- ๐ ์ด์ - ๋ฒ๊ทธ ๋ฆฌํฌํธ ๋ฐ ๊ธฐ๋ฅ ์์ฒญ
- ๐ฌ ํ ๋ก - ์ปค๋ฎค๋ํฐ ์ง์ ๋ฐ ์์ด๋์ด
- ๐ ํ ์คํธ ๋ฆฌํฌํธ - ์ต์ ํ ์คํธ ์คํ ๊ฒฐ๊ณผ
- ๐ ์ปค๋ฒ๋ฆฌ์ง ๋ฆฌํฌํธ - ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋ถ์