[๋””์ž์ธํŒจํ„ด] ์ถ”์ƒ ํŒฉํ„ฐ๋ฆฌ(Abstract Factory) ํŒจํ„ด์˜ ๊ฐœ๋…, ์˜ˆ์ œ, ์žฅ๋‹จ์ , ํ™œ์šฉ

[๋””์ž์ธํŒจํ„ด] ์ถ”์ƒ ํŒฉํ„ฐ๋ฆฌ(Abstract Factory) ํŒจํ„ด์˜ ๊ฐœ๋…, ์˜ˆ์ œ, ์žฅ๋‹จ์ , ํ™œ์šฉ

1. ์ถ”์ƒ ํŒฉํ† ๋ฆฌ(Abstract Factory) ํŒจํ„ด ์ด๋ž€? ์ถ”์ƒ - ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜๋Š”์ง€ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ์ธํ„ฐํŽ˜์ด์Šค(API)์—๋งŒ ์ฃผ๋ชฉํ•˜๋Š” ์ƒํƒœ ๊ณต์žฅ - ๋ถ€ํ’ˆ์„ ์กฐ๋ฆฝํ•˜์—ฌ ์ œํ’ˆ ์™„์„ฑ ์ถ”์ƒ + ๊ณต์žฅ ํŒจํ„ด : ์ถ”์ƒ์ ์ธ ๊ณต์žฅ์—์„œ ์ถ”์ƒ์ ์ธ ๋ถ€ํ’ˆ์„ ์กฐํ•ฉํ•˜์—ฌ ์ถ”์ƒ์ ์ธ ์ œํ’ˆ์„ ๋งŒ๋“ ๋‹ค. ๋ถ€ํ’ˆ์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„์— ์ง‘์ค‘ํ•˜์ง€ ์•Š๊ณ  ์ธํ„ฐํŽ˜์ด์Šค์— ์ฃผ๋ชฉ, ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€ํ’ˆ์„ ์กฐ๋ฆฝํ•˜๊ณ  ์ œํ’ˆ์œผ๋กœ ์™„์„ฑํ•œ๋‹ค. ๋‹ค์Œ ํ‘œ๋ฅผ ๋ณด๋ฉด ์ถ”์ƒ ํŒฉํ† ๋ฆฌ๊ฐ€ ์–ด๋–ค ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์กŒ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. Abstract Factory : ์ตœ์ƒ์œ„ ๊ณต์žฅ, ๋ฉ”์„œ๋“œ๋“ค์„ ์ถ”์ƒํ™”ํ•œ๋‹ค. AbstractProduct์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. Concrete Factory : ์„œ๋ธŒ ๊ณต์žฅ ํด๋ž˜์Šค, ์œ ํ˜•์— ๋งž๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋ฉ”์„œ๋“œ๋“ค์„ ์žฌ์ •์˜ํ•œ๋‹ค. AbstractFactory์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. Abstract Product : ํƒ€์ž…์˜ ์ œํ’ˆ์„ ์ถ”์ƒํ™”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. AbstractFactory์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง€๋Š” ์ถ”์ƒ์ ์ธ ๋ถ€ํ’ˆ์ด๋‚˜ ์ œํ’ˆ์˜ ์ธํ„ฐํŽ˜์ด์Šค(API)๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ConcreteProduct : ๊ฐ ์œ ํ˜•์˜ ๊ตฌํ˜„์ฒด, ํŒฉํ† ๋ฆฌ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑํ•œ๋‹ค. AbstractProduct์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. 2. ์˜ˆ์ œ ์‚ฌ์šฉํ•  ์˜ˆ์ œ๋Š” ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๋œ ๋งํฌ ํŽ˜์ด์ง€๋ฅผ HTMLํŒŒ์ผ๋กœ ๋ฐ”๊พธ๋Š” ์ฝ”๋“œ์ด๋‹ค. ("JAVA ์–ธ์–ด๋กœ ๋ฐฐ์šฐ๋Š” ๋””์ž์ธ ํŒจํ„ด ์ž…๋ฌธ 3ํŽธ"์˜ ์˜ˆ์ œ ํ™œ์šฉ) HTML ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•œ ๊ฒƒ์œผ๋กœ 2๊ฐœ์˜ ํŒจํ‚ค์ง€๋กœ ๋ถ„๋ฆฌ๋œ ํด๋ž˜์Šค๊ตฐ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. ...

[Linux] JDK ์—ฌ๋Ÿฌ ๋ฒ„์ „ ์ ์šฉํ•˜๊ธฐ, ์—ฌ๋Ÿฌ๊ฐœ์˜ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ (update-alternatives)

[Linux] JDK ์—ฌ๋Ÿฌ ๋ฒ„์ „ ์ ์šฉํ•˜๊ธฐ, ์—ฌ๋Ÿฌ๊ฐœ์˜ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ (update-alternatives)

1. ๋ฌธ์ œ ์ƒํ™ฉ JDK21์„ ์„œ๋ฒ„์— ์ ์šฉํ•˜๋ฉด์„œ, ๊ธฐ์กด ๋ฒ„์ „๊ณผ ๋™์‹œ์— ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ ๋ฐœ์ƒ 2. ํ•ด๊ฒฐ ๋ฌผ๋ก  ๋นŒ๋“œํ•  ๋•Œ๋งˆ๋‹ค ์ž๋ฐ” ํ™ˆ ๊ฒฝ๋กœ๋ฅผ ๋ฐ”๊ฟ”์„œ ์ ์šฉํ•˜๊ฑฐ๋‚˜, ๊ฐ ํ†ฐ์บฃ์˜ catalina.sh์—ย echo JAVA_HOME=๊ฐœ๋ณ„ JAVA๊ฒฝ๋กœ ํ˜น์€ startup.sh ์Šคํฌ๋ฆฝํŠธ ์ƒ๋‹จ์— ๊ฐœ๋ณ„ JAVA_HOME์„ ๋ช…์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ, ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ธ update-alternatives๋ฅผ ํ†ตํ•ด ์ ์šฉํ•˜์˜€๋‹ค. ๊ฐœ๋…์€ ์‹ฌ๋ณผ๋ฆญ๋งํฌ (์ƒ์„ธ ๋‚ด์šฉ์€ ์•„๋ž˜ ๋งํฌ ์ฐธ๊ณ ) [Linux] - [Linux] ์‹ฌ๋ณผ๋ฆญ ๋งํฌ (Symbolic link) ์„ค์ •ํ•˜๊ธฐ ...

[Spring] ์Šคํ”„๋ง๋ถ€ํŠธ 3, ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ 6, ๋กœ๊ทธ์ธ ์„ธ์…˜ ์œ ์ง€, ๋กœ๊ทธ์ธ ํ’€๋ฆผ

[Spring] ์Šคํ”„๋ง๋ถ€ํŠธ 3, ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ 6, ๋กœ๊ทธ์ธ ์„ธ์…˜ ์œ ์ง€, ๋กœ๊ทธ์ธ ํ’€๋ฆผ

1. ๋ฌธ์ œ ์ƒํ™ฉ ์Šคํ”„๋ง ๋ถ€ํŠธ 3, ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ 6 ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜๋ฉฐ ๊ธฐ์กด์— ์‚ฌ์šฉ ์ค‘์ธ WebSecurityConfigurerAdapter๋ฅผ ๋” ์ด์ƒ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ์— ๊ธฐ์กด์˜ WebSecurityConfigurerAdapter๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋Œ€์‹  ์ปดํฌ๋„ŒํŠธํ™” ์‹œ์ผœ์„œ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค. SecurityFilterChain์œผ๋กœ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ๊ตฌํ˜„ ์ค‘ (antMacher -> requestMacher, dispatcherTypeMatcher์„ค์ • ๋“ฑ ๊ธฐ๋ณธ Spring Security6.0 ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ๋Š” ์ ์šฉ ์™„๋ฃŒ ) SecurityContext์— ๋กœ๊ทธ์ธ ์‹œ๋„ ์‹œ ์ •์ƒ์ ์œผ๋กœ ์ธ์ฆ์ •๋ณด๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ณ  ์žˆ์œผ๋‚˜, ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ์ธ์ฆ์ •๋ณด๊ฐ€ ์—†์–ด์ง€๋Š” ํ˜„์ƒ ๋ฐœ์ƒ 2. ํ•ด๊ฒฐ SecurityContextPersistenceFilter SecurityContext์˜ ์˜์†์„ฑ์„ ์ปจํŠธ๋กคํ•˜๋Š” SecurityContextPersistenceFilter์˜ ์„ค์ •์ด ๋ˆ„๋ฝ๋˜์–ด ์žˆ์—ˆ๋‹ค.ย ...

[Spring] ์Šคํ”„๋ง๋ถ€ํŠธ 3 jstl ์ ์šฉ(maven), (์ ˆ๋Œ€ URI์ธ [http://java.sun.com/jsp/jstl/core]์„(๋ฅผ), web.xmlย ๋˜๋Š” ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•จ๊ป˜ ๋ฐฐ์น˜๋œ JAR ํŒŒ์ผ ๋‚ด์—์„œ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.)

1. ๋ฌธ์ œ ์ƒํ™ฉ ์Šคํ”„๋ง๋ถ€ํŠธ 3 ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ ์ค‘ jstl URI / ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ํ˜„์ƒ ๋ฐœ์ƒ http://java.sun.com/jsp/jstl/core]์„(๋ฅผ), web.xmlย ๋˜๋Š” ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํ•จ๊ป˜ ๋ฐฐ์น˜๋œ JAR ํŒŒ์ผ ๋‚ด์—์„œ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. 2. ํ•ด๊ฒฐ ํƒ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋™์ผํ•˜๊ฒŒ javax -> jakarta ๊ธฐ๋ฐ˜ jstl maven dependency๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. <dependency> <groupId>jakarta.servlet.jsp.jstl</groupId> <artifactId>jakarta.servlet.jsp.jstl-api</artifactId> <version>3.0.0</version> </dependency> <!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> </dependency> <dependency> <groupId>jakarta.servlet.jsp</groupId> <artifactId>jakarta.servlet.jsp-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>jakarta.el</groupId> <artifactId>jakarta.el-api</artifactId> <version>5.0.0</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> <version>3.0.1</version> </dependency> ...

[Spring] Java 21 ๋กฌ๋ณต(lombok) ๋ฒ„์ „ ์„ค์ • (java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid')

1. ๋ฌธ์ œ ์ƒํ™ฉ JDK21 ๋ฒ„์ „ ์—… ์ค‘ย java: java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport does not have member field 'com.sun.tools.javac.tree.JCTree qualid' ๋ผ๋Š” ์—๋Ÿฌ์™€ ํ•จ๊ป˜ ๋นŒ๋“œ ์‹คํŒจ 2. ํ•ด๊ฒฐ JDK21๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋กฌ๋ณต(lombok) ๋ฒ„์ „ ๋ฌธ์ œ๋กœ ํ™•์ธ, (JDK21๊ณผ ํ˜ธํ™˜๋˜๋Š” ์ตœ์†Œ ๋กฌ๋ณต(lombok) ๋ฒ„์ „์€ 1.18.30์ด๋‹ค.) <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <scope>provided</scope> </dependency> ๊ธฐ์กด ์‚ฌ์šฉ ์ค‘์ธ ๊ตฌ๋ฒ„์ „ ๋กฌ๋ณต(lombok)์„ ์ž‘์„ฑ์ผ ๊ธฐ์ค€ ์ตœ์‹ ๋ฒ„์ „์ด์ž JDK21 ํ˜ธํ™˜ ์ตœ์†Œ ๋ฒ„์ „์ธ 1.18.30์œผ๋กœ ๋ณ€๊ฒฝํ•ด ์ฃผ๋ฉด ์ •์ƒ์ ์œผ๋กœ ๋นŒ๋“œ๊ฐ€ ๋œ๋‹ค. ...