[Spring] Spring Security 정리
·
Spring
🔐 Spring Security란 Spring Security는 Spring Framework에서 보안이나 인증・인가에 사용되는 프레임워크이다. 일단 인증과 인가가 무엇인지부터 확실하게 정리하자. 인증(Authentication) : 사용자가 누구인지 확인하는 절차 (로그인을 위해 입력한 정보가 본인이 맞는지 확인)인가(Authorization) : 인증된 사용자가 특정 자원에 접근할 권한이 있는지 확인하는 절차 Spring Security는 다양한 기능을 제공하지만, 핵심은 대부분 인증과 인가, 그리고 이 과정에서 파생되는 부가 기능들로 구성되어 있다. Spring MVC만 사용할 경우, 클라이언트의 요청이 Origin 서버로 전달되기 전에 필터나 인터셉터를 통해 요청이 악의적인지, 인증은 되었는..
[Spring] MySQL, MongoDB 전략 패턴
·
Spring
현재 진행 중인 ‘스킨 판매 플랫폼’에서는 판매자에게 문의할 때 사용되는 채팅이 모두 MySQL에 저장된다. 하지만 채팅이라는 기능의 특성을 생각해 봤을 때, 자주 INSERT 작업이 실행되는 기능이다. 그렇기 때문에 MySQL은 적합하지 않을 수 있다. 이 과정에서 고려한 두 가지 방안은 다음과 같다. Redis에 저장 후, 일정 시간 이후 or 일정 채팅 개수를 초과한 경우 Batch를 사용해 MySQL에 채팅 데이터 저장채팅 데이터만 MongoDB에 저장 여기서 난 두 번째 방안을 적용하기로 했다. 그 이유는 아직까지 하나의 DB를 사용하다가, 한 프로젝트에서 다른 DB를 적용한 기억이 없기 때문이다. ⚙️ MongoDB MongoDB란 대표적인 NoSQL DB로 채팅 데이터를 저장하는..
[MSA] Spring Boot + Kafka를 사용한 채팅 (3) (Feat : Prometheus + Grafana)
·
Spring/MSA
이번에 할 작업은 Jmeter를 사용해 로드밸런싱이 적용된 채팅 서버에 부하 테스트를 한 후, Prometheus + Grafana을 사용해 서버 상태를 모니터링하는 것이다.   👨🏻‍💻 Prometheus프로메테우스는 서버의 시계열 데이터를 수집하고, 이를 시각화하며, 경고 알림을 제공하는 오픈소스 모니터링 도구이다.  주요 특징 중 하나는 서비스 디스커버리(Service Discovery) 기능이다. 서비스 디스커버리 덕분에 URL만 설정하면 Spring Actuator 의 메트릭을 손쉽게 수집할 수 있다.  또한, 데이터 조회는 프로메테우스 전용 쿼리 언어인 PromQL 을 사용해 간편하게 할 수 있다.  프로메테우스 아키텍처는 다음과 같다.     👨🏻‍💻 Grafana그라파나는 프로메..
[Spring] Spring 프로젝트 SonarQube 연동
·
Spring
최근 구현한 게시판 프로젝트가 있다. 이 프로젝트에서 사용되는 메서드에는 대부분 테스트 코드를 작성했다.  이 테스트 코드가 내 실제 프로덕션 코드를 얼마나 커버했는지 나타내는 코드 커버리지를 수치화하는 기술인 SonarQube를 사용해 얼마나 커버했는지 확인해 보자.  참고로 SonarQube는 코드 커버리지뿐만 아니라 Security Hotspot와 같이 보안적으로 문제가 될 수 있는 부분, 유지보수 측면에서 불리할 수 있는 부분 등의 정적 코드 분석 기능도 보유하고 있다.   SonarQube 설치 및 설정 난 HomeBrew를 사용해 SonarQube를 설치했다.brew install sonarbrew install sonar-scanner 설치가 완료되었으면 실행한다.brew services s..
[JPA] Spring JPA 페이징 성능 향상
·
Spring/JPA
게시판의 하단에는 위의 이미지와 같이 몇 페이지부터 몇 페이지까지 있는지 볼 수 있다.  그렇다면 이러한 페이징을 하기 위해선 어떤 것을 알아야 할까? 바로 현재 페이지의 위치, 총 페이지 수이다.  총 페이지 수란, 보통 (조회된 모든 데이터 수) / (한 페이지에서 보여줄 글 수) 를 말한다.  그 말은, 위의 이미지처럼 1페이지에서 2페이지, 3, 4, 5 넘어갈 때 마다, 이전에 조회되었던 데이터를 함께 조회해야하는 것이다. 하지만 이전에 조회된 데이터는 사용하지도 않는다.  그냥 뒤에 있는 데이터를 탐색하기 위해 어쩔 수 없이 조회되는 데이터인 것이다.  보통 내가 진행했던 프로젝트는 뭐 게시글이 천만개~1억개 정도는 되는 것이 아니라서 매번 총 데이터의 수를 조회해도 상관없었지만, 실제 현업에..
[Spring] Spring Batch를 사용한 대량 데이터 저장 (2)
·
Spring
이제 Spring Batch를 내가 개발중인 프로젝트에 구현해봅시다.  구현하기 전에 필요한 건 프로젝트에 의존성을 설정하는 것과, 배치 관련 메타 테이블을 생성하는 것이다.   설정 build.gradleimplementation 'org.springframework.boot:spring-boot-starter-batch' build.gradle에 Spring Batch의 의존성을 추가한다.   메타 테이블 생성 메타 테이블을 생성하는 방법은 자동 생성, 수동 생성 두 가지 있다. 자동 생성spring: batch: jdbc: initialize-schema: always 메타 테이블 스키마를 자동으로 생성하는 설정 코드이다.  수동 생성-- Autogenerated: do not ed..