Elasticsearch 성능 개선 비교와 사용방법 In SpringBoot
·
SpringBoot
저번에 작성했던 글에서 Elasticsearch에 대해서 학습하였으며 이번엔 현재 진행중인 팀프로젝트에 적용하여 어떠한 방식으로 사용했고 실제 성능개선은 어떤 식으로 되었는지 작성을 해보려 합니다. 도입하게 된 배경- INDEX만을 사용해 데이터 조회 성능 개선을 할 수 없는 부분에 대한 개선 (Like 문법을 포함한 조회)- 유사 실서비스의 기능을 생각했을 때, 가장 많이 이루어지는 기능은 조회이며, 그에 따른 처리속도 개선을 Elasticsearch 사용을 통해 더욱 개선할 수 있습니다.우선 사용방법에 대해서 작성하기 전, 그래서 실제로 성능이 좋아졌는지에 대해서 먼저 말씀드리려 합니다. 우선 네트워크 속도 및 제 개인 맥북으로 테스트를 하는 것이기 때문에 성능개선에 대해서 오차는 좀 있으며 데이터 ..
조인과 서브쿼리
·
SpringBoot
조인과 서브쿼리를 어떠한 경우에 써야할까? 기능은 비슷한데.. 라고 생각하신 적 있으신가요?오늘은 그 차이에 대해서 한번 알아보고 Mysql 8.0기준으로 한번 테스트도 진행해보겠습니다.버전을 명시한 이유는 동욱님의 블로그를 읽고 버전마다 최적화 성능이 다르기 때문입니다. 점점 버전이 높아질수록 서브쿼리의 성능이 좋아지고 있다고 합니다. Join과 Subquery는 언제 사용하고, 왜 사용하는지부터 생각해봅시다.=> Join, SubQuery 모두 여러 테이블에서 데이터를 가져오기 위해 사용됩니다. 대체적으로는 Join 성능이 SubQuery의 성능보다 좋다고 알려져있지만 DB 버전이 점점 올라가며 SubQuery의 성능 또한 개선이 많이 되었다고 합니다. 어떠한 상황에서 SubQuery 혹은 Joi..
SpringBoot 대용량 데이터 조회 (Index)
·
SpringBoot
작은 서비스에서 그냥 조회를 한다는 것은 서비스적으로 고려할 부분이 아닐 것입니다. 하지만 데이터가 10만건을 넘어 100만건까지 간다면 그냥 조회하는 것만 하더라도 어떻게 최적화하고 시간을 줄여나갈 수 있을지 방법을 찾아야 할 부분 중 하나일 것입니다. 특히나 서비스를 운영함에 있어서 읽는 부분이 쓰고 / 수정하는 부분보다 차지하는 부분이 훨씬 더 많기 때문에 더더욱 그렇습니다. 만약 전체를 조회할 때 시간을 줄이는 최적화 로직을 작성한다면 이는 페이지네이션이라고도 할 수 있을것입니다. 하지만 특정 데이터 예를 들어 유저정보에서 nickname(중복가능이라고 가정)을 통해 동일한 닉네임을 가진 유저정보들을 조회한다고 가정해보겠습니다. 심지어 데이터는 20만건입니다. 이런 경우 조회할 때에는 어떻게 해야..
AOP 탐구
·
SpringBoot
로그란 어떠한 서비스든 항상 필요합니다. 불필요하게 괜히 추가된다고 생각하면 추후에 문제상황이 발생했을 때 피를 볼 상황이 발생합니다. 특히나 많은 유저가 사용하는 서비스라면 더더욱 로그의 중요성은 커져갑니다. 이전 회사에서 있을 때에도 에러가 발생했을 때 로그를 확인하며 에러를 추적해갔던 기억이 납니다. 물론 그때는 리눅스 환경에서의 에러여서 커널에서의 로그를 확인했지만.. 로그를 저장하고 확인하기 위해서는 결과적으로 로그를 관리해야합니다. 그렇다면 SpringBoot에서 로그를 관리하는 방법은 뭐가 있는지 확인해보겠습니다. 이전 프로젝트에서는 인터셉터를 활용해서 로그를 기록했습니다.인터셉터를 사용하든 AOP를 사용하든 상관없다라는 말을 들었기에 프론트를 했던 저에게 조금 더 친숙한 인터셉터를 사용했..
JPA 영속성 파헤치기
·
SpringBoot
안녕하세요 오늘은 영속성, 다음글에선 영속성 전이에 대해서 파헤쳐보겠습니다. 기본적으로 Spring Data Jpa가 너무 잘 만들어져 편하게 사용하는 이 시점에 개념에 대해 확인하고 양질의 서비스를 만들어나가기 위해서 한번 영속성에 대해서 정리를 하고 넘어가려 합니다.영속성영속성 컨텍스트→ JPA가 엔티티를 저장 및 관리하는 환경을 의미합니다. 어플리케이션과 DB 사이에서 객체를 관리하는 가상의 데이터베이스 환경입니다. Entity 생명주기 1. 비영속 단순하게 객체를 새로 생성한 상태영속성 컨텍스트로부터 아직 관리되지 않은 상태2. 영속 영속성 컨텍스트로부터 관리되는 상태식별자(PK)가 존재하는 상태3. 준영속 영속성 컨텍스트로부터 관리되었었지만 관리가 종료된 상태4. 삭제 엔티티가 삭제된 상태 그렇..
SpringEvent / EDA
·
SpringBoot
이벤트 기반 아키텍처(Event Driven Architecture) 를 IT 쪽을 학습하는 사람이라면 한번쯤은 들어보셨을 겁니다.그런데 이를 어떠한 상황에서 사용하는 것이 좋고, 도입할 때 고려해야할 부분은 무엇인지, 장단점은 무엇인지와 실제 사용방법을 코드를 통해 알아보도록 하겠습니다. 1. EDA란 ?우선 위에 작성한 것처럼 번역은 이벤트 기반 아키텍처를 의미합니다. 이벤트를 중심으로 시스템이 동작하는 아키텍처를 의미합니다. ( 이벤트란 상태가 변하는 것을 의미합니다. ) 이 아키텍처를 서비스에 실적용을 많이 합니다. 그이유는 이벤트를 기반으로 동작하기 때문에 도메인간 결합도 혹은 생산자와 소비자의 결합도가 낮아지기 때문입니다. 분리된 아키텍처란 왜 중요할까요?➡️ 분리하여 결합도 / 의존도를 떨..
Spring 예외처리 (@ExceptionHandler, @ControllerAdvice)
·
SpringBoot
Springboot를 공부해나가고 부트캠프에서 예외처리 관련 과제를 받아 진행을 하다보니 throw를 통한 예외처리가 아닌 직접 커스텀하여 중복되는 코드를 줄여나갈 수 있는 방법을 기록하려 합니다.이 글을 Spring 공식 페이지를 기반으로 작성하였습니다.(하단에 나와있는 코드는 Spring 공식 홈페이지의 코드입니다.) 가장 처음 작성해볼 방법은 예외 클래스나 컨트롤러 메서드에 HTTP 상태 코드를 명시적으로 지정할 수 있도록 해주는 어노테이션 @ResponseStatus를 통해서 예외처리를 하는 방법입니다. 1. @ResponseStatus@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Order") // 404 public class Or..
Spring Security 없이 로그인을 하는 방법 (Session)
·
SpringBoot
최근 개인 프로젝트를 진행하며 로그인 관련하여 공부했던 부분에 대해서 작성해보려고 합니다.spring security는 이전 회사에 있을 때 간단하게 사용했던 경험이 있습니다. 그런데 사용하다 보니 이렇게 작은 볼륨의 프로젝트 (사실상 로그인 관련 로직은 회원가입, 로그인, 로그아웃, 계정삭제, 게시판과의 연동) 정도밖에 없는데 굳이 Spring security를 사용해야 하는지에 대한 의문이 생겼습니다. 또한 진행하고 있는 부트캠프의 튜터님도 굳이 써야하는지에 대한 생각을 해보고 그전에 로그인 관련 지식을 완벽히 쌓는것이 중요하다라고 조언을 해주셨기에 그 부분에 대해서도 고민을 하다보니 내가 로그인을 그냥 "구현"만 하려고 문서가 많은 Spring security를 사용하려 했었다 라는 생각이 들었습니..