분류 전체보기 474

[Spring] JPA N+1 문제 해결방법(지연로딩 N+1, OneToMany, ManyToOne 연관관계, fetch join, 페이지네이션)

이번 글에서는, JPA N+1 문제가 무엇인지,, 왜일어나고,,, 어떤 해결방법이 있는지 알아보고 내 프로젝트에 적용해 보고자 한다! 결과적으로, N+1 문제를 해결하면서 페이지네이션까지 하고자한다! JPA N+1 문제 JPA N+1문제란, JPA가 데이터를 조회할 때, 연관관계 매핑에있는 객체들을 함께 조회하여(N개 만큼) 추가 쿼리가 발생하는 문제를 N+1 문제라고 합니다. JPA는 JPQL을 생성하여 실행하게 되는데, 엔티티 객체와 필드이름을 이용하여 쿼리를 만든다. 이때 객체의 연관관계 매핑에 의해서 관계가 맺어진 다른 객체들이 함께 조회된다. 지연로딩시 N+1 문제가 발생하지 않나요? JPA의 FetchType으로는 즉시로딩과 지연로딩 이 있습니다. (이전 글 참고) 즉시로딩시, 연관된 모든 객..

Spring/Spring Boot 2022.03.30

[백준] boj 2667 java "단지 번호 붙이기" - dfs, bfs

문제 링크 성능 요약 메모리: 14668 KB, 시간: 148 ms 분류 너비 우선 탐색(bfs), 깊이 우선 탐색(dfs), 그래프 이론(graphs), 그래프 탐색(graph_traversal) 문제 설명 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단지수를 출력하고, 각 단지에 속하는 집의 수를 오름차순으로 정렬하여 출력하는 프로그램을 작성하시오. 입력 첫 번째 줄에는 ..

알고리즘 문제 2022.03.25

[백준] boj 2204 java - "도비의 난독증 테스트" (문자열 정렬, TeeMap)

문제 링크 성능 요약 메모리: 14304 KB, 시간: 136 ms 분류 정렬(sorting), 문자열(string) 문제 설명 꿍은 도비에게 영어단어들을 제시한 후 어떤 단어가 대소문자를 구분하지 않고 사전순으로 가장 앞서는지 맞추면 양말을 주어 자유를 얻게해준다고 하였다. 하지만 인성이 좋지 않은 꿍은 사실 그러고 싶지 않았기 때문에 대소문자를 마구 섞어가며 단어들을 제시했다. 예를 들어, apPle은 Bat보다 앞서지만 AnT보다는 뒤에 있는 단어다. 도비에게 희망은 여러분뿐이다! 여러분이 도비에게 자유를 선물해주도록 하자! 입력 각 테스트케이스는 정수 n (2 ≤ n ≤ 1000) 으로 시작하며 주어지는 단어의 개수를 뜻한다. 다음 각 n줄은 길이가 최대 20인 단어가 주어지며 대소문자의 구분을 ..

알고리즘 문제 2022.03.25

[백준] boj 2606 java - 바이러스 (bfs)

문제 링크 성능 요약 메모리: 14308 KB, 시간: 132 ms 분류 너비 우선 탐색(bfs), 깊이 우선 탐색(dfs), 그래프 이론(graphs), 그래프 탐색(graph_traversal) 문제 설명 신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다. 예를 들어 7대의 컴퓨터가 과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 웜 바이러스에 걸리면 웜 바이러스는 2번과 5번 컴퓨터를 거쳐 3번과 6번 컴퓨터까지 전파되어 2, 3, 5, 6 네 대의 컴퓨터는 웜 바이러스에 걸리게 된다. 하지만 4번과 7번 컴퓨터는 1번 컴퓨터와 네트워크상에서 연결되어 있지 않기..

알고리즘 문제 2022.03.25

[Spring] JPA 즉시 로딩과 지연 로딩

JPA는 데이터를 조회할 때, `FetchType` 으로 `즉시로딩(Eager)` 과 `지연로딩(Lazy)`가 있습니다. 참고로 JPA FetcyType의 default값은 @xxToOne에서는 EAGER, @xxToMany에서는 LAZY입니다. Feth Type이란 이 FetchType이란, JPA가 하나의 Entity를 조회할 때, 연관관계에있는 객체들을 어떻게 가져올 것이냐를 나타내는 설정값 입니다. JPA는 ORM기술로, 사용자가 직접 쿼리를 생성하지 않고, JPA에서 JPQL을 이용하여 쿼리문을 생성하기 때문에, 객체와 필드를 보고 쿼리를 생성합니다. 따라서 다른 객체와 연관관계 매핑이 되어있으면 그 객체들 까지 조회하게 되는데, 이때 이 객체를 어떻게 불러올 것인가를 설정할 수 있습니다. 즉시..

Spring/Spring Boot 2022.03.23

[Spring err] com.amazonaws.SdkClientException: Failed to connect to service endpoint 에러 -(aws 의존성 주입시 에러)

전에 만든 팀프로젝트를 보다가, 실행하자마자 나는 에러를 발견하였다. 개발당시에는 시간이 촉박해, 어플리케이션 자체 실행에는 문제가 없어 넘어갔던 부분이다. error code com.amazonaws.SdkClientException: Failed to connect to service endpoint Caused by: java.net.SocketException: Network is unreachable: connect aws sdk 에러가 나는 이유는, build.gradle에, spring-cloud-starter-aws 의존성 주입시 로컬환경은, aws환경이 아니기때문에 나는 에러라고 한다. aws환경에서 실행시 아무문제가 없지만, 에러를 하나씩 잡아가면서 테스트를 해보기로 마음먹었기때문에 이..

Spring/Spring err 2022.03.18

[Spring] 백엔드 부하 테스트 해보기 - nGrinder(with aws, jmeter)

부하테스트 툴을 알아보면 nGrinder 와 jmeter 이 2가지가 주를 이루어 나온다. jMeter JMeter 는 아파치에서 만든 java 기반의 오픈소스로 오래된 테스트 툴중 하나입니다. 꽤 오래되었고, 그만큼 안정적이라고 합니다. 많은 기능이 존재하고 확장성이 용이하지만 GUI가 이뻐보이진 않았습니다. 장점 아파치에서 만든 오래된 툴 유명하고 자료가 많다 다양한 프로토콜 지원 GUI, 이메일, DB, SSL 지원하는 기능과 플러그인이 많다 단점 모든 기능이 다 필요한가? 결과는 리스너로 만들어 보는데 모니터링이 불편함 스레드 기반이라 성능제약이 있다고 함 nGrinder nGrinder 는 네이버에서 만든 오픈 소스입니다. GUI도 보기 편해보였고, 비교적 사용하기 편하다고 합니다.. 고로! n..

[TIL] 2022.03.11 - 하고싶었던거 해보는 중

연속 2일 TIL이라니 미쳤다 부트캠프때 미쳐 못했던 부하테스트 후 성능개선을 해보고싶어서 부하테스트를 하고있는데... 망할 nGrinder 왜 안되는거니? TIL 1. fanal & static 2. jMeter 와 nGrinder 의 차이점...? 3. nGrinder Docker로 사용하기 오늘 하루 1. 좋았던 점 팀 프로젝트를 할 때 시간상 못했었던 부하테스틀 하고있다는 지금이 좋다 꼭 성능개선까지 해보고, 자랑스러운 프로젝트를 만들자 1일1알고도 했다! 2. 아쉬운 점 nGrinder를 사용해보고 있는데 왜 agent가 연결이 안되는지 모르겟다.. 직접실행도 해보고, docker로 해봤는데 agent가 controller 에 아예 연결이 안되는 것 같다 뭐가 문제일까.. 하.. 3. 오늘 배운..

private final VS private static final 왜 쓸까

private final VS private static final final final은 무언가를 제한하겠다는 의미 final은 재할당을 제한함 - 메모리의 재할당, 즉 값은 변할 수 있음 상수의 경우 재할당을 하지 못하면, 초기화값이 불변하기 때문에 값이 불변 static static은 값을 static(정적) 메모리 영역에 올리겠다는 선언 즉, 어디에서 호출해도, 모든 곳에서 데이터를 공유함 - 정적메모리 영여에 올려져있어 전역적으로 사용이 가능 [예시] public class MutableTest { private final Map mutableMap = new HashMap(); public void testFinal() { // 재할당 안됨 // mutableMap = new HashMap()..

Java/Java 문법 2022.03.10