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

springboot16

[SpringBoot] ๋กœ๊ทธ(Log) @Slf4j ๋กœ๊ทธ (Log) ๋กœ๊ทธ(Log)๋ž€ ์‹œ์Šคํ…œ์ด ๋™์ž‘ํ•  ๋•Œ ์‹œ์Šคํ…œ์˜ ์ƒํƒœ ๋ฐ ๋™์ž‘ ์ •๋ณด๋ฅผ ์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ผ ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ ๋กœ๊ทธ ๋ ˆ๋ฒจ (Log Level)๋กœ๊ทธ๋Š” ๋กœ๊ทธ ๋ ˆ๋ฒจ์— ๋”ฐ๋ผ ์ถœ๋ ฅ๋ ์ง€ ๋„˜์–ด๊ฐˆ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. ๋กœ๊ทธ ๋ ˆ๋ฒจ์— ๋”ฐ๋ฅธ ์‹ฌ๊ฐ๋„ ์ˆ˜์ค€์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.Trace > Debug > Info > Warn > Error > Fatal๋กœ๊ทธ ๋ ˆ๋ฒจ์„ค๋ช…์˜ˆ์‹œTRACE๊ฐ€์žฅ ์ƒ์„ธํ•œ ์ •๋ณด(๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋‹จ์œ„)๋ฉ”์„œ๋“œ ์ง„์ž…/๋ฐ˜ํ™˜ ์‹œ์  ๋“ฑDEBUG๋””๋ฒ„๊น…์šฉ ์ƒ์„ธ ์ •๋ณด๋ณ€์ˆ˜ ๊ฐ’, ๋กœ์ง ํ๋ฆ„ ์ถ”์ INFO์ผ๋ฐ˜์ ์ธ ์ •๋ณด์„œ๋น„์Šค ์‹œ์ž‘, ์š”์ฒญ ์ฒ˜๋ฆฌ ์™„๋ฃŒWARN๊ฒฝ๊ณ  ์ƒํ™ฉ(์—๋Ÿฌ๋Š” ์•„๋‹ˆ์ง€๋งŒ ์ฃผ์˜ ํ•„์š”)์„ฑ๋Šฅ ์ €ํ•˜, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ž…๋ ฅERROR์˜ค๋ฅ˜ ๋ฐœ์ƒ์˜ˆ์™ธ, ์‹œ์Šคํ…œ ์žฅ์•  ๐Ÿ’ก API๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ DEBUG๋กœ ์„ค์ •, ๋ฐฐํฌ์‹œ์—๋Š” INFO๋‚˜ Warn ๋ ˆ๋ฒจ๋กœ.. 2025. 11. 9.
[SpringBoot] AOP(Aspect Oriented programing, ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ) AOP(Aspect Oriented programing, ๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ) ์ด๋ž€?๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ(Cross-Cutting Concern) ๋ฅผ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ด๊ณ , ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ธฐ์ˆ ๋กœ๊ทธ ์ถœ๋ ฅํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ์„ฑ๋Šฅ ์ธก์ • (๋ฉ”์„œ๋“œ ์‹คํ–‰ ์‹œ๊ฐ„)์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ถŒํ•œ ๊ฒ€์‚ฌ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ๊ฐ ๋ฉ”์„œ๋“œ๋งˆ๋‹ค ์ž‘์„ฑํ•˜๋ฉด ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์—,AOP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณตํ†ต ๋กœ์ง์„ ํ•œ ๊ณณ์— ๋ชจ์•„๋‘๊ณ  ์ž๋™์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. AOP ํ•ต์‹ฌ ๊ฐœ๋…๊ฐœ๋…์„ค๋ช…Aspect (๊ด€์ )๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋“ˆํ™”ํ•œ ๊ฒƒ (์˜ˆ: ๋กœ๊น…, ํŠธ๋žœ์žญ์…˜ ๋“ฑ)Join Point (์กฐ์ธ ํฌ์ธํŠธ)AOP๊ฐ€ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ง€์  (๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋“ฑ)Advice (์–ด๋“œ๋ฐ”์ด์Šค)์‹ค์ œ๋กœ ์‹คํ–‰๋  ๊ณตํ†ต ๋กœ์ง (Aspect ์•ˆ์˜ ๋ฉ”์„œ๋“œ)Pointcut (ํฌ์ธํŠธ์ปท)์–ด๋–ค Joi.. 2025. 11. 8.
[SpringBoot] HTML form ์ „์†ก vs JavaScript๋กœ JSON ์ „์†ก ๐Ÿงฉ 1. HTML ์ „์†ก ๋ฐฉ์‹๐Ÿ”น ๊ฐœ์š”๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ํผ ์ „์†ก ๊ธฐ๋Šฅ ์‚ฌ์šฉ ํƒœ๊ทธ์˜ action๊ณผ method ์†์„ฑ์„ ์ด์šฉํ•ด ์„œ๋ฒ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†ก์ „์†ก ํ˜•์‹์€ ๊ธฐ๋ณธ์ ์œผ๋กœ application/x-www-form-urlencoded ๋˜๋Š” multipart/form-data (ํŒŒ์ผ ์—…๋กœ๋“œ ์‹œ)๐Ÿ”น ์˜ˆ์‹œ ์ฝ”๋“œ ์•„์ด๋””: ๋น„๋ฐ€๋ฒˆํ˜ธ: ํšŒ์›๊ฐ€์ž… ๐Ÿ”น ์„œ๋ฒ„ (Spring Boot Controller)@ReauireArgsConstructor@Controllerpublic class UserController { private final UserService userservice; @PostMapping("/user") public String signup(AddUserReq.. 2025. 11. 2.
[SpringBoot] RESTful API RESTful API๋Š” REpresentational State Transfer (์ƒํƒœ ์ „๋‹ฌ ํ‘œํ˜„) ์•„ํ‚คํ…์ฒ˜ ์Šคํƒ€์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์›น API์ž…๋‹ˆ๋‹ค. REST๋Š” ์›น ์„œ๋น„์Šค์˜ ์„ค๊ณ„๋ฅผ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜์  ๊ทœ์น™๊ณผ ์ œ์•ฝ์„ ๋”ฐ๋ฅด๋ฉฐ, HTTP ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ž์›(Resource)์„ ์ •์˜ํ•˜๊ณ , ์ด๋ฅผ HTTP ๋ฉ”์„œ๋“œ(GET, POST, PUT, DELETE ๋“ฑ)๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.RESTful API์˜ ์ฃผ์š” ํŠน์ง•์ž์›(Resource): RESTful API์—์„œ๋Š” "์ž์›"์ด ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์ž์›์€ ์›น์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋Œ€์ƒ์ด๋ฉฐ, URL์„ ํ†ตํ•ด ์‹๋ณ„๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "์ฑ…"์ด๋ผ๋Š” ์ž์›์„ ๋‹ค๋ฃฌ๋‹ค๋ฉด, ๊ทธ ์ฑ…์€ http://example.com/books/123์™€ ๊ฐ™์ด URL๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 123์€ ํŠน์ • ์ฑ…์˜ .. 2025. 1. 14.
[SpringBoot] ์ฟผ๋ฆฌ์ŠคํŠธ๋ง(Query String)๊ณผ ์ฃผ์†Œ๋ณ€์ˆ˜๋งคํ•‘(Path variable) Spring Boot์—์„œ URL ๋งคํ•‘์„ ์‚ฌ์šฉํ•  ๋•Œ, ์ฟผ๋ฆฌ์ŠคํŠธ๋ง๊ณผ Path Variable (/book/{bookId})์€ URL์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๋“ค์˜ ์ฐจ์ด์ ๊ณผ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.1. ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง (Query String)์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์€ URL์—์„œ "?" ๊ธฐํ˜ธ ๋’ค์— key-value ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ **"&"**๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์€ URL์˜ ๋์— ์œ„์น˜ํ•˜๋ฉฐ, ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์„ ์ถ”์ถœํ•˜์—ฌ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.์˜ˆ์‹œ:http://example.com/books?title=java&author=John์œ„ URL์—์„œ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์€ ?title=java&author=John ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ด URL์€ title๊ณผ.. 2025. 1. 14.
[SpringBoot] @LoginUser ์–ด๋…ธํ…Œ์ด์…˜ SessionUser user = (SessionUser) httpSession.getAttribute("user");@LoginUser ์–ด๋…ธํ…Œ์ด์…˜์€ ๋งค๋ฒˆ ์„ธ์…˜์˜ ์ €์žฅ๋œ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ ๋“ค์ด๋Š” ์œ„ ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์—ฌ์ค€๋‹ค.์‚ฌ์šฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 1) @LoginUser ์–ด๋…ธํ…Œ์ด์…˜ ์ƒ์„ฑpackage com.loosie.book.springboot.config.auth;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.PARAMETER)@Retenti.. 2024. 10. 10.
[SpringBoot] ์„œ๋ฒ„ ๋ฐฐํฌ ์ค‘๋‹จ 1. ์‚ฌ์šฉ์ค‘์ธ ํฌํŠธ๋ฒˆํ˜ธ๋กœ PID๋ฒˆํ˜ธ ํ™•์ธlsof -i :9091 2. kill PID ๋ช…๋ น์–ด๋กœ ์„œ๋ฒ„ ๊ฐ•์ œ ์ข…๋ฃŒkill 4033 2024. 4. 30.
[SpringBoot] ์Šคํ”„๋ง๋ถ€ํŠธ 2์ ๋Œ€์— swagger 3์ ๋Œ€ ์—ฐ๊ฒฐ ์Šคํ”„๋ง๋ถ€ํŠธ 2.7 ๋ฒ„์ „gradleSwagger 3.0.01. build.gradle์— ์˜์กด์„ฑ ์ถ”๊ฐ€// Swagger implementation 'io.springfox:springfox-boot-starter:3.0.0' 2. application.properties์— ์„ค์ • ์ถ”๊ฐ€# Swaggerspring.mvc.pathmatch.matching-strategy=ant_path_matcher 3. SwaggerConfig ์ถ”๊ฐ€package com.pnow.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import springfox.docu.. 2024. 4. 14.
[SpringBoot] ์—”ํ‹ฐํ‹ฐ int VS Integer ํƒ€์ž… ์ฐจ์ด int ํƒ€์ž…์€ ๊ธฐ๋ณธํƒ€์ž…์ด๊ณ , Integerํƒ€์ž…์€ ๋ž˜ํผํด๋ž˜์Šค์ด๋‹ค.๋งŒ์•ฝ ๋„๋ฉ”์ธ์— null์ด ๋“ค์–ด์˜จ๋‹ค๋ฉด intํƒ€์ž…์€ ์—๋Ÿฌ์ด๊ณ , Integerํƒ€์ž…์€ null๊ฐ’ ์œผ๋กœ ๋ฐ›์•„๋“ค์ธ๋‹ค.๋”ฐ๋ผ์„œ, ๊ฐ€๊ฒฉ์ด ์—†์„ ๋•Œ null๋กœ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด Integerํƒ€์ž…์œผ๋กœ ์„ ์–ธํ•˜๋ฉด ๋˜๊ณ , @Column private Integer price; //๊ฐ€๊ฒฉ0์œผ๋กœ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด int ํƒ€์ž…์œผ๋กœ ํ•˜๋ฉด ๋œ๋‹ค.๋„๊ฐ’ ํ—ˆ์šฉX์ด๋ฉด int๋กœ ํ•ด์„œ @Column(nullable = false) private int price; //๊ฐ€๊ฒฉ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค. 2024. 4. 6.