| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
- 트랜잭션
- 스프링
- 관점지향프로그래밍
- Spring
- response
- network
- java
- proxy pattern
- git
- Spring Security
- 스프링부트
- 인터셉터
- aspect
- 스프링 시큐리티
- RestControllerAdvice
- request
- spring boot
- 객체지향프로그래밍
- aop
- http
- Redis
- SQL
- OOP
- 디자인패턴
- Filter
- exception
- mybatis
- 자바
- MYSQL
- Interceptor
- Today
- Total
목록전체 글 (86)
장쫄깃 기술블로그
직함은 그대로인데 하는 일이 달라졌다몇 년째 백엔드 개발자라는 직함을 달고 있는데, 요즘 하는 일은 3년 전과 많이 다르다. 여전히 API를 만들고 쿼리를 튜닝한다. 그런데 그 옆에서 IAM 정책을 고치고, 모델을 서빙하고, 어떤 기능을 만들지 논의하는 자리에도 앉아 있다. 코드를 직접 타이핑하는 시간보다 AI가 만든 코드를 판단하고 검수하는 시간이 늘었다. 뭔가 어긋나 있다는 느낌은 있었는데, 그게 정확히 뭔지는 한동안 설명이 안 됐다. 그러다 Anthropic에서 Claude Code를 총괄하는 보리스 체르니(Boris Cherny)가 트윗 하나로 이걸 깔끔하게 정리해놓은 걸 봤다. As engineering, product, design, DS, etc. melt into a new kind of ..
들어가며Java 21에서 Virtual Thread가 정식으로 도입된 이후, JDK 24/25를 거치면서 실전에서 쓰기 훨씬 편한 형태로 발전했다. 이 글에서는 Virtual Thread가 왜 등장했는지, 어떻게 쓰는지, 그리고 JDK 25에서 달라진 점까지 정리한다. MySQL을 쓰는 환경에서 신경 써야 할 부분도 같이 다룬다. Virtual Thread란한 줄 정의: OS thread를 작업 하나가 평생 독점하지 않도록, JVM이 훨씬 가볍게 스케줄링하는 thread이다. 목적은 Java의 익숙한 thread-per-request 스타일을 유지하면서도 높은 동시성을 얻는 것이다. 왜 필요한가기존 Platform Thread 기반 서버는 이렇게 동작했다.요청 1개 = thread 1개I/O 대기 중에..
Spring AI란?Spring AI는 Java/Spring 개발자가 LLM 기반 애플리케이션을 쉽게 만들 수 있도록 도와준다.OpenAI, HuggingFace, Claude 등 다양한 모델을 Spring Boot 환경에서 일관된 방식으로 호출할 수 있게 해주며, 프롬프트 템플릿, 챗 메모리, 벡터 검색 기반 QA(RAG) 등도 지원한다. 주요 특징은 다음과 같다.LLM 클라이언트 추상화OpenAI, HuggingFace 등 다양한 LLM을 공통 인터페이스로 호출Prompt 템플릿 지원Java 코드 기반 템플릿 구성 가능Memory 기능대화의 흐름을 저장/관리할 수 있는 MemoryStore 제공RAG(Retrieval-Augmented Generation)VectorStore 연동으로 문서 기반 질의..
들어가며Java에서 Predicate, Consumer, Supplier, Function은 java.util.function 패키지에 포함된 대표적인 함수형 인터페이스이다. Java 8부터 도입된 람다식과 함께 사용되며, 각 인터페이스는 고정된 목적에 맞게 설계되어 있어 함수형 프로그래밍 스타일을 가능하게 한다. 함수형 인터페이스란?함수형 인터페이스는 단 하나의 추상 메서드만 가지는 인터페이스로, 람다 표현식을 통해 간단히 구현할 수 있다.@FunctionalInterfacepublic interface MyFunction { void execute();} @FunctionalInterface는 필수는 아니지만, 해당 인터페이스가 함수형임을 명시하고 추상 메서드가 2개 이상이면 컴파일 에러를 발생..
Spring Modulith란?최근 MSA에 대한 피로도가 높아지면서 다시 모놀리스 아키텍처가 주목받고 있다. 하지만 전통적인 모놀리스가 아니라, 모듈화된 모놀리스, 즉 모듈러 모노리스(Modular Monolith) 방식이 각광받고 있다. Spring에서는 이를 지원하기 위해 Spring Modulith라는 공식 프로젝트를 제공하고 있다. 왜 Spring Modulith가 필요한가? 한때는 마이크로서비스 아키텍처(MSA)가 모든 문제를 해결할 수 있을 것처럼 여겨졌지만, 실제로는 다음과 같은 문제들이 자주 발생한다.인프라 구성의 복잡성 (Service Mesh, Gateway, Config Server 등)배포 및 테스트 환경의 어려움서비스가 많아질수록 높은 운영 비용너무 이른 마이크로서비스 전환으로..
험블 객체 패턴이란험블 객체 패턴은 테스트하기 어려운 행위와 테스트하기 쉬운 행위를 단위 테스트 작성자가 분리하기 쉽게 하는 방법으로 고안된 디자인 패턴이다. 이 패턴에서는 핵심 로직을 담당하는 객체와 외부 시스템과 상호작용하는 험블 객체를 분리한다. 만약 험블 객체가 핵심 로직 안에 포함되면 테스트가 어려워지므로, 이를 분리하여 테스트하기 쉬운 형태로 만든다. 이를 통해 핵심 로직은 단위 테스트가 용이해지고, 험블 객체는 단순해져 유지보수가 쉬워진다. 예제로 보는 험블 객체 패턴 (1) 문제 상황: 외부 API 호출이 포함된 서비스 다음과 같은 UserService가 있다고 가정해보겠다.@Servicepublic class UserService { public String getUserInfo(..
CSRF(Cross-Site Request Forgery) 란?CSRF(크로스 사이트 요청 위조, Cross-Site Request Forgery)는 사용자가 신뢰하는 웹사이트를 대상으로 악의적인 요청을 보내도록 속이는 공격이다. 🔷 CSRF 공격 개념사용자가 사이트 A에 로그인하여 세션을 유지공격자가 사용자를 속여 사이트 A로 특정 요청을 보내도록 유도 (예: 계좌 이체, 비밀번호 변경)사용자의 인증 정보(세션, 쿠키 등)가 자동으로 포함되어 서버가 요청을 정상적인 사용자 요청으로 오인피해자가 원치 않는 작업이 실행됨 🔷 CSRF 방어 방법CSRF 토큰 사용: 요청마다 임의의 토큰을 포함해 서버에서 검증SameSite 속성 설정: 쿠키가 타 사이트 요청에서 전송되지 않도록 설정Referer / Or..
린 스타트업 (Lean Startup) 이란?린 스타트업(Lean Startup)은 에릭 리스(Eric Ries)가 제안한 스타트업 경영 방법론으로, "효율적으로 제품을 개발하고 시장에 빠르게 적응하는 방식"을 강조한다. Lean의 사전적 의미는 '여윈, 살이 빠진, 뾰족한, 불충분한, 메마른, 낭비 없는' 등이다. 여기서 린 스타트업의 Lean은 '불충분한, 낭비 없는' 에 가깝다. 린 스타트업의 핵심 개념MVP (Minimum Viable Product, 최소 기능 제품)완벽한 제품을 개발하기 전에, 최소한의 기능을 갖춘 제품을 빠르게 출시하여 시장의 반응을 확인한다.Build - Measure - Learn 사이클제품을 개발(Build) → 사용자 데이터를 측정(Measure) → 배운 것을 통해..
GraphQL이란?GraphQL은 API를 위한 쿼리 언어이자 이를 실행하기 위한 런타임으로, 클라이언트가 필요한 데이터만 명시적으로 요청하고 받을 수 있게 해 준다. REST API의 단점을 보완하고 유연한 데이터 요청 및 처리를 가능하게 한다. 주요 특징으로는 다음과 같다.1. 클라이언트 주도 데이터 요청클라이언트가 원하는 데이터의 구조를 지정하여 요청을 보내면, 서버는 정확히 그 구조에 맞는 데이터를 반환한다.query { user(id: 1) { id name email }} 2. 단일 엔드포인트REST API와 달리, GraphQL은 하나의 엔드포인트로 모든 데이터를 요청할 수 있습니다. (예: /grqphql) 3. Overfetching과 Un..
들어가며소프트웨어 개발이 복잡해질수록, 변화에 유연하게 대응할 수 있는 구조가 점점 더 중요해지고 있다. 육각형 아키텍처(Hexagonal Architecture)는 이런 요구에 부합하는 설계 패턴으로, 내부 비즈니스 로직과 외부 의존성을 명확히 분리하여 코드의 유지보수성과 확장성을 높이는 데 중점을 둔다. 이번 글에서는 다양한 아키텍처와 육각형 아키텍처의 개념, 구성 요소, 장점과 단점을 살펴보고, 실무에서 이를 어떻게 효과적으로 적용할 수 있는지 알아보겠다. 계층형 아키텍처 (Layered Architecture) 계층형 아키텍처는 애플리케이션을 기능별로 층(layer)으로 나누는 가장 전통적이고 널리 사용되는 아키텍처이다. 일반적으로 다음과 같은 3~4개의 계층으로 구성된다. 프레젠테이션 계..