전체 글

일단 맨땅에 헤딩한 뒤에 배우는 타입입니다
프로젝트/부추 농장(spring boot + mySQL)

3. 엔티티 간 연관 관계

JPA에서 가장 중요한 개념 중 하나인 연관관계를 프로젝트에 적용시켜 볼 것이다. 부추 농장에서 프로젝트에 사용된 연관 관계들이다. OneToMany - 1명의 User은 여러 개의 FarmLog들을 가지고 있다. ManyToMany - 여러 명의 User가 여러 개의 FarmLog에 좋아요를 누를 수 있다. ManyToMany - 여러 명의 User가 서로를 팔로잉(following) 할 수 있다. 가장 위의 관계부터 하나씩 해나가도록 하겠다! 1. OneToMany (1 : N) : 한 명의 User가 여러 개의 FarmLog들을 가지고 있다. 연관 관계에 필요한 property들만 ERD 으로 표시해보았다. '유저가 작성한 여러 개의 농장 일기가 존재한다'는 연관 관계이다. # Entity 연관 관..

JAVA/Spring

[JPA] N+1 문제 원인, 해결방법

Spring Boot JPA 프로젝트 진행 과정 중, 생각 없이 연관관계를 쓰다가 테스트 과정에서 필요 이상의 쿼리문이 찍히는 것을 보고 원인을 추적하다 알게 된 개념. 사실 어느정도 알고 있는 개념이었는데 실제로 맞딱뜨리니 이제서야 똑바로 정리하고 해결방법을 적용할 계기가 생겼다. 역시 개발 관련은 일단 만들고 봐야 1. N + 1 문제란? 연관 관계가 존재하는 엔티티를 조회(1)했을 때 조회된 데이터의 갯수(N)만큼 조회 쿼리가 추가로 나가는 현상. 추가 쿼리는 의도하지 않은 사항이고, 조회 결과로 나온 데이터의 갯수만큼 추가 쿼리가 발생하기 때문에 프로그램의 성능에 큰 문제를 일으킬 수 있다. 게시판 프로젝트에서 디비에 존재하는 게시글이 10만개라면 10만 개의 추가 쿼리가 나갈 수도 있는 것이다...

삽질..

[JUnit5] @BeforeAll, @AfterAll Non-static method로 구현하기

문제 상황 : Test Method끼리 공유하는 Bean 필요 JUnit5를 이용해 Spring Boot 프로젝트의 테스트코드를 작성하는 도중이었다. 하나의 @SpringBootTest 클래스 안에 존재하는 여러 개의 @Test method가 공유하는 Repository를 생성하고 싶었다. 코드로 말하면 아래와 같은 상황이다. @BeforeAll이 붙은 method가 테스트 method들을 실행하기 전 10명의 유저를 userRepository에 저장한다. 그 후 2개의 test method가 userRepository에 저장된 것을 테스트하는 것이다. @SpringBootTest public class EntityTest { @Autowired private UserRepository userRepos..

프로젝트/부추 농장(spring boot + mySQL)

2. 유저 회원가입 및 로그인 구현 + 일기 CRUD

유저 구현은 아래 글과 똑같은 과정으로 진행했다. OAuth2 적용 (구글) 기본적인 Spring Security 내용과 OAuth2의 동작 방식에 대한 설명 글이다. OAuth에서 사용하는 클라이언트, 리소스 오너, auth 서버, 리소스 서버 용어에 대한 개념도 들어가있다. Spring Security + OAuth2 1. Spr buchu-doodle.tistory.com 이제 프로젝트 기능의 핵심이라고 할 수 있는, 농장일기를 CRUD하는 기능을 만들어보겠다. 1. FarmLog Entity & DTO 작성 FarmLog.java : package com.buchu.greenfarm.entity; import jakarta.persistence.*; import jakarta.validation...

김부추
두들두들