본문 바로가기

Spring

(10)
JPA를 이용하여 cursor 기반 페이징 구현 언젠가부터 무한 스크롤을 이용한 페이징 방식이 우리들에 스며들기 시작했다. 이는 과거의 1, 2, 3... 의 페이지를 클릭하여 다음 콘텐츠를 보는 것이 아니라, 페이스북처럼 마지막 콘텐츠를 보게 되면 다음 페이지가 로딩되어 보이는 것을 의미한다. 그러나 SNS에서는 일반적으로 사용하는 Offset 기반의 페이징을 사용하게 되면 문제가 생길 수 있다. Offset Based Pagination SELECT * FROM BOARDS ORDER BY ID DESC LIMIT 0, 10; SELECT * FROM BOARDS ORDER BY ID DESC LIMIT 10, 10; SELECT * FROM BOARDS ORDER BY ID DESC LIMIT 20, 10; 위의 쿼리를 해석해보면 최신 게시글의 ..
Spring WebFlux는 어떻게 적은 리소스로 많은 트래픽을 감당할까? 위 그림은 DZone 게시글 중 하나인 Spring WebFlux를 이용한 Boot2와 Spring MVC를 이용한 Boot1을 비교한 그래프이다. 해당 그래프에서는 두 가지 특징을 볼 수 있다. 첫 번째로는 유저가 적을 때에는 성능에 별반 차이가 없다. 두 번째로는 유저가 늘어나면 늘어날수록 극명한 성능 차이를 보여주고 있다. 어떻게 이런 차이가 일어날 수 있을까? 본글은 아래의 구성을 가지고 있다. I/O Event-Driven Spring Framework 먼저, 1과 2를 통해서 원리를 알아본 다음 3에서 이를 접목시켜서 위의 그래프가 나올수 있는 이유를 설명할 것이다. I / O Why was Spring WebFlux created? Part of the answer is the need f..
Spring Cache 구현 원리 Spring Cache 구현방식에 대해서 살펴보자. 최근 회사에서 spring-cache의 @Cacheable을 사용하게되었다. 사용하다 보니 토비의 스프링에서 본 관심사의 분리와 AOP와 겹쳐서 머릿속의 생각을 코드와 글로 써보려 한다.글로 다 표현하기에는 한계가 있는 듯하니 Github source와 함께 보면 좀 더 도움이 될 것 같다. 그리고 Test code도 작성하였으니, 이걸통해서 Test를 하면 될 것 같다. (단, cache의 유무만 중요하기에 assert문은 작성하지 않고, log만 찍었다.)요구사항은 다음과 같다. 나는 글로벌 게임을 만들고 있고, 유저들에게 웹사이트에서 랭킹을 보여주어야 한다. 단, 이용자는 100만명을 넘기때문에 모든 이용자를 Scan해서 순위를 실시간으로 보여주기..
Dubbo Spring Boot Apache Dubbo고성능, 가벼운 Java 기반 오픈 소스 RPC 프레임워크Interface 기반의 원격 호출(remote call)fault tolerance, load balancingService 자동 등록 및 감지 (Service Registry)RPC란?Remote Procedure Call외부 서비스를 함수나 메소드를 통해 호출하는 형태부가설명 분산서비스시 외부 서비스는 주로 HTTP를 통해 호출을 한다. 그리고 Application 레벨에서 header, body를 조작한다. 그러나 RPC는 마치 메소드를 호출하듯이 외부 서비스를 사용할 수 있는 간편함을 가지고 있다.백문이 불여일타! 직접 코드를 작성해보자. 필자는 Spring boot와 편의상 maven 멀티모듈 구조를 통해서 코드를 ..
AOP에 걸린 Method의 Parameter 이름 가져오기 먼저, AOP가 뭔지에 대해 알아보자.Aspect-Oriented Programming 이란 프로그램 구조에 대해 또 다른 사고방식을 제공함으로써 Object-Oriented Programming을 보완한다. OOP 모듈성의 핵심 단위는 클래스인 반면, AOP는 모듈화 단위가 관점(Aspect)이다. @Transactional이 대표적인 예이다. 공통의 기능(트랜잭션)을 분리 및 모듈화하여 여러 코드(insertUser, selectMoney)에 쉽게 적용할 수 있게 해준다. 특정 계정의 ID와 token을 통해 유효한지 확인하는 코드가 프로젝트 전반에 산재해 있다고 가정을 해보자. 그리고 이를 비즈니스 코드와는 크게 관계없는 하나의 공통된 관점으로 판단을 하고, AOP를 적용시켜보자. 자세한 코드는 g..
Spring Boot 1으로 Todo List를 만들어 보자 이번 게시글에서는 Todo List 만들기에 앞서 간단하게 세팅과 필수적인 기능들을 살펴보도록 하자. 대상은 Spring Project는 해봤으나 Boot는 접하지 못한 분들이다. Spring의 개념적인 부분보다는 동작하는 기능에 무게중심을 둘 예정이다.개념에 좀 더 관심이 있다면, 토비의 스프링이나 공식 문서를 확인하도록 하자. ( Spring Project, Spring Boot )개발 환경은 Mac OS와 Intellij로 진행이 되지만 Window나 이클립스를 쓰더라도 충분히 따라올 수 있을 것으로 보인다. 코드는 Github에 있으니 같이 보면서 하는 것이 도움이 될 것 같다. (본문코드와 조금 다를 수도 있다.) 이 포스팅은 크게 Project 생성, API구현, Test Code 작성 3가지..
[MSA] #6 Spring Cloud Netflix [MSA] #1 Monolithic Architecture 란?[MSA] #2 Microservice Architecture 란?[MSA] #3 Circuit Breaker[MSA] #4 API Gateway[MSA] #5 Service Discovery[MSA] #6 Spring Cloud Netflix 스프링과 전 세계에서 MSA를 제일 잘하는 기업 중 하나인 Netflix에선 이미 MSA 구축을 편하게 하는 많은 기술과, 갖가지 이슈에 대한 해결책 또한 제공을 하고 있습니다. Spring Cloud Netflix는 자동 환경 설정과 Spring Environment 및 다른 Spring 프로그래밍 모델 관념의 바인딩을 바탕으로 Spring Boot 어플리케이션을 위한 Netflix OSS(Open ..
스프링 빈은 Thread-safe 할까? 초기에 스프링을 공부할 때 스프링 빈의 기본 Scope는 싱글톤이고, 스프링 환경은 멀티 쓰레드이라는 것을 알았습니다. 그런데 '왜 하나의 공유자원(싱글톤 객체)을 여러 쓰레드에서 다루는데 문제가 되지 않을까?'란 생각을 했습니다. 한편으로는 '스프링이 마법을 부려서 쓰레드에 안전한 건가?'란 생각도 했고요. 차근차근 싱글톤과 불/가변 객체에 대해 알아보고 무엇이 착각을 일으켰는지 알아보겠습니다. 먼저, 위키를 통하여 싱글톤의 정의에 대해서 알아보겠습니다. 소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 ..