๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

springboot27

[error] Unable to determine Dialect without JDBC metadata ํ•ด๊ฒฐ SpringBoot๋ž‘ mariaDB(ํ˜น์€ mySQL) ์—ฐ๋™์ด ์•ˆ๋์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ์ธ๋“ฏ. application.properties๋‚˜ application.yml ํŒŒ์ผ ๊ฐ€์„œ์˜คํƒ€๋‚˜ ๋ญ ๋นผ๋จน์€๊ฑฐ ์—†๋‚˜ ๋ณด์„ธ์š” ์ €์˜ ๊ฒฝ์šฐ๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋“ฑ๋กํ•ด๋†“์€ .env ํŒŒ์ผ ์ธ์‹์ด ์•ˆ๋ผ์„œ ์—๋Ÿฌ๋‚˜ ๊ฐ”์Œ. ๊ทผ๋ฐ ๋งค๋ฒˆ ํ”„๋กœ์ ํŠธ ๊ป๋‹ค ํ‚ฌ๋•Œ๋งˆ๋‹ค edit Configuration๋“ค์–ด๊ฐ€์„œ .envํŒŒ์ผ ๋“ฑ๋กํ•ด์ค˜์•ผ ํ•˜๋Š”๊ฑด๊ฐ€..? ํ  2025. 11. 28.
[Java] ์ž๋ฐ” ์ง๋ ฌํ™”, ์—ญ์ง๋ ฌํ™”๊ฐ€ ๋ญ˜๊นŒ?ObjectMapper ํด๋ž˜์Šค ObjectMapper ํด๋ž˜์Šค๊ฐ€ ๋“ค์–ด๊ฐ„ ์‹ค์Šต ์ฝ”๋“œ๊ฐ€ ์žˆ๊ธธ๋ž˜ ๊ถ๊ธˆํ•ด์„œ ์•Œ์•„๋ด„โ€‹โ€‹โ€‹ObjectMapper ํด๋ž˜์Šค ํ†ตํ•ด์„œ ๋งŒ๋“  ๊ฐ์ฒด๋Š”,โ€‹์ž๋ฐ” ๊ฐ์ฒด -> Json๊ฐ์ฒด (์ง๋ ฌํ™”)Json๊ฐ์ฒด -> ์ž๋ฐ” ๊ฐ์ฒด (์—ญ์ง๋ ฌํ™”)ํ• ๋•Œ ์“ฐ์ž„ HTTP์—์„œ๋Š” JSON์„ ์“ฐ๊ณ JAVA์—์„œ๋Š” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•จโ€‹๊ทธ๋ ‡๋‹ค๋ฉด ์„œ๋กœ ํ˜•์‹์— ๋งž๊ฒŒ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์ˆ˜์ ์ž„.โ€‹๊ทธ๋Ÿฐ ์ž‘์—…์„ ์ง๋ ฌํ™”, ์—ญ์ง๋ ฌํ™” ๋ผ๊ณ  ํ•˜๋Š”๊ฑฐ์ž„(์ด๋ฆ„์ด ๊ดœํžˆ ์–ด๋ ค์›Œ..)โ€‹โ€‹์˜ˆ๋ฅผ๋“ค์–ดโ€‹์ž๋ฐ” ๊ฐ์ฒด๊ฐ€ ํ•˜๋‚˜ ์žˆ๋Š”๋ฐ, ์ด ๊ฐ์ฒด ์•ˆ์—๋Š”"title"์—๋Š” "์ œ๋ชฉ1"์ด๋ผ๋Š” ๊ฐ’์ด,"content"์—๋Š” "๋‚ด์šฉ1"์ด๋ผ๋Š” ๊ฐ’์ด ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค๊ณ  ์น˜์ž.โ€‹---> (JSON์œผ๋กœ ์ง๋ ฌํ™”) --->{"title" : "์ œ๋ชฉ1","content": "๋‚ด์šฉ1"} ์ด๋ ‡๊ฒŒ ๋ณ€ํ™˜๋˜๋Š”๊ฑฐ์ž„!!!!โ€‹โ€‹์—ญ์ง๋ ฌํ™”๋Š” ๊ฑ ๋ฐ˜๋Œ€โ€‹ O.. 2025. 5. 4.
[Spring Boot] ํ…Œ์ŠคํŠธ์ฝ”๋“œ์—์„œ ๋กฌ๋ณต import์•ˆ๋จ @Getterpublic class JwtFactory { private String subject = "test1@email.com"; private Date issuedAt = new Date(); private Date expiration = new Date(new Date().getTime() + Duration.ofDays(14).toMillis()); private Map claims = emptyMap(); // ๋นŒ๋” ํŒจํ„ด ์จ์„œ ์„ค์ •์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์„ ํƒ ์„ค์ • @Builder public JwtFactory(String subject, Date issuedAt, Date expiration, Map claims) { this.subject .. 2025. 5. 4.
[Spring Security] JWT์™€ Authentication๊ฐ์ฒด (์“ฐ์ž„์˜ ์ฐจ์ด, ๋‚ด๊ฐ€ ํ—ท๊ฐˆ๋ ธ๋˜ ๋ถ€๋ถ„ ์ •๋ฆฌ) ๋‚˜๋Š” ์ง€๊ธˆJWT ํ† ํฐ ์ƒ์„ฑ + ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•˜๋Š” ํด๋ž˜์Šค ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€์ƒ๊ธด ๊ถ๊ธˆ์ฆ๋“ค์ด ์žˆ์–ด์„œ์ •๋ฆฌ ํ•˜๋ ค๊ณ ํ•จโ€‹๊ฑ ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋ฉด์„œ ์ฃผ์ ˆ์ฃผ์ ˆ ์“ฐ๋Š”๊ฑฐ๋ผ์ฝ๊ธฐ ์•ˆ์ข‹์„ ์ˆ˜ ์žˆ์Œ..ใ…Žโ€‹ /*ํ† ํฐ ์ƒ์„ฑ & ์˜ฌ๋ฐ”๋ฅธ ํ† ํฐ์ธ์ง€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ† ํฐ์—์„œ ํ•„์š”ํ•œ ์ •๋ณด ๊ฐ€์ ธ์˜ค๋Š” ํด๋ž˜์Šค */@RequiredArgsConstructor@Servicepublic class TokenProvider { private final JwtProperties jwtProperties; public String generateToken(User user, Duration expiredAt) { Date now = new Date(); return makeToken(new Date(now.getTime() + expiredA.. 2025. 5. 4.
[Spring Security] ํ† ํฐ ์ƒ์„ฑ, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ์ •๋ณด ๋นผ์˜ค๋Š” ํด๋ž˜์Šค ์ฝ”๋“œ - TokenProvider ์ „ ํฌ์ŠคํŒ…์—์„œ ์˜์กด์„ฑ ์ถ”๊ฐ€,์ด์Šˆ ๋ฐœ๊ธ‰์ž & ๋น„๋ฐ€ํ‚ค ์„ค์ •ํ•œ๋‹ค์Œ๊ทธ๊ฑธ ๋ณ€์ˆ˜๋กœ ๊ฐ–๊ณ ์˜ค๋Š” ํด๋ž˜์Šค (JwtProperties.java) ๋งŒ๋“ค์—ˆ์Œโ€‹์ด๋ฒˆ์—๋Š” ํ† ํฐ ์ƒ์„ฑํ•˜๊ณ , ์œ ํšจ์„ฑ ๊ฒ€์ฆํ•˜๊ณ ,ํ† ํฐ์—์„œ ํ•„์š”ํ•œ ์ •๋ณด ๋นผ์˜ค๋Š” ํด๋ž˜์Šค ์ž‘์„ฑํ• ๊ฑฐ์ž„โ€‹์ด๋ฆ„์€ TokenProvider.java์œ„์น˜๋Š” config/jwt ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด /*ํ† ํฐ ์ƒ์„ฑ & ์˜ฌ๋ฐ”๋ฅธ ํ† ํฐ์ธ์ง€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ† ํฐ์—์„œ ํ•„์š”ํ•œ ์ •๋ณด ๊ฐ€์ ธ์˜ค๋Š” ํด๋ž˜์Šค */@RequiredArgsConstructor@Servicepublic class TokenProvider { private final JwtProperties jwtProperties; public String generateToken(User user, Duration expiredAt) { Da.. 2025. 5. 4.
[Spring Security] JWT ๊ตฌํ˜„ ์ค€๋น„๋‹จ๊ณ„(์˜์กด์„ฑ ์ถ”๊ฐ€, ์ด์Šˆ ๋ฐœ๊ธ‰์ž, ๋น„๋ฐ€ํ‚ค ์„ค์ •) 1. ์˜์กด์„ฑ ์ถ”๊ฐ€ build.gradle์—์„œdependencies์— implementation 'io.jsonwebtoken:jjwt:0.9.1'implementation 'javax.xml.bind:jaxb-api:2.3.1' ์ถ”๊ฐ€ 2. ํ† ํฐ ์ œ๊ณต์ž ์ถ”๊ฐ€ applicaion.properties์— //.yml ํ˜•์‹์€jwt: issuer: tester1@gmail.com secret_key_ : study-springboot//.properties ํ˜•์‹์€jwt.issuer=tester1@gmail.comjwt.secret_key_=study-springboot์ด์ œ ์œ„์— ๊ฐ’๋“ค์„ ๋ณ€์ˆ˜๋กœ ์ ‘๊ทผํ•˜๋Š”๋ฐ ์“ฐ๋Š” JwtProperties ํด๋ž˜์Šค ๋งŒ๋“ค ์ฐจ๋ก€โ€‹์ฐธ๊ณ ๋กœ Spring Boot๋Š” ํ•˜์ดํ”ˆ(-) → ์นด๋ฉœ์ผ€.. 2025. 5. 4.
[Spring Security] JWT๋ž€?JWT ๊ตฌ์กฐ, ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ๋ฐœ๊ธ‰ ๊ณผ์ • JWT๋ž€? JWT = Json Web Tokenํ† ํฐ ํ˜•์‹ ์ค‘์— ํ•˜๋‚˜์ž„!โ€‹json ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ ํ† ํฐ ํฌ๋งทโ€‹๊ตฌ์„ฑ(๋‹ด๊ณ ์žˆ๋Š” ์ •๋ณด)์€header + payload + signatureโ€‹โ€‹์™œ JWT ํ˜•์‹์„ ๋งŽ์ด ์“ธ๊นŒ?- ์„œ๋ฒ„๊ฐ€ ์ƒํƒœ ๊ธฐ์–ตํ•  ํ•„์š”๊ฐ€ ์—†๊ณ - ํ† ํฐ ์•ˆ์— ํ•„์š”ํ•œ ์ •๋ณด ๋‹ด์„ ์ˆ˜ ์žˆ๊ณ - ๊ตฌ์กฐ ๋‹จ์ˆœํ•˜๊ณ , ๋‹ค์–‘ํ•œ ์–ธ์–ด/ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ฐœ๊ธ‰๋ฐ›์€ JWT๋ฅผ ์จ์„œ ์ธ์ฆ ํ•˜๋ ค๋ฉด,HTTP ์š”์ฒญ ํ—ค๋” ์ค‘ Authorization ํ‚ค ๊ฐ’์—Bearer + JWT ํ† ํฐ๊ฐ’ ๋„ฃ์–ด์„œ ๋ณด๋‚ด์•ผ๋จ.โ€‹ Authorization : Bearer ey~~~~ JWT ๊ตฌ์กฐ๋Š”? .์„ ๊ธฐ์ค€์œผ๋กœํ—ค๋” (header), ๋‚ด์šฉ(payload), ์„œ๋ช…(signature)๋กœ ๊ตฌ์„ฑ aaaaa.bbbbbb.ccccc // (a=ํ—ค๋”.. 2025. 5. 4.
[Spring Security] ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์ด๋ž€?ํ๋ฆ„, ํŠน์ง• ์ •๋ฆฌ JWT ๊ณต๋ถ€ ์ „์— ์‚ฌ์ „ ์ง€์‹์œผ๋กœ ํ† ํฐ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ์•Œ์•„์•ผํ•จ ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์ธ์ฆ & ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์— ์ ‘๊ทผํ•  ๋•Œ,์ธ์ฆ๋œ ์‚ฌ๋žŒ์ธ์ง€ ์•„๋‹Œ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค ์ค‘ ํ•˜๋‚˜โ€‹์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์ œ๊ณต.โ€‹๋‚˜๋Š” ์ง€๋‚œ ์ฑ•ํ„ฐ์—์„œ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ๋Š” ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ ์จ์„œ์‚ฌ์šฉ์ž ์ •๋ณด ๋‹ด์€ ์„ธ์…˜ ์ƒ์„ฑ & ์ €์žฅํ•ด์„œ ์ธ์ฆํ–ˆ์Œ(= ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์ธ์ฆ)(๋”ฐ๋กœ ์ง์ ‘์ ์œผ๋กœ ๋ช…์‹œ ์•ˆํ•ด๋„ ์•Œ์•„์„œ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ์—์„œ ํ•ด์คŒ)โ€‹ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์€, ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ž„โ€‹ํ† ํฐ์€ uniqueํ•œ ๊ฐ’์œผ๋กœ, ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ์”€์„œ๋ฒ„๊ฐ€ ํ† ํฐ ๋งŒ๋“ค์–ด์„œ ํด๋ผ์ด์–ธํŠธํ•œํ…Œ ์ฃผ๊ณ ,ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ํ† ํฐ ๊ฐ–๊ณ  ์žˆ๋‹ค๊ฐ€์„œ๋ฒ„ํ•œํ…Œ ์š”์ฒญํ•  ์ผ ์žˆ์„ ๋•Œ ํ† ํฐ์ด๋ž‘ ๊ฐ™์ด ์‹ ์ฒญํ•จ.-> ์„œ๋ฒ„๋Š” ํ† ํฐ๋งŒ ๋ณด๊ณ  ์œ ํšจํ•œ ์‚ฌ๋žŒ์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋‹จํ•จ ํ† ํฐ.. 2025. 5. 4.
[Spring Security] Empty encoded password ์—๋Ÿฌ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๊ฐ€ ๋กœ๊ทธ์ธํ• ๋•Œ pw๊ฐ€ ๋น„์–ด์žˆ๋‹ค๊ณ  ํ•ด์„œํ„ฐ์ง€๋Š” ์˜ˆ์™ธโ€‹๋‚ด๊ฐ€ ๋ฐ”๋ณด์ง“ํ•œ๊ฑฐ์ž„..ใ…Ž @Table(name = "users")@NoArgsConstructor(access = AccessLevel.PROTECTED)@Getter@Entitypublic class User implements UserDetails { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", updatable = false) private Long id; @Column(name = "email", nullable = false, unique = true) private String email; @Column.. 2025. 5. 4.
๋ฐ˜์‘ํ˜•