๋ฌธ์์ด ๋น๊ต๋ String ํด๋์ค์์ ์ ๊ณตํด์ฃผ๋ equals(), equalsIgnoreCase() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ์ค์ ๋ฌธ์์ด์ ๋น๊ตํ์ฌ ๊ธฐ๋ณธ ์๋ฃํ๊ณผ ์ฐธ์กฐํ์ ๋น๊ต์์๋ ๊ฐ๋ค๋ ๊ฒฐ๊ณผ๋ฅผ ์ ๋๋ก ๋ฐํํด์ค๋ค. ๋ฑ์ ์ฐ์ฐ์( == ) ๋ฅผ ํตํด์ ๋น๊ตํ๊ฒ ๋๋ค๋ฉด, ์ค์ ์ ๋ฌธ์์ด์ด ์๋ ๋ฌธ์์ด์ ์ฃผ์๋ฅผ ๋น๊ตํ์ฌ ๊ฐ์ ํ์ถํ๋ค. equals() : ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ฌ ๋น๊ต equalsIgnoreCase() : ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ๋น๊ต ์ํ๋ ๋น๊ตํํ๋ฅผ ํ์ ํ์ฌ ์ ํํ๊ณ ์ฌ์ฉํด์ผํ๋ค.

๋ค์ด๊ฐ๊ธฐ์ ์. 2023.11.07 - [Spring๐ธ๏ธ] - [Spring Security] ์คํ๋ง ์ํ๋ฆฌํฐ ๊ธฐ๋ณธ - 1 ์ด์ ์ Security ๊ธฐ๋ณธ์ ํตํด์ ์ด๋ ํ ๋ฐฉ์์ผ๋ก ๋ณด์์์ ์ฒ๋ฆฌํ๋์ง ์์๋ณด์๋ค. ํ์ง๋ง ๋ด๋ถ์์ ์ด๋ค ์์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋๋์ง๋ ์์ธํ๊ฒ ์์๋ณด์ง ๋ชปํ๋ค. ๊ทธ๋ผ ๋ด๋ถ์ ํ๋ฆ์ ํ๋ฒ ์์๋ณด์. ์ธ์ฆ vs ์ธ๊ฐ ์ธ์ฆ(Authentication) ์ฌ์ดํธ์ ์ ๊ทผํ๋ ์ฌ๋์ด ๋๊ตฌ์ธ์ง ์์คํ ์ด ์์์ผ ํ๋ค. ์ต๋ช ์ฌ์ฉ์(anonymous user)๋ฅผ ํ์ฉํ๋ ๊ฒฝ์ฐ๋ ์์ง๋ง, ํน์ ๋ฆฌ์์ค์ ์ ๊ทผํ๊ฑฐ๋ ๊ฐ์ธํ๋ ์ฌ์ฉ์ฑ์ ๋ณด์ฅ ๋ฐ๊ธฐ ์ํด์๋ ๋ฐ๋์ ๋ก๊ทธ์ธํ๋ ๊ณผ์ ์ด ํ์ํ๋ค. ๋ก๊ทธ์ธ์ ๋ณดํต username / password ๋ฅผ ์ ๋ ฅํ๊ณ ๋ก๊ทธ์ธํ๋ ๊ฒฝ์ฐ์ sns ์ฌ์ดํธ๋ฅผ ํตํด ์ธ์ฆ์ ๋๋ฆฌํ๋ ๊ฒฝ์ฐ๊ฐ ..

๋ค์ด๊ฐ๊ธฐ ์ ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ API๋ฌธ์๋ฅผ REST Docs๋ฅผ ์ฌ์ฉํด ๋ง๋ค๊ธฐ๋ก ํ์๋ค. API ๋ช ์ธ์๋ฅผ REST Docs๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๋๊ฑด ์ฒ์์ด์ฌ์ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ธฐ์ ์ ์ด๋ฐ์ ๋ฐ ํ ์คํธ๋ฅผ ์งํํด ๋ณด์๋ค. ๊ทธ๋ผ ์ง๊ธ๋ถํฐ ์์๋ณด์! REST Docs? Spring REST Docs๋ ์ ํํ๊ณ ๊ฐ๋ ์ฑ ์ข์ REST ๋ฌธ์๋ฅผ ์ ๊ณตํ๊ธฐ ์ํ ํ๋ก์ ํธ์ด๋ค. Asciidoctor๋ฅผ ํ์ฉํด์ ํ ์คํธ์ฝ๋๋ฅผ adoc์ผ๋ก ๋ณํํ HTML๋ก ๋ณํ์์ผ์ฃผ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ๋์์ผ๋ก Markdown์ ์ฌ์ฉํ ์๋ ์๋ค. Adoc? adoc์ ๋ฌธ์๋ฅผ ์์ฑํ๊ธฐ ์ํ ๊ฒฝ๋ํ ๋งํฌ์ ์ธ์ด์ด๋ค. asciidoctor๋ฅผ ํตํด html์ด๋ pdf๋ฑ์ ํํ๋ก ๋ณํํ์ฌ ํ์ฉ์ด ๊ฐ๋ฅํ๋ค. ๋จผ์ Spring MVC์ test์์ ์ ๊ณต..
ํ๊ฒฝ๋ถ๋ฆฌ์ ํ์์ฑ ์ค์ ๋ฐฐํฌํ ์๋น์ค๋ผ๋ฉด, ๊ฐ๋ฐ ์๋ฒ์ ์ด์ ์๋ฒ๋ฅผ ๋๋ ์ ๊ด๋ฆฌํ ํ์๊ฐ ์๋ค. ์ถ๊ฐ์ ์ผ๋ก ํ ์คํธ ํ๊ฒฝ๋ ๋ถ๋ฆฌํด์ฃผ๋ฉด ์ข๊ณ , JPA๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ddl-auto: create ๋ฅผ ์ฌ์ฉํ๋ ์ด๊ธฐ ํ๊ฒฝ์ธํ ๋ ๋ถ๋ฆฌํด๋๋ฉด ์ด์ ์๋ฒ์์ create๊ฐ ์คํ๋๋ ๋์ฐธ์ฌ๋ฅผ ์๋ฐฉ๊ฐ๋ฅํ๋ค. ํ๊ฒฝ๋ถ๋ฆฌํ๋ ๋ฐฉ๋ฒ ํ๊ฒฝ๋ถ๋ฆฌ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด๋ ํฌ๊ฒ ๋ ๊ฐ์ง์ด๋ค. 1. yml ํ์ผ ๋๋๊ธฐ 2. ํ๋์ yml ํ์ผ ์์์ ๋๋๊ธฐ ๊ธฐ๋ณธ ํ๊ฒฝ ์ธํ JPA์ ์คํ๋ง๋ถํธ2.7.1๋ก ๊ธฐ๋ณธ ํ๊ฒฝ์ ๊ตฌ์ฑ Entity๋ ๊ฐ๋จํ๊ฒ User ๋ฅผ ๋ง๋ค์ด๋๊ณ , ์คํํด๋ณด๋ ํฌํธ 8080์ผ๋ก ์ ์คํ๋๊ณ , ddl-auto: create ์ค์ ์ ๋ง๊ฒ ํ ์ด๋ธ์ด ์์ฑ๋๋ค. db์๋ ์ ์์ฑ์ด ๋๋ค. ์ด์ ํ๊ฒฝ์ ๋ถ๋ฆฌํด๋ณด์. yml ํ์ผ ๋๋๊ธฐ app..

๋ค์ด๊ฐ๊ธฐ์ ์ ์ด๋ฒ ํ๋ก์ ํธ์์ ๋ฉค๋ฒ ๋ถ๋ถ์ ๊ตฌํํ๊ฒ ๋์๋ค. ๊ทธ์ ์ ์คํ๋ง ์ํ๋ฆฌํฐ์ ๋ํด์ ์์ธํ๊ฒ ํ์ตํ๊ณ ๊ฐ๋ณด์! Spring Security๋? ์คํ๋ง ์ํ๋ฆฌํฐ๊ฐ ์ ์ฉ๋์ง ์์์์์ ๋ฌธ์ ์ ์ ๋จผ์ ์์๋ณด์. 1. ๋ก๊ทธ์ธ๊ธฐ๋ฅ์ Authentication(์ธ์ฆ) ์ด ์์. 2. API์ ๋ํ ๊ถํ ๋ถ์ฌ Authirization(์ธ๊ฐ) ๊ธฐ๋ฅ์ด ์์. 3. ์น ๋ณด์ ์ทจ์ฝ์ ์ ๋ํ ๋๋น(CSRF, ํด๋ฆญ์ ํน ๋ฑ)๊ฐ ์์. ๊ทธ๋ผ ์คํ๋ง ์ํ๋ฆฌํฐ๋ฅผ ์ ์ฉํ๋ฉด ์ด๋ค์ ์ด ๋ฌ๋ผ์ง๊น? ๋ค์ํ ์ ํ(ํผ ๋ก๊ทธ์ธ ์ธ์ฆ, ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ, OAuth 2 ๊ธฐ๋ฐ ์ธ์ฆ, LDAP ์ธ์ฆ)์ ์ฌ์ฉ์ ์ธ์ฆ ๊ธฐ๋ฅ ์ ์ฉ ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์ฉ์์ ์ญํ (Role)์ ๋ฐ๋ฅธ ๊ถํ ๋ ๋ฒจ ์ ์ฉ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ๊ณตํ๋ ๋ฆฌ์์ค์ ๋ํ ์ ๊ทผ ์ ์ด ๋ฏผ๊ฐํ ์ ๋ณด..

H2 DB H2 DB๋ ์๋ฐ ๊ธฐ๋ฐ์ ์คํ์์ค ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ ์ด๋ค. ๋ณดํต ํ ์คํธ ๋จ๊ณ๋ ์์ ๋จ๊ณ์์ ์ฌ์ฉ์ด ๋๋ฉฐ, Gradle์ด๋ Maven์ ์์กด์ฑ๋ง ์ถ๊ฐํด์ฃผ๋ฉด ๋น ๋ฅด๊ฒ ์ด์ฉ์ด ๊ฐ๋ฅํ๋ค. ์ด๋ฌํ H2 DB ๋ 3๊ฐ์ง ๋ชจ๋๋ก ์ง์๋๋ค. In-memory Embedded Mode Server Mode Inmemory mode WAS ๊ตฌ๋์์ H2 DB์ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด๋ค. WAS๊ฐ ์ข ๋ฃ๋๋ฉด, ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ํ๋ฐ์ฑ์ผ๋ก ์ฌ๋ผ์ง๋ค. ์ฆ ์ด๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ํ๋ฐ์ฑ์ผ๋ก ํ ์คํธ๋ฑ์ ์ฌ์ฉํ๊ธฐ ์ ํฉํ๋ค. Embedded Mode WAS ๊ตฌ๋์์ H2 DB๋ฅผ PC์ ๋์คํฌ์ ์ ์ฅํ์ฌ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ด๋ค. In-memory์ ๋ฌ๋ฆฌ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง์ง ์๋ ๋นํ๋ฐ์ฑ๋ชจ๋์ด๊ธฐ ..
์๋ฐ์์ ์ซ์์ ์ธ๋๋ฐ ํ์ ์๋ฐ7 ์ดํ ๋ฒ์ ๋ถํฐ _๊ฐ ์ซ์ ๋ฆฌํฐ๋ด์ ์ด๋์๋ ๋ฑ์ฅํ ์ ์๋ค. ๊ทธ ๋๋ถ์ด ์ซ์๋ฅผ ๋์ด ๋ณด์ด๊ฒ ๋ง๋ค์ด ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์๋ค. ์๋ฅผ ๋ค์ด ํ๊ตญํ ํ์๋ก 100๋ง์์ int money = 1_000_000; ์ฒ๋ผ ์ ์ธ ํ ์ ์๋ค. ํ์ง๋ง ์ด๋์๋ ์ฌ์ฉํ ์ ์๋๊ฒ์ ์๋๊ณ 4๊ฐ์ง ๊ฒฝ์ฐ์๋ _ ๋ฅผ ๋ฃ์ ์ ์๋ค. ์ซ์์ ์ฒ์์ด๋ ๋ ์์์ ์,๋ค F๋ L์ ์ ์ซ์ ๋ฌธ์์ด์ด ์์๋๋ ์์น float f1 = 1_.23456F; // X; .์ ์์ ์์น(์ซ์์ ์ซ์์ฌ์ด_ X) float f2 = 1._23456F; // X; .์ ๋ค์ ์์น(์ซ์์ ์ซ์์ฌ์ด_ X) long longNum = 999_99_9999_L; // O; L์ ์์ ์์น int ex1 = _26; // ..

์ด๋ฒ์ ์งํํ๋ 2๊ฐ์ง ํ๋ก์ ํธ์์ ์น์์ผ์ ์ด์ฉํด์ ์ฑํ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผํ๋ค. ๊ทธ์ ์ ์น์์ผ์ด ๋ญ์ง ์์๋ณด๋๋ก ํ์! ์น์์ผ(Web Socket)? ์น์์ผ ํ๋กํ ์ฝ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ฅผ ์ฐ๊ฒฐํ๊ณ , ์ค์๊ฐ์ผ๋ก ํต์ ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ ํ๋กํ ์ฝ์ด๋ค. ์ฌ๊ธฐ์ ์ฃผ๋ชฉํด์ผํ ์ ์ ์ค์๊ฐ์ด๋ผ๋ ์ ์ด๋ค. HTTP ํต์ ์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒฝ์ฐ์๋ง ์๋ฒ๊ฐ ์๋ตํ๋ ๋จ๋ฐฉํฅ ํต์ ์ด์ง๋ง, ์น์์ผ์ ์๋ฐฉํฅ, ์ค์๊ฐ ํต์ ์ ํ๋ค. ๋ํ ์น์์ผ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์์ ๋์ํ๋ฉฐ HTTP์ ๋ค๋ฅด๊ฒ ์ํ(Stateful) ํ๋กํ ์ฝ์ด๋ค. ์ฐ๊ฒฐ์ ๋งบ๊ธฐ์ํด ํ๋ฒ์ ํธ๋์ ฐ์ดํฌ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ , ์ดํ์ ์ง์์ ์ผ๋ก ์ฐ๊ฒฐ์ ๋ณด์ฅํ๋ค. ์ด๋ ๋งค๋ฒ ๋งค์ธ์ง ์ ์ก์ ์๋ก์ด ์ฐ๊ฒฐ์ ๋งบ์ ํ์๊ฐ ์์ด ํจ์จ์ ์ด๋ค. ์ฆ, ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ํ๋ฒ์ ์ฐ๊ฒฐ์ ..
EOF๋? EOF ๋ End Of File ์ ์ฝ์๋ก, ๋ฐ์ดํฐ ์์ค๋ก ๋ถํฐ ๋์ด์ ์ฝ์ ๋ฐ์ดํฐ๊ฐ ์์์ ๋ํ๋ธ๋ค. ์๊ณ ๋ฆฌ์ฆ๋ฌธ์ ๋ฅผ ํธ๋ ๊ฒฝ์ฐ ์ ๋ ฅ๊ฐ์ ์ผ๋ง๋ ๋ฐ๋์ง ๋ช ์๋์ง ์๋ ๋ฌธ์ ๋ค์ด ์๊ณ ์ด๋ฐ๊ฒฝ์ฐ EOF๋ฅผ ์ฌ์ฉํ๋ค. ์ฌ์ฉ ๋ฐฉ๋ฒ Scanner ์ฌ์ฉ ๋จผ์ Scanner ๋ฅผ ํตํด EOF๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ง ์ฝ๋ค. Scanner์ hasNext() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด ๋ฉ์๋๋ ์ ๋ ฅ๋ ํ ํฐ์ด ์์ผ๋ฉด true, ์์ผ๋ฉด false ๋ฅผ ๋ฐํํ๋ค. Scanner scan = new Scanner(System.in); while(scan.hasNext()) { System.out.println(scan.nextLine()); } BufferdReader ์ฌ์ฉ BufferedReader๋ ํ ํฐ์ ํ์ธํ๋ ๋ด..
JPA์ postgreSQL ์ฐ๋ ๋ฐฉ๋ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น JPA์ postGreSQL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๋ค. implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.postgresql:postgresql' application.yml ์ค์ spring: datasource: url: jdbc:postgresql://localhost:5432/ username: password: driver-class-name: org.postgresql.Driver jpa: show-sql: true database: postgresql hibernate: ddl-auto: update ์ด๋ ๊ฒ ์ค์ ์ ๋ง์น๋ฉด ์ฌ์ฉ์ด ..