MapleStory Finger Point

๐ŸŸค JAVA 102

[Spring Security] BCryptPasswordEncoder ํด๋ž˜์Šค

[ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ] BCryptPasswordEncoder ๋Š” ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ(ํ”„๋ ˆ์ž„์›Œํฌ) ์—์„œ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค ๋‹จ๋ฐฉํ–ฅ ํ•ด์‹œ ํ•จ์ˆ˜์ธ BCrypt ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.BCrypt ์˜ ๊ฒฝ์šฐ์—๋Š”  ์†”ํŠธ(salt) ๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ํ•ด์‹ฑํ•œ๋‹ค.  ๋กœ๊ทธ๋ผ์šด๋“œ = ๊ฐ•๋„ (strength)๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์•”ํ˜ธ๋ฅผ ํ•ด์‹œ ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—… ์ˆ˜ํ–‰ ์ •๋„์ด๋‹ค. (๊ธฐ๋ณธ๊ฐ’ 10)  BCryptPasswordEncoder ํด๋ž˜์Šค์—๋Š” ์•”ํ˜ธํ™”๋˜์–ด ์ €์žฅ๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•จ  [ BCryptPasswordEncoder ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ ์ข…๋ฅ˜ ] 1. `String encode(CharSequence rawPassword)`ํŒจ์Šค์›Œ๋“œ ์•”ํ˜ธํ™” ๋ฉ”์„œ๋“œ (์›๋ณธ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ•ด์‹ฑ) 2. `boolean matches(CharS..

[Spring Security] BCrypt ํ•ด์‹œ ํ•จ์ˆ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜

Spring Security ์—์„œ๋Š” BCryptPasswordEncoder ๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ์ด ํด๋ž˜์Šค๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•”ํ˜ธํ™”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ ์•”ํ˜ธํ™” ๋ฐฉ์‹์„ BCrypt ํ•ด์‹œ ํ•จ์ˆ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐBCrypt ํ•ด์‹œ ํ•จ์ˆ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ๋‹ค.  - BCrypt ๋ž€? BCrypt ๋ฐฉ์‹์€ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ์„ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.๋‹จ๋ฐฉํ–ฅ ํ•ด์‹œ๋กœ ์›๋ณธ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์—†๋‹ค.  - BCrypy ๋™์ž‘ ๋ฐฉ์‹ ๋‚ด๋ถ€์ ์œผ๋กœ ๋žœ๋คํ•œ ์†”ํŠธ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜์—ฌ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹ฑ์— ํฌํ•จ์‹œํ‚จ๋‹ค. ๋žœ๋ค salt ์ƒ์„ฑ >  ๋น„๋ฐ€๋ฒˆํ˜ธ + salt ๊ฒฐํ•ฉ > ๋น„์šฉํŒฉํ„ฐ์— ๋”ฐ๋ฅธ ๋ฐ˜๋ณต ํ•ด์‹ฑ > ํ•ด์‹ฑ ๊ฒฐ๊ณผ ์ €์žฅ  ์˜ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.  - salt(์†”ํŠธ) ๋ž€?ํ•ด์‹œํ•จ์ˆ˜์— ์ถ”๊ฐ€์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋žœ๋ค ๋ฐ์ดํ„ฐ 1. ๋ฌด์ž‘์œ„์„ฑ ์ถ”๊ฐ€ : ๋™์ผํ•œ ๋น„..

[Spring boot] Thymeleaf + Model

๋ ˆ์ด์•„์›ƒ ํ…œํ”Œ๋ฆฟ ์ ์šฉ: layout03 ํ…œํ”Œ๋ฆฟ์— container ๋ถ€๋ถ„์„ ์ „๋‹ฌํ•˜์—ฌ ํ•ด๋‹น ํ…œํ”Œ๋ฆฟ์˜ ํŠน์ • ๋ถ€๋ถ„๋งŒ ๊ต์ฒดํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€์—์„œ ๊ณตํ†ต๋œ ๋ ˆ์ด์•„์›ƒ์„ ์œ ์ง€ํ•˜๋ฉด์„œ, ํŠน์ • ๋ถ€๋ถ„๋งŒ ๋™์ ์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ™”๋ฉด์— ์ง„์ž…ํ•  ๋•Œ TestVO๋ฅผ Model์— ๋‹ด์•„ ํ™”๋ฉด์ฒ˜๋ฆฌ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. 1. ํšŒ์›์ •๋ณดํ™•์ธ ๋งํฌ์—๋Š” quiz_result01?ํ‚ค=๊ฐ’ ํ˜•ํƒœ๋กœ ๋ฒˆํ˜ธ๋ฅผ ๋„˜๊ธฐ๊ณ  ์ถœ๋ ฅํ•ด ์ฃผ์„ธ์š” 2. ์•„๋ž˜ class="container" ๋ถ€๋ถ„๋งŒ layout03 ํ…œํ”Œ๋ฆฟ์— ์ „๋‹ฌ ๋  ์ˆ˜ ์žˆ๋„๋ก ์ฒ˜๋ฆฌํ•˜์„ธ์š” ํšŒ์›๋ฒˆํ˜ธ: [[${vo.num}]] ์ด๋ฆ„: [[${vo.name}]] ๋‚˜์ด: [[${vo.age}]] ํšŒ์›์ •๋ณดํ™•์ธ   ๊ฒฐ๊ณผํ™”๋ฉด ๋„˜์–ด์˜จ ๊ฐ’: [[${num}]]   ..

[spring boot] RestController

@RestController //Controller + ResponseBody(์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์‘๋‹ต์„ ์š”์ฒญ์ด ๋“ค์–ด์˜จ๊ณณ์œผ๋กœ ๋ฐ”๊ฟˆ) ํ•ฉ์„ฑ์–ด    JSON ํ˜•์‹์˜ ๋ฐ˜ํ™˜ 1. Vo ํƒ€์ž…  2. Map ํƒ€์ž…     jsonํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ ์ „์†ก @RequestBody - JSON๋ฐ์ดํ„ฐ๋ฅผ -> ์ž๋ฐ” ์˜ค๋ธŒ์ ํŠธ๋กœ ๋ณ€ํ˜•ํ•ด์„œ ๋งตํ•‘ { "name" : "ํ™๊ธธ๋™", "age" : 20, "addr" : "์„œ์šธ์‹œ์‹œ" }       /////////////////////////////////////////////////////////////////////////////// //์‘๋‹ต๋ฌธ์„œ ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ ResponseEntity //@CrossOrigin({"http://127.0.0.1:5500", "h..

[SpringBoot] thymeleaf ํƒ€์ž„๋ฆฌํ”„ - ๋‚ด์žฅ๊ฐ์ฒด

ํƒ€์ž„๋ฆฌํ”„ ๋‚ด์žฅ๊ฐ์ฒด ์‚ฌ์šฉ๋ฐฉ๋ฒ• ๋ฐฐ์—ด์˜ ๊ธธ์ด [[${ #arrays.length(arr) }]] ๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด [[${ #lists.size(list) }]] ๋นˆ๋ฆฌ์ŠคํŠธ ํ™•์ธ [[${ #lists.isEmpty(list) }]] [[${now}]] [[${ #dates.format(now, 'yyyy-MM-dd') }]] ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๊ฐ’ ๋ฐ›๊ธฐ

[SpringBoot] thymeleaf ํƒ€์ž„๋ฆฌํ”„ - ํƒ€์ž…/์ œ์–ด๋ฌธ

ํƒ€์ž„๋ฆฌํ”„ ๋ณ€์ˆ˜, ์ œ์–ด๋ฌธ [[${'hello world'}]] [[${1 == 1}]] [[${1 eq 1}]] ๋ณ€์ˆ˜ ์„ ์–ธ [[${a}]] [[${b}]] ์กฐ๊ฑด๋ฌธ 10๊ณผ ๊ฐ™์Œ 10๊ณผ ๊ฐ™์ง€ ์•Š๋‹ค if if์™€ ์กฐ๊ฑด์„ ๋™์ผํ•˜๊ฒŒ ๋‹ฌ์•„์ค๋‹ˆ๋‹ค (else๋ฌธ) 3ํ•ญ ์—ฐ์‚ฐ์ž [[${ true ? '์ฐธ์ž…๋‹ˆ๋‹ค' : '๊ฑฐ์ง“์ž…๋‹ˆ๋‹ค'}]]     ๋ฐ˜๋ณต๋ฌธ [[${vo.num}]] [[${vo.name}]] [[${vo.addr}]] [[${vo.a..

[SpringBoot] thymeleaf ํƒ€์ž„๋ฆฌํ”„ include ๋ฌธ๋ฒ•

โ—ˆ ํƒ€์ž„๋ฆฌํ”„ include ๋ฌธ๋ฒ•   layout01.html ํŒŒํŠธ1 ๋ถ€๋ถ„ ํŒŒํŠธ2 ๋ถ€๋ถ„  layout02.html ์—ฌ๊ธฐ๋Š” ํ‘ธํ„ฐ ์˜์—ญ ์ž…๋‹ˆ๋‹ค..     ๊ฒฐ๊ณผ .html  ์ธํด๋ฃจ๋“œ ํ™•์ธํ•˜๊ธฐ1    layout03.html ํ—ค๋”์ž…๋‹ˆ๋‹ค. footer์ž…๋‹ˆ๋‹ค  ๊ฒฐ๊ณผ .html ์—ฌ๊ธฐ๋Š” ๋ชธ์ฒด ์ž…๋‹ˆ๋‹ค. ์•„์ด๋”” ์„ ํƒ์ž # ์—ฌ๊ธฐ๋Š” ๋ชธ์ฒด2 ์ž…๋‹ˆ๋‹ค. ํด๋ž˜์Šค ์„ ํƒ์ž .

[SpringBoot] JPA

โ—ˆ JPA ๋ž€?JPA(Java Persistence API)๋Š” ์ž๋ฐ”(Java) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ํ‘œ์ค€ API์ž…๋‹ˆ๋‹ค. JPA๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ด์˜ ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ORM(Object-Relational Mapping) ๊ธฐ์ˆ ์˜ ํ•œ ์ข…๋ฅ˜์ž…๋‹ˆ๋‹ค.JPA์˜ ์ฃผ์š” ๊ฐœ๋…ORM(Object-Relational Mapping): ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ธ ์ž๋ฐ”์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์„ ๋งคํ•‘ํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.Entity: JPA์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๋Š” ์ž๋ฐ” ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ํ–‰์„ ํ‘œํ˜„ํ•˜๋ฉฐ, ..