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

springboot27

[Spring Security] SecurityFilterChain ๋ณด์•ˆ ์„ค์ • ๋ฉ”์†Œ๋“œ ์„ค๋ช… // ํŠน์ • HTTP ์š”์ฒญ์— ๋Œ€ํ•œ ์›น ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ๊ตฌ์ • @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http .authorizeHttpRequests(auth -> auth // ํŠน์ • ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ์„ค์ •. .requestMatchers("/login", "/signup", "/user").permitAll() .anyRequest().authenticated()) .formLogin(formLogin -> formLogin /.. 2025. 5. 4.
[Spring Security] 'authorizeRequests()' is deprecated ์—๋Ÿฌ ํ•ด๊ฒฐ 'authorizeRequests(org. springframework. security. config. Customizer.ExpressionInterceptUrlRegistry>)' is deprecated since version 6.1 and marked for removaโ€‹โ€‹โ€‹๋‚œ ์ฑ… ๋ณด๋ฉด์„œ ์ง„๋„ ๋”ฐ๋ผ๊ฐ€๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— @Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http .authorizeRequests(auth -> auth .requestMatchers( .. 2025. 5. 4.
[Spring Security] UserDetails ํด๋ž˜์Šค (Override Method ๋‹จ์ถ•ํ‚ค) ๋‚œ UserDetails๋ฅผ ์ƒ์†๋ฐ›๋Š” User ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์ƒํƒœ @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(name = "pas.. 2025. 5. 4.
[Spring Security] ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์˜์กด์„ฑ ์ถ”๊ฐ€ ๋‚œ ์ธํ…”๋ฆฌ์ œ์ด ์จ์„œ ํ•˜๋Š” ์ค‘โ€‹โ€‹1. build.gradle ์—ด์–ด์„œ Add Starter ํด๋ฆญ 2. Security ํ•ญ๋ชฉ์˜ Spring Security ์ถ”๊ฐ€ ๊ทธ๋Ÿผ ์•Œ์•„์„œ ์„ธ๊ฐ€์ง€ ํ•ญ๋ชฉ์ด ์ถ”๊ฐ€๋จ implementation 'org.springframework.boot:spring-boot-starter-security'implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'testImplementation 'org.springframework.security:spring-security-test' 2025. 5. 3.
[Spring Security] ์ธ์ฆ๊ณผ ์ธ๊ฐ€, Spring Security ๊ตฌ์กฐ ๋œฏ์–ด๋ณด๊ธฐ, ๋กœ๊ทธ์ธ ํ๋ฆ„ ๋œฏ์–ด๋ณด๊ธฐ ์Šคํ”„๋ง๋ถ€ํŠธ๋กœ ํ”„๋กœ์ ํŠธ ๋งŒ๋“œ๋Š” ์ค‘์ธ๋ฐํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ ๊ธฐ๋Šฅ ๋งŒ๋“ค๋ ค๋ฉด์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์•Œ์•„์•ผํ•จโ€‹์ „๊ณต๊ณผ๋ชฉ์œผ๋กœ ์ •๋ณด๋ณด์•ˆ ๊ณผ๋ชฉ ๋“ค์—ˆ์—ˆ๋Š”๋ฐ๊ทธ ๋•Œ ๋‚˜์™”๋˜ ์ธ์ฆ, ์ธ๊ฐ€๊ฐ€ ์—ฌ๊ธฐ์„œ๋„ ๋‚˜์˜ดใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ์ธ์ฆ๊ณผ ์ธ๊ฐ€authentication, authorization ์ธ์ฆ : ์‚ฌ์šฉ์ž์˜ ์‹ ์›์„ ์ž…์ฆํ•˜๋Š” ๊ณผ์ •. ๋ˆ„๊ตฌ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ ์ธ์ฆ์ด๋ผ๊ณ  ํ•จโ€‹์ธ๊ฐ€ : ํŠน์ • ๋ถ€๋ถ„์— ์ ‘๊ทผ ๊ถŒํ•œ ๊ฐ–๊ณ  ์žˆ๋‚˜ ์•„๋‹Œ๊ฐ€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •.(์˜ˆ๋ฅผ ๋“ค์–ด ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€๋Š”, ๊ด€๋ฆฌ์ž๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ)โ€‹-> ์ด ์ผ๋ จ์˜ ๊ณผ์ •์„ ๊ฑ ์ฝ”๋“œ๋กœ ํ•˜๋ ค๋ฉด ์˜ค๋ž˜๊ฑธ๋ฆผ--> ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์“ฐ๋ฉด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐSpring Security ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋Š” ์Šคํ”„๋ง ๊ธฐ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ์„ ๋‹ด๋‹นํ•˜๋Š”์Šคํ”„๋ง ํ•˜์œ„ ํ”„๋ ˆ์ž„์›Œํฌ์ž„.๋ณด์•ˆ ๊ด€๋ จ ์˜ต์…˜๋“ค ์ œ๊ณตโ€‹+ ์• .. 2025. 5. 3.
[Spring Boot] ํƒ€์ž„๋ฆฌํ”„ ์˜ˆ์ œ, Model ๊ฐ์ฒด๋ž€? @Controllerpublic class ExampleController { @GetMapping("/thymeleaf/example") public String thymeleafExample(Model model) { Person examplePerson = new Person(); examplePerson.setId(1L); examplePerson.setName("ํ™๊ธธ๋™"); examplePerson.setAge(18); examplePerson.setHobbies(List.of("์šด๋™", "๋…์„œ")); model.addAttribute("person", examplePerson); model.add.. 2025. 5. 3.
[Spring Boot] ํƒ€์ž„๋ฆฌํ”„ ํ‘œํ˜„์‹, ๋ฌธ๋ฒ• ์ •๋ฆฌ ํƒ€์ž„๋ฆฌํ”„ ํ‘œํ˜„์‹ ํƒ€์ž„๋ฆฌํ”„ ๋ฌธ๋ฒ• 2025. 5. 3.
[Spring Boot] ํƒ€์ž„๋ฆฌํ”„ ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด๋ž€?์˜์กด์„ฑ ์ถ”๊ฐ€ ํƒ€์ž„๋ฆฌํ”„๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„์ž„โ€‹๊ทธ๋Ÿผ ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด๋ž€?์Šคํ”„๋ง ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์šฐ๋ฆฌ๊ฐ€ ๋ณด๋Š” ์›นํŽ˜์ด์ง€(HTML)์—๋ฐ์ดํ„ฐ ๋„ฃ์–ด์„œ ๋ณด์—ฌ์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค. ํ…œํ”Œ๋ฆฟ ์—”์ง„ ๊ฐ„๋‹จ ๋ฌธ๋ฒ•์ฝ”๋“œ ๋ณด๋ฉด ์•ฝ๊ฐ„ HTML์ด๋ž‘ ์„ž์ธ ๋А๋‚Œ ํƒœ๊ทธ, ํƒœ๊ทธ ๋ณด๋ฉด HTML์ด๋ž‘ ๋น„์Šทโ€‹๊ฑฐ๊ธฐ์— text attribute๊ฐ€ ํ• ๋‹น๋จ.โ€‹โ€‹โ€‹์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋ฒ„์—์„œ { ์ด๋ฆ„ : "ํ™๊ธธ๋™", ๋‚˜์ด : 11}์ด๋ ‡๊ฒŒ ๋„˜๊ฒจ์ฃผ๋ฉด,์ด๋ฆ„, ๋‚˜์ด ๋ผ๋Š” ํ‚ค๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ํ…œํ”Œ๋ฆฟ ์—”์ง„์— ๋„˜๊ฒจ์ฃผ๊ณ ,ํ…œํ”Œ๋ฆฟ ์—”์ง„์€ ์ด๊ฑฐ ๋ฐ›์•„์„œ HTML์— ๊ฐ’ ์ ์šฉํ•จ.โ€‹โ€‹โ€‹(์„œ๋ฒ„์—์„œ json์œผ๋กœ ๋ฐ์ดํ„ฐ ๋„˜๊ฒจ์คŒ)๐Ÿ”ฝ(ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด ๋ฐ›์Œ)๐Ÿ”ฝ(HTML๋กœ ๋ณ€ํ™˜)๐Ÿ”ฝ(๋ธŒ๋ผ์šฐ์ €์— ๋™์ ์œผ๋กœ ํ‘œ์‹œ) ๋Œ€ํ‘œ์ ์ธ ํ…œํ”Œ๋ฆฟ ์—”์ง„์œผ๋กœ JSP, ํƒ€์ž„๋ฆฌํ”„, ํ”„๋ฆฌ๋งˆ์ปค ๋“ฑ์ด ์žˆ์Œโ€‹์Šคํ”„๋ง์€ ํƒ€์ž„๋ฆฌํ”„๋ฅผ ๊ถŒ์žฅ. build.gradl.. 2025. 5. 3.
[Spring Boot] @PathVariable vs. @RequestParam ๋ญ˜ ์จ์•ผํ• ๊นŒ? (feat.@QueryParam) ํ”„๋กœ์ ํŠธ๋ฅผ ํ•  ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฐ›์•„์„œ ํŠน์ • ์ž์›์„ ์กฐํšŒํ•˜๊ณ  ์‹ถ์„ ๋•Œ(ex. id๊ฐ€ 10์ธ ๊ฒŒ์‹œ๊ธ€์„ ๋ณด๊ณ ์‹ถ์„ ๋•Œ)์“ฐ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ๋Œ€ํ‘œ์ ์œผ๋กœ@PathVariable์„ ๋งŽ์ด ์”€.โ€‹๊ทผ๋ฐ @ReqeustParam๋„ ์–ด๋””์„œ ๋ดค๋Š”๋ฐ,๋‘˜ ์ค‘ ๋ญ˜์จ์•ผํ• ๊นŒ!!โ€‹์–ด๋–จ ๋•Œ ๋ฌด์—‡์„ ์จ์•ผํ• ๊นŒ..์ •๋ฆฌํ•ด๋ณด๊ฒ ์Œโ€‹@PathVariable๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๋ฐฉ์‹์ธ๋ฐ, @GetMapping("/api/articles/{id}") public ResponseEntity findArticle(@PathVariable("id") Long id) { Article article = blogService.findById(id); return ResponseEntity.ok().body(new ArticleResponseDto(.. 2025. 5. 3.
๋ฐ˜์‘ํ˜•