전체 글

전체 글

    [JAVA] GC(Garbage Collector) 동작과정, 종류, Java Default GC, Java Command

    [JAVA] GC(Garbage Collector) 동작과정, 종류, Java Default GC, Java Command

    GC(Garbage Collector) 동적으로 할당한 메모리 영역 중 사용하지 않는 영역을 탐지하여 해제하는 기능 GC 종류 SerialGC 단일 스레드로 작동한다. JVM 옵션: -XX:+UseSerialGC ParallelGC 여러 개의 스레드를 사용하여 Young Genertaion영역에서 가비지 컬렉션을 수행한다. JVM 옵션: -XX:+UseParallelGC Parallel Old GC Parallel GC의 구세대 버전으로 Old Generation 영역에서 병렬로 가비지 컬렉션을 수행한다. JVM 옵션: XX:+UseParallelOldGC JVM 옵션: XX:+UseParallelOldGC Concurrent Mark Sweep(CMS) GC 낮은 중지 시간을 목표로 하는 멀티프로세싱 ..

    레디스 RedLock의 수행방식과 한계

    레디스 RedLock의 수행방식과 한계

    레디스 분산락 해당 글에서는 Redis의 분산락에 대한 개념을 설명한다. 글을 쓰게 된 이유 현재 진행하고 있는 프로젝트에서 선착순 이벤트를 진행하는데 현재 소프트웨어 아키텍쳐로는 선착순에 대해서 보장할 방법이 없었다. MySQL에 부담을 주기에는 사이드 이펙트가 크고 DB를 하나의 백엔드만 사용하고 있는 것이 아니고 다른 서버에서도 사용하고 잇기에 만약 DB에 문제가 생길 경우, 이펙트가 큰 상황이라서 DB 부담하는 것은 보기에서 제거를 했다. 앞으로의 기획 로드맵과 현재의 기획 부분에서 Redis가 적합한 선택이 될 것 같아 Redis를 선택하여 도입하였다. 도입과 동시에 선착순 이벤트에 대해서 정상적인 처리가 이루어졌지만 급하게 적용한 탓에 레디스의 분산락에 대한 이해가 부족하여 해당 개념에 대해서..

    [DB] PK AutoIncrement VS UUID

    테이블을 설계하는 과정에서 PK에 대한 고민을 많이 갖게 되었다. PK를 부여하는 방식에 여러 방식이 있지만, 대표적인 두가지는 UUID와 AI(Auto Increment)를 대표적으로 사용한다. 나는 현재 AI(Auto Increment)를 사용 중이다. AI를 선택하게 된 이유는 현재 서비스는 하나의 데이터베이스에서 서비스를 운영중이기에 PK생성을 DBMS에 이관하여도 괜찮다고 판단하였다. 하지만, 여러개의 DBMS에서 사용할 경우 한 row의 고유한 값을 보장할 수 없다. 해당 고민을 하면서 AI와 UUID에 대한 어떠한 트레이드 오프가 있는지 정리해보고자 한다. Auto Increment데이터베이스에서 사용되는 속성으로, 특정 필드의 값이 자동으로 증가하는 기능이며 해당 기능은 테이블에 새로운 레..

    [DB] MySQL 내부 엔진

    [DB] MySQL 내부 엔진

    강의를 듣던 중 MySQL 서버의 내부를 소개해주는 내용이 있어 정리하고자 한다. MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)이다. MySQL은 웹 애플리케이션을 위한 데이터베이스로 특히 많이 사용된다. MySQL 아키텍처 MySQL 엔진 내부 그러면 MySQL 엔진의 내부는 다음과 같이 쿼리 파서, 전처리기, 옵티마이저, 쿼리실행기를 거쳐서 스토리지 엔진으로 넘어간다. 해당 글에서는 MySQL 엔진 내부에서 어떠한 역할을 하는지 확인하려한다. 쿼리파서 SQL을 파싱하여 Syntax Tree를 만든다. 이 과정에서 문법 오류 검사가 이루어진다. 전처리기 쿼리파서에서 만든 Tree를 바탕으로 전처리 시작한다. 이블이나 컬럼 존재 여부, 접근권한 등 Semantic 오류 검사를 진행한..

    [모니터링] loki, Promtail를 통해 log 모니터링

    [모니터링] loki, Promtail를 통해 log 모니터링

    프로젝트를 진행하면서 어플리케이션, CPU 모니터링에 대해서는 진행중이었으나 WAS에 에러가 발생하면 이를 로컬 환경에서 같이 에러시연을 하는데 문제는 에러 시연이 발생하지 않는 경우에 로그를 직접 보거나 프로세스의 콘솔을 확인하는 상황도 종종 발생했다. Log 모니터링을 찾아보던 중 elasticsearch와 Loki가 나왔다. 현재 프로젝트에는 grafana가 적용되어 있고 이를 기반으로 작성하기는 loki가 더욱 적용하기 편해보였다. Loki 특징 수평 확장 다중 로그 집계 시스템 대규모 시스템에도 효율적인 데이터 처리 오픈소스 loki는 promtail을 통해 로그를 가져와서 로그를 저장한다. promtail은 그라파나 로키(Loki)의 로그 수집 에이전트로 사용되는 오픈 소스 소프트웨어이다. 역..