API=Application Programming Interface
์ฝ๊ฒ ๋งํด, ํ๋ก๊ทธ๋จ๋ผ๋ฆฌ ์ํตํ๋ ์ฐฝ๊ตฌ
์) ๋ค์ด๋ฒ ๋ ์จ ์ฑ-> ๋ค์ด๋ฒ ์๋ฒ์ ์์ธ ๋ ์จ ์๋ ค์ค ์์ฒญ-> ์๋ฒ๊ฐ ๋ ์จ ๋ฐ์ดํฐ ์๋ต
์ฌ๊ธฐ์ ๋ ์จ ์ฑ๊ณผ ๋ค์ด๋ฒ ์๋ฒ ์ฌ์ด์ ํต์ ์ด API
๋ก๊น ์ด๋?
ํ๋ก๊ทธ๋จ์ ๋์ ๊ธฐ๋ก
ํ๋ก๊ทธ๋จ์ด ์ธ์ , ์ด๋ค ์ผ์ ํ๋์ง ๊ธฐ๋กํ๋ ๊ฒ
์) ์ฌ์ฉ์ A๊ฐ ๋ก๊ทธ์ธ ์๋ํจ, ์ฌ์ฉ์ B๊ฐ ๋ก๊ทธ์ธ ์๋ํจ
์ฆ, ๋์ค์ ๋ฌธ์ ๋ฐ์ ์ ์์ธ ์ถ์ ํ๊ฑฐ๋ ์ฌ์ฉ ํจํด ๋ถ์ํ ๋ ์ฌ์ฉ
API๋ก๊น ์ด๋?
API๋ฅผ ์ฌ์ฉํ ์์ฒญ๊ณผ ์๋ต์ ๊ธฐ๋กํ๋ ๊ฒ
์ด๋ฒ ๊ณผ์ ์์๋ ์ด๋๋ฏผ ์ฌ์ฉ์๊ฐ ํน์ API๋ฅผ ํธ์ถํ์ ๋๋ง ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋ ๊ฒ
API๋ก๊น ์ด ํ์ํ ์ด์
๋ฌธ์ ์ถ์ฒ: ๋๊ฐ ์ธ์ ๋ฌด์จ ์์ฒญ์ ํด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ์ ์ ์์
๋ณด์: ๊ด๋ฆฌ์๊ฐ ์๋ ์ฌ๋์ด ๋ฏผ๊ฐํ API๋ฅผ ํธ์ถํ๋์ง ํ์ธ ๊ฐ๋ฅ
์ฌ์ฉ์ ํจํด ๋ถ์: ์ด๋ค API๊ฐ ๋ง์ด ์ฐ์ด๋์ง ์ฑ๋ฅ ๋ฌธ์ ๋ ์๋์ง ๋ถ์ ๊ฐ๋ฅ
Interceptor VS AOP
1. Interceptor
API๊ฐ ์ค์ ์คํ๋๊ธฐ ์ ์ ์์ฒญ์ ์ก๊ณ ์ถ์ ๋
ํน์ง์ผ๋ก๋ ์์ฒญ ์ ๋ณด(HttpServletRequest) ์ ๊ทผ ๊ฐ๋ฅ, ์ธ์ฆ/๊ถํ ์ฒดํฌ ์ฉ๋์
2. AOP
๋ฉ์๋ ์คํ ์ ํ๋ฅผ ๊ฐ๋ก์ฑ์ ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋
ํน์ง์ผ๋ก๋ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ/ ๋ฆฌํด ๊ฐ๊น์ง ์ ๊ทผ ๊ฐ๋ฅ, ๋ก๊น , ํธ๋์ญ์ ์ฒ๋ฆฌ ๋ฑ์ ํ์ฉ
์ฝ๊ฒ ๋งํด, Interceptor๋ ๋ฌธ ์์์ ์ ๋ถ์ฆ ํ์ธ, AOP๋ ๋ฌธ ์์์ ํ๋ ๊ฐ์ํ๊ณ ๊ธฐ๋ก
Interceptor๋ฅผ ํ์ฉํ API ๋ก๊น
์ด๋ค ์ญํ ์ธ๊ฐ?
- ์์ฒญ์ด ์ปจํธ๋กค๋ฌ์ ๋์ฐฉํ๊ธฐ ์ ์ ์ฌ์ฉ์ ๊ถํ ํ์ธ
- ์ด๋๋ฏผ์ธ์ง ์๋์ง ํ๋จ
- ์ด๋๋ฏผ์ด๋ฉด ๋ก๊ทธ ๊ธฐ๋ก
- ์๋๋ฉด ์ ๊ทผ ์ฐจ๋จ
@Component
public class AdminInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
// ๊ถํ ์ฒดํฌ ๋ฐ ๋ก๊ทธ ๊ธฐ๋ก
return true; // ํ์ฉ/false: ์ฐจ๋จ
}
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new AdminInterceptor())
.addPathPatterns("/admin/**"); // ์ ์ฉ ๊ฒฝ๋ก
}
}
AOP๋ฅผ ํ์ฉํ API ๋ก๊น
์ด๋ค ์ญํ ์ธ๊ฐ?
- ๋ฉ์๋ ์คํ ์ ํ๋ฅผ ๊ฐ์
- ์์ฒญ ๋ณธ๋ฌธ(RequestBody)๊ณผ ์๋ต ๋ณธ๋ฌธ(ResponseBody)๊น์ง ๊ธฐ๋ก๊ฐ๋ฅ
- ์ฆ, ๋๊ฐ, ์ธ์ , ๋ฌด์์ ์์ฒญํ๊ณ ๊ฒฐ๊ณผ๊ฐ ๋ฌด์์ธ์ง๊น์ง ๋จ๊น
@Aspect
@Component
public class AdminLoggingAspect {
@Around("execution(* ํจํค์ง๋ช
..controller.*AdminController.*(..))")
public Object logAdminApi(ProceedingJoinPoint joinPoint) throws Throwable {
// ์คํ ์ : joinPoint.getArgs() → ์์ฒญ ๋ฐ์ดํฐ
Object result = joinPoint.proceed(); // ๋ฉ์๋ ์คํ
// ์คํ ํ: result → ์๋ต ๋ฐ์ดํฐ
return result;
}
}
Interceptorํ๋ฆ
1. ํด๋ผ์ด์ธํธ๊ฐ /admin/deleteComment์์ฒญ
2. DispatchServlet์ด ์์ฒญ์ ๋ฐ์
3. AdminInterceptor(preHandle)์คํ
- ์ฌ์ฉ์ ์ ๋ณด ํ์ธ
- ๊ถํ ์ฒดํฌ(์ด๋๋ฏผ์ธ์ง?)
- ์ด๋๋ฏผ์ด๋ฉด ๋ก๊ทธ ๊ธฐ๋ก
- ์ด๋๋ฏผ ์๋๋ฉด ์์ธ๋ฐ์/ ์ ๊ทผ ์ฐจ๋จ
4. ์ปจํธ๋กค๋ฌ ์คํ(deleteComment())
5. ์ปจํธ๋กค๋ฌ ์๋ต
6. AdminInterceptor(postHandle/ afterCompletion) ์คํ ๊ฐ๋ฅ
- ์ถ๊ฐ ๋ก๊น
์ด๋ ํ ์ฒ๋ฆฌ
7. ํด๋ผ์ด์ธํธ๋ก ์๋ต ์ ์ก
Interceptor ํต์ฌ ์ญํ : ๊ถํ ์ฒดํฌ + ์์ฒญ ์ /ํ ๋ก๊ทธ ๊ธฐ๋ก
AOPํ๋ฆ
1. ํด๋ผ์ด์ธํธ๊ฐ /admin/deleteComment ์์ฒญ
2. ์ปจํธ๋กค๋ฌ ๋ฉ์๋ ํธ์ถ ์์ ์์ AOP @Around๊ฐ๋ก์ฑ๊ธฐ
- Before ์คํ
- ์์ฒญํ ์ฌ์ฉ์ ID
- ์์ฒญ URL
- ์์ฒญ ๋ณธ๋ฌธ(RequestBody)
- ์์ฒญ ์๊ฐ
- ๋ก๊ทธ๋ถ์
- Proceed -> ์ค์ ์ปจํธ๋กค๋ฌ ๋ฉ์๋ ์คํ
- After์คํ
- ์ปจํธ๋กค๋ฌ ์๋ต(ResponseBody)
- ์๋ต ์๊ฐ
- ๋ก๊ทธ ๊ธฐ๋ก
AOP ํต์ฌ ์ญํ : ๋ฉ์๋ ์คํ ์ /ํ ๊ฐ์ + ์์ฒญ/์๋ต ๋ฐ์ดํฐ ๋ก๊ทธ
API ๋ก๊น ์๊ฐํ: Interceptor vs AOP
โโโโโโโโโโโโโโโโโโโโ
โ ํด๋ผ์ด์ธํธ โ
โ (์น/์ฑ ์์ฒญ) โ
โโโโโโโโโโโฌโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโ
โ DispatcherServletโ
โโโโโโโโโโโฌโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Interceptor โ
โ-------------------------โ
โ preHandle() โ
โ - ๊ถํ ์ฒดํฌ (์ด๋๋ฏผ?) โ
โ - ๋ก๊ทธ ๊ธฐ๋ก (URL, ์๊ฐ) โ
โ โ
โ postHandle() |
| /afterCompletion() โ
โ - ํ์ฒ๋ฆฌ ๋ก๊ทธ ๊ธฐ๋ก โ
โโโโโโโโโโฌโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Controller โ
โ-------------------------โ
โ deleteComment() / โ
โ changeUserRole() โ
โ ์ค์ ๋น์ฆ๋์ค ๋ก์ง ์ํ โ
โโโโโโโโโโโฌโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ AOP โ
โ-------------------------โ
โ @Around โ
โ Before: โ
โ - ์ฌ์ฉ์ ID โ
โ - ์์ฒญ URL โ
โ - RequestBody โ
โ - ์์ฒญ ์๊ฐ โ
โ proceed() → ์ค์ ๋ฉ์๋ ์คํ โ
โ After: โ
โ - ResponseBody โ
โ - ์๋ต ์๊ฐ โ
โ - ๋ก๊ทธ ๊ธฐ๋ก โ
โโโโโโโโโโฌโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโ
โ ํด๋ผ์ด์ธํธ โ
โ (์๋ต ์์ ) โ
โโโโโโโโโโโโโโโโโโโโ
'Backend > ๐ฑ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| MVC(ModelโViewโController) (0) | 2026.01.12 |
|---|---|
| Spring Bean ์๋ช ์ฃผ๊ธฐ (1) | 2026.01.12 |
| [Spring]ํ์ผ๊ตฌ์กฐ (์ค์) (0) | 2025.07.29 |
| [Spring]Filter (0) | 2025.07.29 |
| [Spring] filter์ค์ต๊น์ง ์งํํ ํ ์ดํดํ ๋ด์ฉ ์ ๋ฆฌ (1) | 2025.07.29 |