Spring
[SpringBoot] Logback 적용하기
[SpringBoot] Logback 적용하기
2025.09.12SpringBoot 애플리케이션을 개발하다 보면 로그 관리의 중요성이 점점 커지게 됩니다. 단순히 `System.out.println` 으로 출력하는 수준을 넘어서 로그 레벨별 관리, 로그 파일 분리, 로그 백업 및 외부 시스템 연동 등이 필요해집니다.이번 포스팅에서는 로그를 더욱 세밀하게 관리하기 위한 SpringBoot의 기본 로깅 라이브러리인 Logback이 무엇인지, 어떻게 설정할 수 있는지에 대해 알아보도록 하겠습니다. 1. 로깅(Logging)이란?`로깅(Logging)`은 애플리케이션이 동작하는 동안 발생하는 다양한 사건(event)이나 상태 정보를 기록하는 것을 의미합니다. 개발자나 운영자가 프로그램의 동작을 이해하고, 문제를 진단하며, 성능을 개선하는 데 중요한 역할을 합니다. Loggi..
[SpringBoot] AWS S3 상품 이미지 등록과 고아객체 처리 구현 예제
[SpringBoot] AWS S3 상품 이미지 등록과 고아객체 처리 구현 예제
2025.05.06상품 이미지 업로드 기능을 개발할 때는 단순히 파일을 저장하는 것에서 끝나지 않습니다. 저장소 선택, 업로드 방식, 그리고 사용되지 않는 리소스`(고아객체)`의 정리까지 종합적으로 고려해야 합니다. 특히 AWS S3와 같은 외부 스토리지를 사용하는 경우, 고아 객체를 방치하면 스토리지 비용은 물론, 전체 시스템의 관리 복잡도까지 높아질 수 있습니다.이번 포스팅에서는 고아 객체란 무엇인지, 상품 등록 과정에서 발생할 수 있는 고아 객체를 어떻게 처리할 수 있는지 A부터 Z까지 상세하게 알아보도록 하겠습니다. 1. 고아 객체(Orphan Object)란?`고아 객체(Orphan Object)`란, 더 이상 애플리케이션에서 참조하지 않지만 스토리지에는 여전히 남아있는 데이터를 의미합니다. 다음과 같은 상황으로..
[SpringBoot] Spring Docs + Swagger 적용하여 API 문서 자동화하기
[SpringBoot] Spring Docs + Swagger 적용하여 API 문서 자동화하기
2025.02.20API 문서화는 개발자들 간의 원활한 협업을 위한 필수 요소입니다. 명확한 문서가 없다면 API 사용법을 제대로 전달하기 어려워지고, 그로 인해 개발 과정에서 혼란이나 유지보수에 어려움을 겪을 수 있습니다.특히, API의 변경 사항이 있을 때마다 문서도 수동으로 업데이트 해야 한다면, 번거롭고 오류가 발생할 위험 또한 증가하게 됩니다. 이런 문제를 `Swagger`를 통해 해결할 수 있습니다.이번 포스팅에서는 Swagger란 무엇인지, 적용하는 방법, 사용되는 어노테이션에 대해 알아보겠습니다. Swagger란?`Swagger`는 웹 서비스 명세를 문서화 해주는 OpenAPI기반의 프레임워크로, 웹 서비스의 로직 수행, 요청 데이터, 응답 데이터가 무엇인지 정리해서 문서화를 자동화 해주는 기술입니다.웹 애..
[SpringBoot] Scale-out 환경에서 발생하는 Scheduler 중복 실행 문제 Shedlock으로 해결하기
[SpringBoot] Scale-out 환경에서 발생하는 Scheduler 중복 실행 문제 Shedlock으로 해결하기
2025.02.06스케줄러(Scheduler)를 사용해 정해진 시간에 반복 작업을 실행하고자 할 때, 다중 인스턴스 환경에서는 같은 작업이 여러 인스턴스에서 동시에 실행되는 상황이 발생하게 됩니다.이번 포스팅에서는 `ShedLock`의 개념과 라이브러리를 활용하여 여러 인스턴스에서 Scheduler 사용 시 발생하는 문제를 해결하는 방법에 대해 알아보도록 하겠습니다. 문제 상황Scheduler를 적용하면 지정한 일정 시간마다 실행하게 됩니다.그런데 만약 여러 인스턴스 서버(Scale-out)를 띄울 경우 각 서버마다 존재하는 Scheduler가 동작하게 될 것입니다. @Scheduled(zone = "Asia/Seoul", cron = "*/1 * * * * *") // 1초 간격으로 실행public void run() ..
[SpringBoot] 트랜잭션 전파 속성 (Transaction propagation)
[SpringBoot] 트랜잭션 전파 속성 (Transaction propagation)
2025.02.02애플리케이션을 개발할 때 데이터의 일관성을 유지하고 안정적인 동작을 보호하기 위해 트랜잭션 관리가 필수적입니다.트랜잭션은 데이터를 처리하는 동안 발생할 수 있는 오류나 시스템 장애에 대비해 작업을 `롤백(rollback)`하거나 `커밋(commit)`하는 중요한 역할을 합니다. `트랜잭션 전파(Transaction Propagation)`는 여러 개의 트랜잭션이 서로 어떻게 상호작용하고, 하나의 트랜잭션이 다른 트랜잭션에게 어떻게 영향을 미칠지 결정하는 중요한 개념입니다.이번 포스팅에서는 트랜잭션 전파에서 각 속성들의 개념과 동작과정에 대해 알아보도록 하겠습니다. 트랜잭션 전파 속성(Transaction Propagation)이란?Spring이 제공하는 선언적 트랜잭션(@Transactional)은 여러..
[SpringBoot] AWS S3 다중 이미지 파일 업로드 및 삭제 구현하기 (feat. MultipartFile)
[SpringBoot] AWS S3 다중 이미지 파일 업로드 및 삭제 구현하기 (feat. MultipartFile)
2025.01.17이미지와 같은 정적 파일을 효율적으로 관리하는 것은 웹 애플리케이션 개발에서 자주 마주하게 됩니다. 이때, 클라우드 기반 저장소인 `AWS S3 (Simple Storage Service)`는 높은 확정성과 안정성을 제공합니다. 이번 포스팅에서는 Java 기반 Spring Boot 환경에서 `MultipartFile`방식을 활용하여 다중으로 `AWS S3`에 이미지파일을 업로드하는 방법과 업로드된 이미지파일을 삭제하는 방법에 대해 알아보도록 하겠습니다. MultipartFile 업로드 방식 개념시작하기에 앞서 `MultipartFile 업로드 방식의 개념`에 대해 먼저 알아보도록 하겠습니다. `MultipartFile`은 Spring에서 제공하는 인터페이스로, 파일 업로드를 간편하게 처리할 수 있도록..
[SpringBoot] @Scheduled를 이용한 스케줄러 구현
[SpringBoot] @Scheduled를 이용한 스케줄러 구현
2025.01.13Spring 프레임워크에서 제공하는 @Scheduled어노테이션은 주기적으로 실행해야 하는 작업 데이터 정리, 알림 전송, 백업 등의 작업을 자동화하는 도구입니다.이번 포스팅에서는 @Scheduled어노테이션에 대한 개념과 이를 활용한 주기적인 작업 실행 예제를 다뤄보도록 하겠습니다. @Scheduled 란?`@Scheduled`는 Spring에서 제공하는 스케줄링 작업을 정의하는 어노테이션입니다. 이를 통해 특정 메서드를 주기적으로 실행하거나, 예약된 시간에 실행하도록 설정할 수 있습니다.Spring에서 `@Scheduled` 어노테이션은 기본적으로 `싱글 스레드`에서 실행되며, 만약 두 개 이상의 `@Scheduled` 작업이 정의되어 있어도, 별도의 `병렬 스케줄링 설정`을 하지 않으면 순차적으로 ..
[SpringBoot] AWS SES로 이메일 전송 기능 구현하기
[SpringBoot] AWS SES로 이메일 전송 기능 구현하기
2025.01.12이번 포스팅에서는 AWS SES 환경을 구축하고 Java SpringBoot에서 HTML 템플릿 기반의 이메일을 전송하는 방법에 대해 알아보도록 하겠습니다. AWS SES 란?AWS`Amazon Web Service`에서 제공하는 SES`Simple Email Service`는 클라우드 기반의 이메일 발송 서비스로 Email 전송 서비스를 이용할 수 있는 라이브러리입니다. AWS 환경 구축AWS 사이트에 접속 후 로그인 한 뒤 `우측 상단`에 위치한 리전을 서울로 설정합니다. `좌측 상단` 검색창을 통해 `ses`를 검색하여 `Amazon Simple Email Service`를 선택합니다. 이후 좌측 `자격 증명`탭을 선택하여 `자격 증명 생성`을 선택하여 자격 증명 생성을 시작합니다. `이메일 주소`..
[SpringBoot] 다양한 동시성 제어 방법
[SpringBoot] 다양한 동시성 제어 방법
2024.12.20동시성 제어는 여러 `스레드`나 `프로세스`가 공유 자원에 접근할 때 발생할 수 있는 문제를 방지하고, 데이터의 무결성을 유지하기 위한 방법입니다. 이를 해결하기 위한 여러 가지 접근법이 있으며, 각 방법마다 특정한 상황에서 효과적인 성능을 낼 수 있습니다.이번 포스팅에서는 다양한 동시성 제어 기법에 대한 개념과 예제를 통해 동시성 문제를 해결하는 방법을 알아보도록 하겠습니다. 동시성 제어에 대해 알아보기 전 레이스 컨디션`Race Condition`, 데드락`DeadLock`이란 무엇인지 먼저 알아보도록 하겠습니다. 레이스 컨디션(Race Condition)이란?레이스 컨디션은 여러 스레드나 프로세스가 동시에 공유 자원을 액세스하고자 할 때 발생하는 문제로, 이때 자원에 대한 경쟁 상태`race`가 ..
[SpringBoot] Prometheus, Grafana를 이용한 모니터링
[SpringBoot] Prometheus, Grafana를 이용한 모니터링
2024.12.10애플리케이션의 메트릭과 상태를 모니터링하는 것은 애플리케이션의 성능을 개선하고, 보다 나은 관리를 가녕하게 하며, 최적화되지 않은 동작을 발견하는데 큰 도움이 됩니다.이번 포스팅에서는 데이터 메트릭을 수집하는 `Prometheus`, 이를 시각화 하는 `Grafana`를 활용하여 `SpringBoot`에서 모니터링 환경을 구축하는 방법에 대해 알아보겠습니다. Prometheus`Prometheus`는 애플리케이션 트래픽에 대한 데이터를 수집합니다. 이를 통해 `CPU 사용량`, `메모리 사용률`, `요청 수`, `응답 시간` 등의 애플리케이션 성능 데이터를 추적할 수 있습니다.애플리케이션의 `/actuator/prometheus` 엔드포인트를 통해 이러한 메트릭 데이터를 확인할 수 있으며, `Promet..
[Spring] Redis를 사용한Session 로그인 구현, Security없이 인증, 인가 구현
[Spring] Redis를 사용한Session 로그인 구현, Security없이 인증, 인가 구현
2024.11.14애플리케이션의 인증과 인가는 사용자와 시스템 간의 신뢰를 형성하는 중요한 요소이며, 이를 통해 사용자의 신원 확인 및 접근 권한을 관리함으로써 보안성을 높일 수 있습니다.이번 포스팅에서는 `Session과 Redis`의 개념을 간단히 살펴본 후, `Redis를 세션 스토리지로 사용하는 로그인 구현`과 Spring Security 없이 `Custom Annotation을 통한 인증/인가`를 구현하는 방법을 알아보겠습니다. Session 이란? Session이란, 클라이언트와 서버 간의 상태를 유지하기 위한 방법으로, 사용자가 로그인하여 인증된 후 해당 사용자의 정보를 일정 기간 동안 서버가 기억할 수 있도록 합니다.HTTP는 기본적으로 비상태성`stateless`을 지니고 있어, 각 요청은 서로 독립적입니..
[Spring] offset, no offset 차이점과 페이지네이션 구현예제
[Spring] offset, no offset 차이점과 페이지네이션 구현예제
2024.10.23웹 서비스에서 페이지네이션은 흔하게 사용되는 기능 중 하나입니다.데이터를 효율적으로 조회하기 위해 많은 서비스에서 이 기능을 적용하고 있습니다. 데이터 조회에 대한 기능을 구현하며 페이지네이션 방식 중 offset과 no offset 방식의 페이지네이션에 대해 알게 되었고 이 두 가지 방식의 차이점과 각 방식에 대한 사용성에 대해 정리하고자 합니다. 이번 포스팅에서는 페이지네이션 기능 중 일반적으로 사용되는 `offset`과 `no offset`의 차이점과 각 기능의 장단점, 성능차이에 대해 알아보도록 하겠습니다.offset 이란?페이지네이션의 offset 방식은 주어진 페이지 번호(offset)에 따라 데이터를 조회하는 방법입니다.이 방식은 SQL 쿼리에서 LIMIT와 OFFSET을 사용하여 데이터를 ..