[Kotlin Spring] Relogging - Spring AI 활용 구현 정리 (OpenAI, ChatGPT API 사용하기)
·
백엔드/Kotlin + Spring
1. 서론프로젝트에서 뉴스 요약하기 기능을 구현하기 위해 OpenAI의 ChatGPT를 사용하기로 했다. 사실 이전 프로젝트에서도 GptAPI를 사용한 기능을 구현했었는데, 아래 사진처럼 클래스도 여러 개 만들어야 하고 더 효율적으로 AI 기능을 사용할 수는 없을까? 라는 생각을 하다가 Spring에서 AI를 지원한다는 정보를 알게 되었다. 이번 포스팅에서는 Spring AI를 사용하여 정말 간단하게 AI 기능을 구현하는 방법을 알아보겠다.  2. ReferenceSpring AI에서는 다양한 AI를 지원하며 공식 문서에서 이를 찾아볼 수 있다. 다음 링크는 OpenAI의 Chat AI 사용 방법에 대한 Spring 공식 문서 링크이다. 이 문서와 OpenAI의 공식 문서를 참고하여 코드를 작성했다.Sp..
[이벤트] 티스토리 오블완 챌린지
·
기타
티스토리에서 이벤트를 한다. fun main() { println("오늘 블로그 완료!")} 챌린지 이름은 오블완 2024.11.07 ~ 11.273주 동안 매일 블로그를 한 개씩 쓰는 챌린지이다. (거의 네이버 블첼) 코딩 블로그를 개발자로서 안 해볼 수 없겠지1일 1 아티클  일단 오블완 챌린지 홍보 먼저 하고 커피 줍줍  단 하루만 참여해도 푸짐한 상품이?다들 오블완 챌린지 참여하고 보상 get() 하자 https://www.tistory.com/event/write-challenge-2024 작심삼주 오블완 챌린지오늘 블로그 완료! 21일 동안 매일 블로그에 글 쓰고 글력을 키워보세요.www.tistory.com
OpenAI API Key 발급 (ChatGpt, Dell-E API 키 발급, 2024.10 최신 버전)
·
IT 트랜드
OpenAI의 ChatGpt, Dell-E 등의 AI 모델을 사용하기 위한 OpenAI의 API 키를 발급하는 방법에 대해서 알아보겠다. 1. OpenAI 회원가입다음 링크에 들어가거나 검색 창에 OpenAI API를 검색해서 OpenAI 회원가입을 한다.https://platform.openai.com/docs/overview 2. 결제 정보 등록 오른쪽 위 톱니바퀴 클릭  Billing -> Add payment details 클릭 이후 결제 정보 등록* 이후 Billing 페이지에서 요구하는 5달러? 6달러? 결제를 해주어야 한다. 그렇지 않으면 발급한 토큰으로 API를 사용할 수 없다. 3. API 키 발급 왼쪽의 Your profile -> User API keys -> Create new se..
[Java, Kotlin Spring] 인텔리제이 application.yml 환경변수 설정하기
·
백엔드
1. 실행 버튼 옆의 구성 편집 누르기 2. 환경 변수 옵션 추가 3. 환경 변수 설정환경 변수 칸에 다음과 같이 {환경변수}={값}; 형태로 입력 DATASOURCE_PASSWORD=0000;DATASOURCE_URL=jdbc:mysql://localhost:3306/test_db;DATASOURCE_USERNAME=root; 4. 스프링에 환경 변수 추가 5. 사용 @Value 어노테이션을 사용해서 환경변수를 가져다 쓸 수 있음예를 들어 위 데이터 베이스 url을 가져다 쓰고 싶으면 @Value("${spring.datasource.url}")
[Kotlin Spring] Relogging - 파일 다중 업로드와 Http 415 오류 및 해결 (스웨거 오류, MultipartFile)
·
백엔드/Kotlin + Spring
이번 포스팅에서는 코틀린에서 Json(이미지 설명) 파일과 함께 이미지 파일을 한 번에 여러 개 업로드하는 방법에 대해서 작성하려고 한다. 다중 이미지 업로드Controller 여러 이미지를 대한 입력받기 위해 @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)를 추가해 준다. 파일 입력은 MultipartFile 클래스로 받을 수 있으므로 여러 파일을 입력받기 위해 List 형태로 지정해 준다. Swagger 스웨거에는 다음과 같은 형태로 나온다 Add string item 버튼을 눌러서 입력할 file 개수를 정할 수 있다.  Service 이미지를 저장하기 위해 file system을 이용했다. 다른 방법으로는 AWS S3 등을 사용해 외부에..
[백엔드] Blog - 모든 엔티티 생성 시간, 업데이트 시간 설정하기 @CreatedDate, @LastModifiedDate, BaseEntity
·
백엔드/Java + Spring
BaseEntity다른 엔티티에서 BaseEntity를 상속하여 필드에 엔티티 생성 시간, 업데이트 시간을 추가할 수 있다. @MappedSuperclass 자동으로 엔티티 생성 시간과 업데이트 시간을 설정하도록 할 수도 있는데 다음과 같은 어노테이션이 필요하다.@CreateDate, @LastModifiedDate 하지만 이 두 가지만 설정하고 테스트를 해보면 어노테이션이 동작하지 않는 것을 알 수 있다. 어노테이션들이 동작하기 위해서 추가로 두 가지 설정이 필요하다. 1@EntityListeners(AuditingEntityListener.class) BaseEntity 클래스에 이 어노테이션을 붙여서 엔티티를 DB에 적용하기 이전에 콜백을 요청할 수 있도록 한다. 2@EnableJpaAuditing..
[백엔드] Blog - 전역 예외 커스텀 처리하기 @RestControllerAdvice, @ExceptionHandler
·
백엔드/Java + Spring
목차1. ExceptionAdvice1.1. handleGlobalException 메서드1.2. handleMethodArgumentNotValid 메서드 1. ExceptionAdvice (전역 예외처리 핸들러)최근에 개발한 블로그 프로젝트에서 사용한 커스텀 전역 예외처리 핸들러이다.  @Slf4jLombok의 어노테이션으로, 클래스에 로깅 기능을 추가한다. 이 어노테이션을 사용하면 log 객체를 생성하지 않고도 로깅할 수 있다.ResponseEntityExceptionHandler 내부에도 logger가 정의되어 있기는 하나 이 어노테이션이 사용하기 편리하다.  @RestControllerAdvice(annotations = {RestController.class})전역적으로 @RestControl..
[백엔드] Blog - 실행 오류 정리 (application.yml, SDK, test)
·
백엔드/Java + Spring
프로젝트를 git clone 하고 실행시킬 때 IntelliJ IDEA에서 발생했던 오류를 정리했습니다. 애플리케이션 실행 오류오류 내용 아래로 스크롤하다 보면 다음과 같은 오류 나옴 해결 실행 버튼 옆의 구성 편집 누르기  환경 변수 옵션 추가 및 설정application.yml 파일에 존재하는 다음 내용 환경 변수에 추가 (또는 yml 파일을 직접 수정){DATASOURCE_URL}{DATASOURCE_USERNAME}{DATASOURCE_PASSWORD}{JWT_SECRET_KEY}{JWT_ACCESS_TOKEN_TIME}{JWT_REFRESH_TOKEN_TIME} 오류 내용 다음과 같은 오류 또는 기타 오류 발생 시 해결 프로젝트 구조에서 적절한 SDK 선택 (Java 21 버전 중 선택) 오류 ..
[백엔드] 회원탈퇴(Soft delete) 및 회원복구
·
백엔드/Java + Spring
Soft delete란?데이터를 완전히 삭제하지 않고 논리적으로 삭제되었음을 나타내는 필드를 두어 데이터를 비활성화하는 방식이다.다음과 같은 상황에서 사용된다.회원 삭제를 호출했지만 회원 정보를 가지고 있어야 하는 경우회원 탈퇴 복구 기능이 필요한 경우“회원 탈퇴 후, 30일 뒤 영구삭제” 이런 상황에서 사용된다.  이전에 진행했던 프로젝트에서는 isDeleted(삭제여부)와 deletedAt(삭제시간) 필드를 두었다. 로직 회원 삭제 API가 호출되면 Spring Security가 요청에 포함되어 있는 JWT 토큰을 통해 유저를 인증하고 인증된 유저의 정보(Developer 객체)를 @AuthUser를 통해 파라미터로 주입한다. 메서드 내에서는 주입된 developer 객체의 id를 가져와 Servic..
[벡엔드] 카테고리 Java Enum 활용
·
백엔드/Java + Spring
카테고리를 테이블로 관리했을 때의 문제점 카테고리의 클래스를 구현하는 도중 문득 카테고리 각각을 테이블로 만드는 것이 상당히 비효율적이라고 느껴졌습니다. 그러한 이유는 다음과 같습니다.  카테고리 변경이 거의 일어나지 않음본 프로젝트 특성상, 한 번 정의된 카테고리 추가/삭제가 거의 발생하지 않는다. 따라서 카테고리 CURD는 프로젝트 초기 이후 거의 사용되지 않는다.관계 관리의 복잡성 증가Developer : DevLanguage의 관계는 다대다 관계이다. 연관관계 메서드 등을 구현하기 위해 코드가 길어지며, 운영 단계에서 중간엔티티가 증가한다성능 이슈테이블을 Join & Group by 하며 성능 부하가 발생한다. Java Enum 도입이러한 비효율을 해결하기 위해 다음 기술 블로그를 레퍼런스하여 J..