๋ฐฑ์—”๋“œ(Back-End) ๊ฐœ๋ฐœ 53

[Spring] ํ•„ํ„ฐ(Filter) vs ์ธํ„ฐ์…‰ํ„ฐ(Interceptor)

๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ๊ณตํ†ต์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผํ•  ์—…๋ฌด๊ฐ€ ๋งŽ๋‹ค.๊ณตํ†ต ์—…๋ฌด์—์„œ ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์ง€๊ฑฐ๋‚˜ ํ”„๋กœ์ ํŠธ ๋‹จ์œ„๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ฃผ๋ฉฐ, ์†Œ์Šค ๊ด€๋ฆฌ๋„ ๋˜์ง€ ์•Š๋Š”๋‹ค.๋”ฐ๋ผ์„œ, Spring์—์„œ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.ํ•„ํ„ฐ(Filter)์™€ ์ธํ„ฐ์…‰ํ„ฐ(Interceptor)๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์š”์ฒญ/์‘๋‹ต ์ฒ˜๋ฆฌ ์ „/ํ›„์— ๊ณตํ†ต์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ (Servlet)ํ•„ํ„ฐ => Java EE ํ‘œ์ค€ ์ŠคํŽ™ Dispatcher Servlet์—์„œ ์ œ๊ณต (Spring)์ธํ„ฐ์…‰ํ„ฐ => Spring MVC์—์„œ ์ œ๊ณตHTTP ์š”์ฒญ → WAS → "ํ•„ํ„ฐ" → ์„œ๋ธ”๋ฆฟ → ์ปจํŠธ๋กค๋ŸฌHTTP ์š”์ฒญ → WAS → ํ•„ํ„ฐ → ์„œ๋ธ”๋ฆฟ → "์ธํ„ฐ์…‰ํ„ฐ" → ์ปจํŠธ๋กค๋Ÿฌ1. Servlet Filter ๋””์ŠคํŒจ์ฒ˜ ์„œ..

[์ „์ž์ •๋ถ€ํ”„๋ ˆ์ž„์›Œํฌ] ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ค์น˜ ๋ฐ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์„ค์ •(ver 4.3.1)

์ „์ž์ •๋ถ€ํ”„๋ ˆ์ž„์›Œํฌ๋ž€? : ๊ณต๊ณต์ •๋ณดํ™” ์‚ฌ์—…์—์„œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ๊ณผ ํ’ˆ์งˆ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ํ‘œ์ค€ํ™”๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” JAVA ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ์†Œ์Šค ํ‘œ์ค€ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.https://www.egovframe.go.kr/home/main.do ํ‘œ์ค€ํ”„๋ ˆ์ž„์›Œํฌ ํฌํ„ธ eGovFrame๋ณธ๋ฌธ ๋‚ด์šฉ ๋ฐ”๋กœ๊ฐ€๊ธฐ ๋Œ€๋ฉ”๋‰ด ๋ฐ”๋กœ๊ฐ€๊ธฐ ์†Œ๊ฐœ ๊ตฌ์„ฑ ๊ตฌ์„ฑ์ƒ์„ธ ๋ฒ„์ „๋ณ„ ๊ตฌ์„ฑ ์˜คํ”ˆ์†Œ์Šค SW ํ˜„ํ™ฉ ์•„ํ‚คํ…์ณ ๋ผ์ด์„ ์Šค ์ ์šฉ์‚ฌ๋ก€ ์ถ”์ง„์„ฑ๊ณผ ๊ธฐ์ˆ ์ง€์›๋‚ด์—ญ ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ ์„ผํ„ฐ์†Œ๊ฐœ ์ง€์›์„œ๋น„์Šค ์ ์šฉ์ง€์› ์„œ๋น„์Šคwww.egovframe.go.kr 1๏ธโƒฃ ๊ฐœ๋ฐœํ™˜๊ฒฝ ๋‹ค์šด๋กœ๋“œ (ver 4.3.1)๊ฐœ๋ฐœํ”„๋ ˆ์ž„์›Œํฌ ๊ฐœ๋ฐœํ™˜๊ฒฝ ์„ค์น˜ ๊ฐ€์ด๋“œ https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev4.3:cln..

[JAVA] ๋””์ž์ธ ํŒจํ„ด๋“ค ์ •๋ฆฌ

ํŒจํ„ด๋ช…์—ญํ•  ์„ค๋ช…Spring ์ ์šฉ ํฌ์ธํŠธ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์ธ์Šคํ„ด์Šค ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•ด์„œ ์žฌ์‚ฌ์šฉ์Šคํ”„๋ง Bean ๊ธฐ๋ณธ ์‹ฑ๊ธ€ํ†ค ์Šค์ฝ”ํ”„๋ธŒ๋ฆฌ์ง€ ํŒจํ„ด๊ตฌํ˜„๋ถ€์™€ ์ถ”์ƒํ™”๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ์ถ”์ƒ ์ธํ„ฐํŽ˜์ด์Šค + ๊ตฌํ˜„์ฒด ๊ตฌ์กฐ (์ „๋žต, ํ…œํ”Œ๋ฆฟ์ฒ˜๋Ÿผ)์ „๋žต ํŒจํ„ด๋Ÿฐํƒ€์ž„์— ์•Œ๊ณ ๋ฆฌ์ฆ˜(์ „๋žต)์„ ๋ฐ”๊ฟ”์„œ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌ@Component, Map ์ฃผ์ž…ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ์ฒ˜๋ฆฌ ์ˆœ์„œ๋ฅผ ๊ณ ์ •ํ•˜๊ณ , ๊ฐœ๋ณ„ ์ฒ˜๋ฆฌ๋งŒ ๊ตฌํ˜„์ถ”์ƒ ํด๋ž˜์Šค + final ๋ฉ”์„œ๋“œํŒฉํ† ๋ฆฌ ํŒจํ„ด๊ฐ์ฒด ์ƒ์„ฑ ์ฑ…์ž„ ๋ถ„๋ฆฌBeanFactory, ApplicationContext ๋“ฑํ”„๋ก์‹œ ํŒจํ„ด์‹คํ–‰ ์ „/ํ›„ ๋กœ์ง ์‚ฝ์ž… ๋˜๋Š” ์ ‘๊ทผ ์ œ์–ดAOP(@Aspect), ํŠธ๋žœ์žญ์…˜, ๋ณด์•ˆ

[JAVA] ๋””์ž์ธ ํŒจํ„ด - ํ”„๋ก์‹œ ํŒจํ„ด(Proxy)

ํ”„๋ก์‹œ ํŒจํ„ด(Proxy)์–ด๋–ค ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด, ๋Œ€๋ฆฌ ๊ฐ์ฒด(proxy)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ดSpring AOP๋Š” ํ”„๋ก์‹œ ํŒจํ„ด ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•จ. ํ•ต์‹ฌ ๋กœ์ง ์ „ํ›„์— ๋ถ€๊ฐ€๊ธฐ๋Šฅ ์‚ฝ์ž… ๊ฐ€๋Šฅ// ์„œ๋น„์Šค ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ „ํ›„์— ๋กœ๊น… ์˜ˆ์ œ(AOP)@Aspect // ํ”„๋ก์‹œ ๊ฐ์ฒด๊ฐ€ ๋Œ€์ƒ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ์‹ธ๋Š” ๊ตฌ์กฐ@Componentpublic class LoggingAspect { // ๋ชจ๋“  Service ํŒจํ‚ค์ง€์˜ ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ „ @Before("execution(* com.winbit.project1.service.*.*(..))") public void beforeLog(JoinPoint joinPoint) { System.out.println("[Before]" + joinPoint.getSignature..

[JAVA] ๋””์ž์ธ ํŒจํ„ด - ์ „๋žต ํŒจํ„ด (Strategy)

์ „๋žต ํŒจํ„ด (Strategy)์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์œ ์—ฐํ•˜๊ฒŒ ๊ต์ฒด ๊ฐ€๋Šฅ// ์ „๋žต ํŒจํ„ด// => ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜(์ „๋žต)์„ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์คŒ// => Spring์—์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ฒด๋“ค์„ Bean์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ  Map์œผ๋กœ ์ฃผ์ž…๋ฐ›์•„ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌ// ๊ฒฐ์ œ๋ฐฉ์‹ ์„ ํƒ ์˜ˆ์ œ// 1. ์ „๋žต ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜public interface PaymentStrategy { void pay(int amount);}// 2. ์ „๋žต ๊ตฌํ˜„์ฒด๋“ค (@Component๋กœ Bean๋“ฑ๋ก)@Component("card") // key๊ฐ’์ด ๋œ๋‹ค (Map ์ฃผ์ž… ์‹œ)class CardPayment implements PaymentStrategy { public void pay(int amount) { System.out.p..

[JAVA] ๋””์ž์ธ ํŒจํ„ด - ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด (Factory Method)

ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด (Factory Method)๊ณตํ†ต ๋กœ์ง์„ ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์ •์˜ํ•˜๊ณ , ๋ณ€ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ž์‹ ํด๋ž˜์Šค์— ๊ตฌํ˜„// ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด// : ๊ฐ์ฒด ์ƒ์„ฑ์„ ์„œ๋ธŒํด๋ž˜์Šค์— ๋งก๊ธฐ๊ณ , ํด๋ผ์ด์–ธํŠธ ํƒ€์ž…๋งŒ ์ง€์ •public class FactoryMethod { public static void main(String[] args) { Notification noti = NotificationFactory.create("email"); noti.send("Hello, Factory!"); }}//์•Œ๋ฆผ(Notification) ์ธํ„ฐํŽ˜์ด์Šค => ํด๋ผ์ด์–ธํŠธ ํƒ€์ž…๋งŒ ์ง€์ •interface Notification { void send(String message); }class EmailNotification imp..

[JAVA] ๋””์ž์ธ ํŒจํ„ด - ๋ธŒ๋ฆฟ์ง€ ํŒจํ„ด(Bridge)

๋ธŒ๋ฆฟ์ง€ ํŒจํ„ด(Bridge Pattern)๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค์™€ ๊ตฌํ˜„์„ ๋‹ด๋‹นํ•˜๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ๊ตฌ๋ณ„๋ธŒ๋ฆฌ์ง€ ํŒจํ„ด์€ ์ƒˆ๋กœ์šด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜์—ฌ ๊ธฐ์กด ํ”„๋กœ๊ทธ๋žจ์˜ ๋ณ€๊ฒฝ ์—†์ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Œ⇒ ์‚ฌ์šฉ ์˜ˆ์‹œ๊ธฐ์กด ์‹œ์Šคํ…œ์— ๋ถ€์ˆ˜์ ์ธ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ๋“ค์„ ์ง€์†์ ์œผ๋กœ ์ถ”๊ฐ€ํ•  ๋•Œ๋ถ€๋ชจ ์ถ”์ƒ ํด๋ž˜์Šค๊ฐ€ ๊ธฐ๋ณธ ๊ทœ์น™ ์„ธํŠธ๋ฅผ ์ •์˜ํ•˜๊ณ , ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค๊ฐ€ ์ถ”๊ฐ€ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๋‹ค์–‘ํ•œ UI API ๊ตฌํ˜„, ๊ทธ๋ž˜ํ”ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ⇒ ์žฅ์ ํด๋ž˜์Šค ๊ณ„์ธต์„ ๋ถ„๋ฆฌํ•  ๋–„ ์™„์ „ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฒฐํ•ฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„๊ณผ ์ถ”์ƒ ๋ถ€๋ถ„ 2๊ฐœ์˜ ๊ณ„์ธต์œผ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ , ๋ถ„๋ฆฌ๋œ 2๊ฐœ์˜ ์ถ”์ƒ ๊ณ„์ธต๊ณผ ๊ตฌํ˜„ ๊ณ„์ธต์€ ๋…๋ฆฝ์ ์ธ ํ™•์žฅ์ด ๊ฐ€๋Šฅ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ง€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.๊ธฐ๋Šฅ์„ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ธฐ๋Šฅ์„ ..

[JAVA] ๋””์ž์ธ ํŒจํ„ด - ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด(Singleton)

์ž๋ฐ” ๋Œ€ํ‘œ ์ฝ”๋”ฉ ํŒจํ„ด : ์„ค๊ณ„์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด์œผ๋กœ, ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋†’์ž„⇒ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด๋งŒ ์จ๋ดค์Œ.. ๋‹ค๋ฅธ ํŒจํ„ด ๊ณต๋ถ€ ํ•  ๊ฒƒ! Spring Bean ์ž์ฒด๊ฐ€ ๊ธฐ๋ณธ ์‹ฑ๊ธ€ํ†ค! ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด(Singleton Pattern)๊ฐ์ฒด๊ฐ€ ๋‹จ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๋„๋ก! (์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋–„ ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ์ตœ์ดˆ ํ•œ๋ฒˆ๋งŒ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น(static)ํ•˜๊ณ  ๊ทธ ๋ฉ”๋ชจ๋ฆฌ์— ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด)๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ฐ™์€ ์„ค์ • ํŒŒ์ผ์—์„œ ๊ฐ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑ๋œ๋‹ค๋ฉด ์„ค์ •๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์œ„ํ—˜์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์‚ฌ์šฉํ•จ!(but, ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ๊ณ ๋ คํ•ด์„œ ์„ค๊ณ„, ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋“ค ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์•„์ ธ ‘๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™’ ์œ„๋ฐฐ)⇒ ์žฅ์  : ๋ฉ”..

์ž๋ฐ” ๋ฒ„์ „ ์ •๋ฆฌ (8,11,17,21)

Java 82014๋…„ ์ถœ์‹œ, LTS ๋ฒ„์ „(~2030.12 ์ง€์›)๋Œ€๊ทœ๋ชจ ๋ฆด๋ฆฌ์ฆˆ, Lambda, Stream API ์ œ๊ณตOptional, ์ƒˆ๋กœ์šด ๋‚ ์งœ,์‹œ๊ฐ„ API ์ œ๊ณต (ex: LocalDateTime)Oracle์ด Java๋ฅผ ์ธ์ˆ˜ํ•œ ํ›„ ์ฒซ๋ฒˆ์งธ LTS ์ถœ์‹œ ๋ฒ„์ „ Java 112018๋…„ ์ถœ์‹œ, LTS ๋ฒ„์ „(~2032.01 ์ง€์›)String๊ณผ File ๊ธฐ๋Šฅ ํ–ฅ์ƒString: isBlank(), strip()    File: writeString(), readString()var ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ ๊ฐ€๋ŠฅOpen JDK์™€ Oracle JDK๊ฐ€ ํ†ตํ•ฉ Java 172021๋…„ ์ถœ์‹œ, LTS ๋ฒ„์ „(~2029.09 ์ง€์›)Spring Boot 3.x.x ๋ฒ„์ „์€ JDK 17 ์ด์ƒ ๋ถ€ํ„ฐ ์ง€์›Switch์— ๋Œ€ํ•œ ํŒจํ„ด ๋งค์นญ (Preview..