의존성 없이 Java만을 사용해서 Configurable한 WAS를 만들어보았습니다.완성된 코드 미리보기시작하기에 앞서 완성된 코드를 먼저 확인하고 가겠습니다!말보다는 코드로Main.javapublic class Main { public static void main(String[] args) throws IOException { Server server = new Server(new ServerConfiguration()); server.start(); } }Configuration class를 기반으로 서버를 시작합니다ServerConfiguration.javapublic class ServerConfiguration extends Configura..
Spring AI 소개 및 필요성Spring AI는 기존 Spring 개발자가 인공지능(AI) 기능을 프로젝트에 쉽게 통합할 수 있도록 설계된 프레임워크입니다. AI 기술이 빠르게 발전하면서 다양한 애플리케이션에서 AI 기능이 필요해졌습니다. Spring AI는 이러한 요구를 충족시키기 위해 다음과 같은 기능을 제공합니다:다양한 AI 모델 지원: OpenAI, Microsoft, Amazon, Google, Hugging Face 등 주요 모델 제공자를 지원합니다.모델 간의 이식성: 모델 제공자 간에 동일한 API를 사용하여 코드 변경을 최소화하면서 쉽게 전환할 수 있습니다.고급 AI 기능: 텍스트 생성, 이미지 생성, 음성 변환, 오디오 트랜스크립션 등 다양한 AI 기능을 제공합니다.데이터 관리: Ap..
신청스프링 캠프 2024 신청"빨리 가려면 혼자가고, 멀리가려면 함께가라!" 올해부터 스프링 공부를 본격적으로 시작 했었고, 스프링이라는 거대한 생태계에 관심이 생겼다.지금, 진행하는 프로젝트에도 2023년 가을에 나온 Spring AI 를 사용하기 시작했고 이 생태계가 꾸준한 기술발전에 더 함께하고 싶어졌다. 마침, 애플리케이션 서버 개발자들과 함께 가치있는 기술에 관한 정보과 경험을 '공유'하는 "스프링 캠프 2024" 참여하기로 했다. Spring Camp SpringCamp2024SpringCamp2024springcamp.ksug.org 입장행사는 SETEC 컨벤션 홀에서 진행되었다 들어가자 마자 접수를 하고 팔찌, 키캡, 스티커, 물을 받고 입장했다.메인홀에는 카카오뱅크랑 현대 자동차에서 나와..
장애 발생 배경 최근 프로젝트에서 예기치 않은 도메인 장애가 발생했다. 이는 Grafana 모니터링 도구를 통해 관리 중이었음에도 불구하고, HTTPS 인증서가 갱신되지 않아 발생한 문제였다. 첫 번째 갱신 시도 실패 약 열흘전 인증서 만료가 임박함을 알았을때, Certbot을 통해 인증서를 갱신하려고 시도했었다. 하지만 Certbot은 인증서 만료일이 아직 한 달 이상 남았다고 판단하여 자동 갱신을 실행하지 않았다. 이는 실제 만료일과 Certbot의 인식 사이에 오류가 있음을 나타냈다. $ sudo certbot renew The following certs are not due for renewal yet: git-challenge.com/xxx.pem expires on 2024-06-10 (sk..
데이터베이스 선택은 많은 개발 프로젝트에서 중요한 결정 중 하나이다. 특히, SQL과 NoSQL 사이에서 선택하는 것은 각각의 장단점을 이해하고, 프로젝트의 요구 사항에 가장 잘 맞는 기술을 선택하는 데 중요하다. 이번 프로젝트를 진행하며 기획적으로 어떤 서비스를 진행할지는 결정 되었지만, 아직 종류의 데이터베이스를 사용해야 할지 쉽게 결정되지 않았다. 그렇다고, 개발을 미룰 수는 없기 때문에 SQL과 NoSQL을 둘 다 사용할 수 있도록 개발을 했던 경험을 공유해보려 한다. 특히, Spring의 Dependency Injection(DI) 기능과 추상화를 사용하여 데이터 액세스 계층을 설계하는 과정에 대해 다루고 있다. Spring Data를 사용해서 개발하였고, SQL을 사용하기 위해 Spring D..
서론 개발 과정에서 API 문서화는 팀 내외부의 소통을 원활하게 하고, API의 사용성을 향상시키는 중요한 과정이다. 지난 Git-Challenge 프로젝트에서는 Swagger를 활용해 API 문서를 생성했었다. NestJS - openapi Swagger는 강력한 도구이지만, 서비스 코드 내에 Swagger 데코레이터를 직접 작성해야 했기 때문에 코드의 길이가 길어지는 문제에 직면했었다. 코드를 작성하고 관리하는 과정에서 이러한 방식이 실제 작업 흐름에 방해가 되는 것을 경험했다. Spring REST Docs로의 전환 이러한 경험을 바탕으로,이번 Exam-Lab 프로젝트는 좀 더 효율적인 방법을 모색하게 되었고, 그 과정에서 Spring REST Docs를 발견했다. Spring REST Docs의 ..
Spring Web MVC 2강의를 들으면, HandlerMethodArgumentResolver 를 통해서 실제 로직을 실행해서 매개변수 값을 할당하는 방법을 Member 매개변수를 통해서 배운다. 또, 단순 어노테이션으로 검증하지 못한 복잡한 검증 로직을 수행해서 검증하고 BindingResult 를 통해서 오류를 발생하는 방법을 배운다. 하지만, 복잡한 검증 로직이 반복되면 매번 BindingResult 를 사용할 수 없기 때문에 Custom Validation Annotation을 만드는법을 알아보자. 상황 PathVariable로 들어오는 examId 값은 데이터베이스 조회를 통해서 유효한 id인지 검증해야한다. 단순 어노테이션이 아닌 데이터베이스 까지 조회해야하므로 검증 로직이 필요하다. @R..
우리 Git Challenge 서비스는로 Git문제를 풀다가 모르는게 생기면 어떻게 하는가?! 바로, Google이나 Naver에 검색하던가 GPT, CLOVA X와 같은 ai에게 물어본다. 이는 사이트 이탈율과 직결된다! 우리 서비스 내에서 학습과 문제풀이를 한번에 병행할 수 있도록 CLOVA X를 MergeMasters 일원으로 영입하자!! 기획 1. CLOVA Studio 기반 AI의 역할 교육 지원: Git 관련 질문에 대한 즉각적인 답변 제공 문제 해결: 실시간으로 발생하는 Git 관련 문제에 대한 해결책 제시 시나리오 기반 학습: 다양한 Git 사용 시나리오를 통한 실습 기회 제공 2. 활용 방안 인터랙티브 챗봇: 사용자의 질문에 실시간으로 응답하는 AI 챗봇 통합 3. 기술적 요구사항 API..