UPDATE 한 줄로 끝내는 동시성 문제
·
프로젝트
선착순 이벤트 시스템을 설계한다고 가정해보자. 요구사항은 아래와 같다.요구사항:매일 제한된 수량의 무료 체험 제공선착순 N명 정확히 선정1명만 1개만 주문 가능동시 요청 처리 필수일별 재고 수량 기록 필요단일 데이터베이스 시스템, 여러 개의 서버 컨테이너가장 중요한 것은 동시성 제어이다.100개의 재고가 있을 때 동시에 1,000명이 요청하면 어떻게 정확히 100명에게만 제공할 수 있을까? 이때 일반적으로 제시되는 해결책들은 아래와 같다.비관적 락(SELECT FOR UPDATE)낙관적 락(JPA @Version)데이터베이스 네임드 락Redis 분산 락하지만 단일 데이터베이스 환경에서 분산 락은 오버엔지니어링일 수 있고, 낙관적 락은 재시도 로직이 복잡하며, 비관적 락은 대기 시간이 길어질 수 있다.이 ..
분산 캐시 동기화 문제, Redis Pub/Sub으로 해결하기
·
프로젝트
너무 느린 외부 API우리 팀은 외부 시스템과의 연동 프로젝트를 진행하게 되었다. 요구사항은 간단해 보였다. "해당 일자에 주문이 가능한지 외부 API를 통해 확인할 수 있어야 한다." 하지만 실제로 구현해보니, 고객에게 정확한 정보를 전달하기 위해선 한 화면에서 40~60건의 날짜별 배송 계획을 한 번에 조회해야 했다. 병렬 처리를 적용했음에도 불구하고 API 응답 시간은 500ms에서 1초, 심지어 요청이 여러 번 겹치면 그 이상 소요되었다. 연동사에서 제공해준 bulk API를 사용했는데 오히려 더 느려졌다.사용자가 주문 가능 일자를 확인할 때마다 1초 이상을 기다려야 한다니, 이건 명백히 사용성에 심각한 문제였다. 우리는 데이터가 일자 단위로 예측 가능하고 실시간이 덜 중요하다는 점을 주목했다.캐..
당신의 메모리는 안녕하십니까?
·
Spring/Spring Boot
당신의 애플리케이션은 안전한가요?"혹시 서비스 운영 중 아무런 이상이 없어 보이던 시스템이 갑자기 느려지고, 응답 시간이 증가하며, 결국 장애로 이어진 경험이 있지는 않나요? 우리가 흔히 간과하는 작은 코드 한 줄이 애플리케이션 성능 저하와 서버 장애를 초래할 수 있다는 사실, 알고 계셨나요?" 이런 문제는 대부분 메모리 관리의 작은 실수에서 시작된다. 애플리케이션이 실행되는 동안 메모리는 끊임없이 할당되고 해제된다. 특히 Java의 JVM 메모리 관리 방식을 제대로 이해하지 못하면, 시스템 성능 저하와 장애를 초래하는 메모리 누수(memory leak)가 발생하여 시스템 성능이 점점 저하될 수 있다.위 그래프는 JVM 메모리 사용량을 보여준다. 특정 시점에 메모리 사용량이 급격히 증가하고 있다. 많은 ..
Udemy - Java 멀티스레딩, 병행성 및 성능 최적화
·
후기/Udemy 리뷰
글또 9기에서 지원받은 Udemy 강의 리뷰입니다. 강의를 지원받는 대신! 리뷰를 작성하기로 했다는 점! 강의를 듣기 전에 자바의 기본적인 문법과 원리에 대해 이해하고 있어야 한다. 자바로 어플리케이션을 개발해본 경험이 있다면 강의를 들을 때 더 이해가 잘 것이다. 운영체제를 미리 공부해둬야 강의를 수월하게 이해할 수 있다. 개인적으로는 운영체제를 공부하지 않았다면 강의 내용을 이해하기 어려웠을 거라고 생각한다. 강의 구성 강의: 링크 강의는 먼저 이론을 설명한 뒤 실습에 들어가는 형식으로 진행되었다. 중간중간 이론 퀴즈와 실습 문제가 제공한다. 1. 스레드의 개념, Runnable과 Thread 강의를 시작하기 전 가장 많이 사용하게 될 Runnable과 Thread의 기본적인 사용 방법을 알려준다. ..
2023 Spring Camp 근데 이제 현업 경험을 곁들인
·
활동/컨퍼런스
스프링 캠프? 3월에 막 입사하여 신입 개발자로 근근이 살아던 중 인프런에 재직 중인 부스트캠프 동기 김00 군에게 연락이 왔다. 아래 링크를 던져주면서 참가할 생각이 있냐고 물어봤다. [오프라인] 스프링캠프 2023 - 인프런 | 강의 애플리케이션 서버 개발자들과 함께 가치있는 기술에 관한 정보과 경험을 '공유'하고, 참가한 사람들과 함께 '인연'을 만들고, 시끌벅적하게 즐길 수 있는 개발자들을 위한 '축제'를 목표로 하는 www.inflearn.com 현재 회사의 핵심 기술스택이 스프링이었음에도 스프링 알못인 나는 스프링에 대해서 하나라도 더 주워들어야 했기 때문에 그 친구와 함께 참가하기로 결정했다. 스프링 캠프는 한국 스프링 사용자 모임(KSUG)에서 매년 진행하는 비영리 컨퍼런스이다. 가격은 3..
java.lang.SecurityException: class "org.hamcrest.Matchers"'s signer information does not match signer information of other classes in the same package
·
JAVA/오류해결
😢 오류 내용 java.lang.SecurityException: class "org.hamcrest.Matchers"'s signer information does not match signer information of other classes in the same package at java.lang.ClassLoader.checkCerts(Unknown Source) at java.lang.ClassLoader.preDefineClass(Unknown Source) at java.lang.ClassLoader.defineClassCond(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.Secu..