๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

SpringBoot18

[Spring] StringUtils.hasText()๋กœ ๋ฌธ์ž์—ด ์œ ํšจ์„ฑ ๊ฒ€์ฆํ•˜๊ธฐ. StringUtils.hasText()๋Š”์–ด๋–ค ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ• ๊นŒ? StringUtilsStringUtils ํด๋ž˜์Šค๋Š” ์†์‰ฝ๊ฒŒ ๋ฌธ์ž์—ด์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.isEmpty( ), hasLength( ), hasText( ), containsWhitespace( ) ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค.๋ฌธ์ž์—ด์ด ๊ณต๋ฐฑ์ธ์ง€, ๋น„์–ด์žˆ๋Š”์ง€, ์†Œ๋ฌธ์ž์ธ์ง€, ๋Œ€๋ฌธ์ž์ธ์ง€, ์˜์ˆซ์ž์ธ์ง€ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ฒ€์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. hasText( )๋ฌธ์ž์—ด์ด ์ง„์ •ํ•œ text์ธ์ง€ ํ™•์ธํ•œ๋‹ค.ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์ง„์ •ํ•œ ๋ฌธ์ž์—ด์ธ์ง€ ํ™•์ธํ•˜๋ฉด True/False๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.null ์ฒดํฌํ•˜๊ณ  ๊ธธ์ด๊ฐ€ 0์€ ์•„๋‹Œ์ง€, ๊ณต๋ฐฑ์ด ์•„๋‹Œ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. isEmpty( )isEmpty(null) → NullPointerExceptionisE.. 2025. 9. 16.
[Spring][JPA] @Entity๋ž€ ๋ฌด์—‡์ผ๊นŒ? ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ €์žฅ/์กฐํšŒํ•˜๋Š” ํด๋ž˜์Šค์—@Entity๋ผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์คฌ๋‹ค.์™œ @Entity๋ฅผ ๋ถ™์—ฌ์•ผํ• ๊นŒ? @Entity@Entity๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค๋Š” JPA๊ฐ€ ๊ด€๋ฆฌํ•œ๋‹ค.๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”๊ณผ 1:1๋กœ ๋งคํ•‘๋˜๋Š” ์˜์† ํด๋ž˜์Šค์ž„์„ ์„ ์–ธํ•˜๋Š” ์• ๋…ธํ…Œ์ด์…˜์ด๋‹ค.์ด ํด๋ž˜์Šค๋กœ ๋งŒ๋“  ๊ฐ์ฒด๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋ฉฐ, Spring Data JPA๊ฐ€ ์กฐํšŒ/์ €์žฅ/์ˆ˜์ •/์‚ญ์ œ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋Š” ํ•„์ˆ˜์ด๋‹ค. (JPA๊ฐ€ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉ) final ํด๋ž˜์Šค, enum, interface, inner class ์—๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.์ €์žฅํ•  ํ•„๋“œ์— final ์‚ฌ์šฉ ๋ถˆ๊ฐ€ํ•˜๋‹ค. @Entity ์˜ˆ์‹œ ์ฝ”๋“œ@Entity@Getter@Setterpublic class Member { @I.. 2025. 9. 9.
[Spring] @Id์™€ @GeneratedValue์ด๋ž€? ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์ €์žฅ/์กฐํšŒ ํด๋ž˜์Šค์—์„œ@Id์™€ @GeneratedValue๋ฅผ ์„ค์ •ํ–ˆ๋‹ค.๊ณผ์—ฐ @Id์™€ @GeneratedValue๊ฐ€ ๋ญ˜๊นŒ? @Id@Id๋ฅผ ๋ถ™์—ฌ, JPA์—๊ฒŒ ํ•ด๋‹น ํ•„๋“œ๊ฐ€ ์ด ํ…Œ์ด๋ธ”์—์„œ ๊ธฐ๋ณธ ํ‚ค(Primary Key)๋ฅผ ์•Œ๋ฆฐ๋‹ค.ํ•ด๋‹น ํ•„๋“œ๋Š” ๊ฐ์ฒด์˜ ๊ณ ์œ ๋ฒˆํ˜ธ๋ฅผ ๋‹ด๋‹นํ•˜๊ฒŒ ๋œ๋‹ค.JPA๋Š” ๊ธฐ๋ณธ ํ‚ค๋ฅผ ํ†ตํ•ด ์ €์žฅ/์กฐํšŒ/์ˆ˜์ •/์‚ญ์ œํ•  ๋•Œ ์ •ํ™•ํžˆ ์–ด๋–ค ํ–‰(row)์ธ์ง€ ๊ตฌ๋ณ„ํ•œ๋‹ค. @GeneratedValue@Id ํ•„๋“œ ๊ฐ’์„ ์–ด๋–ป๊ฒŒ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์ง€ JPA์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค.๊ธฐ๋ณธํ‚ค(PK)๋ฅผ ์ง์ ‘ ์„ธํŒ…ํ•˜์ง€ ์•Š๊ณ , ํ”„๋กœ๋ฐ”์ด๋”๊ฐ€ ๋งŒ๋“ค๋„๋ก ํ•œ๋‹ค.@GeneratedValue๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  @Id ์–ดํ† ๋„ค์ด์…˜๋งŒ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ง์ ‘ ํ• ๋‹นํ•ด์•ผํ•œ๋‹ค.๊ธฐ๋ณธํ‚ค(PK) ๊ฐ’์— ๋Œ€ํ•œ ์ƒ์„ฑ ์ „๋žต์„ ์ œ๊ณตํ•œ๋‹ค. Q. ํ”„๋กœ๋ฐ”์ด๋”๋ž€.. 2025. 9. 8.
[Vue.js] ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ, localStorage๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์•„์ด๋””๊ฐ€ ๋ฉ”์ธํ™”๋ฉด์— ๋ณด์ด๋„๋ก ์„ค์ •ํ•˜๊ธฐ! ๋กœ๊ทธ์ธ๊นŒ์ง€ ๋งŒ๋“ค์—ˆ๋‹ค.์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•˜๊ฒŒ๋˜๋ฉด๋ฉ”์ธํ™”๋ฉด์— ์‚ฌ์šฉ์ž ์•„์ด๋””๊ฐ€ ๋ณด์ด๋„๋ก์„ค์ •ํ•ด๋ณด์ž! [ ๋กœ๊ทธ์ธ ๋งŒ๋“ค๊ธฐ ]๋ธ”๋กœ๊ทธ์— ์ ์—ˆ๋˜ vue์ฝ”๋“œ๊ฐ€ ์กฐ๊ธˆ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค [SpringBoot, Vue.js] ๋กœ๊ทธ์ธ ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ, passwordEncoder.matches๋ฅผ ํ†ตํ•ด ์•”ํ˜ธํ™”๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋น„๊ตํ•˜๊ธฐ.ํšŒ์›๊ฐ€์ž…๊นŒ์ง€ ๋งŒ๋“ค์—ˆ๋‹ค.์ด์ œ ํšŒ์›๊ฐ€์ž…ํ•œ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ๋กœ๊ทธ์ธ์„ ํ•ด๋ณด์ž! [ ํšŒ์›๊ฐ€์ž… 1ํŽธ + 2ํŽธ ] [SpringBoot] (IntelliJ, vue.js, H2) ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ 1ํŽธ : dto ๋งŒ๋“ค๊ณ  ์ด๋ฆ„, ํŒจ์Šค์›Œ๋“œ, ์ „ํ™”post-this.tistory.com โ€ป์ด ์ฝ”๋“œ๋Š” ๊ทธ๋ƒฅ ์—ฐ์Šต์šฉ์œผ๋กœ ๊ฒ‰๋ชจ์Šต๋งŒ ๋กœ๊ทธ์ธ ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋งŒ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค.๊ทธ๋ ‡๊ธฐ์— ์‹ค์ œ๋กœ ๋กœ๊ทธ์ธ๋œ ํ™”๋ฉด์ด๋ผ๊ณ  ๋ณด๊ธด ์–ด๋ ต์Šต๋‹ˆ๋‹ค.๋งŒ์•ฝ ์ œ๋Œ€๋กœ.. 2025. 9. 2.
[SpringBoot, Vue.js] ๋กœ๊ทธ์ธ ํ™”๋ฉด ๋งŒ๋“ค๊ธฐ, passwordEncoder.matches๋ฅผ ํ†ตํ•ด ์•”ํ˜ธํ™”๋œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋น„๊ตํ•˜๊ธฐ. ํšŒ์›๊ฐ€์ž…๊นŒ์ง€ ๋งŒ๋“ค์—ˆ๋‹ค.์ด์ œ ํšŒ์›๊ฐ€์ž…ํ•œ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ๋กœ๊ทธ์ธ์„ ํ•ด๋ณด์ž! [ ํšŒ์›๊ฐ€์ž… 1ํŽธ + 2ํŽธ ] [SpringBoot] (IntelliJ, vue.js, H2) ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ 1ํŽธ : dto ๋งŒ๋“ค๊ณ  ์ด๋ฆ„, ํŒจ์Šค์›Œ๋“œ, ์ „ํ™”๋ฒˆํ˜ธ ํŒจ๋Œ€๋ถ€๋ถ„์˜ ์›น์‚ฌ์ดํŠธ๋Š”ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„๋‹ค.๊ทธ ์ค‘ ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด๋ณด์ž! 1. ํ™”๋ฉด ๋™์ž‘๊ณผ ์ „์ฒด์ฝ”๋“œํšŒ์›๊ฐ€์ž… ์˜์ƒ ํšŒ์›๊ฐ€์ž… ์ค‘๋ณต ๋””๋ ‰ํ† ๋ฆฌ์™€ ํด๋ž˜์Šค Vue์™€ Spring์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” dtopost-this.tistory.com [SpringBoot] (IntelliJ, vue.js, H2) ํšŒ์›๊ฐ€์ž… ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ 2ํŽธ : ์•„์ด๋””, ์ด๋ฉ”์ผ ์ค‘๋ณต์ฒดํฌ ๋งŒ๋“ค๊ธฐ.์ด๋ฆ„, ๋น„๋ฐ€๋ฒˆํ˜ธ, ์ „ํ™”๋ฒˆํ˜ธ๋ฅผํŒจํ„ด ์ฒดํฌ๋ฅผ ํ–ˆ์—ˆ๋‹ค.์ด๋ฒˆ์—๋Š” ์•„์ด๋””์™€ ์ด๋ฉ”์ผ์„์ค‘๋ณต ์ฒดํฌ ํ•ด๋ณด์ž! [ ํšŒ์›.. 2025. 8. 31.
[SpringSecurity] Vue์™€ Spring์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ ๋ฌธ์ œ ํ•ด๊ฒฐํ•˜๊ธฐ.(CORS ์—๋Ÿฌ ํ•ด๊ฒฐํ•˜๊ธฐ) vue์™€ spring์€์„œ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์„ ๊ฐ€์ ธ ์ƒ๊ธฐ๋Š”CORS ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด์ž. 1. ๋ฌธ์ œ ์‚ดํ”ผ๊ธฐ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ๋Š” Vue๋กœ ํ”„๋ก ํŠธ๋ฅผ ๋งก๊ณ  ์žˆ๊ณ , Spring์œผ๋กœ ๋ฐฑ์—”๋“œ๋ฅผ ๋งก๊ณ  ์žˆ๋‹ค. Vue์—์„œ ํšŒ์›๊ฐ€์ž…์— ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ ํ›„ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ๋„ Spring์—” ์–ด๋–ค ๋ฐ์ดํ„ฐ๋„ ๋„์ฐฉํ•˜์ง€ ์•Š์•˜๋‹ค. ์™œ ๊ทธ๋Ÿฐ๊ฑธ๊นŒ? Vue๋Š” http://localhost:5173/๋ฅผ ๊ธฐ๋ณธ ์ฃผ์†Œ๋กœ ์‚ฌ์šฉํ•˜๊ณ  Spring์€ http://localhost:8080/์„ ๊ธฐ๋ณธ ์ฃผ์†Œ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. Spring์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ ์˜จ ์š”์ฒญ์„ ๊ฑฐ๋ถ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, Vue์—์„œ ์˜จ ์š”์ฒญ์ด ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Spring ๋‚ด๋ถ€์— ์„ค์ •์„ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค. 2. ์ฝ”๋“œ ์‚ดํ”ผ๊ธฐ@CrossOrigin + http.c.. 2025. 8. 30.