전체 글 27

컴퓨터는 하나인데 왜 IP는 여러개일까? | Network Interface, InetAddress

🔍 목차# 00. 배경 - `InetAddress`# 01. Network Interface# 02. 여러 Network Interface를 두는 이유# 03. 다시 `InetAddress` # 00. 배경 - `InetAddress` 업무 중 여러 개의 서버를 A그룹, B그룹으로 묶어 각각 다른 설정값을 적용해야 할 일이 있었습니다.이 부분을 자동화하기 위한 작업을 진행했고, 저의 설계에서 핵심 아이디어는 자바 net 패키지의 `InetAddress` 클래스를 이용해 프로세스별로 떠있는 서버의 IP를 읽어오는 것이었습니다.InetAddress.getLocalHost().getHostAddress(); 라이브 테스트 단계에서 실제 운영 서버에서는 제가 기대하던 IP가 읽어지지 않더라고요.원인을 추적해 ..

CS&Network 2026.08.31

유스케이스 코드와 메트릭 코드 분리하기 | Spring AOP, Extract Class

🔍 목차# 00. 배경## 00-1. 쿠폰 생성 유스케이스## 00-2. 메트릭 집계## 00-3. 여러 책임을 한 번에 지게 되는 쿠폰 생성 클래스# 01. AOP## 01-1. AOP 개요## 01-2. AOP 핵심 개념## 01-3. AOP로 메트릭 계측하기## 01-4. AOP가 해결하지 못하는 부분# 02. Extract Class ## 02-1. Extract class 개요## 02-2. Gauge 상태 관리 책임 추출## 02-3. 한 번의 실행을 표현# 03. 최종 쿠폰 생성 유스케이스 코드 # 00. 배경 ## 00-1. 쿠폰 생성 유스케이스 아래 코드는 평범한(?) 쿠폰 시스템의 쿠폰 생성 유스케이스 흐름입니다.@Component@Transactional(readOnly = true..

Spring 2026.08.18

Facade 잘 설계하기

디자인 패턴을 공부하면서 접하게 되는 Facade 패턴은 이걸 패턴이라고 말하는 게 맞나 싶을 정도로 이해가 쉽고 구조가 단순합니다.그러면서도, 백엔드 웹개발을 하면서 가장 자연스럽게 자주 사용되는 패턴이기도 하는데요.레이어드 기반의 아키텍처에서 서비스 로직을 오케스트레이션하기 위해 애플리케이션 레이어에 패서드를 두는 구조를 종종 볼 수 있습니다.늘 Facade 계층을 두고 개발을 해오면서 관련 자료를 찾아보려고 했지만 여러 글에서는 단순히 Facade 패턴이 어떤 패턴인지에 대한 정보만 전달할 뿐, 이 Facade를 어떻게 잘 설계해야 할까에 대한 고민이나 정리를 글로 드러낸 자료가 없더라고요.자연스럽게, 저의 주관대로 좋은 Facade, 나쁜 Facade를 정의하게 되면서, 저만의 Facade 작성 ..

Design Pattern 2026.05.06

극단적으로 클린한 Presentation Layer 설계 | Command Bus & HandlerMethodArgumentResolver

🔍 목차#00. 개선 전 Presentation Layer Design#01. Command Bus#02. HandlerMehtodArgumentResolver#03. 개선 후 Presentation Latyer Design # 00. 개선 전 Presentation Layer Design 하나의 요청에 대한 유스케이스의 흐름을 Facade에서 정의합니다.이 Facade의 입/출력 값 객체의 네임 관례는 저는 Command'와 'Result라는 이름으로 따르고 있고요.Facade로 해당 요청에 대해 필요한 데이터를 넘기기 위해 컨트롤러에서 파라미터로 받은 `Request`와 `Authentication` 객체를 `CommandMapper`로 넘겨 Command 객체로 조립합니다.서비스 클래스들을..

Java 2026.04.21

싱글톤 할 바에 Enum

헤드퍼스트 디자인패턴 책을 보는데 5장 싱글톤 부분에 이런 내용이 있더라고요."Enum을 사용하면 싱글톤의 동기화 문제, 클래스 로딩 문제, 리플렉션, 직렬화와 역직렬화 문제를 해결할 수 있다."아무래도 책이 Java 교재가 아니라 디자인패턴 책이다 보니, 저정도의 언급만 있고 구체적인 이유까지는 기술이 안되어있는데요.그래서 궁금함에 제가 알아본 내용을 정리해보겠습니다. 🔍 목차00. Singleton00-1. Singleton이란01. 안티패턴 Singleton01-1. 인스턴스를 언제 만들 것인가01-2. 리플렉션01-3. 직렬화 & 역직렬화02. Enum 싱글톤02-1. Enum은 멀티스레드 인스턴스 생성 문제에서 자유롭다02-2. Enum은 리플렉션에도 강하다02-3. Enum은 직렬화와 역직..

Design Pattern 2026.04.06

Gradle은 어떻게 편의를 제공하는가

너무 좋은 세상에 태어나서 개발을 시작한 덕에, 이미 오랜 시간 다듬어져 온 고수준 기술들을 사용하여 비교적 쉽게 개발을 하고 있는데요.그 고수준의 기술들이 대체 어떤 귀찮고, 어떤 복잡한 일을, 어떻게 대신함으로써 우리에게 편의를 제공하는지 모르는 채로 사용법만 익혀서 개발한다면, 그런 기술들은 그저 마법 같은 현상으로만 느껴지게 될 것입니다.하지만 기술은 마법이 아니기에, 모든걸 다 해결해 줄 수 없는데요, 문제가 발생하거나 디테일한 튜닝이 필요한 경우 다시 로우 레벨로 내려가 조작해야 하는 상황이 있을 수 있습니다.때문에 기술의 사용법 만큼이나 이해도 중요하다고 생각합니다.서론이 길었는데, 평소에 제가 마법 같다고 느꼈던 것들 중 하나인 Gradle에 대해 이해하는 시간을 가져보고자 앞선 이야기를 ..

기타 skills 2026.03.25

자바 long으로 표현되는 값을 double에 담아도 될까?

`long`으로 표현되는 값을 `double`에 담아도 될까요?처음 이 질문을 봤을 때, 직관적으로는 상관이 없을 듯해 보였습니다.`long`은 8byte의 정수형을 담는 타입이고,`double`은 같은 8byte 크기의 실수형을 담는 타입이며, 정수가 실수의 부분집합인 데다가 표현 범위도 `long`보다 `double`이 훨씬 크기 때문입니다.근데 그런 뻔한 설명이 답이라면, 이 질문이 존재하지도 않았겠구나, 분명 어떤 문제가 있겠구나 하는 생각이 들었고, 이 질문에 대해 확실한 답을 하기 위해 알아본 내용을 글로 정리해보고자 합니다. 🔍 목차# 00. 자바의 정수형과 실수형# 01. 자바에서 0.1은 0.1이 아니다# 02. 부동소수점# 03. 부동소수점과 정밀도# 04. long으로 표현되는 값을..

Java 2026.02.08

내가 보려고 정리하는 Redis 자료구조 (Strings / Hashes / Sets / Sorted Sets / Lists)

Strings텍스트, 직렬화된 객체, 바이너리 배열을 포함한 바이트 시퀀스를 저장하는 자료구조Redis 키에 연결할 수 있는 가장 간단한 값 유형활용캐시카운터토큰commandSET & GET`SET A B`A 키에 대한 문자열 B 값 설정`SET A B nx`A 키가 있을 경우에만 SET`MSET A a B b C c`A → a, B → b, C → c 한 번에 삽입`GET A`A 키에 대한 문자열 Value 반환`MGET A B C`A, B, C 키에 대한 문자열 Value 한 번에 반환127.0.0.1:6379> set hello worldOK127.0.0.1:6379> get hello"world"127.0.0.1:6379> set hello redis nx(nil)127.0.0.1:6379> se..

Redis 2026.01.24

Spring Boot 로깅의 표준 Logback과 SLF4J 알아보기

안정적이고 신뢰성 있는 시스템을 만들기 위한 수단은 여러 가지가 있습니다.테스트, 아키텍처, 예외 핸들링 등...그중에서도 시스템의 현재 상태를 관찰하고, 문제가 발생했을 때 빠르게 원인을 파악할 수 있게 해주는 로깅이 가장 기초적이면서도 중요하지 않을까 합니다.그런 의미에서 스프링부트 환경에서 Logback과 SLF4J를 활용한 로깅의 개념 그리고 기본적인 구성 방식을 정리해보고자 합니다. 🔍 목차 # 00. Spring Boot 로깅의 기본 구조 # 01.SLF4J와 Logback # 02. SLF4J 사용법 # 03. Logback 핵심 구성 요소와 설정 방법 # 00. Spring Boot 로깅의 기본 구조 스프링 부트를 사용하고 있다면 이미 로깅은 진행되고 있습니다..

Spring 2025.12.30