Spring Data Jpa Entity를 DTO로 변환 Entity에서 DTO 페치조인 JPA에서 DTO 바로 조회 Auditing Pageable API 개발 고급 정리 권장순서 Entity 조회 방식으로 우선 접근 페치조인으로 쿼리수를 최적화 컬렉션 최적화 페이징 필요 hibernate.default_batch_fetch_size, @Batchsize로 최적화 페이징 필요 X -> 페치 조인 사용 Entity 조회 방식으로 해결이 안되면 DTO로 조회 방식 사용 Entity를 DTO로 변환 @GetMapping("/api/v2/simple-orders") public List ordersV2() { List orders = orderRepository.findAll(); List result = o..
N+1 쿼리 문제의 원인? Spring Data JPA 에서 제공하는 Repository의 findAll(), findById()등과 같은 메소드를 사용하면 바로 DB에 SQL 쿼리를 날리는 것이 아닙니다. JPQL 이라는 객체지향 쿼리 언어를 생성, 실행시킨 후 JPA는 이것을 분석해서 SQL을 생성, 실행하는 동작에서 N+1 쿼리 문제가 발생한다. JPQL 입장에서는 LAZY로딩, EAGER 로딩과 같은 글로벌 패치 전략을 신경쓰지 않고 JPQL만 사용해서 SQL을 생성한다. N+1 쿼리 문제는 언제 발생할까? 발생하는 경우는 다음과 같은 2가지 경우가 있다. 두개의 Entity가 1:N 관계를 가지며 JPQL로 객체를 조회할때 EAGER 전략으로 데이터를 가지고 오는 경우 LAZY 전략으로 데이터를..
Servlet Application 에 Spring 적용 의미 Spring이 제공하는 IoC컨테이너를 활용 Spring이 제공하는 서블렛 구현체 DispatcherServlet을 사용하겠다. web.xml 파일 내 Listener 변경(기등록된 리스너를 제거하고, Spring에서 제공하는 ContextLoaderListener 등록) ContextLoaderListener는 Spring IoC Container(즉, Application Context)를 Servlet Applicaiton 생명 주기에 맞춰서 바인딩 해준다. Applicaiton Context를 Web Application에 등록되어있는 Servlet들이 사용할 수 있도록 Application Context를 만들어서 이 Applicat..
DispatcherServlet 이란 보통 FrontController 라고 부른다. 즉 Spring MVC 패턴에서 Controller로 들어오기 전에 모든 요청이 이 바로 FrontController 인 DispatcherServlet을 거치게 된다. 이 DispatcherServlet은 다양한 기능들을 제공하고 있으며 어떻게 동작하는지 아래에서 알아보자. Why? Dispatch의 의미는 파견, 급파하다의 의미로 해석해보면, 받은 요청을 어딘가로 빨리빨리 보내는 서블릿 이라는 뜻이다. Spring이 없는 JAVA 런타임에서는 컨트롤러가 존재하지 않는다. 따라서 우리는 서블릿 객체를 생성하고 그것을 web.xml에 일일히 다 등록해줘야 했다. 아래 코드와 같이 웹 사이트를 이용해 봤다면 우리가 접속하..
Optional 1. Null 의 늪 null 개념은 1965년 Tony Hoare라는 영국의 컴퓨터 과학자에 의해서 처음 고안되었다. 존재하지 않는 값 을 표현할 수 있는 가장 편리한 방법이 null 참조라고 생각했다고 한다. 하지만 나중에 그는 그당시 자신의 생각이 "10억불 짜리 큰 실수" 였고, null 참조를 만든 것을 후회한다고 함. 2. NPE(NullPointerException) null 참조로 인해 자바 개발자들이 가장 골치아프게 겪는 문제는 널 포인터 예외(NPE) 이다. NPE는 코드베이스 곳곳에 깔려있는 지뢰같은 녀석이다. 컴파일 타임에서는 조용히 잠복했다가 런타임 때 터지기 때문이다. /* 주문을 한 회원이 살고 있는 도시를 반환한다 */ public String getCityO..
Spring Boot 를 쓰다보면 AOP, Filter, Inteceptor를 통해서 어플리케이션의 공통 로직을 처리하는 일을 할때 자주 사용하게 된다. 이 세개의 차이점을 알고 사용한다면 더 클린한 코드를 쓸 수 있지 않을까 한다. 그래서 간략하게 AOP, Filter, Interceptor의 차이에 대해 기술해 보겠다. AOP, Filter, Interceptor 의 차이 Spring 으로 개발을 하다가 보면 공통적으로 처리해야 할 업무가 많다. 로그인, 토큰처리, 로그처리등 많은 업무들이 공통적 모든 프로젝트에 적용 되어야 한다. 하지만 모든 코드에 적용하다보면 코드가 난잡하고 가독성이 떨어지는 코드가 될 가능성이 높다. 그래서 Tomcat, Spring은 공통 업무를 따로 분리하여 처리하는 기능을..
필자는 Java가 가장 처음 배운 프로그래밍 언어였으며 메모리 구조에 대해 당연히 알아야 한다고 생각해서 이 글을 정리할려고 한다. 요즘은 Java -> Kotlin 회사 프로젝트를 많이 포팅하고 있기는 하지만 Kotlin 또한 Java 로 컴파일 되어 JVM 위에서 돌아가기 때문에 무조건 알아야 할 영역이다. JAVA 의 메모리 구조 Class Path 자바 가상머신(JVM)이 프로그램을 실행 할 떄, 클래스 파일을 찾는 데 기준이 되는 파일 경로, 즉 JVM이 클래스 파일을 찾는 경로. bin 은 자바소스(.java 파일)가 컴파일 되어 새롭게 생성되는 .class 파일이 모여 있는 곳 이다. 그것들이 모여 있는 위치가 'bin' 폴더 메모리 구조 JVM(자바 가상머신)이 실행되면 OS..
필자는 항상 웹서버만 개발해오다가 이번에 게임서버를 만드는 프로젝트를 맡아서 개발중인데, Socket 에 대해 항상 어려운 부분이 많고 Netty가 이미 로우 레벨의 네트워크를 잘 구현해놓았기 때문에 로우 레벨에서 어떻게 작동하는지 알기 어려웠다. 그래서 이 글을 통해서 소켓에 대해 이해하기 어려운 부분을 간략하게 설명하고 이해해 볼려고 한다. 소켓 프로그래밍 네트워크 프로그래밍 에서 가장 많이 사용하는 것이 소켓 이다. 기본적으로 파일 핸들과 비슷하다. 우리는 디스크에 데이터를 기록하거나 책을 읽어 들일 때 파일 핸들을 사용한다. 이처럼 네트워크로 데이터를 전송하거나 받을 때 소켓 핸들을 사용한다. 소켓 핸들 방식 온라인 게임 프로그래밍에서 소켓은 파일 핸들 방식과 다르다. 게임 서버에서는 다루어야 하..
JPA 기본 정리 JPA-Entity 매핑 Fetch Join 기본키 전략 Entity 매핑 속성 : name JPA에서 사용할 엔티티 이름 지정 기본값 : 클래스 이름을 그대로 사용 같은 클래스 이름이 없으면 가급적 기본값을 사용한다. 1.Table 매핑 @Table은 엔티티와 매핑할 테이블 지정 name - 매핑할 테이블 이름 catalog - 데이터베이스 catalog 매핑 schema - 데이터베이스 schema 매핑 uniqueConstraints - DDL 생성 시에 유니크 제약조건 생성 2. 데이터베이스 스키마 자동생성 - 주의 운영 장비에는 절대 create, create-drop, update 사용 X 테스트 서버는 update 또는 validate 스테이징과 운영 서버는 validate..
Spring Security OAuth2 Spring Security OAuth2를 이용하여 구글, 네이버, 애플 소셜 로그인을 구현했으며, 워낙 오랜기간 동안 고생했고 많이 찾아봐서 기록해놓고 추후에 보기 위해 이 글을 쓸려고 한다. 필자는 먼저 구글 소셜 로그인에 대한 흐름을 이해하기 위해 블로그에서 Flow의 흐름을 잘 정리 해놓은 그림을 가져왔다. 아래 이미지를 보면 Spring Security OAuth2 에 대해 이해하기 더 쉬웠다. OAuth 2.0 기본적으로 OAuth(OpenID Authentication)란, 타사의 사이트에 대한 접근 권한을 얻고 그 권한을 이용하여 개발할 수 있도록 도와주는 프레임워크이다. 구글, 카카오, 네이버등과 같은 사이트에서 로그인을 하면 직접 구현한 사이트에..
- Total
- Today
- Yesterday
- 인덱스
- 쓰레드
- 영속성 컨텍스트
- 논블로킹
- oauth2
- thread
- mysql
- DispatcherServlet
- 데이터베이스
- spring mvc
- Spring Security
- 비동기
- 다운로드
- 공간쿼리
- R-Tree
- GIS
- lock
- spring
- jpa
- Index
- 스프링
- jenkins
- database
- java
- 네트워크
- spring boot
- github
- db
- TCP
- Excel
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |