개발자취 145

서버개발자로서 살아남기 - MCP 실무에서 활용하기 with 옵시디언, mysql, 파일시스템 (1)

MCP란?MCP(Model Context Protocol) 는 Anthropic이 2024년 11월 26일 공개한 개방형 표준 프로토콜입니다.대규모 언어모델(LLM)이 인터넷, 데이터베이스, 파일 시스템 등 다양한 외부 툴과 안전하고 쉽게 양방향 소통할 수 있도록 만든 규격입니다. 쉽게 말해, AI 모델이 인터넷 검색, 파일 저장, 코드 실행, 데이터베이스 작업 등 여러가지 도구(tool)를 사용할 수 있게 해주는 공통의 사용 설명서라고 생각하면 됩니다. AI 분야의 "USB-C 포트" 라고 비유될 만큼, 어떤 AI 모델이나 도구든 동일한 방식으로 연결 가능합니다.MCP 등장 배경기존 방식의 한계점이전에는 AI 모델과 외부 도구 연결 시 여러 문제가 있었습니다:특정 프레임워크(예: LangChain, L..

n8n 을 이용한 PR AI 코드리뷰 가이드 (with Dooray)

AI 코드리뷰 workflowWorkFlow 템플릿n8n의 가장 큰 강점은 활발한 커뮤니티입니다. 다른 사용자가 만든 자동화 Workflow를 복사해 붙여넣기만 하면 손쉽게 내 n8n 인스턴스에 가져와 활용할 수 있습니다. 이번 AI 코드 리뷰 Workflow도 아래 WorkFlow 템플릿을 참고해 구현했습니다.https://n8n.io/workflows/3804-automated-pr-code-reviews-with-github-gpt-4-and-google-sheets-best-practices/ Automated PR Code Reviews with GitHub, GPT-4, and Google Sheets Best Practices | n8n workflow templateAI-Agent Code..

docker-compose을 이용한 n8n 설치 중 Error: Command "start" not found 이슈

개요docker-compose 를 이용한 n8n 설치중 아래와 같은 에러가 발생하였다.결과적으로는 docker-compose.yml 파일에서 volume 경로 문제였다. 아래는 GPT을 활용하여, 작성하였고, 중간에 내 언어로 몇몇 바꾸었다.Error: Command "start" not found 이슈 해결 가이드목표 : Error: Command "start" not found 및Named volume ... is used ... but no declaration was found 오류를 영구적으로 해결하고,n8n 컨테이너를 named volume으로 안전하게 재배치한다.🛠️ 문제 현상n8n 컨테이너가 즉시 종료(restarting 루프)되며 Error: Command "start" not foun..

ElasticSearch 클러스터 노드 용량 불균형 문제 해결

개요실무에서 온프레미스로 ElasticSearch Cluster를 운영하고 있는데, 총 8개의 데이터 노드 중 특정 노드에만 디스크 사용량이 집중되는 현상이 발생하였다. 운영 중인 ElasticSearch 클러스터는 공식 가이드에 따라 샤드 1개당 30~50GB로 설정하였으며, 인덱스마다 2~3개의 샤드를 사용 중이다. 현재 문제는 각 인덱스마다 2~3개의 샤드와 레플리카가 설정되어 있으므로, 총 4~6개의 샤드가 서로 다른 노드에 분산되어 저장된다. 그러나 여러 인덱스의 샤드 할당이 특정 노드에서 겹칠 경우, 해당 노드에 데이터가 집중되는 현상이 발생할 수 있다. 결국, 이러한 불균형을 방지하기 위해 클러스터 차원에서 샤드가 어느 노드에 할당될지 결정하는 설정이 필요하며, ElasticSearch는 이..

주니어 서버 개발자의 2024 회고

어김없이 돌아온 2024 회고...이번 회고는 키워드로 정리해보려고 한다. 특별한 이유는 없고, 가독성이 좋을 것 같다는 느낌이 있다.도전이번 연도는 유난히 힘들었다. 부족함을 채워야겠다며 공부에 힘썼던 작년과 달리, 올해는 도전을 많이 했고, 성공의 문턱에서 넘어지는 일이 꽤 많았다. 그런데 아이러니하게도, 이 또한 공부가 되었다. 특히 여러 과제를 하면서 대용량 시스템 설계에 대해 깊이 고민하게 되었고, 정말 많은 것을 배웠다. 아! 성공한 도전도 있다. 상반기에 쿠버네티스 관련 자격증 CKA를 취득했다.쿠버네티스 자격증평소 인프라에 관심이 많았고, 사내에서 사용하는 인프라 아키텍처가 비효율적이라고 생각했다. 물론 게임 도메인의 특성상 서비스 중단 시 타격이 크기 때문에 인프라를 여유 있게 운영하는 ..

생각생각생각 2025.05.08

서버개발자로서 살아남기 - JPA 사용시 조회방법에 따른 영속성 여부

개요스터디에서 Spring-JPA 환경에서, 쿼리메소드와 @Query 어노테이션을 이용한 JPQL, 네이티브 쿼리을 활용한 조회에 대해 이야기를 하다가, 3개의 조회방법 중 어떤 방법이 영속될까 라는 궁금증이 생겼다.위에서 언급했던 3가지 조회 방법에 대해 영속성 여부을 알아보기로 한다쿼리메서드Query 어노테이션을 활용한 JPQLQuery 어노테이션을 활용한 네이티브 쿼리 테스트관련 내용을 리서치해보는 것도 좋지만, 일단 아묻따 테스트코드를 작성해서 영속성 여부를 확인하였다.사용할 테이블은 회원 정보가 있는 테이블이고, Pk는 memberId이다. 세팅@Autowired private MemberRepository memberRepository; @Autowired private EntityMan..

개발자가 반드시 알아야하는 데이터베이스 - MYSQL(InnoDB)에서 잠금된 데이터을 조회할 수 있는 이유

개요최근 mysql의 잠금에 대한 이슈를 많이 다루고 있는데, s-lock, x-lock된 데이터에 대해 단순 조회가 어떻게 가능할까 라는 생각이 들었다. 일차원적으로 당연히 lock이 되었으니, 읽기가 안되는 것이 아닌가? 라고 생각할 수 있지만, mysq은 비잠금읽기(Consistent NonLocking Reads)로 동작하여, 잠금된 데이터도 조회가 가능하다. 비잠금읽기에 대해 자세히 알아보자.여담으로 mysql 8.0 책을 제대로 읽었다면, 해당 질문에 대한 답을 쉽게 할 수 있을 것이다.(위 생각에 대해 구글링 중 undo를 보자마자 아맞다! 싶었다..)비잠금읽기비잠금읽기mysql(InnoDB)는 기본적으로 비잠금 읽기(Consistent Nonlocking Reads)을 사용한다. 이는 se..

JAVA - Synchronized와 ThreadLocal 을 이용한 동시성 문제 해결

개요static와 synchronized의 연관관계에 대해 한번 정리를 해보려고 한다. 일단 JAVA에서 static은 클래스가 로딩될 때 메모리의 정적 영역(Static Area)에 할당된다.이 영역은 특징은 다음과 같다.JVM이 시작될 때 생성되며, 프로그램의 실행이 끝날 때까지 유지된다.클래스의 모든 인스턴스가 공유하는 공통된 값은 가진다.즉 멀티스레딩 환경에서 주의하여 사용해야한다.테스트아래 예시는 주의하지 않고 사용한 코드이다.public class A { public static int a; public static void plus() { a++; } }public class ATest { @Test public void testP..

ELK - 샤드개수 조정 (Failed to submit a listener notification task. Event loop shut down? java.util.concurrent.RejectedExecutionException: event executor terminated elastic)

개요 replaylog 관련 timeout 에러가 계속 발생하여, 확인해 본 결과, elasticSearch에 문제가 있었고, 정확히는 wb911 머신에 문제가 발생하였다. 머신에 들어가서 확인해보니, elasticsearch는 작동하고 있었지만, 알 수 없는 ERROR 로그들이 남고있었다. 그 중 하나는 아래 로그이다. Failed to submit a listener notification task. Event loop shut down? java.util.concurrent.RejectedExecutionException: event executor terminated elastic 일단 NSight를 확인해보니, 머신이 터지기 직전이여서, 재부팅을 부탁드렸다(다행히도 머신이 문제가 발생하자마자 메..

쿠버네티스 교과서 5장 - 볼륨 마운트 클레임을 이용한 데이터 퍼시스턴시

5.1 쿠버네티스에서 컨테이너 파일 시스템이 구축되는 과정 kubectl exec deploy/sleep -- sh -c 'echo ch05 > /data/file.txt; ls /data' 해당 명령어 시 권한 때문인지 작성이 안됨 ymal 파일에 defaultMode 추가하든가, 다른 수정방법 찾아봐야함 apiVersion: apps/v1 kind: Deployment metadata: name: sleep spec: selector: matchLabels: app: sleep template: metadata: labels: app: sleep spec: containers: - name: sleep image: kiamol/ch03-sleep securityContext: runAsUser: 10..

728x90