WooLam

Spring AI로 AI 앱 개발 시작하기: ChatClient와 Structured Output

1. Spring AI: AI 앱 개발의 새로운 지평 최근 AI 기술이 발전하면서 소프트웨어를 개발하는 방식도 크게 달라졌습니다. 특히 LLM(Large Language Model)이 등장하면서 개발자는 AI 기능을 애플리케이션에 통합해야 하는 새로운 과제를 맞았습니다. 초기 AI 앱은 대부분 사용자의 질문을 받아 백엔드가 LLM API를 호출하고,...

동시성 문제를 이해하면서 정리한 생각 — 왜 락이 필요할까

1. 들어가면서 처음에는 동시성 문제를 단순히 “동시에 수정하면 문제가 발생한다” 정도로만 이해했습니다. 그런데 공부를 하다 보니 비관락, 낙관락, 분산락, 격리수준, 원자적 쿼리 같은 용어가 한꺼번에 등장했고, “다 락 같은데 뭐가 다른 거지?”라는 의문이 들었습니다. 이번 글에서는 동시성 문제의 본질부터 다양한 락(Lock) 개념, JPA의 동...

구현보다 먼저: 팀 프로젝트를 위한 GitHub 협업 환경 구축기

들어가면서: 프로젝트를 시작하며 새 팀원들과 팀 프로젝트를 진행하게 되었습니다. 아이디어가 구체화되고 기술 스택이 정해지자마자 다들 키보드에 손을 얹고 바로 코드를 짜고 싶은 마음이 굴뚝같았습니다. 하지만 개발을 시작하기 전에 한 템포 쉬어가기로 했습니다. 먼저 GitHub 협업 규칙부터 정하기로 했습니다. 처음에는 “일단 기능부터 빠르게 만들고 ...

AI 시대, Spec Driven Development: LLM과 협업하는 새로운 개발 방식

들어가며: AI 시대, 개발 방식은 어떻게 변해야 하는가? 최근 AI, 특히 LLM(Large Language Model)의 발전은 소프트웨어 개발 방식도 바꾸고 있습니다. 코드를 생성하고 테스트 케이스를 만들고 아키텍처까지 제안하는 AI의 능력은 개발자에게 새로운 가능성을 열어주었습니다. 하지만 동시에 우리는 한 가지 질문에 부딪힙니다. “AI와 ...

AI 시대, 데이터 표현의 두 축: 임베딩과 그래프

들어가면서: AI는 모든 것을 알고 있을까? 최근 대규모 언어 모델(LLM)의 발전은 놀랍습니다. AI가 세상의 지식을 모두 꿰뚫고 있는 것처럼 느껴질 때도 있죠. 하지만 실제로는 그렇지 않습니다. AI의 답변 품질은 모델 자체의 언어 능력만이 아니라, 외부에서 얼마나 정확하고 풍부한 맥락을 찾아 제공하느냐에 크게 좌우됩니다. 답변 품질이 곧 검색 ...

어제는 됐는데 오늘은 왜 안 될까? GitHub Pages 의존성 문제와 재현 가능한 빌드

들어가면서 개발을 하다 보면 “어제는 잘 됐는데 오늘은 왜 안 될까?”라는 상황을 만납니다. CI/CD 환경이라면 더 당황스럽습니다. 최근 GitHub Pages에 Chirpy 테마로 기술 블로그를 운영하다가 저도 이 상황을 겪었습니다. 전날까지 잘 배포되던 블로그가 갑자기 GitHub Actions에서 실패하기 시작한 것입니다. 이 글에서는 그 문...

배포 자동화와 오토스케일링은 어떻게 연결될까?

들어가면서 이전 포스트 왜 컨테이너만으로는 부족할까?에서 컨테이너 운영의 한계와 오케스트레이션의 필요성을 다뤘다. 컨테이너 오케스트레이션은 수많은 컨테이너를 효율적으로 관리하는 데 필수적이지만, 그 시작점에는 애플리케이션의 빌드부터 배포까지를 자동화하는 CI/CD(Continuous Integration/Continuous Delivery) 파이프라...

사용자의 요청은 AWS 내부에서 어떻게 처리될까?

들어가면서 클라우드에서 애플리케이션을 운영하려면 코드 배포만으로는 부족하다. 사용자의 요청이 서비스에 닿기까지 거치는 네트워크 흐름과 인프라 구성을 함께 이해해야 한다. 특히 AWS에서는 여러 서비스가 서로 맞물려 돌아가는데, 운영 중 겪는 문제는 대부분 네트워크 설정 오류에서 시작된다. 이 글에서는 사용자의 요청이 AWS 내부에서 처리되는 흐름을...