전체 글 369

Claude - Claude Code 알아보기 (기초와 원리)

Claude Code는 Anthropic이 만든 개발자용 CLI 에이전트다. 터미널에서 실행하며, 자연어 지시만으로 파일을 읽고 수정하고, 명령을 실행하고, 테스트를 돌리는 등 실제 개발 작업을 자율적으로 처리한다.단순히 코드를 제안하는 도구가 아니다. 직접 코드베이스를 탐색하고, 변경사항을 적용하고, 결과를 확인하는 전 과정을 에이전트로서 수행한다.# 설치npm install -g @anthropic-ai/claude-code# 프로젝트 디렉토리에서 실행claudeClaude vs Claude Code많은 사람들이 Claude(AI)와 Claude Code(Tool)를 혼용하는데 명확히 구분이 필요하다.Claude는 일반적인 대화형 AI 어시스턴트로 단순히 챗봇 기능만 한다.Claude Code는 개발..

Claude - Worktree로 병렬 개발하기

Git WorktreeGit worktree는 하나의 저장소에서 여러 개의 작업 디렉토리를 동시에 관리할 수 있는 기능이다.일반적으로 브랜치를 전환할 때 기존 작업을 stash하거나 커밋해야 하는 번거로움이 있는데, Git worktree를 사용하면 이를 해결할 수 있다.Worktree의 장점워크트리를 사용하면 아래의 장점이 생긴다.병렬 작업 - 여러 기능을 동시에 개발할 수 있다. 예를 들어 feature/auth 브랜치와 bugfix/login 브랜치를 동시에 작업할 수 있다.빠른 브랜치 전환 - 물리적으로 다른 디렉토리에 있으므로 instant switching이 가능하다.깔끔한 작업 공간 - 각 작업마다 독립된 디렉토리를 유지하므로 혼동이 적다.컨텍스트 보존 - 각 worktree는 독립된 상태를..

Claude - Skills란 무엇인가? (Agent 잘 활용하기)

Claude Skills는 특정 작업에서 더 나은 성능을 발휘할 수 있도록 에이전트가 동적으로 탐색하고 로드할 수 있는 지시문, 스크립트, 리소스의 정리된 폴더이다.즉, Claude 에이전트에게 특정 도메인이나 작업에 대한 전문 지식을 제공하는 메커니즘이라고 생각할 수 있다.왜 Skills를 사용할까?문제점Claude 에이전트가 특정 도메인의 작업을 수행할 때, 일반적인 지식만으로는 최적의 결과를 내기 어려울 수 있다.특정 프로젝트의 컨벤션이나 best practices복잡한 문제 해결을 위한 구체적인 단계특정 도메인의 전문적인 지식Skills의 해결책Skills를 정의함으로써 아래의 것들을 할 수 있다.에이전트가 필요한 순간에만 해당 지식을 로드 (효율적인 토큰 사용)일관성 있는 결과 제공복잡한 작업을..

DataBase - 시퀀스 전략 설계하기 (+ 성능 문제, 시퀀스 낭비 문제 등)

DB에 데이터를 적재할 때 시퀀스의 개념을 사용할 때가 많다.ID(PK)Request Id카드번호사원번호...시퀀스의 전략에 대해 알아보자. 예시 코드는 Hibernate를 사용했다. AUTO_INCREMENT 전략시퀀스는 DB에서 고유한 값을 순차적으로 생성하는 객체를 말한다.가장 익숙한 것은 아래와 같이 DB의 AUTO_INCREMENT를 사용하는 것이다.public class Member { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id;}위처럼 설정하면 대 부분의 애플리케이션에 문제없이 돌아간다.하지만 추가로 고민해야 될 포인트가 있다. 성능적으로 문제가 없을 지이다.성능이 낭비되는 문제와 시퀀스 전략AU..

Server/Spring JPA 2025.09.21

Hibernate - 맵핑 타입 최적화

지난 번에 게시글로도 작성했었지만, DB에서 Status와 같은 성격을 띄는 컬럼에 대해서 다뤄본적이 있었다.VARCHAR로 관리할 지 vs Enum vs Tinyint, ...최근에 Hibernate를 활용한 새로운 접근(?)을 알게 되었고 꽤 인상깊어서 공유하고자 한다.Hibernate - Mapping ConstructJPA, Hibernate에는 세 가지 매핑 구조가 있다.Basic types (Integer, Long, String, CustomStatus)Embeddable types (@Embeddable 애노테이션처럼 여러 컬럼을 묶은 것)Entity types (테이블과 맵핑)맵핑할 타입이 더 컴팩트할 수록 더 높은 성능을 낼 수 있다.가령, Status라는 Enum이 있다면 String..

Server/Spring JPA 2025.08.31

Kotlin - 제너릭의 변성(Variance) 이해하기!

자바나 코틀린에서 라이브러리를 개발할 때 제너릭 부분에서 컴파일 에러가 자주 발생한다.그러한 문제를 효과적으로 해결하려면 제너릭의 주요 개념 중 하나인 변성(Variance)을 이해해야 한다. 관련해서 막연한 단어가 많지만, 예시를 들어 이해가 가능하도록 포스팅 내용을 작성했다.변성의 정의제너릭에서는 List 타입이 있으면 List를 기저 타입(Base Type), Int를 타입 인자(Type argument)라고 정의한다.변성(Variance)은 기저 타입(Base type)이 같으면서 타입 인자(Type argument)가 다른 경우 두 타입이 서로 어떤 관계인지를 정의한 것이다.그림에서 SomeClass가 SomeClass의 하위 타입이라고 생각하기 쉽다. 그러나 그것은 개발자가 SomeClass에..

Language/Kotlin 2025.02.15

로컬캐시 이해하기! (feat. 글로벌 캐시)

내가 속한 팀원이 사내 기술 블로그에 로컬 캐시 관련 포스팅을 했고, 기술 리뷰어로 나를 지정했다.팀원의 성장과 내용의 질을 위해 캐시와 관련된 학습을 하게 되었다.1. 로컬 캐시 vs 글로벌 캐시일반적으로 캐시는 조회에서의 성능 향상과 부하 방지를 위해 사용한다. 다수의 요청에서 연산을 위한 리소스나 DB 조회를 할 때 드는 비용 등을 줄일 수 있다.로컬 캐시는 각 서버의 메모리에 데이터를 저장하는 방식을 말한다.애플리케이션에서 Map과 같은 자료구조에 저장하는 경우EhCache 라이브러리를 사용하는 경우...로컬 캐시의 특징은 아래와 같다.속도가 매우 빠르다.외부 인프라와 통신이 필요없다.비용이 저렴하다.외부 통신의 리스크도 사라진다.분산 환경에서는 각 서버간 다른 데이터가 저장될 수 있다.동기화가 ..

2024년 늦은 회고와 반성..? (feat. 해외 출장)

다들 2024년 회고를 하나씩 블로그에 포스팅하기에 더 늦기 전에 올려야겠다라는 생각이 들어 작성하게 되었다.2024년은 가장 정신없게 보낸 한 해였다.1. 블로그 작성에 소홀해진 이유주변에서 블로그 작성에 너무 소홀해진 것 아니냐는 얘기를 종종 듣는다.사정을 이야기하자면 아래와 같다.업무가 너무 많고 바빠졌다.여가 시간이 많이 줄어들었다.회사에서 보통 근무했던 시간은 08:00 ~ 19:00 이다. 근무 시간도 그렇고, 근무 일수도 4.5일에서 늘어났다. 디테일하게 다른 이유도 있다.업무가 많은 편이고, 근무 시간도 많음B2C 서비스를 하고 있고, 외부 제휴사가 많은 부서라서 주말에도 장애에 민감실적 압박이 있는 편이고, 업무 관리가 굉장히 타이트한 편근무 시간이 많은 이유는 정말로 일이 많았다. 근무..

Etc./개발 일기 2025.01.19

코루틴에서 @Transactional을 사용하는 방법!

코루틴에서 트랜잭션을 적용하는 데 어려움을 겪는 케이스가 많다.코루틴 + JPA 환경에서 @Transactional 애노테이션이 미동작했고, 해당 부분으로 인해 알게된 내용을 공유한다.Spring I/O 2024에서 언급하는 내용도 참고했다.스프링 - 트랜잭션 관리 방식스프링에서 지원하는 트랜잭션 방식에 따라 크게 2가지로 방식이 있다.선언적 트랜잭션프로그래밍적 트랜잭션선언적 트랜잭션(Declarative Transaction)이란 @Transactional과 같은 애노테이션을 기반으로 트랜잭션을 처리하는 방식을 말한다.프로그래밍적 트랜잭션은(Programmatic Transaction)은 실제 로직에서 트랜잭션을 수행하는 방식을 말한다.선언적 트랜잭션 vs 프로그래밍 트랜잭션공식문서를 보면 아래와 같이..

Server/Spring JPA 2024.09.29

Spring I/O 2024 - 스프링으로 DDD 구현하기! (해석 및 리뷰)

Spring I/O 2024에서 DDD(Domain Driven Design) 관련된 강연을 했다.Implementing Domain Driven Design with Spring by Maciej Walkowiak @ Spring I/O 2024해당 강연은 DDD의 기본부터 Spring을 활용한 구현 방법을 설명한다. 아래는 해당 강연 내용을 해석한 내용이다.DDD마틴파울러는 DDD를 아래와 같이 설명한다.DDD(Domain-Driven-Design) is an approach to software development that centers the development on programming a domain model that has a rich understanding of the process..

Server/Spring 2024.09.27