Edge Computing Patterns for Backend Developers
백엔드 개발자가 알아야 할 엣지 컴퓨팅 패턴을 다룹니다. CDN 활용, Edge Functions, 지역별 라우팅부터 하이브리드 아키텍처까지 실무 가이드를 제공합니다.
백엔드 개발자가 알아야 할 엣지 컴퓨팅 패턴을 다룹니다. CDN 활용, Edge Functions, 지역별 라우팅부터 하이브리드 아키텍처까지 실무 가이드를 제공합니다.
Observability 데이터(트레이스, 메트릭, 로그)를 활용하여 프로덕션 이슈를 효과적으로 디버깅하는 방법을 다룹니다. 실제 장애 시나리오와 해결 과정을 상세히 설명합니다.
Prometheus와 Grafana를 활용하여 Spring Boot 애플리케이션의 메트릭을 수집하고 시각화하는 방법을 다룹니다. 커스텀 메트릭, SLI/SLO 대시보드, 알림 설계까지 실무 가이드를 제공합니다.
마이크로서비스 환경에서 구조화된 로깅과 Correlation ID를 구현하는 방법을 다룹니다. JSON 로깅, MDC 패턴, 로그 집계까지 실무 적용 가이드를 제공합니다.
마이크로서비스 환경에서 분산 추적을 구현하는 방법을 다룹니다. Trace Context, Span 계층 구조, 샘플링 전략까지 실무 적용 가이드를 제공합니다.
OpenTelemetry를 활용하여 Spring Boot 애플리케이션에 관측 가능성을 추가하는 방법을 다룹니다. 자동 계측, 수동 span 생성, 컨텍스트 전파까지 실무 적용 가이드를 제공합니다.
Comma.ai OpenPilot: 오픈소스 자율주행 시스템 분석 - Comma.ai OpenPilot: Open Source Self-Driving System Analysis...
Microsoft BitLocker 키와 FBI: 개발자 관점의 보안 분석 - Microsoft BitLocker Keys and FBI: Security Analysis for Developers...
Spring Boot 4.0의 주요 변경사항, 새로운 기능, 마이그레이션 가이드를 정리한다
이벤트 기반 시스템에서 스키마 진화를 안전하게 관리하는 방법을 다룹니다. Avro, Protobuf를 활용한 스키마 버전 관리, 하위 호환성 보장, Schema Registry 활용까지 실무 가이드를 제공합니다.
nvidia-smi 66일 후 멈춤 버그: 리눅스 개발자가 알아야 할 것 - nvidia-smi Hangs After 66 Days: What Linux Developers Need to Know...
OpenAI PostgreSQL 스케일링: 8억 사용자를 지탱하는 비법 - OpenAI PostgreSQL Scaling: How They Handle 800M Users...
OpenAI Codex CLI 내부 동작 분석: 에이전트 루프와 프롬프트 캐싱 - OpenAI Codex CLI Internals: Agent Loop and Prompt Caching Strategy...
Spring Boot 3.x와 Spring Security 6.x를 사용하여 JWT 기반 인증과 인가를 구현하는 방법을 정리한다
마이크로서비스 환경에서 분산 트랜잭션을 처리하는 Saga Pattern을 다룹니다. Choreography와 Orchestration 방식의 구현, 보상 트랜잭션, 상태 머신까지 실무 적용 가이드를 제공합니다.
Neo4j 그래프 알고리즘을 사용하여 친구 추천 시스템을 구현하는 방법
CQRS(Command Query Responsibility Segregation) 패턴을 통해 읽기와 쓰기 모델을 분리하는 방법을 다룹니다. 최종적 일관성(Eventual Consistency) 처리와 실무 적용 전략을 상세히 설명합니다.
Neo4j를 사용하여 소셜 네트워크의 홈 피드와 타임라인을 구현하는 방법
분산 시스템에서 데이터 일관성을 보장하는 Transactional Outbox Pattern의 구현 방법을 다룹니다. Debezium CDC를 활용한 exactly-once 의미론 구현까지 실무 적용 가이드를 제공합니다.
Neo4j에서 팔로우, 친구 요청, 상호 친구 기능을 구현하는 방법
이벤트 소싱의 핵심 개념과 Spring Boot에서의 구현 방법을 알아봅니다. Event Store 설계, Aggregate Root, Projection, Snapshotting까지 실무에서 바로 적용할 수 있는 패턴을 다룹니다.
그래프 데이터베이스로 소셜 네트워크의 사용자, 게시물, 관계를 모델링하는 방법
Spring Boot에서 Neo4j 그래프 데이터베이스를 설정하고 간단한 쿼리를 실행하는 방법
SpringBoot를 사용해서 개발을 하다보면 Exception 처리를 해야하는 경우가 생긴다. 해당하는 경우에 어떻게 예외처리하면 좋은지, 어떤 방법들이 있는지 한번 정리해보고자 한다
SpringBoot를 사용해서 개발을 하다보면 Exception 처리를 해야하는 경우가 생긴다. 해당하는 경우에 어떻게 예외처리하면 좋은지, 어떤 방법들이 있는지 한번 정리해보고자 한다
스트림 모듈을 세팅하면서 Kafka와 어떻게 SpringBoot가 커넥션을 맺고, Consumer와 Producer가 어떻게 세팅되는지 정리해보려고한다. Kafka는 로컬 카프카도 괜찮고, 서버에 띄워진 Kafka, 혹은 Docker, Confluent등등 Kafka를 지원하는 솔루션이면 모두 사용 할 수 있다. 본문은 Kafka가 모두 준비되어있다는 가정하에 작성하려고한다.
module-core에서 Customer와 Order 엔티티를 선언했는데, 이에 맞게 module-api에서는 Customer와 Order 읽어오기 / 쓰기 API를 만들어 보자.
...그래서 코어모듈에 엔티티를 만들어놓고, 각각의 모듈에서 코어모듈을 의존성으로 추가하면, 코어모듈에 있는 엔티티를 사용할 수 있다....
...멀티모듈을 적용시켜서 엔티티들을 공통적으로 사용하고, 그외의 고유한 기능들을 각각의 서버에서 사용하자는 생각이 들었다. ...
테스트코드에서 요구조건을 먼저 실현하고, 실현한 요구조건에서 실제 코드에 반영되지 않은 부분들을 하나씩 만들어가며 작업 ...
Kotlin과 Spring을 사용한 Server에 여러개의 DataSource를 사용하자. 여러개의 데이터베이스를 연결하는 ...
로그는 간단하게 말해서 연속된 데이터의 기록이라고 할 수 있다. Kotlin을 사용한 Spring에서 로그를 남겨보자
SpringBoot를 사용해서 h2데이터베이스와 관련된 테스트를 진행 해 보려고 한다
SpringBoot를 kotlin으로 작성하여 h2와 JPA를 사용해 주문모델을 구현 해 보자
API Gateway는 다수의 서버를 하나로 묶어, 외부 애플리케이션 혹은 클라이언트에 대한 하나의 진입점이라고 생각하면 된다. 외부 어플리케이션 및 외부 클라이언트들은 마이크로 서비스에 직접 엑세스 하는 것이 제한되어 있기 때문에 그 사이의 중개자 역할을 한다
Request 요청 로깅을 할 경우, 모든 REST API 컨트롤러에 로그를 남기는것도 하나의 방법이다. 하지만 모든 API 컨트롤러에 로깅을 작성하게 된다면 비효율적으로 작업이 될 수 있다. Spring Interceptor 라는 것을 사용해서, 컨트롤러의 Handler로 도착하기 전에 가로채어 따로 작업을 해 주는 방법을 정리하려고 한다
특정 시점이나 특정 시간 간격, 혹은 정해진 시간에 실행해야 하는 작업이 있을 수 있다. 이런 작업들을 '스케쥴링 된 작업' 혹은 '배치작업' 이라고 하는데 Spring에서 지원하는 방법은 크게 두 가지가 있다. 이번에는 스프링의 스케쥴링 어노테이션을 사용한 스케쥴 작업을 생성 해 보려고 한다.
빅 데이터의 세계에서 안정적인 스트리밍 플랫폼은 필수이다. 현재 가장 주목받고있는 kafka 스트리핑 플랫폼과 SpringBoot를 활용해서 간단한 Event 메시지를 주고받는 작업을 해보자
Spring Boot에서 Redis Cache를 사용하여 데이터 접근 성능을 높이는 방법을 알아봅니다.
많은 경우에 Spring은 DB에 담긴 데이터를 가져오고 전달하는 역할을 하고있는데 이 때, Redis를 가지고 데이터에 빠르게 접근하는 방법을 정리 해 보려고 한다. Redis는 데이터베이스로도 사용되고, Message Broker로도 사용되지만 Cache Manager에 더 많이 사용된다. 한번 만들어보면서 정리 해 보도록 하겠다
application.properties를 사용 해도 되지만 application.yml도 지원 하기 때문에, 새로 만들어 Hierarchy를 표현해서 보기 편하도록 작성 하는 방법도 있다. 더불어서, 이 설정파일인 application.yml의 값들을 불러와서 사용 하는 @Value 어노테이션을 간단히 정리 해 보려고 한다.
SpringBoot 와 Redis를 이용한 디저트가게 예제
파이썬으로 개발하다보면 여러가지 가상환경 매니징 패키지를 마주하게 된다. 이번에는 패키지의 버전까지 관리 해 주는 새로운 친구인 poetry를 도입 해 보려고 한다.
Spring Validation이란? validation이란 프로그래밍에 있어서 가장 필요한 부분이다. Java/Kotlin 에서는 null값에 대해 접근하려고 할 때, null point exception이 발생한다. 이런 부분을 방지하기 위해 미리 검증하는 과정을
Docker는 인프라적인 요소들을 코드로 세팅 할 수 있는 가장 좋은 도구라고 생각한다. Docker를 사용해서 컴퓨터 내에 설치 하기 귀찮은(?) 데이터베이스들을 세팅 해 보려고 한다.
사실상 코드는 책에서 제공 해 주는 코드를 실행하기 때문에, 주의 해 주어야 할 것은 Maven 설정을 잘 해주는 것과 Java 환경설정, 그리고 JAR 파일을 잘 말아주는 것 밖에는 할 것이 없었다.
<Stream Processing with Apache Flink: Fundamentals, Implementation, and Operation of Streaming Applications> 를 참고했으며 직접 개발환경을 세팅 해 보고 작성했다. Docker를 기반으로 작업을 하려고 한다. Docker를 다룰 줄 알거나 설치가 되어 있다는 가정 하에 작업을 해 보려고 한다
SpringBoot Exception 처리하기 - ControllerAdvice, ExceptionHandler
2020년도 2월부터 2022년도 2월까지 2년여간의 여정으로 퇴사를 결정했다. 많은 것을 배웠고, 많은 것을 느꼈다.
호스트 및 MongoDB 인스턴스에 대한 예기치 못한 문제로 인하여 프로세스가 down되는 등 장애 상황이 발생하거나 데이터 유실이 발생 한다. 이를 대비하기 위해 여러 다른 종류의 DBMS와 비슷하게 MongoDB 또한 복제 구성을 통한 DB HA(High Availability) 사용 해야 한다.
Python에서 Kinesis Datastream에 연동하여 데이터를 주고/받는 과정을 정리 해 보자
SpringBoot를 사용해 H2 DB 연결하고 테스트하기
마찬가지로 @RestController 어노테이션을 사용해서 만든 controller 내부에서 사용 하려고한다.
Flask 프로젝트를 체계적으로 구성하는 방법. pipenv, Blueprint, 환경설정 분리 등을 활용해 확장 가능한 구조를 만들어본다.
Kotlin을 사용해서 SpringBoot를 개발 해 보려고 한다.
ELK(Elasticsearch, Logstash, Kibana) 스택을 Docker로 구성하고 Flask 애플리케이션의 로그를 수집하고 시각화하는 방법을 알아본다.
React의 State와 Props의 차이점, 클래스형과 함수형 컴포넌트에서의 State 사용법을 알아보자.
React를 시작하기 위한 기본적인 내용들을 정리해 보았다. nvm과 npm을 사용해서 React를 설치하고 실행하는 방법을 알아보자.
React의 함수형 컴포넌트와 클래스형 컴포넌트, Props 사용법을 알아보자.
Apache Kafka는 실시간으로 기록 스트림을 게시, 구독, 저장 및 처리할 수 있는 분산 데이터 스트리밍 플랫폼이다. Docker를 사용해서 Kafka 환경을 구축하고 기본적인 메시지 송수신을 테스트해본다.
Python을 사용해서 Kafka consumer와 producer를 구현해본다. kafka-python 라이브러리를 활용하여 메시지를 발행하고 구독하는 방법을 알아본다.
티스토리에서 나만의 블로그로 이전하는 이유와 새로운 시작에 대한 다짐을 담은 글.
데코레이터란 함수에 반복적인 기능과 역할을 할 수 있도록 만들어주는 기능이다. 함수 내부의 로직을 수정하지않고, 기능을 추가하거나 수정 하고싶을 때 사용한다.
플라스크는 미니멀하게 프로젝트를 시작 할 수 있어서, 초기 진입 시에 세팅과 공부 할 것들이 비교적 적은 편이라고 생각했다. 플라스크로 현업에서, 그리고 사이드 프로젝트로 개발을 진행 하다 보니 미니멀하게 금방 작업 하는 것에는 도움이 되었지만, Django나 Spring처럼 구조화를 하기는 조금 어렵다는 생각이 들었다.
Docker로 올린 서버는 Debug모드로 실행 한다면, Docker 내부에 들어가서 코드를 고쳐줘야 하는 번거로움이 있다. Docker 내부에서 수정한 파일은, Docker를 내리거나 지우면 없어지며 혹은 local의 git과 연동되지 않는 문제점이 있다.