전체 글

· Back-end
해당 글은 개발자를 위한 레디스 책을 참고하여 작성되었습니다! 들어가며Redis는 활용도가 높은 인메모리 캐시입니다. 모든 데이터를 메모리에 저장해 빠른 입출력을 지원하며 처리속도도 높습니다. 또 다양한 자료구조를 지원해 여러 상황에 활용할 수 있고, 캐시 서버, 메시지 브로커 등으로도 활용할 수 있습니다. 이렇게 활용도가 높은 Redis는 잘 이해하지 못하고 사용하다간 서비스의 큰 장애를 불러올 수 있습니다. 앞서 말했듯 모든 데이터를 메모리에 저장하기 때문에 레디스 서버를 재시작하면 모든 데이터가 소멸됩니다. 레디스는 데이터 백업을 위해 RDB, AOF등의 솔루션을 제공하여 데이터 영구 저장을 지원하기도 하며 메모리 관리 솔루션도 제공합니다. 쉽게 무너지지 않은 시스템을 구축하기 위해서는 가용성이 높..
· Back-end
들어가며 배치 애플리케이션을 개발 프래임워크인 Spring Batch의 퍼포먼스를 향상하기 위한 여러 방법과 실제 적용 예시를 소개드리겠습니다. 실제 적용 예시는 전국 단위 스포츠 행사 플랫폼 GOGO를 개발하면서, 배치성 로직에서 사용된 Spring Batch의 성능을 개선한 상황입니다. Spring Batch 먼저 Spring Batch 프래임워크의 구조를 간단히 설명하겠습니다. JobRepository는 Job에 대한 상태를 저장하는 저장소입니다. JobLauncher는 Job 인스턴스를 실행합니다. Job은 하나의 배치 처리 단위이며 N개의 Step을 가질 수 있습니다. Step의 구성요소는 ItemReader, ItemProcessor, ItemWrtier를 갖습니다. 간단하게 ItemRead..
· Back-end
들어가며Kafka와 같은 큐 서비스를 사용할 때 메시지가 유실되거나 중복처리될 수 있는 상황이 있습니다.어떤 구간에서 발생하고 어떻게 대처할 수 있는지 알아보겠습니다. 메시지 전달 보증 수준일반적인 큐 서비스에서 메시지 전달 보증 수준은 아래와 같습니다.At Most once: 1회 전송을 시도. 메시지가 중복되지 않지만 유실될 가능성 있음.At Least once: 최소 1회 전송. 메시지가 절대 유실되지 않지만 중복 처리될 수 있음.Exactly once: 1회만 전송. 메시지가 절대 유실되지 않으며 컨슈머에서 중복처리 하지 않음.Kafka의 특징 중 하나가 Exactly-once를 보장할 수 있는 것입니다. (3.0 버전 이후로 Default 설정이 At Least once에서 Exactly onc..
· Back-end
들어가며동시성 문제는 서버 애플리케이션을 개발 할 때 항상 고민해야하는 문제입니다. 공유 자원을 여러 스레드가 접근하려할 때 경쟁상태가 발생하여 lost update와 같은 이상 현상이 발생할 수 있습니다. 이러한 동시성 처리를 위해 데이터베이스 Lock을 사용할 수 있습니다. Spring Data Jpa를 사용한다면 어노테이션으로 간단하게 낙관적 락, 비관적 락을 손쉽게 적용하여 동시성 처리를 할 수 있습니다. @Transaction 어노테이션 속성으로 isolation 단계를 SELIALIZATION으로 설정하여 데이터 정합성을 보장할 수도 있습니다. 추가로 자바 문법에서 지원하는 메서드에 synchronized 키워드를 붙혀 내부적으로 모니터락을 사용하여 동시성 처리를 할 수 있지만, scale-o..
· Back-end
Spring WebFlux, MVC Stack에 대해 WebFluxSpring WebFlux는 reactive web stack 프래임워크이며, non-blocking I/O를 지원하고 event-loop 방식으로 적은 양의 스레드로 대용량 요청을 처리할 수 있습니다.WebFlux 스택을 기존에 사용하는 MVC 모델과 비교하며 설명하도록 하겠습니다. MVC Thread Per Request 모델Spring MVC는 요청을 처리할 때 blocking 방식으로 처리합니다. (DB I/O, HTTP req ex. RestTemplate)MVC 서버는 요청이 들어올 때 ThreadPool에서 Thread를 꺼내서 요청 하나에 할당합니다. (thread per request) 일반적인 경우에는 이러한 방식이 문제..
· Back-end
들어가며 교내 입학지원시스템인 Hello, GSM 서버 개발 중에 겪었던 문제점들 중 하나였던 싱글톤 빈 동시성 문제와 해결과 개선 방안에 대해 소개드리겠습니다. 간단하게 Hello, GSM 서비스에 대해 소개하자면, 광주소프트웨어마이스터고등학교 입학 원서를 제출, 합격자 관리, 합격자 조회 등등 여러 편리한 기능을 제공하는 서비스입니다. 성적 계산식 이슈 릴리즈를 2주 정도 남겨둔 상황에서 상당히 크리티컬한 이슈가 발생했습니다. 입학지원시스템에서 가장 중요하다고 할 수 있는 성적 계산식에서 발생한 문제였습니다. 비즈니스상 성적 환산점 만점은 300점이지만, 무슨 이유에서인지 300점을 초과하는 case가 발생했습니다. 하지만 400줄이 넘어가는 계산식 클래스와 비즈니스 요구사항이 덕지덕지 뭍어있는 ..
· DEVELOP
개요DDD (Domain Driven Design)는 비즈니스 영역을 의미하는 도메인을 중심으로 하는 개발 방식입니다. DDD에 대해 자세하게 알아보기 전에 DDD에 대해 자주 하는 오해가 있는 것 같은데요. DDD를 구현하려면 이러이러한 구조를 따라야해! 가 아닌 도메인에 대한 문제를 해결하기 위해 도메인과 비즈니스 로직에 초점을 맞춰 개발할 수 있게 도와주는 도구입니다. DDD의 목표는 낮은 결합도, 높은 응집도 입니다. DDD를 통해 도메인 간의 경계를 나눠 응집도 높은 애플리케이션을 설계할 수 있게 도와줍니다. Ubiquitous LanguageDDD의 특징 중 하나는 유비쿼터스 언어를 사용하는 것입니다. 유비쿼터스 언어는 프로젝트에 참여하는 모든 이해 관계자들이 사용하는 비즈니스 도메인 용어를..
· Back-end
들어가며서버 애플리케이션의 규모가 커질 수록 트래픽이 많아지며 데이터베이스에 쓰기, 수정, 읽기 등등의 작업이 빈번하게 일어나게 됩니다. 이러한 상황에서 서비스에 예상치 못한 장애가 발생할 수 있습니다. 그렇기 때문에 높은 트래픽의 상황에 대비하여 시스템의 확장성, 고가용성, 성능을 높히기 위한 노력이 필요합니다. 데이터베이스의 성능 향상을 위한 기술은 파티셔닝, 샤딩, 레플리케이션에 대해 알아보겠습니다. 파티셔닝데이터베이스 파티셔닝은 데이터베이스의 테이블을 분활하여 저장하는 기술입니다. 데이터베이스에 데이터가 많이 저장되어있다면 그만큼 인덱스 자료구조의 크기가 큰 것이며 쓰기 작업시 B-Tree 재구조화 시간도 오래걸리는등 성능이 많이 떨어지게 됩니다.파티셔닝은 수직(Vertical) 파티셔닝, 수평(..
신희성
장미정원