전체보기
[Spring] @Async vs WebFlux
Spring @Async vs Spring WebFlux 글을 작성하게된 계기 실무에서 서버간 통신을 할때 비동기로 호출해야하는 경우가 있었다. 처음에는 @Async를 사용하였는데 좀 더 깊게 파보니 Spring WebFlux도 많이 사용하는 것을 확인하고 WebFlux도 동시에 써보았는데 WebFlux가 더 빠른 것을 보았다. Spring @Async 설명 @Async 어노테이션은 Spring에서 제공하는 비동기 실행 방법으로 메서드를 별도의 스레드에서 비동기적으로 실행한다. @Async는 Spring의 AOP 기능을 활용하여 메서드 호출을 비동기적으로 처리한다. 이는 스레드 풀을 사용하여 별도의 스레드에서 실행되며, 비동기 작업의 결과 또는 상태는 Future 객체를 통해 관리할 수 있다. @Asyn..
![[JAVA] GC(Garbage Collector) 동작과정, 종류, Java Default GC, Java Command](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FkLRBk%2FbtsFlT8Fci4%2FAAAAAAAAAAAAAAAAAAAAACS9KerJSLFaQa39iWHYZOPVN_zaCn9SjjQrBpokE_JV%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DlF4FpQHkh3ZTsz%252FESJ5l70JENqY%253D)
[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의 수행방식과 한계
레디스 분산락 해당 글에서는 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 내부 엔진](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fd95wWR%2Fbtsqd4oHoKh%2FAAAAAAAAAAAAAAAAAAAAADVI_SfbcPVbTx1Ti2vSunn9YfMjChlZslu2PawZANM5%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DmkDuX3HsicgzwquKEGTaxhgZmtI%253D)
[DB] MySQL 내부 엔진
강의를 듣던 중 MySQL 서버의 내부를 소개해주는 내용이 있어 정리하고자 한다. MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)이다. MySQL은 웹 애플리케이션을 위한 데이터베이스로 특히 많이 사용된다. MySQL 아키텍처 MySQL 엔진 내부 그러면 MySQL 엔진의 내부는 다음과 같이 쿼리 파서, 전처리기, 옵티마이저, 쿼리실행기를 거쳐서 스토리지 엔진으로 넘어간다. 해당 글에서는 MySQL 엔진 내부에서 어떠한 역할을 하는지 확인하려한다. 쿼리파서 SQL을 파싱하여 Syntax Tree를 만든다. 이 과정에서 문법 오류 검사가 이루어진다. 전처리기 쿼리파서에서 만든 Tree를 바탕으로 전처리 시작한다. 이블이나 컬럼 존재 여부, 접근권한 등 Semantic 오류 검사를 진행한..