3-클로드 코드 고급 기능 활용하기

클로드의 잠재력을 끌어올리는 2가지 방법 CoT Chain of Through CoT 기법 적용해야 하는 이유 정확성: 각 단계를 검증하며 진행하므로 최종 결론의 신뢰도가 높아진다. 일관성: 최종 결과물을 더욱 긴밀하고 체계적인 구성을 갖추도록 돕는다. 디버깅 용이성: 논리적 흐름으로 특정 결과에 도달했는지 투명하게 보여준다. CoT 유도방법 프롬프트에 ‘생각해라’라는 문구만 들어가 있으면 된다. ex) 단순히 REST API 어떻게 설계 할 수 있는지 단계별로 생각하고 답변해줘. 확장된 사고 확장된 사고 유도 방법 ‘고민해라’라고 말하면 된다. ‘고민해라’보다 ‘깊게 고민해라’가 더 오랜 사고를 유도하고, ‘더 깊게 고민해라’는 더욱 더 오랜 사고를 유도한다....

2026-02-11 · 5 min · 872 words

2-클로드 코드 핵심 기능 활용하기

클로드 코드 기본 인터페이스 이해하기 클로드 코드 초기화 /init 명령어: 프로젝트를 분석해 CLAUDE.md 파일을 생성한다. 프로젝트 오버뷰, UI 구조, 아키텍처 등 프로젝트를 이해하기 위한 필수 정보들이 작성되어 있다. 자주 사용하는 클로드 단축키 단축키 설명 Ctrl + C 현재 입력이나 클로드의 생성 중인 아웃풋을 중단한다. Ctrl + D 클로드 코드 세션을 종료한다. Ctrl + L 클로드 코드와의 대화는 유지하며 사용자 대화창의 입력을 전부 삭제한다. 위/아래 방향키 기존에 실행했던 메시지를 조회한다. Esc + Esc 직전 메시지로 회귀한다....

2026-02-09 · 4 min · 765 words

7-분산 시스템을 위한 유일 ID 생성기 설계

문제 이해 및 설계 범위 확정 요구사항 ID는 유일해야 한다. ID는 숫자로만 구성되어야 한다. ID는 64비트로 표현되어야 한다. ID는 발급 날짜에 따라 정렬 가능해야 한다. 초당 10000개의 ID를 만들 수 있어야 한다. 개략적 설계안 제시 및 동의 구하기 다중 마스터 복제 데이터베이스의 auto_increment 기능을 활용하는 것이다. 다음 ID의 값을 구할 때 1만큼 증가시키는 것이 아니라, k만큼 증가시킨다. 단점 규모를 늘리기 어렵다. ID의 유일성이 보장되지만, 시간 흐름에 맞춰 커지도록 보장할 수 없다....

2026-02-03 · 2 min · 214 words

1-클로드 코드 세팅하기

왜 클로드 코드인가? 초창기 AI 협업 모델의 한계 맥락의 부재: 수백만 줄에 달하는 코드를 AI에 입력하기에는 콘텍스트 윈도우가 턱없이 부족했고, 이로 인해 AI는 기존 코드와 충돌하는 제안을 하거나, 프로젝트의 코드 스타일과 아키텍처 패턴을 무시한 일관성 없는 코드를 생성했다. 파편화된 워크플로: IDE와 AI 채팅창을 오가며 코드를 복사하고 붙여넣는 번거로운 작업을 해야됐다. 끊임없는 마이크로매니지먼트의 필요성: 개발자가 모든 단계를 세밀하게 지시해야 했다. 수동적 실행: AI가 먼저 제안하거나 문제를 지적하지 않았다. 에이전트 AI가 수행할 수 있는 작업 새로운 기능 구현을 위한 파일 생성 및 기존 코드 수정 프로젝트에 필요한 라이브러리 검색 및 설치 테스트 스크립트 작성 및 실행 버그 재현 및 수정안 제안 필요한 개발 도구의 자동 설치 및 환경 설정 클로드 코드의 동작 방식 프로젝트 구조 분석 작업 계획 수립 실행 검증 및 개선 클로드 코드와 커서의 차이점 클로드 코드의 성능이 압도적으로 좋다....

2026-02-03 · 1 min · 169 words

9-웹 크롤러 설계

웹 크롤러 용도 검섹 엔진 인덱싱: 웹 페이지를 모아 검색 엔진을 위한 로컬 인덱스를 만든다. 웹 아카이빙: 나중에 사용할 목적으로 장기보관하기 위해 웹에서 정보를 모으는 절차를 말한다. 웹 마이닝: 인터넷에서 유용한 지식을 도출한다. 웹 모니터링: 인터넷에서 저작권이나 상표권이 침해되는 사례를 모니터링할 수 있다. 문제 이해 및 설계 범위 확정 좋은 웹 크롤러가 만족시켜야 할 속성 규모 확장성: 병행성을 활용하면 효과적으로 웹 크롤링을 할 수 있다. 안정성: 잘못 작성된 HTML, 아무 반응이 없는 서버, 장애, 악성 코드가 붙어 있는 링크에 잘 대응할 수 있어야 한다....

2026-01-28 · 5 min · 897 words

8-URL 단축기 설계

문제 이해 및 설계 범위 확정 기본적 기능 URL 단축: 주어진 긴 URL을 훨씬 짧게 줄인다. URL 리다이렉션: 축약된 URL로 HTTP 요청이 오면 원래 URL로 안내 높은 가용성과 규모 확장성, 그리고 장애 감내가 요구됨 개략적 추정 쓰기 연산: 매일 1억 개의 단축 URL 생성 초당 쓰기 연산: 1억/24/3600 = 1160 읽기 연산: 읽기 연산과 쓰기 연산 비율을 10:1이라고 하면 초당 11600회 발생한다. URL 단축 서비스를 10년간 운영한다고 가정하면 3650억개의 레코드를 보관해야 한다....

2026-01-28 · 2 min · 377 words

8-'정확히 한 번'의미 구조

7장까지는 ‘최소 한 번’ 전달에 초점을 맞췄다. 하지만 메시지 중복의 가능성은 여전히 있다. 현실에서 사용되는 대부분의 애플리케이션들은 메시지를 읽는 애플리케이션이 중복 메시지를 제거할 수 있도록 메시지에 고유한 식별자를 포함한다. 카프카 ‘정확히 한 번’ 의미 구조는 두 개의 핵심 기능의 조합로 이루어진다. 멱등성 프로듀서: 프로듀서 재시도로 인해 발생하는 중복을 방지한다. 트랜잭션 의미 구조: 스트림 처리 애플리케이션에서 ‘정확히 한 번’ 처리를 보장한다. 멱등성 프로듀서 멱등성: 작업을 여러 번 실행해도 한 번 실행한 것과 결과가 같은 성질 프로듀서에서 메시지가 중복으로 발생하는 일반적인 시나리오 파티션 리더가 프로듀서로부터 레코드를 받아서 팔로워들에게 성공적으로 복제한다....

2026-01-28 · 9 min · 1899 words

6-키-값 저장소 설계

키-값 저장소: 비 관계형 데이터베이스로 저장소에 저장되는 값은 고유 식별자를 키로 가진다. 키는 일반 텍스트일 수도 있고 해시 값일 수도 있다. 키는 성능상의 이유로 짧을수록 좋다. 문제 이해 및 설계 범위 확정 다음 특성을 갖는 키-값 저장소를 설계해 볼 것이다. 키-값 쌍의 크기는 10KB 이하이다. 큰 데이터를 저장할 수 있어야 한다. 높은 가용성을 제공해야 한다. 따라서 시스템은 설사 장애가 있더라도 빨리 응답해야 한다. 높은 규모 확장성을 제공해야 한다. 따라서 트래픽 양에 따라 자동적으로 서버 증설/삭제가 이루어져야 한다....

2026-01-28 · 7 min · 1289 words

5-안정 해시 설계

수평적 규모 확장성을 달성하기 위해서는 요청 또는 데이터를 서버에 균등하게 나누는 것이 중요하다. 해시 키 재배치(rehash) 문제 나머지 연산으로 해시를 배치하는 것은 데이터 분포가 균등할 때만 잘 동작한다. 또한, 서버가 추가되거나 기존 서버가 삭제되면 대부분의 키가 재분배된다. 안정 해시 안정 해시: 해시 테이블 크기가 조정될 때 평균적으로 k/n개의 키만 재배치하는 기술 k: 키의 개수 n: 슬롯의 개수 기본 구현법 해시 함수를 사용해서 서버 IP나 이름으로 링 위에 서버를 배치한다. 해시 키도 똑같이 배치한다....

2026-01-28 · 1 min · 141 words

4-처리율 제한 장치의 설계

API에 처리율 제한을 두면 좋은점 DoS 공격에 의한 자원 고갈을 방지할 수 있다. 비용을 절감할 수 있다. 서버 과부하를 막는다. 1단계 문제 이해 및 설계 범위 확정 면접관과 소통하면서 어떤 제한 장치를 구현해야 하는지 분명히 한다. 예시: 설정된 처리율을 초과하는 요청은 정확하게 제한한다. 낮은 응답 시간 가능한 한 적은 메모리를 써야 한다. 분산형 처리율 제한: 하나의 처리율 제한 장치를 여러 서버나 프로세스에서 공유할 수 있어야 한다. 예외 처리: 요청이 제한되었을 때는 그 사실을 사용자에게 분명하게 보여주어야 한다....

2026-01-28 · 5 min · 971 words

1-사용자 수에 따른 규모 확장성

단일 서버 모든 컴포넌트가 한 대의 서버에서 실행되는 간단한 시스템부터 설계해본다. 사용자는 도메인 이름을 DNS에 질의하여 IP 주소로 변환한다. DNS는 보통 제3 사업자가 제공하는 유료 서비스를 이용하게 되므로, 우리 시스템의 일부가 아니다. DNS 주소 결과로 IP 주소가 반환된다. 해당 주소로 HTTP 요청이 전달된다. 요청을 받은 웹 서버는 HTML 페이지나 JSON 형태의 응답을 반환한다. 웹 서버로 요청이 들어오는 곳은 2가지 이다. 웹 앱: 비즈니스 로직, 데이터 저장을 위해 서버 구현용 언어(자바, 파이썬 등)를 사용하고, 프레제테이션용으로는 클라이언트 구현용 언어(HTML, 자바스크립트 등)을 사용한다....

2026-01-28 · 7 min · 1413 words

README

도서 ‘교보문고 > 컴퓨터/IT 베스트 셀러’ 중 백엔드 개발자와 관련된 도서(2026.01.04 기준 출판한지 6개월 이상된 책만 필터링) 이미 읽은 책은 제외 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식: https://product.kyobobook.co.kr/detail/S000216376461 가상 면접 사례로 배우는 대규모 시스템 설계 기초: https://product.kyobobook.co.kr/detail/S000001033116 가상 면접 사례로 배우는 대규모 시스템 설계 기초 2: https://product.kyobobook.co.kr/detail/S000211656186 데이터 중심 애플리케이션 설계: https://product.kyobobook.co.kr/detail/S000001766328 JVM 밑바닥까지 파헤치기: https://product.kyobobook.co.kr/detail/S000213057051 실용주의 프로그래머: https://product.kyobobook.co.kr/detail/S000001033128 소프트웨어 아키텍처 101: https://product.kyobobook.co.kr/detail/S000218641537 AWS 교과서: https://product.kyobobook.co.kr/detail/S000210532528 그림으로 공부하는 IT 인프라 구조: https://product....

2026-01-04 · 1 min · 116 words

Elasticsearch nested 타입으로 정렬하는 법

배경 아래와 같은 인덱스가 있다고 해보자. { "mappings": { "properties": { "myFields": { "type": "nested", "properties": { "fieldName": { "type": "keyword" }, "fieldType": { "type": "keyword" } , "stringValue": { "type": "keyword" }, "integerValue": { "type": "integer" }, "dateValue": { "type": "date" } } } } } } 예시와 같이 document에는 각 타입별로 사용하는 value 필드가 다르다. { "myFields": [ { "fieldName": "custom01", "fieldId": 1, "valueType": "STRING", "stringValue": "value1" }, { "fieldName": "custom02", "fieldId": 2, "valueType": "DATE", "dateValue": "2025-10-01" }, { "fieldName": "custom03", "fieldId": 3, "valueType": "INTEGER", "integerValue": 123 } ] 위 예시에서 fieldName이 custom03 인 필드의 integerValue를 기준으로 document를 정렬하고 싶다면 어떻게 해야될지 이해해본다....

2025-12-18 · 2 min · 262 words

9-검색 엔진으로 활용하기

inverted index란 문서에 포함된 문자열을 어떤 기준으로 단어로 나누는데 이렇게 나뉜 단어들을 토큰이라고 부른다. 이렇게 토큰을 만들어내는 과정을 토크나이징이라고 부른다. 토큰을 기준으로 저장된 문서를 아래와 같이 저장하는데 이것을 inverted index라고 부른다. analyzer 종류 마다 토크나이징 결과가 달라진다. analyzer 살펴보기 analyzer를 구성할 때는 tokenizer를 필수로 명시해야 하며 하나의 tokenizer만 설정할 수 있다. character filter와 token filter는 필요하지 않은 경우 기술하지 않거나 여러 개를 기술할 수 있다. character filter: analyzer로 들어온 문자열을 변형한다....

2025-12-18 · 4 min · 690 words

4-카프카 컨슈머 카프카에서 데이터 읽기

카프카 컨슈머: 개념 컨슈머와 컨슈머 그룹 카프카 컨슈머는 보통 컨슈머 그룹의 일부로서 작동한다. 이유: 우리는 토픽으로부터 데이터를 읽어 오는 작업을 확장할 수 있어야 한다. 동일한 컨슈머 그룹에 속한 여러 개의 컨슈머들이 동일한 토픽을 구독할 경우, 각각의 컨슈머는 해당 토픽에서 서로 다른 파티션의 메시지를 받는 것이다. 컨슈머 그룹에 컨슈머를 추가하는 것은 카프카 토픽에서 읽어오는 데이터 양을 확장하는 주된 방법이다. 토픽을 생성할 때 파티션을 크게 잡아주는 게 좋은 이유: 부하가 증가함에 따라서 더 많은 컨슈머를 추가할 수 있게 해주기 때문 토픽에 설정된 파티션 수 이상으로 컨슈머를 투입하는 것은 아무 의미가 없는 점도 명심하라 새로운 컨슈머 그룹, G2를 추가하게 된다면 이 컨슈머는 G1 컨슈머 그룹에서 무엇을 하고 있든지 상관없이 T1 토픽의 모든 메시지를 받게 된다....

2025-12-18 · 13 min · 2633 words

4-엔티티 매핑

@Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야한다. @Entity 적용 시 주의사항 기본 생성자가 필수다(파라미터가 없는 public 또는 protected 생성자) final 클래스, enum, interface, inner 클래스에는 사용할 수 없다. 저장할 필드에 final을 사용하면 안 된다. kotlin을 사용할 때는 maven의 jpa 플러그인을 사용 한다면 파라미터가 없는 생성자를 만들 필요가 없다. (https://kotlinlang.org/docs/no-arg-plugin.html#jpa-support) kotlin을 사용할 때는 기본적으로 final 클래스로 만들어지는데, 아래와 같이 플러그인을 이용해서 특정 어노테이션이 붙어 있는 경우에는 open 클래스로 만들도록 수정할 수 있다....

2025-12-18 · 4 min · 838 words

Elasticsearch 필드 데이터 타입

목표 Elasticsearch에 많이 사용되는 필드 데이터 타입들을 이해한다. (8.x 버전 기준) text 문자열 전체를 애널라이저로 분석하여 색인화하는 필드 전체 텍스트 내에서 일부 단어로 검색할 수 있다. 집계나 정렬에서는 사용할 수 없다. 만약 텍스트 전문 검색과 집계/정렬이 모두 필요한 상황이라면 다중 필드를 사용해서 keyword와 text를 동시에 사용할 수 있다. PUT my-index-000001 { "mappings": { "properties": { "city": { "type": "text", "fields": { "raw": { "type": "keyword" } } } } } 파라미터 "analyzer": "<애널라이저명>": 텍스트 필드에 사용할 애널라이저 "search_analyzer": "<애널라이저명>": 검색을 할 때 기본적으로 analyzer 파라미터와 동일한 애널라이저로 사용한다....

2025-11-13 · 4 min · 802 words

Spring Security 시작하기

목표 Spring Security 내부 구조를 이해한다. Spring Security 사용 방법을 이해한다. Filters Filter와 FilterChain 클라이언트가 요청을 보내면, 서블릿 컨테이너에서 lazy하게 FilterChain를 생성한다. FilterChain은 Filter 인스턴스들과 하나의 Servlet을 포함한다. Spring MVC를 사용 중이라면 Servlet은 DispatcherServlet이 된다. Filter는 HttpServletRequest, HttpServletResponse를 수정한다. Filter는 호출될 때 FilterChain을 파라미터로 함께 받아서 다음 Filter를 연쇄적으로 호출한다. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { // do something before the rest of the application chain.doFilter(request, response); // invoke the rest of the application // do something after the rest of the application } DelegatingFilterProxy와 FilterChianProxy Spring은 Filter의 구현체인 DelegatingFilterProxy를 제공한다....

2025-11-12 · 2 min · 321 words

Spring Boot Applicatoin Event 와 애플리케이션 시작 과정

배경 SpringApplicationEvent 에서 Spring 프레임워크가 애플리케이션에 관련된 이벤트를 발행하는 것을 이해할 수 있었다. Spring Boot에서 어떤 이벤트를 전송하고 있는지 이해한다. 이벤트 목록 애플리케이션 실행 시 아래 순서대로 이벤트가 발생한다. ApplicationStartingEvent: 애플리케이션 실행 이전에 발생한다. ApplicationContextInitializer 들과 ApplicationListener 들의 등록을 제외한 모든 처리 이전에 발생한다. ApplicationContextInitializer: ApplicationContext가 초기화되기 전에 실행되어야 하는 로직이 있을 때 정의하는 콜백 인터페이스 ApplicationListener: 애플리케이션에서 발생하는 이벤트를 감지하고 처리하는 역할의 인터페이스 ApplicationEnvironmentPreparedEvent: Environment가 준비 되었지만, ApplicationContext가 생성되기 전에 발생한다....

2025-11-12 · 2 min · 250 words

2-단위 테스트란 무엇인가

‘단위 테스트’의 정의 단위 테스트는 작은 코드 조각을 검증하고, 빠르게 수행하고, 격리된 방식으로 처리하는 자동화된 테스트다. 격리 문제는 단위 테스트의 고전파와 런던파를 구분할 수 있게 해주는 근원적 차이에 속한다. 격리 문제에 대한 런던파의 접근 런던파에서는 테스트 대상 시스템을 협력자에게서 격리한다. 하나의 클래스가 다른 클래스 또는 여러 클래스에 의존하면 이 모든 의존성을 테스트 대역(test double)으로 대체해야 한다. 장점 테스트가 실패하면 코드베이스의 어느 부분이 고장 났는지 확실히 알 수 있다. 객체 그래프를 분할할 수 있다....

2025-11-12 · 5 min · 933 words