전체 글
[Architecture] 멀티모듈(Multi-Module)이란?
[Architecture] 멀티모듈(Multi-Module)이란?
2025.03.23소프트웨어 개발이 복잡해지며, 하나의 거대한 코드베이스로 애플리케이션을 관리하는 모놀리식(monolithic) 구조는 초반 개발 속도는 빠르지만 규모가 커지며 배포, 유지보수, 협업 과정에서 병목 현상이 발생해 개발 생산성이 저하됩니다. 또한, 코드의 변경이 전체 시스템에 영향을 미치며 유지보수 비용이 증가하는 등의 여러 한계를 가지고 있습니다.이러한 문제를 해결하기 위한 방법 중 하나가 멀티모듈(Multi-Module) 구조입니다. 멀티모듈은 하나의 프로젝트를 여러 개의 모듈로 나누어, 각 모듈이 독립적으로 개발되고 유지보수될 수 있도록 합니다.이번 포스팅에서는 멀티모듈이란 무엇인지, 개념과 모듈을 나누는 기준, 멀티모듈 설계 시 주의할 점에 대해 알아보도록 하겠습니다. 멀티모듈(Multi-Module..
[Java] Stream이란? 사용하는 이유와 활용 방법
[Java] Stream이란? 사용하는 이유와 활용 방법
2025.03.04Java에서는 배열, 컬렉션, 리스트 등을 사용해 많은 데이터를 처리합니다.기존에는 반복문이나 반복자(iterator)를 사용해 데이터를 하나씩 꺼내 처리했지만, 이러한 방식은 코드가 길어지고 가독성이 떨어진다는 단점이 있습니다. 또한, 코드의 재사용성이 낮아 유지보수에도 어려움이 따릅니다.이러한 불편함을 줄이고 더욱 직관적이고 효율적으로 데이터를 처리할 수 있도록 도와주는 것이 Stream API입니다. Stream을 활용하면 더욱 간결하고 가독성 높은 코드로 데이터를 다룰 수 있습니다.이번 포스팅에서는 Java의 Stream이 무엇인지, 사용하는 이유와 활용 방법에 대해 알아보도록 하겠습니다. Java Stream이란?`Stream API는 JDK 8 부터 추가된 기능` 중 하나입니다. `컬렉션 데이..
[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)은 여러..
[MySQL] 트랜잭션의 격리 수준 (Transaction Isolation Level)
[MySQL] 트랜잭션의 격리 수준 (Transaction Isolation Level)
2025.01.28트랜잭션의 격리 수준 (Transaction Isolation Level)은 데이터베이스에서 동시에 실행되는 여러 트랜잭션 간의 상호작용을 제어하여 데이터의 일관성을 유지하고 충돌을 방지하는 데 중요한 역할을 합니다. SQL 표준에서 정의된 격리 수준은 트랜잭션 간의 격리 정도와 성능의 균형을 결정하며, 데이터베이스 설계 및 운영에 있어 핵심적인 요소입니다. 이번 포스팅에서는 트랜잭션의 격리 수준 `Read Uncommitted, Read Committed, Repeatable Read, Serializable`에 대한 특징과 동작 방식에 대해 알아보도록 하겠습니다. 트랜잭션의 격리 수준 (Transaction Isolation Level)트랜잭션의 격리 수준(Transaction Isolatio..
[DB] 트랜잭션이란?
[DB] 트랜잭션이란?
2025.01.24많은 애플리케이션과 서비스는 데이터를 효과적으로 저장하고 관리하기 위해 데이터베이스를 사용합니다. 사용자가 동시에 데이터를 처리하는 상황에서 데이터의 무결성과 일관성을 유지 문제를 해결하기 위해 트랜잭션이 사용됩니다.이번 포스팅에서는 트랜잭션의 개념과 특징, 동작원리에 대해 알아보도록 하겠습니다. 트랜잭션(Transaction)트랜잭션(Transaction)은 데이터베이스 관리 시스템(DBMS)에서 데이터를 처리하기 위해 사용되는 작업의 단위입니다.
데이터 처리로는 `INSERT, SELECT, UPDATE, DELETE`와 같은 쿼리를 통한 연산 수행을 의미합니다. 사전적 의미로는 `거래`를 뜻하며, 데이터베이스에서 트랜잭션은 하나의 거래를 안전하고 일관성 있게 처리하도록 보장해 주는 것이라고 할 수 ..
[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`를 선택합니다. 이후 좌측 `자격 증명`탭을 선택하여 `자격 증명 생성`을 선택하여 자격 증명 생성을 시작합니다. `이메일 주소`..
[MySQL] Explain, 카디널리티 개념과 쿼리 성능 개선하기
[MySQL] Explain, 카디널리티 개념과 쿼리 성능 개선하기
2024.12.31MySQL에서 쿼리 성능을 최적화하는 첫 번째 단계는 쿼리가 어떻게 실행되는지 분석하는 것입니다. 이를 위해 `EXPLAIN` 명령어를 활용하여 쿼리 계획을 확인할 수 있습니다.이번 포스팅에서는 EXPLAIN 명령어의 사용법과 카디널리티`Cardinality`를 어떻게 해석하고 쿼리 성능 개선에 활용할 수 있는지에 대해 알아보겠습니다. 예제 테이블create table users( id bigint auto_increment primary key , nickname varchar(50) not null , email varchar(100) not null , password varchar(100) not null , created_at datetime(6) not null ,..
[SpringBoot] 다양한 동시성 제어 방법
[SpringBoot] 다양한 동시성 제어 방법
2024.12.20동시성 제어는 여러 `스레드`나 `프로세스`가 공유 자원에 접근할 때 발생할 수 있는 문제를 방지하고, 데이터의 무결성을 유지하기 위한 방법입니다. 이를 해결하기 위한 여러 가지 접근법이 있으며, 각 방법마다 특정한 상황에서 효과적인 성능을 낼 수 있습니다.이번 포스팅에서는 다양한 동시성 제어 기법에 대한 개념과 예제를 통해 동시성 문제를 해결하는 방법을 알아보도록 하겠습니다. 동시성 제어에 대해 알아보기 전 레이스 컨디션`Race Condition`, 데드락`DeadLock`이란 무엇인지 먼저 알아보도록 하겠습니다. 레이스 컨디션(Race Condition)이란?레이스 컨디션은 여러 스레드나 프로세스가 동시에 공유 자원을 액세스하고자 할 때 발생하는 문제로, 이때 자원에 대한 경쟁 상태`race`가 ..