4-LLM 애플리케이션 설계하기

루프 구조 루프: 사용자 도메인과 모델 도메인 간의 변환 사용자 문제를 받아서 모델이 완성해야 할 문서나 대화기록 으로 바꿔준다. 모델이 응답을 생성하면 루프는 모델의 결과를 사용자 문제에 대한 해결책의 형태로 사용자 도메인에 반환한다. 루프는 한 번만 도는 경우도, 연달아 여러 차례 실행되는 경우도 있다. 사용자 문제 사용자 문제 도메인에 포함되는 내용 문제가 전달되는 매체: LLM에서는 텍스트가 가장 자연스럽다. 추상화 수준: 추상화 수준이 높을수록 더 복잡한 추론이 필요하다. 필요한 맥락 정보: 대부분의 도메인에서는 사용자가 제공하는 정보 외에도 추가 정보를 검색해야 한다....

2026-03-16 · 4 min · 776 words

3-대화형으로 넘어가기

LLM 기본 모델은 애플리케이션 설정에 사용하기 어렵다. 이유1: 인터넷상의 임의의 문서로 학습했기 때문에 기본 모델은 인터넷의 밝은 면과 어두운 면을 모두 모방할 수 있다. 이유2: 기본 모델은 문서 완성만 할 수 있다. 우리는 종종 LLM이 어시스턴트 역할도 하고, 파이썬 코드도 자실행하며, 검색해서 반영하고, 외부 도구를 실행할 수 있기를 바란다. 이유3: 사용자가 LLM을 맞춤 설정할 수 있게하고 싶은 경우도 있다. 인간 피드백을 통한 강화학습 인간 피드백을 통한 강화학습(reinforcement learning from human feedback, RLHF): 인간의 선호도를 사용해서 LLM의 동작을 조정하는 LLM 학습 기법 모델 정렬: 사용자 기대와 더 부합하는 생성 결과를 만들기 위해 모델을 파인튜닝하는 절차....

2026-03-16 · 4 min · 645 words

2-LLM의 이해

LLM은 무엇인가? LLM: 텍스트를 입력하면 텍스트가 출력되는 서비스 LLM은 학습 데이터셋이라고 하는 방대한 문서를 활용해 훈련한다. 학습 데이터셋에서 모델은 학습 데이터셋과 유사해 보이는 출력을 생성하는 방법을 배워야 한다. 과적합: 모델이 학습 데이터셋의 패턴을 학습하는 대신 문장 덩어리르 암기하는 것 문장 자동 완성 학습 데이터를 잘 알수록 그 학습 데이터에서 학습된 LLM이 어떤 결과를 만들어낼 가능성이 높은지에 대한 직관이 좋아진다. 인간 사고 vs LLM 처리 사람은 LLM과 달리 텍스트를 만들어낼 때 단지 그러릇해 보이는 문장을 만드는 것 이상의 과정을 거친다....

2026-03-09 · 5 min · 869 words

1-프롬프트 엔지니어링 소개

LLM은 단순히 한 텍스트 블록의 다음에 올 단어를 예측하는 모델일 뿐이다. 따라서 LLM은 단순히 사용자가 어떤 작업을 수행하는 데 도움이 되는 도구일 뿐이며 이러한 도구와 상호작용하는 방법은 사용자가 완성해야 할 텍스트 블록, 즉 프롬르트를 만드는 것이다. 언어 모델: 어쩌다 우리가 여기까지 왔지? 초기 언어 모델 최초로 소개된 언어 모델: 마르코프 모델 2014년까지 가장 강력한 언어 모델은 구글에서 소개한 seq2seq 아키텍처에 기반한다. 아키텍처: 인코더와 디코더 두 컴포넌트로 구성된다. 토큰 스트림을 인코더로 전송하면, 인코더는 입력 시퀀스의 정보를 축적하는 숨겨진 상태벡터를 업데이트한다....

2026-03-05 · 2 min · 297 words

클로드 코드 공식 문서 팁 정리

비대화형으로 프롬프트 하나 실행 후 출력하는 방법 claude -p "query" CI/CD 파이프라인이나 스크립트에서 활용하기 좋음 Skill vs Subagent 측면 Skill Subagent 정의 재사용 가능한 지침, 지식 또는 워크플로우 자신의 컨텍스트를 가진 격리된 워커 주요 이점 컨텍스트 간 콘텐츠 공유 컨텍스트 격리. 작업은 별도로 발생하고 요약만 반환된다. 최적 용도 참조 자료, 호출 가능한 워크 플로우 많은 파일을 읽는 작업, 병렬 작업, 특화된 워커 Claude Code 모범 사례 Claude에게 작업을 검증할 방법을 제공해라....

2026-03-03 · 3 min · 610 words

5-유용한 클로드 코드 애드온 알아보기

Super Claude 클로드 코드에 파인튜닝된 커스텀 프롬프트를 생성해주는 클로드 코드 프레임워크 바이브 코딩을 하면서 자주 사용하는 프롬프트와 MCP를 직접 정리할 필요 없이 잘 튜닝된 커스텀 커맨드가 사용자 설정에 생성되어 즉시 모든 프로젝트에서 사용할 수 있다. 최근엔 Claude Code Skills, Plan Mode, Subagents 같은 기능이 순정이 기본으로 통합되어버려서 굳이 사용할 필요가 사라졌다는 의견도 있다. 순정 툴을 쓰는게 컨텍스트 오염을 막고 훨씬 실용적이라는 의견이 주를 이루고 있다. Claude Code Action 클로드 코드 액션을 사용하면 깃허브에서도 클로드 코드를 직접 사용할 수 있다....

2026-02-24 · 1 min · 148 words

4-클로드 코드 실전 사용 방법 알아보기

2026-02-24 · 0 min · 0 words

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