[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์œผ๋กœ ๋ณ€๊ฒฝํ•ด ์ฃผ๋ฉด ์ •์ƒ์ ์œผ๋กœ ๋นŒ๋“œ๊ฐ€ ๋œ๋‹ค. ...

[Java] ์ž๋ฐ” ์ŠคํŠธ๋ฆผ(Streams)์˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

[Java] ์ž๋ฐ” ์ŠคํŠธ๋ฆผ(Streams)์˜ ๊ฐœ๋…๊ณผ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

1. ์ž๋ฐ” ์ŠคํŠธ๋ฆผ(Streams)์ด๋ž€? ๊ธฐ์กด์˜ ๋ฐฐ์—ด ๋˜๋Š” ์ปฌ๋ ‰์…˜ ์ธ์Šคํ„ด์Šค๋Š” for, foreach ๊ฐ™์€ ๋ฐ˜๋ณต๋ฌธ์„ ํ†ตํ•ด ํ•˜๋‚˜์”ฉ ํ•ธ๋“ค๋งํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ๊ธฐ์— ๋กœ์ง์ด ๋ณต์žกํ• ์ˆ˜๋ก ์ฝ”๋“œ์–‘๋„ ๋งŽ์•„์ง€๊ณ  ๋ฃจํ”„๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๋„๋Š” ๊ฒฝ์šฐ๋„ ๋ฐœ์ƒํ•˜์˜€๋‹ค. ๊ทธ์— ๋น„ํ•ด ์ž๋ฐ” 8์—์„œ ์ถ”๊ฐ€๋œ ์ŠคํŠธ๋ฆผ(Streams)์€ ๋žŒ๋‹ค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ  ์ค‘ ํ•˜๋‚˜๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์ด๋ผ๋Š” ๋œป์œผ๋กœ ์ปฌ๋ ‰์…˜์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ์ˆœํšŒํ•˜๋ฉด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œํŒจํ„ด์ด๋‹ค. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” ์—ฐ์‚ฐ๊ด€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋น„์Šทํ•œ ์—ฐ์‚ฐ์„ ์ง€์›ํ•œ๋‹ค. ๋ฐฐ์—ด/์ปฌ๋ ‰์…˜์˜ ํ•จ์ˆ˜ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ํ•„ํ„ฐ๋ง, ๊ฐ€๊ณต๋œ ๊ฒฐ๊ณผ ์ถ”์ถœ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋žŒ๋‹ค์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜๋‚˜์˜ ์ž‘์—…์„ ๋‘˜ ์ด์ƒ ์ž‘์—…์œผ๋กœ ์ž˜๊ฒŒ ์ชผ๊ฐœ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์Šค๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŽ์€ ์š”์†Œ๋“ค์„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•œ๋‹ค.ย ์ปฌ๋ ‰์…˜์€ ํ˜„์žฌ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ธ๋ฐ ๋น„ํ•ด, ์ŠคํŠธ๋ฆผ์€ ์š”์ฒญํ•  ๋•Œ๋งŒ ์š”์†Œ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ณ ์ •๋œ ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋‹ค. ์ŠคํŠธ๋ฆผ์— ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ 3๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ...