1. 문제 상황 어린이용 chatGPT를 만드는 프로젝트를 진행중인데,,,문제가 생겼다.LLM이 이전 대화의 맥락을 기억하지 못하는 것이었다.보통 chatGPT를 사용하면 기본적으로 이전 대화 내역을 기억해서 적절한 응답을 내려준다.근데, API 형태로 chatGPT를 사용하면 이전 대화 내역을 기억하지 못하는 문제를 발견했다.개발 환경은 Spring AI 1.0.0-M6, Java 17, gpt-4o-mini 이다. 2. 문제 상황 확인"고양이는 왜 그루밍을 할까?"에 대한 질문을 던졌을 때 적절한 응답을 받았다. 내가 AI에게 요청한 것은 답변을 받고 꼬리 질문을 9개를 받는 것이었다. 꼬리 질문 중에 "그루밍을 하는 다른 동물은 없을까?" 를 요청하고 답변을 받아 보았다. 이전에 고양이에 대해서 이..
1. 개요 Spring AOP(Aspect-Oriented Programming)를 활용하면, 권한 체크 로직을 모든 컨트롤러 메서드마다 반복해서 작성할 필요 없이 관점 지향 프로그래밍(Aspect-Oriented Programming) 방식으로 깔끔하게 분리할 수 있다.Spring AOP를 이용하여 API 호출 시 특정 역할(Role)만 접근 가능하도록 제한하는 방법을 정리하겠다. 2. 구현2 - 1. @RequireRole 어노테이션 생성 먼저, 권한 체크를 적용할 메서드에 사용할 커스텀 어노테이션을 생성한다.package com.example.infra.aspect;import java.lang.annotation.ElementType;import java.lang.annotation.Retenti..
1. 문제 상황 Kafka topic에 이벤트를 발행하기 위해서는 java 객체를 JSON 으로 직렬화하는 과정이 필요하다.이 때 변환하려는 이벤트에 LocalDateTime 타입의 필드가 있었고, 직렬화하는 과정에서 문제가 발생했다. ReservationCreatedEventpublic record ReservationCreatedEvent( UUID reservationId, Long userId, UUID restaurantScheduleId, LocalDateTime createdAt, // LocalDateTime LocalDateTime expiredAt // LocalDateTime) createdAt, expiredAt 이라는..
1. 문제 상황개발 환경에서는 Config Server 에서 데이터 소스를 가져다가 사용하고운영 환경에서는 github secrets, variales 에서 환경변수를 주입해서 EC2에 배포를 한다. 개발 환경의 yml을 보면,application-dev.ymlspring: application: name: auth-service config: import: "configserver:" cloud: config: discovery: service-id: config-service enabled: trueeureka: client: serviceUrl: defaultZone: http://localhost:19000/eureka/위 처..
1. Snake Case Snake Case는 프로그래밍에서 변수, 함수, 파일명 등 이름을 작성할 때단어 사이를 밑줄('_')로 구분하는 네이밍 규칙이다.모든 문자를 소문자로 작성하며, 공백 대신 밑줄을 사용하는 것이 특징인데, 예를 들어, user_namephone_number위와 같이 작성하면 Snake Case 를 따른 것이다. 일반적으로 JSON 데이터 포맷, 데이터베이스에서 주로 사용되는데, Java를 주로 쓰는 나로서는 Java의 기본 규칙인 Came Case와 충돌(?)하게 되어 문제가 될 때가 있다.물론, 문제라고 할 것 까지는 없는데,팀 프로젝트를 진행할 때는 코드 스타일을 정확하게 짚고 넘어가는 것이 협업하는 데 좋긴 할 것이다. 2. 팀 프로젝트 식당 예약, 줄서기 프로그램을 개발..