기술과 산업/언어 및 프레임워크
-
FastAPI 시리즈 14화 - CORS 설정과 보안 헤더 적용하기기술과 산업/언어 및 프레임워크 2025. 6. 9. 19:36
FastAPI에서 CORS(Cross-Origin Resource Sharing) 정책을 설정하고, HTTP 보안 헤더를 적용하는 방법을 설명합니다. 프론트엔드 연동과 API 보안 강화를 위한 실전 설정 예제를 포함합니다.1. 왜 CORS 설정이 필요한가?브라우저 기반의 프론트엔드가 외부 API 서버와 통신하려고 할 때,서버가 CORS 정책을 명시적으로 허용하지 않으면 요청이 차단됩니다.예를 들어,Vue/React 앱이 http://localhost:3000에서 실행되고FastAPI 백엔드가 http://localhost:8000에 있다면다른 도메인 간 요청이므로 반드시 CORS 허용 설정이 필요합니다.2. FastAPI에서 CORS 설정 방법FastAPI는 Starlette의 미들웨어 구조를 그대로 사..
-
Spring Boot 고급 시리즈 4화 – 프로파일 기반 구성 전략 완전 정복기술과 산업/언어 및 프레임워크 2025. 6. 9. 19:26
Spring Boot의 @Profile, application-{profile}.yml, 외부 설정 등 다양한 프로파일 기반 구성 전략을 정리합니다. 운영 환경 분리에 따른 실무 적용 예제도 포함되어 있습니다. Spring Boot는 다양한 실행 환경(개발, 테스트, 스테이징, 운영 등)에 맞춰 설정을 유연하게 분리하고 적용할 수 있도록 프로파일(Profile) 기능을 제공합니다. 실무에서는 이 기능을 얼마나 잘 활용하느냐에 따라 프로젝트의 유지보수성과 안정성이 크게 달라집니다. 이번 글에서는 프로파일을 기반으로 한 구성 전략을 심층적으로 파헤쳐봅니다.1. 프로파일이란 무엇인가?Spring의 프로파일은 조건부 Bean 등록 및 설정 파일 분리를 가능하게 해주는 기능입니다.예를 들어, 개발 환경에서는 H2..
-
Spring AI 시리즈 7화 – RAG 구축하기 (2): Chroma 연동 실습과 문서 기반 검색기술과 산업/언어 및 프레임워크 2025. 6. 9. 19:24
Spring AI에서 Chroma Vector DB를 연동해 RAG 시스템을 구성하는 방법을 실습 중심으로 소개합니다. 문서 인덱싱, 벡터 저장, 유사도 기반 검색, LLM 응답까지의 전체 파이프라인을 구성합니다. 이전 글에서 우리는 RAG의 구조와 Vector Store의 역할에 대해 분석했습니다.이번 글에서는 그 개념을 실제 코드로 구현해보는 단계입니다.Spring AI가 제공하는 Chroma 연동 기능을 활용해 문서를 벡터로 저장하고,유사 문서를 검색한 뒤 LLM에 전달하는 전 과정을 구현해보겠습니다.개발 환경 준비Java 17+Spring Boot 3.2.xSpring AI 0.8.0Chroma (로컬 실행)OpenAI 또는 Hugging Face API 키1. 의존성 추가Chroma와 Embed..
-
Spring Boot 고급 시리즈 3화 – 트랜잭션 전파와 고립 수준, 언제 어떻게 사용할까?기술과 산업/언어 및 프레임워크 2025. 6. 5. 18:24
트랜잭션 처리는 단순히 @Transactional 어노테이션을 붙이는 것으로 끝나지 않습니다. 실제 서비스 로직이 복잡해질수록 트랜잭션의 “전파(propagation)”와 “고립 수준(isolation level)”을 이해하고 적절히 사용하는 것이 중요해집니다. 이 글에서는 두 개념을 하나씩 짚어보며, 실전에서 어떤 상황에 어떤 전략을 택하는 것이 좋을지 깊이 있게 살펴보겠습니다. 트랜잭션 전파(Propagation) – 어떤 트랜잭션을 따를 것인가? 스프링은 메서드 실행 시, 현재 트랜잭션이 존재하는지 여부에 따라 새로운 트랜잭션을 생성하거나 기존 트랜잭션을 이어받는 전략을 Propagation 속성으로 제어할 수 있게 합니다. 자주 쓰는 전파 전략전파 옵션설명실전 사용 예REQUIRED기본값. 기..
-
Spring AI 시리즈 6화 – RAG 구축하기 (1): Vector Store란 무엇인가기술과 산업/언어 및 프레임워크 2025. 6. 5. 12:19
RAG(Retrieval-Augmented Generation)는 외부 지식과 LLM을 결합해 보다 정확한 응답을 생성하는 대표적인 아키텍처입니다. 본 글에서는 RAG의 개념과 핵심 요소인 Vector Store의 구조와 역할, Spring AI에서의 구현 방식을 심층적으로 분석합니다. RAG, 이제 선택이 아닌 기본 전략이 되다 LLM을 활용한 서비스에서 자주 나오는 요구사항이 있습니다. “GPT에게 우리 회사 메뉴얼을 학습시켜야 합니다.”“PDF 문서를 기반으로 답을 해줬으면 해요.”“특정 용어는 우리 업계 기준에 맞게 설명되었으면 좋겠어요.” 이런 요구는 단순한 텍스트 생성만으로는 충족되지 않습니다.바로 이때 등장하는 전략이 **RAG(Retrieval-Augmented Generation)**입니..
-
Spring Framework 시리즈 13화 – @Controller와 @RestController 내부 구조와 처리 흐름기술과 산업/언어 및 프레임워크 2025. 6. 5. 11:19
스프링에서 자주 사용하는 @Controller와 @RestController, 그리고 @RequestMapping 애노테이션이 DispatcherServlet과 어떻게 연결되고 처리되는지 흐름 중심으로 설명합니다. @Controller와 @RestController는 뭐가 다른가요? 가장 간단히 정리하면:애노테이션반환 방식용도@Controller뷰 이름웹 페이지 응답 (HTML)@RestControllerHTTP 본문(JSON 등)API 응답즉, @RestController는 사실상 아래 두 가지의 합성입니다.@RestController== @Controller + @ResponseBody DispatcherServlet과 어떻게 연결될까? Spring MVC가 내부적으로 요청을 처리할 때, Dispa..
-
Spring Framework 시리즈 12화 – Spring MVC 구조의 출발점: DispatcherServlet과 요청 처리 흐름기술과 산업/언어 및 프레임워크 2025. 6. 3. 11:49
Spring MVC에서 요청이 들어오면 어떤 경로를 따라 응답이 만들어질까요? DispatcherServlet을 중심으로, HandlerMapping, Controller, ViewResolver까지의 흐름을 자연스럽게 정리합니다.Spring MVC의 진짜 시작점은?우리는 보통 컨트롤러부터 코드를 쓰기 시작합니다.@GetMapping("/hello")public String hello() { return "hello";}근데 정말 이게 전부일까요?이렇게 작성된 코드는 어떻게 실행되고, 어떻게 우리가 작성한 뷰 이름을 찾아가는 걸까요?그 중심에는 바로 DispatcherServlet이 있습니다.사실상 Spring MVC의 모든 요청은 DispatcherServlet을 거쳐서 흐릅니다.Dispatche..
-
Spring AI 시리즈 5화 – Prompt Template과 Prompt Engineering 전략기술과 산업/언어 및 프레임워크 2025. 6. 3. 11:47
Spring AI에서 제공하는 PromptTemplate 기능을 바탕으로, LLM 응답을 더 정밀하게 제어할 수 있는 프롬프트 설계 전략을 살펴봅니다. 다양한 실전 예시와 함께 Prompt Engineering의 핵심 개념을 정리합니다. 우리가 GPT나 Hugging Face 모델을 쓸 때 가장 많이 하는 실수 중 하나는 이겁니다.그냥 질문만 던지고 결과가 별로면 모델 탓을 한다는 거죠.사실 LLM의 성능은 모델의 파라미터 수나 학습 데이터만으로 결정되지 않습니다.**어떻게 질문하느냐(Prompting)**도 그 못지않게 중요합니다.프롬프트 엔지니어링(Prompt Engineering)은 이 “질문 설계”를 통해 원하는 출력을 이끌어내는 기술입니다.Spring AI는 이걸 위한 도구로 PromptTemp..