<feed xmlns="http://www.w3.org/2005/Atom"> <id>https://fittcha.github.io/</id><title>Run by Fittcha</title><subtitle>Java, Spring gabojago~</subtitle> <updated>2026-01-14T22:12:01+09:00</updated> <author> <name>fittcha</name> <uri>https://fittcha.github.io/</uri> </author><link rel="self" type="application/atom+xml" href="https://fittcha.github.io/feed.xml"/><link rel="alternate" type="text/html" hreflang="ko-KR" href="https://fittcha.github.io/"/> <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator> <rights> © 2026 fittcha </rights> <icon>/assets/img/favicons/favicon.ico</icon> <logo>/assets/img/favicons/favicon-96x96.png</logo> <entry><title>MCP? 만들어서 사용해보자</title><link href="https://fittcha.github.io/posts/mcp-agent/" rel="alternate" type="text/html" title="MCP? 만들어서 사용해보자" /><published>2026-01-14T00:00:00+09:00</published> <updated>2026-01-14T00:00:00+09:00</updated> <id>https://fittcha.github.io/posts/mcp-agent/</id> <content type="text/html" src="https://fittcha.github.io/posts/mcp-agent/" /> <author> <name>fittcha</name> </author> <category term="AI" /> <summary>AI Agent를 이용해서 업무를 하고 있지만, 매번 다른 사람들이 AI를 활용해서 일을 하고 무엇인가를 만들어 나가는 것을 보면 ‘아, 나도 저렇게 적극적으로 손쉽게 제어하고 싶다.’ 라는 부러움과 궁금함이 생기더라구요. 프롬프트를 잘 쓰고, 필요한 것을 직접 만들기도 하고, 다양한 AI Agent 결합 모드까지.. 나도 이것저것 해봐야지, 해봐야 늘지 싶어서 직접 MCP 서버를 만들어보기로 했습니다. 먼저 용어 정리 용어 설명 AI (Artificial Intelligence) 인공지능. 인간의 지능을 모방한 기술 전체를 말함 LLM (Large Language Model)...</summary> </entry> <entry><title>쿼리로 내 어플리케이션 거북이 만드는 법 6가지</title><link href="https://fittcha.github.io/posts/slow-query-pattern/" rel="alternate" type="text/html" title="쿼리로 내 어플리케이션 거북이 만드는 법 6가지" /><published>2025-12-29T00:00:00+09:00</published> <updated>2025-12-29T00:00:00+09:00</updated> <id>https://fittcha.github.io/posts/slow-query-pattern/</id> <content type="text/html" src="https://fittcha.github.io/posts/slow-query-pattern/" /> <author> <name>fittcha</name> </author> <category term="Database" /> <summary>모든 게 빨리빨리인 세상! 슬로우 푸드가 더 건강해보이지 않나요? 사람들은 여유를 가질 때 건강해집니다. 따라하면 당신의 어플리케이션도 거북이가 될 수 있다! 특별편입니다. 어떻게 하면 느려지는지도 알아야 잘 피할 수 있는 법. 쿼리 최적화 글은 많이 봤지만, 오늘은 반대로 내가 실무에서 겪거나 봤던 느린 쿼리 패턴들을 정리해봤다. 1. OUTER APPLY 남발하기 SELECT o.OrderNo, pay.PayMethod, dtl.TotalQty FROM OrderMst o OUTER APPLY ( SELECT TOP 1 PayMethod FROM OrderPay WHERE OrderNo = o.OrderNo ) pay OUTER APPLY ( SELE...</summary> </entry> <entry><title>IN절의 한계와 대안 - 대용량 조건 조회 2편</title><link href="https://fittcha.github.io/posts/in-clause-limit/" rel="alternate" type="text/html" title="IN절의 한계와 대안 - 대용량 조건 조회 2편" /><published>2025-12-25T00:00:00+09:00</published> <updated>2025-12-25T00:00:00+09:00</updated> <id>https://fittcha.github.io/posts/in-clause-limit/</id> <content type="text/html" src="https://fittcha.github.io/posts/in-clause-limit/" /> <author> <name>fittcha</name> </author> <category term="Database" /> <summary>지난 글에서 한방 쿼리를 분리하고 Java HashMap으로 조합해서 50초를 3초로 줄였다. 끝인 줄 알았지만, 운영 데이터 테스트를 여러 번 하다 보니 바로 새로운 문제를 찾았다. 바로,, 주문이 많은 행사 기간에는 1시간에 많게는 15,000여 건의 주문이 생성된 적도 있다는 것! 내 쿼리 분리 구조는 IN절을 사용하고 있었다. 15,000건을 IN절에 넣으면 어떻게 될까? IN절의 한계: 2,100개 파라미터 제한 SELECT * FROM OrderMst WHERE OrderNo IN ('ORD001', 'ORD002', ... , 'ORD15000') 이 쿼리를 실행하면? SQL Server에서 에러가 난다. IN절 내부에서 일어나는 일 IN절은 내부적으로 OR 조건으...</summary> </entry> <entry><title>모듈러 모놀리스 첫 적응기 - 컴포넌트 스캔 오류</title><link href="https://fittcha.github.io/posts/modular-monolith-scan/" rel="alternate" type="text/html" title="모듈러 모놀리스 첫 적응기 - 컴포넌트 스캔 오류" /><published>2025-12-22T00:00:00+09:00</published> <updated>2025-12-22T00:00:00+09:00</updated> <id>https://fittcha.github.io/posts/modular-monolith-scan/</id> <content type="text/html" src="https://fittcha.github.io/posts/modular-monolith-scan/" /> <author> <name>fittcha</name> </author> <category term="Spring" /> <summary>CouponFit Commerce 프로젝트에서 Hexagonal 아키텍처 + 모듈러 모놀리스 구조를 처음 시도했다. Product 도메인 개발 후 Controller까지 만들고 API 테스트를 하려는데… 응? 403? 프로젝트 구조 coupon-fit/ ├── cf-app/ ← 메인 실행 모듈 (com.fittcha.couponfit) ├── cf-common/ ← 공통 모듈 (com.fittcha.common) └── cf-product/ ← 상품 모듈 (com.fittcha.product) 문제 1: 403 Forbidden curl -X POST http://localhost:8080/api/products \ -H "Content-Typ...</summary> </entry> <entry><title>생성자 완벽 정리</title><link href="https://fittcha.github.io/posts/constructor/" rel="alternate" type="text/html" title="생성자 완벽 정리" /><published>2025-12-21T00:00:00+09:00</published> <updated>2025-12-21T00:00:00+09:00</updated> <id>https://fittcha.github.io/posts/constructor/</id> <content type="text/html" src="https://fittcha.github.io/posts/constructor/" /> <author> <name>fittcha</name> </author> <category term="Java" /> <category term="Spring" /> <summary>실무에서 @Autowired, @RequiredArgsConstructor 늘 쓰면서도 생성자가 정확히 왜 필요한 지 모르고 쓰는 주니어들 많을 것이다. 나도 어노테이션 따라 쓰기만 했지, 왜 생성자 주입이 좋은지, 롬복이 뭘 만들어주는지 제대로 인지하지 않은 채 사용하니 점점 잊어버리고 있었다. 그래서 이번에 생성자부터 정적 팩토리 메서드까지 쭉 정리해보기로 했다. 생성자란? 생성자는 객체를 만들 때 초기화해주는 것이다. 비유하면: 클래스 = 붕어빵 틀 객체 = 실제 붕어빵 생성자 = 붕어빵 만들 때 팥을 넣을지, 슈크림을 넣을지 정하는 과정 public class Coupon { private String name; private int discount; ...</summary> </entry> </feed>
