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. ์ด์ 1 2 3 ๋ค์