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

springboot21

[JPA] findById์™€ getReferenceById ์ฐจ์ด SpringBoot ํ”„๋กœ์ ํŠธ๋ฅผ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง ๊ณผ์ •์—์„œ JPA์—์„œ ์ œ๊ณตํ•˜๋Š” findById๋งŒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€getReferenceById๋„ ์•Œ๊ฒŒ ๋˜์–ด ์ •๋ฆฌ ํฌ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. findById() - ์ฆ‰์‹œ ๋กœ๋”ฉ๐Ÿ‘‰ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ DB์—์„œ ์กฐํšŒMember member = memberRepository.findById(1L).get();// ๐Ÿ‘‰ ์ด๋ฏธ SQL ์‹คํ–‰๋จํŠน์ง•ํ˜ธ์ถœ ์‹œ์ ์— ๋ฐ”๋กœ SQL ์‹คํ–‰์‹ค์ œ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜Optional ํ˜•ํƒœ๋ผ null ์•ˆ์ „์„ฑ ์žˆ์Œ๊ฐ’์ด ์—†์œผ๋ฉด Optional.empty()์–ธ์ œ ์‚ฌ์šฉ?๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐํ•„๋“œ ๊ฐ’์„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•ŒgetReferenceById() -์ง€์—ฐ ๋กœ๋”ฉ๐Ÿ‘‰ ํ”„๋ก์‹œ ๊ฐ์ฒด(๊ฐ€์งœ ๊ฐ์ฒด) ๋จผ์ € ๋ฐ˜ํ™˜ → ํ•„์š”ํ•  ๋•Œ DB ์กฐํšŒMember member = .. 2026. 3. 23.
[SpringBoot] ์Šคํ”„๋ง ๋ฉ”์ผ ์ „์†ก ๋ฐฉ๋ฒ• ( + google Gmail SMTP ์„ค์ •) ์Šคํ”„๋ง ๋ถ€ํŠธ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฉ”์ผ ์ „์†ก ๊ธฐ๋Šฅ ๊ตฌํ˜„1. ๊ตฌ๊ธ€ Gmail SMTP ์‚ฌ์šฉ ์œ„ํ•œ ์„ค์ • ๊ตฌ๊ธ€ ์‚ฌ์ดํŠธ > ํ”„๋กœํ•„ ํด๋ฆญ > Google ๊ณ„์ • ๊ด€๋ฆฌ ๊ฒ€์ƒ‰์ฐฝ์— > "์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ" ๊ฒ€์ƒ‰ ์•ฑ ์ด๋ฆ„ ์„ค์ • > ๋งŒ๋“ค๊ธฐ 16์ž๋ฆฌ์˜ ์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ƒ์„ฑ๋จ 2. build.gradledependencies { // ๋ฉ”์ผ ์ „์†ก ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ implementation 'org.springframework.boot:spring-boot-starter-mail' } 3. application-mail.propertiesโ€ป ์•ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์œ ์ถœ๋˜๋ฉด ์œ„ํ—˜ํ•˜๋ฏ€๋กœ ๊ผญ .gitignore์— application-mail.properties ํŒŒ์ผ ์ถ”๊ฐ€ํ•˜๊ธฐ.(๋ณธ์ธ์€ ๋ณด์•ˆ ๊ด€๋ จ ์„ค์ • ํŒŒ์ผ application-oauth... 2026. 3. 16.
[SpringBoot] ์Šคํ”„๋ง๋ถ€ํŠธ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ JUnit ์ด๋ž€? ์ž๋ฐ” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์˜๋ฏธ.@BeforeAll - ์ „์ฒด ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์ „์— ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰, static public/default๋กœ ์ •์˜@AfterAll - ์ „์ฒด ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ ํ›„ ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์‹คํ–‰, static public/default๋กœ ์ •์˜@BeforeEach - ๊ฐ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ ์‹œ์ž‘ ์ „์— ์‹คํ–‰, public๋กœ ์ •์˜@AfterEach - ๊ฐ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ ์ข…๋ฃŒ ํ›„์— ์‹คํ–‰, public๋กœ ์ •์˜@BeforeAll -> @BeforeEach -> @Test -> @AfterEach ->@AfterAll AssertJ๋Š” JUnit๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ๊ฒ€์ฆ๋ฌธ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค.์˜ˆ์‹œ: assertThat(a+b).isEqualTo(sum); ๋ฉ”์„œ๋“œ ์ข…๋ฅ˜:isE.. 2026. 2. 20.
[CICD] Spring Boot + GitHub Actions + AWS CodeDeploy๋ฅผ ํ™œ์šฉํ•œ CI/CD ๊ตฌ์ถ•(2) https://choihjhj.tistory.com/entry/CICD-Spring-Boot-GitHub-Actions-AWS-CodeDeploy%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-CICD-%EA%B5%AC%EC%B6%951 ์ „์— ํฌ์ŠคํŒ…ํ•œ [CICD] Spring Boot + GitHub Actions + AWS CodeDeploy๋ฅผ ํ™œ์šฉํ•œ CI/CD ๊ตฌ์ถ•(1) ๊ธ€์„ ์ด์–ด์„œ ์ด๋ฒˆ์—” AWS CodeDeploy ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•ด appspec.yml(๋ฐฐํฌ ์„ค์ • ํŒŒ์ผ)๊ณผ scripts/deploy.sh(๋ฐฐํฌ ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ)๋ฅผ ๋งŒ๋“ค์–ด AWS CodeDeploy ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ž๋™ ๋ฐฐํฌํ•œ๋‹ค.๐ŸŒง CodeDeploy ์ž๋™ ๋ฐฐํฌ 1. CodeDeploy ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑAWS ๊ณ„์ •.. 2025. 11. 19.
[CICD] Spring Boot + GitHub Actions + AWS CodeDeploy๋ฅผ ํ™œ์šฉํ•œ CI/CD ๊ตฌ์ถ•(1) ๋”๋ณด๊ธฐ์œ„์™€ ๊ฐ™์€ ์ด์œ ๋กœ, Github Repository์— ํ”„๋กœ์ ํŠธ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Github Actios์—์„œ ์ œ๊ณตํ•˜๋Š” CI/CD ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด AWS Codedeploy๋กœ EC2 ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ•œ๋‹ค.โ˜๏ธ ๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ (CI/CD)GitHub → GitHub Actions → AWS S3 → AWS CodeDeploy → EC2 1. GitHub์— push ๋ฐœ์ƒ ์‹œ GitHub Actions์— ์ •์˜๋œ .github/workflows/deploy.yml(๋นŒ๋“œ→ zip์••์ถ• → S3 ์—…๋กœ๋“œ → CodeDeploy ํ˜ธ์ถœ)ํŒŒ์ผ์„ ์ฝ์–ด ์ž๋™ ๋นŒ๋“œ ์‹คํ–‰2.appspec.yml(๋ฐฐํฌ ์„ค์ • ํŒŒ์ผ)์„ ์ฝ์–ด ์–ด๋–ค ํŒŒ์ผ์„ EC2์— ๋ฐฐํฌํ• ์ง€ / ์–ด๋–ค ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ• ์ง€ ์ •์˜๋ฅผ ์ฝ์Œ3. appspec.yml์—์„œ ์ง€์ •๋œ .. 2025. 11. 17.
[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.