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

[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..

[SpringBoot] STS3 / jdk-11 ์„ค์น˜ํ•˜๊ธฐ

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ (STS3) ์„ค์น˜ํ•˜๊ธฐ: ์ธ์Šคํ†จ ํŒŒ์ผ๋กœ ์„ค์น˜ ํ•˜์ง€ ์•Š๊ณ , ์••์ถ•ํŒŒ์ผ์„ ํ’€์–ด์„œ ์…‹ํŒ…ํ•œ ๊ฒฝ์šฐcmd์ฐฝ)))C:\Program Files\MySQL\MySQL Server 8.0\bin>cd C:\Program Files\jdk-11.0.2\binC:\Program Files\jdk-11.0.2\bin>java -version openjdk version "11.0.2" 2019-01-15 OpenJDK Runtime Environment 18.9 (build 11.0.2+9) OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)- STS.ini ์— jdk ๊ฒฝ๋กœ ์…‹ํŒ… ํ†ฐ์บฃ ์„ค์น˜  ํ™˜๊ฒฝ์„ค์ • ์…‹ํŒ…     ์Šคํ”„๋ง MVC Project ํ•ญ๋ชฉ ์•ˆ ๋ณด์ผ ๋•Œ..

[TOMCAT] ์„œ๋ฒ„ ํฌํŠธ ์ถฉ๋Œ๋กœ ์ธํ•ด ์„œ๋ฒ„ ์‹œ์ž‘์ด ์•ˆ๋  ๊ฒฝ์šฐ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฉ”์„ธ์ง€๊ฐ€ ์ดํด๋ฆฝ์Šค์— ํ‘œ์‹œ๋จ(์˜ค๋ฅ˜์ฐฝ์œผ๋กœ ๋ณ„๋„๋กœ ํ‘œ์‹œ)Port 8080 required by Tomcat v9.0 Server at localhost is already in use. The server may already be running in another process, or a system process may be using the port. To start this server you will need to stop the other process or change the port number(s). Several ports (8009, 8080) required by Tomcat v9.0 Server at localhost are already in use. The serv..