'Development/Spring' 카테고리의 글 목록
본문 바로가기

Development/Spring

(47)
[Spring] @Builder사용할 때 @AllArgsConstructor를 적용하면 왜 @NoArgsConstructor와 함께 쓰이지 못하는가? 문득 @Builder를 사용하면서 intelliJ가 시키는 대로 @NoArgsConstructor, @AllArgsConstructor를 추가했는데요이게 왜 필요할까 궁금해져서 @Builder에 대해 알아보았습니다.@Builder* If a member is annotated, it must be either a constructor or a method. If a class is annotated,* then a package-private constructor is generated with all fields as arguments* (as if {@code @AllArgsConstructor(access = AccessLevel.PACKAGE)} is present* on the class), a..
[Spring] HttpSession과 Session Clustering 세션(Session)은 다양한 의미로 사용됩니다. 터미널에서의 세션, 웹에서의 세션 등 여러 맥락에서 세션은 상태를 유지하기 위한 방법을 제공합니다. 이 글에서는 Spring에서의 세션 동작 방식과 세션 클러스터링(Session Clustering)에 대해 다뤄보겠습니다.HttpSessionHTTP 프로토콜은 본질적으로 무상태(Stateless) 프로토콜이다. 이는 각 요청이 독립적으로 처리되며, 서버가 특정 사용자의 요청 순서나 상태를 기억하지 않는다는 의미이다. 즉, 사용자는 매 요청마다 자신의 신원을 식별할 수 있는 정보를 서버에 전달해야 한다.HTTP 요청이 상태를 유지하지 않기 때문에, 서버와 클라이언트는 추가적인 메커니즘을 통해 상태를 유지해야 한다. 이때 가장 많이 사용하는 방법이 쿠키(Co..
[Spring] MSA와 Spring Cloud 현대의 소프트웨어 개발은 급변하는 요구사항과 복잡한 시스템 구조로 인해 기존의 모놀리식 아키텍처로는 대응하기 어려운 상황에 직면해 있습니다. 이러한 문제를 해결하기 위해 등장한 개념이 바로 마이크로서비스 아키텍처(MSA, Microservices Architecture)입니다.MSA는 애플리케이션을 작은 독립적인 서비스로 분리하여 개발, 배포, 확장이 용이하게 합니다. 이를 통해 개발팀은 민첩성을 높이고, 시스템의 안정성과 유연성을 확보할 수 있습니다. 하지만 MSA의 도입은 단순히 아키텍처를 나누는 것만으로는 충분하지 않습니다. 각 마이크로서비스 간의 통신, 구성 관리, 서비스 디스커버리 등 다양한 운영 문제를 효율적으로 해결하기 위한 툴과 프레임워크가 필요합니다.Spring에서 Spring Cloud..
[Spring] MVC 패턴과 Spring MVC 이 글에서는 웹 애플리케이션에서 흔히 사용되는 디자인 패턴인 MVC 패턴과, Spring 에서는 어떻게 이 패턴을 구현하는지에 대해 알아보고자 합니다.디자인 패턴: MVC 패턴MVC란 Model-View-Controller의 약자로, 소프트웨어 디자인 패턴 중 하나이다.MVC 패턴은 소프트웨어를 구성하는 요소들을 Model, View, Controller로 구분하여 각각의 역할을 분리한다.Model데이터와 비즈니스 로직을 담당한다.데이터베이스와 연동하여 데이터를 저장하고 불러오는 등의 작업을 수행한다.View사용자 인터페이스를 담당한다.사용자가 보는 화면과 버튼, 폼 등을 디자인하고 구현한다.ControllerModel과 View 사이의 상호작용을 조정하고 제어한다.사용자의 입력을 받아 Model에 전달..
[Spring] 서버 모니터링을 위한 Spring Actuator, Prometheus, Grafana 추가하기 모니터링은 애플리케이션의 성능과 안정성을 유지하기 위해 필수적인 요소입니다. 서버의 상태를 실시간으로 파악하고, 성능 이슈를 사전에 감지하여 대응할 수 있게 해 줍니다. 이를 통해 서비스의 가용성을 높이고, 안정적인 서비스를 운영할 수 있습니다. 이번 글에서는 Spring Boot 애플리케이션에 Spring Actuator를 추가하고, Prometheus와 Grafana를 사용하여 모니터링을 설정하는 방법을 알아보겠습니다.모니터링 정보모니터링을 하면서 수집하는 주요 정보는 시스템이나 애플리케이션의 상태, 성능 및 동작을 평가하는 데 사용되는 모든 종류의 데이터를 포함한다. 여기에는 metric, log, trace, event 등의 다양한 데이터가 포함될 수 있다. 모니터링 정보의 구성 요소metric:..
[Spring] Redisson을 활용한 캐시 사용하기 이전글에서 다루었듯 Gatling을 사용한 서버 부하 테스트를 진행해 보았습니다. 서버 과부하로 인한 Fail도 있었고, 응답 시간이 매우 길어지는 크게 두 가지 문제가 있었습니다. 서버 과부하를 해결하기 위해선 분산 서버를 운영하여 로드 밸런서를 추가 하거나, 메세지 큐를 활용해서 대기하도록 할 수 있습니다. 응답 시간의 경우 데이터베이스 튜닝이나 캐싱을 사용함으로써 해결할 수 있습니다.이 글에서는 Redis를 캐시 메모리로 사용하여 서버의 성능을 개선하는 방법에 대해 다루고자 합니다. 특히, Java 환경에서 Redisson을 활용하여 Spring 애플리케이션에 Redis 캐시를 적용하는 방법을 중점적으로 설명합니다.Caching과 RedisCache MemoryCache Memory는 중요하고 자주..
[Spring] Gatling 으로 서버 부하 테스트하기 서버의 성능을 향상하려면 현재 서버가 어느 정도의 부하를 견딜 수 있는지, 그리고 어떤 부분에서 병목 현상이 발생하는지에 대한 명확한 지표가 필요합니다. 이러한 지표를 얻기 위해서는 실제로 서버에 부하를 가해보는 부하 테스트(Load Testing)가 필수적입니다.Spring에서 사용할 수 있는 부하 테스트 툴을 찾아보다가 Gatling에 대해 알게되었는데요, 이 글에서는 Gatling이 무엇인지, 그리고 어떻게 적용하여 서버의 부하 테스트를 수행할 수 있는지에 대해 알아보겠습니다.Gatling이란?Gatling은 오픈 소스 기반의 고성능 부하 테스트 도구로, 주로 웹 애플리케이션의 성능 테스트에 사용된다. Scala와 Java를 지원하며, 간단한 설정만으로도 부하 테스트를 수행할 수 있는 것이 장점이다..
[Spring] ThreadLocal에 대해 알아보자 + SecurityContextHolder, RequestContextHolder Java Spring에서는 Thread 마다 고유한 데이터를 가지기 위해 ThreadLocal 클래스를 사용합니다. 이 글에서는 ThreadLocal이 무엇이며 어디서 활용되고 있는지에 대해 알아보겠습니다.Thread스레드(Thread)는 프로세스 내에서 실행되는 가장 작은 단위의 작업이다. 하나의 프로세스는 여러 스레드를 가질 수 있으며, 각 스레드는 독립적으로 실행된다. 스레드는 동일한 메모리 공간을 공유하며, 서로 다른 스레드가 동시에 실행될 수 있기 때문에 멀티스레딩을 통해 병렬 처리가 가능해진다. Spring 애플리케이션, 특히 웹 애플리케이션에서는 일반적으로 요청당 스레드(Thread-Per-Request) 모델을 사용한다.이는 클라이언트의 HTTP 요청마다 별도의 스레드를 생성하여 그 요청을..