CLAUDE.md가 비대해질 때 발생하는 LLM 지시 따르기 한계, 다이어트 전략, 계층적 구조 활용법, 지시 강조 기법을 다룹니다.
Claude Code 완전 정복 가이드 Part 1: CLAUDE.md 기초 - 첫 발을 내딛다
Claude Code의 Agentic Coding 개념과 CLAUDE.md 파일의 역할, 계층적 구조, 작성 방법을 다룹니다. Java/Kotlin, Go 프로젝트용 실전 템플릿도 포함되어 있습니다.
Claude Code 완전 정복 가이드 Part 0: Overview
이 가이드는 Claude Code 초보 사용자가 CLAUDE.md 파일 하나 만드는 것에서 시작해서, Skills와 Plugins를 활용한 고급 워크플로우까지 단계별로 성장할 수 있도록 구성되어 있습니다.
Java: JEP 444, 485, 506, 519 설명
JEP 444, 485, 506, 519 에 대한 설명과 예제코드를 담았습니다.
AI-Native 아키텍처: Java 25와 Spring Boot 4.0 시대의 에이전트 중심 개발 패러다임
이 포스트는 Java 25(LTS)와 Spring Boot 4.0의 최신 기술 스택을 기반으로, AI 에이전트가 이해하기 쉽고, 수정하기 용이하며, 디버깅하기 좋은 애플리케이션 아키텍처를 심층 분석합니다.
Java to Go: #5. 프로젝트 구조와 생태계
지금까지 Go의 철학, 문법, 에러 처리, 동시성을 살펴봤다. 이제 실제 프로젝트를 시작하는 데 필요한 것들을 다룬다. Maven/Gradle에서 Go Modules로, JUnit에서 testing 패키지로, Spring에서 Go 라이브러리 조합으로 전환하는 방법을 알아보자.
Java to Go: #4. 동시성: Goroutine과 Channel
Go의 동시성 모델은 Java와 근본적으로 다르다. Thread, synchronized, ExecutorService에 익숙한 개발자라면 처음엔 낯설겠지만, Go의 방식이 얼마나 우아한지 금방 알게 될 것이다. “공유 메모리로 통신하지 말고, 통신으로 메모리를 공유하라"는 Go의 철학을 이해해보자.
Java to Go: #3. 에러 처리와 Null 안전성
Java 개발자가 Go를 배울 때 가장 큰 패러다임 전환이 필요한 부분이 에러 처리다. try-catch에 익숙한 우리에게 if err != nil의 반복은 처음엔 원시적으로 느껴진다. 하지만 이 방식에는 명확한 철학이 있다. 이번 편에서 그 철학을 이해하고, Go 방식의 에러 처리에 익숙해져 보자.
Java to Go: #2. 문법 전환 가이드: Java 코드를 Go로 옮기기
Part 1에서 Go의 철학과 언제 Go를 선택해야 하는지 살펴봤다. 이제 실제 코드 레벨에서 Java와 Go가 어떻게 다른지 1:1로 비교해보자. Java 문법에 익숙한 개발자가 Go 코드를 읽고 쓸 수 있도록 핵심 차이점을 정리한다.
Java to Go: #1. Go 첫인상: 철학과 패러다임의 차이
Java를 수년간 써온 개발자가 Go를 처음 접하면 당혹스럽다. “왜 이렇게 만들었지?“라는 생각이 끊이지 않는다. 이 글에서는 Go의 설계 철학을 이해하고, Java에서 Go로의 전환이 언제 적절한지 판단할 수 있는 기준을 제시한다.
Go to Rust: #10. 프로젝트 관리와 실전 패턴
이 마지막 섹션에서는 실제 Rust 프로젝트를 구성하고 관리하는 방법을 학습합니다. Cargo 심화, 모듈 시스템, 테스트, 그리고 Go 코드를 Rust로 포팅할 때 유용한 패턴들을 다룹니다.
Go to Rust: #9. 비동기 프로그래밍
Rust의 async/await 는 Go의 goroutine과 근본적으로 다른 접근 방식입니다. Go는 런타임이 모든 것을 관리하지만, Rust는 명시적인 비동기 모델을 사용합니다. 이 섹션에서는 Rust의 비동기 생태계와 Tokio 런타임을 학습합니다.
Go to Rust: #8. 동시성 프로그래밍
Rust의 “Fearless Concurrency” 는 컴파일 타임에 데이터 레이스를 방지합니다. Go의 고루틴과 채널에 익숙하다면, Rust의 동시성 모델이 어떻게 다른지 이해하는 것이 중요합니다.
Go to Rust: #7. 컬렉션과 이터레이터
Rust의 컬렉션은 Go와 유사한 기능을 제공하지만, 소유권 시스템과 결합되어 더 안전합니다. 특히 이터레이터 시스템은 Go의 range 보다 훨씬 강력하며, 함수형 프로그래밍 스타일을 지원합니다.
Go to Rust: #6. 에러 처리
Rust의 에러 처리는 Go와 철학적으로 유사합니다. 두 언어 모두 예외(exception)를 사용하지 않고 명시적인 에러 반환을 선호합니다. 하지만 Rust는 타입 시스템을 통해 에러 처리를 강제하여, Go에서 흔히 발생하는 “에러 무시” 문제를 원천 차단합니다.
Go to Rust: #5. 트레이트와 제네릭
트레이트(Trait)는 Rust의 다형성 메커니즘입니다. Go의 인터페이스와 비슷한 역할을 하지만, 구현 방식과 기능에서 큰 차이가 있습니다. 이 섹션에서는 트레이트와 제네릭을 Go와 비교하며 깊이 있게 학습합니다.
Go to Rust: #4. 구조체, 열거형, 패턴 매칭
이 섹션에서는 Rust에서 데이터를 구조화하는 방법을 학습합니다. Go 개발자에게 구조체는 익숙하겠지만, Rust의 열거형(enum)은 Go의 const / iota 보다 훨씬 강력하며, 패턴 매칭은 switch 문을 완전히 새로운 수준으로 끌어올립니다.
Go to Rust: #3. 소유권과 빌림 (Ownership & Borrowing)
소유권(Ownership)은 Rust의 가장 독특하고 중요한 개념입니다. Go의 가비지 컬렉션과 완전히 다른 접근 방식으로, 컴파일 타임에 메모리 안전성을 보장합니다. 이 섹션은 Rust 학습에서 가장 중요한 부분이므로 충분한 시간을 들여 이해하시기 바랍니다.
Go to Rust: #2. 기본 문법과 타입 시스템
이 섹션에서는 Rust의 기본 문법을 Go와 비교하며 학습합니다. Go 개발자에게 익숙한 개념들이 Rust에서 어떻게 표현되는지, 그리고 Rust만의 독특한 특징은 무엇인지 알아봅니다.
Go to Rust: #1. 시작하기 - Rust 소개와 환경 설정
Go 개발자로서 새로운 언어를 배우려면 먼저 그 언어가 왜 존재하는지, 어떤 문제를 해결하려고 하는지 이해하는 것이 중요합니다. 이 섹션에서는 Rust의 설계 철학을 Go와 비교하며 이해하고, 개발 환경을 설정한 뒤 첫 프로젝트를 생성해봅니다.