๐ฑ Sprout Framework
Spring์ด ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๊ธฐ ์ํด ์ฒ์๋ถํฐ ๊ตฌ์ถํ ๊ฒฝ๋ Java ์น ํ๋ ์์ํฌ
Sprout๋ ํ๋ Java ์น ๊ฐ๋ฐ์ ํต์ฌ ๊ฐ๋ ๋ค์ ์ฒ์๋ถํฐ ๊ตฌํํ ์ข ํฉ์ ์ธ ์น ํ๋ ์์ํฌ์ ๋๋ค. ์์ ํ ์๋ํ๋ NIO ๋ฐ ํ์ด๋ธ๋ฆฌ๋ ์๋ฒ์ ๋น๋๊ธฐ WebSocket ์คํ์ ๊ฐ์ถ๊ณ ์์ผ๋ฉด์๋, ๋ช ํ์ฑ, ํดํน ๊ฐ๋ฅ์ฑ, ํ์ฅ์ฑ์ ์ค์ ์ ๋๊ณ ์์ต๋๋ค.
์ Sprout์ธ๊ฐ?โ
๊ต์ก ๋ชฉ์ : Spring๊ณผ ๊ฐ์ ํ๋ ์์ํฌ๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์ ์ฌํ ๊ธฐ๋ฅ์ ์ฒ์๋ถํฐ ๊ตฌ์ถํด๋ณด๋ฉฐ ์ดํดํฉ๋๋ค.
์ง์ค๋ ๋ฒ์: ์ปจํ ์ด๋/AOP/์น/์๋ฒ ๋ด๋ถ์ ์๋์ ์ผ๋ก ์ง์คํฉ๋๋ค. ์์ ํ ORM์ v1.0์ ๋ฒ์์์ ์ ์ธํ์ฌ ๊ด๋ฆฌ ๊ฐ๋ฅํ ํ๋ฉด์ ์ ์ ์งํ๊ณ ์ฝ๋๋ฅผ ์ฝ๊ฒ ๊ฒํ ํ ์ ์๋๋ก ํ์ต๋๋ค.
์ฃผ์ ๊ธฐ๋ฅโ
๐๏ธ 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