본문 바로가기

BackEnd/Spring8

[Spring/JPA] - N+1 이슈 (paging을 곁들인) crud기반의 개인 프로젝트를 만들고 있는데 게시글 리스트 목록 로드API 에서 N+1현상이 발생하였다. 양방형 맵핑관계의 게시글(Board)과 댓글(Comment)의 갯수를 불러오고자 했다. 이 두테이블은 양방향맵핑관계이며Board->Comment (OneToMany)Comment->Board (ManyToOne)관계이다. 겉으로 보기에는 정상적으로 로드 되는것 같았지만, 로그를 통해 N+1현상을 확인하게 되었다.       N+1현상은 무엇이며 왜 일어나는 것일까?? N+1 이슈란?JPA같은 ORM에서 연관된 엔티티를 조회할 때 발생하는 성능이슈.한번의 쿼리로 원하는 데이터를 가져오는것처럼 보이지만, 실제로 추가적인 N개의 쿼리가 실행되는 문제  N+1 발생 원인??JPA에서 @OneToMany, @.. 2025. 2. 18.
[Spring/JPA] JPA 양방향 맵핑 과정(순환참조,DTO) 현재 만들고 있는 프로젝트의 게시글(board)와 댓글(comment)테이블이 있고 이 엔티티들을 양방향으로 맵핑하고자 한다. 그리고 그 과정에서 발생한 이슈들을 정리해보려 한다. 현황게시판의 글을 저장하는 Board테이블과 해당 게시글의 댓글을 저장하는 Comment테이블을 설계하였고 이 두테이블은 Board의  id컬럼 그리고 Comment의 board_id컬럼을 기반으로 Join할것이다.  그리고 두 데이터들을 Spring Data JPA 기반 양방향으로 연결하고자 한다. Board(게시판)과 Comment(댓글) 테이블이 부모-자식으로 연결되어 있고 comment의 board_id는 Foreign Key로, Board의 id(Primary Key)를 참조하고 있다.     위와 같은 코드로 두 E.. 2025. 1. 6.
[Java] Builder 패턴 이전까지 해오던 프로젝트들에서는 DTO를 lombok의 Getter,Setter를 통해 값을 세팅하곤 했었다. Builder패턴에 대해선 대략적으로 알고있었지만 그 당시에는 왜써야하는지를 이해하지 못하여 넘어갔었는데 최근에 이펙티브 자바를 읽으면서 Builder패턴에 대한 내용이 초반에 나와 학습하게 되었다. Builder패턴을 왜 쓰게 되었고 왜 써야하는지 일련의 순서로 내용을 정리했다.   아래코드는 일련의 여러 색깔들을 조합으로 새로운 색깔을 만드는 객체가 있다고 가정하여 짠 코드이다. 점층적 생성자를 이용하여 객체를 만드는 방법이고 보다시피 파라미터의 종류/갯수에 따라서 객체를 생성 할 수있다.//점층적생성자 패턴public class ColorColection { private final .. 2024. 12. 30.
Spring MVC란? 최근에 면접때 Spring MVC에 관한 질문이 들어왔는데.. 헛소리를 해버렸다...과정을 설명했어야했는데 의미에 대한 대답만 해버려서 MVC의 과정에 대해서 다시 한번 정리해보려고 한다.일단 그에 앞서 MVC에 대해 간단히 설명해보자면 - Model : 메인 비즈니스 로직을 담당하는 곳- Controller : Client의 요청을 직접 받는 곳, Model과 View사이에서 중간역학을 해준다.- View: Client단에 Response해주는 곳  이 플로우차트를 보면1. 최초 요청을 받아 Front Controller를 통해 Controller로 request가 이루어지고 2. request에 따라 model이 생성되어 Front Controller에 다시 response가 이루어진다.3. 그리고 .. 2024. 5. 15.
SPRING_LOGIN상태 확인 로그인되어있는지 파악후 로그아웃!!을 할꺼임. SELCT SUM(AH_METHOD) FROM AH WHERE AH_MBID=' ID ' ; 로그인(+1) + 로그아웃(-1) = 0이 나와야 함. id="isAccess" 2021. 7. 19.
SPRING_주말정리 0715-시큐리티를 이용해 회원가입할떄 암호화 id한글쓰면 바이트수, 한글받으면 안됨. 아이디글자수,영어 => 유효성검사 암호 200자인 이유 : 암호화 과정을 거치면 길어지기떄문 중복검사 : json데이터를 ajax로 보낼꺼임 이름이같아도 파라미터가 다르면 오버라이드 auth class @Autowired Gson gson; js에서 this 자기자신을 뜻하는거임 ex) onClick=AccesInfo(this) 중복검사 틀린이유…..유효성검사에서 먼저 틀려버림. 아작스 코드 다시보기. name은 연속으로 넣으면 배열처럼 ex) aCode인패스워드를 패스워드, 패스워드확인 두가지 입력단에 같은 name이면 aCode[0], aCode[1] js의 name값은 userbean(Interface)의 데이터.. 2021. 7. 18.