Spring 91

[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

[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..

getter setter를 사용하는 이유

👏🏻 놉! 왠만하면 사용하지 않는게 좋습니다. 게터는 편의성을 위해 어쩔수 없이 사용하는 부분이 있지만 Setter는 되도록 지양해야한다. (2022.07 수정..ㅎ) 면접 스터디를 하면서 getter setter를 하는 이유에 대해 공부를 하는데 새로 알게된 피드백을 받아서 이게 좀 헷갈려서 포스팅을 남기면서 공부를 해보고자 한다. [공부 목적] 1. getter/ setter를 사용하는 이유는 데이터 무결성을 위해서 이다. (알고있던 것) -> setter는 데이터 무결성을 해칠수도 있다(?) (새롭게 알게된 것) -> 따라서 builder 패턴이나 solid 개방패쇄 원칙에 대해 공부해보고자 한다. 1. 처음 공부한 것 Getter Setter를 사용하는 이유 핵심답변 객체의 무결성을 보장하기 위해..

Spring/Spring Boot 2022.02.24

[Spring boot] 테스트 코드 작성 (2) - Mock, Mockito, MockMVC

Spring 테스트 코드 작성해보기! 목차 Junit 이란 Junit 사용설정 Junit 어노테이션 Junit 사용법 Assert 메소드 @Nest사용 엣지 케이스 확인 1, Mock vs Mockito vs MockMVC 1) Mock 이란, 테스트를 위한 가짜 객체 실제 객체를 만들기에는 비용과 시간, 의존성이 크게 걸쳐져 있어 테스트 시 제대로 구현하기 어려울 경우 만드는 가짜 객체 2) Mockito 란, Mockito란 Mock Object를 간편하게 만들게 해주는 라이브러리 Mock 객체를 만들기위해서 사용되는 시간을 줄이기위해, 자동으로 생성해주는 라이브러리이다. Mock객체 직접 구현하지 않아도 되게함 3) MockMVC 스프링에서 MVC 테스트를 하기위한 방법을 논의하여 Spring-te..

[Spring boot] 테스트 코드 작성 (1) - Junit을 이용한 Unit Test(단위 테스트) / Assert 메소드

Spring 테스트 코드 작성해보기! 목차 Junit 이란 Junit 사용설정 Junit 어노테이션 Junit 사용법 Assert 메소드 @Nest사용 엣지 케이스 확인 Junit을 이용한 단위테스트 1) 단위 테스트란 프로그램을 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지 검사하는 테스트 Development: 개발 Unit Tests (단위 테스트): 개발자 테스트 QA Testing: 블랙박스 테스팅 주로 QA 팀이 Production 환경과 유사한 환경(Stage)에서 테스팅 Production: 실 서비스 운영 환경 2) Junit 이란 Junit이란 자바 프로그래밍 언어용 단위 테스트 프레임워크 이다. 어노테이션을 기반을 테스트를 지원한다. 단정문(Assert)를 통해서 테스트 케이스의 ..

[Spring] AOP란 - (AOP, Spring AOP, AOP 어노테이션)

목차 AOP란 AOP의 주요 개념 Spring AOP AOP 적용 시퀸스 다이어그램 Spring AOP 어노테이션 Spring AOP 코드 예시 AOP란 Aspect Oriented Programming - 관점 지향 프로그래밍이라고 불리는 AOP 관점 지향이란, 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 각각 모듈화하는 프로그래밍 기법을 의미합니다. 따라서 AOP는 핵심기능과 부가기능을 나누어서 설계, 구현하는 것을 말합니다. AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미입니다. 이떄, 소스코드상에서 다른 부분에 계속 반복해서 사용되는 코드들이 존재할 수 있는데, 이것을 흩어진 관심사(Crossing Concerns)라..

Spring/Spring Boot 2022.01.18

[Spring] JSON 파일 DTO로 받아오기 - ObjectMapper

이번 포스팅은, JSON 파일을, JAVA DTO 클래스로 받아오는 방법을 기록하기로했다. [목차] 1. JSON to DTO Array 2. Object Mapper 1. JSON to DTO Array 저번 게시물(https://thalals.tistory.com/266)에서 외부 API에서 JSON 파일을 ResponseEntity 파일로 받아왔는데, 이 Object 데이터를 DTO 클래스로 변환해서 저장한다음, 내 입맛데로 변경하여 사용할 수 있다. 외부 API 데이터 받아오기 public ResponseEntity getData(String url ) { //Spring restTemplate RestTemplate restTemplate = new RestTemplate(); HttpHeade..

Spring/Spring Boot 2022.01.18
반응형