본문 바로가기

전체 글

(12)
MCP (Model Context Protocol) MCP (Model Context Protocol)Model Context Protocol (MCP)는 무엇일까?Model Context Protocol (MCP)는 애플리케이션이 대형 언어 모델(LLM)에 컨텍스트 정보를 제공하는 방식을 표준화하는 개방적이고 보편적인 프로토콜이다.AI Model이 다양한 데이터 소스와 도구에 연결할 수 있도록 만든 프로토콜이다.우리가 특정 서버에 자원을 가져오려면 HTTP 라는 프로토콜을 통해서 데이터를 가져왔다. MCP도 마찬가지다 AI가 다양한 자원과 데이터를 가져올 수 있도록 만든 프로토콜이다.MCP가 왜 필요한가?도메인에 대해서 모른다. LLM은 AI 모델이기 때문에 일반 데이터로만 학습이 되어 있다. 내 서비스에 LLM을 이용하기 위해서는 데이터를 학습시켜줘야..
[DevOps] 배포 전략에 대해서 알아보자 새로운 기능을 완료하고 테스트를 완료 후 운영 서버에 배포를 완료했습니다. 구현한 기능이 문제 없이 동작하는 지 확인하려고 운영서버에 들어가서 확인하던 중 버그를 발견하고 급하게 수정했습니다. 수정 내용을 바로 업데이트하려고 했지만, 업데이트를 하는 동안 어플리케이션이 빌드되고 실행되면 서비스가 잠깐 멈추기 때문에 업데이트를 진행할 수 없었습니다. 서비스가 중단 되지 않고 배포할 수 있는 방법이 없을까? 에 대한 의문을 가지게 되었고 여러가지 방법이 있어 정리해보고 프로젝트에도 적용시켜보려고 합니다.먼저 배포를 진행하려면 어떤 과정이 필요할까?새롭게 구현된 기능을 빌드하고 배포하려고 하는 서버에 다운로드를 받아야 합니다.현재 실행중인 프로세스를 종료하고 새롭게 빌드한 배포 파일을 실행해야 합니다.배포 파..
[JPA] could not initialize proxy - no Session 문제 상황JPA와 Hibernate를 사용하다 보면 다음과 같은 오류 메시지를 마주칠 수 있습니다.org.hibernate.LazyInitializationException: could not initialize proxy - no Session 해당 오류는 Lazy Loading이 활성화된 엔티티를 조회할 때, Hibernate 세션이 닫힌 상태에서 프록시 객체를 초기화하려고 할 때 발생합니다. 즉, 데이터베이스와의 연결이 끊어진 후에 지연 로딩을 시도하기 때문에 문제가 발생하는 것입니다.오류 발생 시나리오이 오류가 발생하는 대표적인 시나리오는 다음과 같습니다.컨트롤러 또는 서비스 레이어에서 JPA Repository를 통해 엔티티를 조회합니다.엔티티의 연관 객체가 Lazy Loading으로 설정되어 ..
[Ansible] 왜 Ansible을 사용하게 되었는가? Ansible을 왜 하게 되었는가?안정성과 효율성이 뛰어나기 때문이다. 기존에는 대부분 프로젝트를 배포하고 구축할 때 수동으로 진행했었다. 수동으로 배포를 진행하다보면 많은 문제가 발생했다.시간이 오래걸린다.예를 들어 서버에 웹서버를 띄우고 프론트, 백앤드 어플을 배포한다고 가정해보고 순서를 나열해본다. 간단하게 나열했는데도 많은 task가 필요하다.먼저 필요한 패키지 설치 (nginx, node, jdk)nginx.conf 설정node 버전 설정 (nvm 설치)jdk 설치gradle 빌드사람이기 때문에 실수할 수 있다.나는 기계가 아니다. 그렇기 때문에 실수를 할 수도 있다. 물론 스크립트를 정리해두고 하나하나 실행하면 실수할 확률이 줄어들지만 그래도 실수할 가능성이 존재한다.노드가 두개 이상이라면?구..
[Ansible] 어플리케이션 배포 자동화 Ansible 다중 서버 프로젝트 배포 자동화“Ansible provides open-source automation that reduces complexity and runs everywhere. Using Ansible lets you automate virtually any task."Ansible 공식 문서에 있는 소개 내용이다. Ansible은 거의 모든 작업을 자동화할 수 있다고 소개하고 있다. 오늘은 Ansible 에 대해서 다뤄보려고 한다.담당 업무 특성상 많은 프로젝트를 개발하고 있다. 그리고 프로젝트 성능을 위해서 여러개의 노드를 설정해야할 수 도 있다. 늘어난 프로젝트와 노드를 한번에 관리할 수 있는 솔루션이 필요했다. 현재 많은 양의 노드를 사용하는 프로젝트를 다루진 않지만…서버 노..
[Docker] 도커 배포 vs 일반 배포 프로젝트 운영 서버 구축을 도커라이징으로 진행하면서 느낀점과 마주친 에러를 나누려고 합니다.도커를 왜 하게 됐는지?운영 서버 구축을 앞두고 있었고 CTO님으로 부터 너 5년차에 어떤 개발자가 될꺼야? 라는 말씀에 현실을 직시하고 시작하게 되었습니다.도커에 대한 지식이 없어 공부하고 있었는데 제안해주셔서 설렘과 걱정을 가지고 시작하게 되었습니다.내가 느끼기에 기존 마이스 배포와 도커 컴포즈 배포 차이▶️ 주로 사용한 개발 스택인 백앤드는 스프링 부트, 프론드 앤드는 vue로 개발한다고 가정 하겠습니다.기존 배포 환경 구축윈도우 환경에서 개발을 진행합니다.제공 받은 테스트 서버에 Nginx, MySQL 등의 설치와 설정 그리고 개발 스펙에 맞춰서 패키지를 다운 받고 실행합니다.운영 서버에서도 테스트 서버에서..
[Linux] 로컬에서 SSH 키로 리눅스 서버 접속 유지보수하고 있는 프로젝트가 많이 때문에 서버에 접속할 일이 많이 있습니다.SSH 키로 서버에 접속하는 방법을 정리했습니다.Windows 환경을 기준으로 작성했습니다.1. SSH 키 생성먼저, SSH 키를 생성해야 합니다. ssh-keygen을 사용하여 SSH 키를 생성할 수 있습니다.1. Windows 터미널 열기2. SSH 키 생성 다음 명령어를 입력하여 SSH 키를 생성합니다.옵션을 사용해 다양한 설정을 할 수 있습니다.ssh-keygen -t ed25519 -C "email@example.com"ed25519 공개 키 암호화 알고리즘타원곡선 암호 알고리즘을 사용하는 공개키 암호화 방식은 기존의 RSA와 비교해서 상대적으로 작은 키 길이를 사용할 수 있으면서 동일한 안정성을 보여주므로 권장되는 공개..
[테스트 코드] TDD란? TDD(Test Driven Development)란?TDD란 Test Driven Development의 약자로 ‘테스트 주도 개발’ 이고, 소프트웨어를 개발하는 여러 방법론 중 하나 입니다. 제품이 정상적으로 동작하는지 확인하기 위해서 모든 코드는 테스트를 거치게 됩니다. TDD에서는 해당 기능이 정상적으로 움직이는지 검증하기 위한 테스트 코드를 작성합니다. 이를 통해 테스트가 실패할 경우, 테스트를 통과하기 위한 최소한으로 코드를 개선합니다. 최종적으로 테스트에 성공한 코드를 리팩토링 하는 과정을 거칩니다.TDD 프로세스Red - 실패하는 테스트 코드를 먼저 작성합니다.Green - 테스트 코드를 성공시키기 위한 실제 코드를 작성합니다.Blue - 중복 코드 제거, 일반화 등의 리팩토링을 수행합니다..