세마포어에서 서버까지: 논블로킹 패러다임과 Redis의 기원
·
CS
서론현대 소프트웨어 아키텍처의 핵심에는 동시성과 데이터 처리라는 두 가지 근본적인 과제가 자리 잡고 있다. 초당 수백만 건의 요청을 처리하는 웹 서버부터 실시간 데이터 분석 플랫폼에 이르기까지, 효율적인 시스템 설계는 프로세스가 서로 상호작용하고 입출력(I/O) 작업을 처리하는 방식을 어떻게 모델링하느냐에 달려 있다.본 글에서는 블로킹/논블로킹 및 동기/비동기 개념에 대해 분석하고, 그것이 실제 시스템에서 어떻게 적용·발전되어 왔는지 정리해보려 한다.먼저, 두 가지 핵심 질문에서 출발했다.블로킹과 논블로킹, 동기와 비동기라는 개념은 어떤 배경에서 탄생했는가?오늘날 널리 쓰이는 Redis는 어떤 원리로 동작하고, 왜 이런 아키텍처를 택했는가?겉으로는 동떨어져 보일 수 있지만, 논블로킹 처리의 뿌리를 뒤지다..
MockK 오픈소스에 BDD 스타일 API 기여하기
·
카테고리 없음
들어가며오늘은 Kotlin 테스트 라이브러리인 MockK에 BDD(Behavior-Driven Development) 스타일 API를 추가하는 오픈소스 기여 과정을 공유하려고 합니다. 이 과정에서 오픈소스 프로젝트에 기여하는 방법과 함께 Kotlin 멀티플랫폼 프로젝트 구조에 대해서도 살펴볼 수 있었습니다.배경: MockK와 BDDMockK는 Kotlin을 위한 강력한 모킹(mocking) 라이브러리로, JUnit과 함께 사용하여 단위 테스트를 작성할 때 많이 사용됩니다. 하지만 기존 MockK의 API는 BDD 스타일과는 약간 다른 네이밍 컨벤션을 사용하고 있었습니다.// 기존 MockK 스타일every { service.getValue() } returns "test"verify { service.g..
Pinpoint APM 설치 및 설정 가이드
·
카테고리 없음
배경 및 필요성LMS 플랫폼의 성능 모니터링과 장애 대응을 위해 Pinpoint APM을 도입했다. Pinpoint는 네이버에서 개발한 오픈소스 APM으로 분산 추적, 성능 모니터링, 에러 추적 등의 기능을 제공한다.도입 목표실시간 성능 모니터링: 응답시간, TPS, 에러율 등 핵심 지표 추적분산 추적: 마이크로서비스 간 호출 관계 및 성능 분석장애 감지: 시스템 이상 상황 조기 발견 및 알림성능 최적화: 병목 지점 식별 및 개선 근거 확보아키텍처 구성인프라 환경Pinpoint 서버: Proxmox 가상화 환경에서 Docker Compose로 구성애플리케이션: AWS Elastic Beanstalk에서 Pinpoint Agent 연동데이터베이스: HBase (트레이스 데이터), Apache Pinot (..
Proxmox LXC 컨테이너 비밀번호 까먹었을 때(접속 및 초기화)
·
카테고리 없음
Proxmox LXC 컨테이너에서 root 비밀번호를 까먹었을 때 아래와 같이 입력하면 해당 터미널에 접속할 수 있다.pct exec /bin/bash 또는, 아래 명령어를 입력하여 해당 컨테이너의 비밀번호를 초기화시킬 수 있다.pct exec passwd 출처: https://pve.proxmox.com/wiki/Root_Password_Reset
프론트엔드에서 백엔드 API 연동 (swagger-typescript-api)
·
카테고리 없음
swagger-typescript-api 통합 구현개요매번 API 스펙 변경에 따라 수동으로 타입 정의와 API 클라이언트를 업데이트하는 복잡성을 해결하기 위해 swagger-typescript-api 라이브러리를 도입하여 자동화된 API 클라이언트 생성 시스템을 구현했습니다.문제 정의 및 배경기존 문제점API 스펙 변경 시 수동으로 타입 정의 업데이트 필요각 API 엔드포인트별로 개별 서비스 클래스 관리타입 불일치 및 API 호출 오류 발생 가능성반복적인 boilerplate 코드 작성해결하고자 하는 문제API 스펙 변경에 대한 자동화된 타입 생성일관된 API 클라이언트 인터페이스 제공개발 생산성 향상 및 오류 감소기술적 대안 분석대안 1: swagger-typescript-api장점완전 자동화된 타입..
RDS 데이터베이스 모니터링 구현 (Prometheus/Grafana)
·
카테고리 없음
개요Spring Boot 애플리케이션에서 RDS MySQL 데이터베이스의 성능과 상태를 실시간으로 모니터링하기 위한 메트릭 시스템을 구현했다. HikariCP 커넥션 풀, Hibernate JPA, 그리고 데이터베이스 테이블 수준의 메트릭을 Prometheus/Grafana를 통해 수집하고 시각화한다.구현된 모니터링 컴포넌트1. HikariCP 커넥션 풀 모니터링설정 위치: CoreDataSourceConfig.kt@Beanfun coreDataSource( @Qualifier("coreHikariConfig") config: HikariConfig, meterRegistry: MeterRegistry): HikariDataSource { // HikariCP 메트릭 활성화 conf..
[Claude Code] Error: No suitable shell found. Claude CLI requires a Posix shell environment. Please ensure you have a valid shell installed and the SHELL environment variable set.
·
카테고리 없음
Claude code가 윈도우에서 기존엔 wsl2 환경에서만 사용이 가능했는데, 어제부터 git bash 환경에서도 사용이 가능하다해서 설치를 해보았다. Error: No suitable shell found. Claude CLI requires a Posix shell environment. Please ensure you have a valid shell installed and the SHELL environment variable set.다만 위와 같은 에러가 발생하였다. 먼저 경로 상 문제가 되는 line에 직접 찾아가본다. 아래와 같은 line에서 에러가 발생한다고 나와있다.C:/Users/유저명/AppData/Roaming/nvm/v22.15.0/node_modules/@anthropic-a..
Spring Boot 멀티모듈
·
카테고리 없음
서론현대의 소프트웨어 개발에서 애플리케이션의 복잡성은 지속적으로 증가하고 있다. 단일 모듈로 구성된 전통적인 모놀리식 아키텍처는 초기 개발 속도는 빠르지만, 프로젝트 규모가 커질수록 여러 한계점들이 드러나게 된다. 이러한 문제를 해결하기 위한 접근법 중 하나가 바로 멀티모듈 아키텍처이다.본 글에서는 Spring Boot 기반의 서버 개발 과정에서 적용한 멀티모듈 아키텍처의 설계 원칙과 실제 구현 사례를 통해, 멀티모듈 아키텍처의 장단점과 적용 방법을 상세히 분석해보고자 한다.멀티모듈 아키텍처란 무엇인가정의와 개념멀티모듈 아키텍처는 하나의 큰 애플리케이션을 기능적으로 독립적인 여러 모듈로 분리하여 구성하는 아키텍처 패턴이다. 각 모듈은 명확한 책임과 역할을 가지며, 모듈 간의 의존성은 명시적으로 정의된다...
vscode (cursor) Open Folder시 새 윈도우에서 열기
·
카테고리 없음
vscode에서 File -> Open Folder시 기존 윈도우에서 열리는 문제가 있어서 불편함이 있었다. vscode 설정에서 openFoldersInNewWindow를 검색한 후 on으로 바꿔주자!
Cursor에 playwright MCP 서버 연동
·
카테고리 없음
사전 준비 - 크로미윰 브라우저- Node.js Cursor IDE 실행F1을 눌러 Open MCP Settings 탭을 열어준다."Add new MCP server"를 클릭한다. .cursor/mcp.json를 아래와 같이 구성해준다.{ "mcpServers": { "playwright-mcp": { "command": "npx", "args": [ "-y", "playwright-mcp" ] } }} 잘 작동하는 모습을 볼 수 있다.