반응형 OpenSource179 7) ENS Project - DB로 전환02 저번시간에는 DB설계와 MySQL 셋팅을 해보았습니다.오늘은 JPA연동 작업 입니다.제일 먼저 Dependency를 걸어줍니다.JPA 관련, MySQL 관련, h2는 테스트 코드에서 MySQL이 아닌 h2를 바라봐야해서 필요 합니다 // jpa setting implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // MySQL - https://mvnrepository.com/artifact/mysql/mysql-connector-java runtimeOnly 'mysql:mysql-connector-java:8.0.33' // h2 for in-Memory test testRuntimeOnly 'c.. 2024. 10. 11. 6) ENS Project - DB로 전환01 오늘의 개발 목표!LLM 호출을 최소화하여 비용을 절감하는 로직을 구현!!!네이버 API를 통해 데이터를 조회한 후, 데이터가 변경되었을 때만 LLM을 호출하여 결과를 저장하고, 그렇지 않으면 기존 데이터를 그대로 사용하는 방식이다.로직은 대충 아래와 같다.naver api를 호출 -> modify date(naver)를 구해서 -> 기존 저장된 modify date(naver)랑 비교! -> 변경이 되었다면 -> open ai 호출 -> 결과 Json을 얻고 그 Json을 db에 저장! -> modify date(naver) 어려운것은 없다. 단지 없는 기능을 구현해야할 뿐!기능 구현에 필요한 것은?바로 JPA~!! 아래를 참고하면 될것 같다.2016.11.28 - [OpenSource/JPA] - S.. 2024. 10. 9. 5) ENS Project - 상품코드 가져오기 저번 시간에 하드코딩이였다!!2024.09.27 - [OpenSource/Spring Boot] - 4) ENS Project - open ai와 놀기(발주 개발)1건에 대해서만 일단은 처리를 한 것이다.이제는 현재 판매중이며 전시중인 상품들에 대한 데이터들이 필요하다.이 상품번호들은 파는 것들만 하드코딩하여 할 수도 있지만 귀찮다!!!naver api를 통해서 해당 정보들을 가져와서 자연스레 데이터를 만들도록하는것이 목표이다!결과아래와 같이 데이터들을 뽑아냈다!!Controller에서는 내가 원하는 서비스들을 호출만 하였다.String responseBody = naverStoreApiService.getChannelProductNumbers(accessToken);naverStoreApiService.. 2024. 9. 28. 4) ENS Project - open ai와 놀기(발주 개발) Json에서 오류 발생!오잉? 내용이 짤려서 응답을 받는다..그래서 max_tokens을 3000으로 requestBody.put("max_tokens", 3000);prompt_tokens는 4790인데 응답으로 3000 했더니..짤려서 나왔다.그래서 이번엔 5000으로 지정!requestBody.put("max_tokens", 5000);아래처럼 4096이 최대라고 한다.requestBody.put("max_tokens", 4096);4096으로 했지만 이름과 회사명을 null에서 채워넣기 때문에 토큰이 더 필요하다!!토큰 소비가 8886이나..역시나 부족하다!!!한번 돌릴때마다..돈이 나간다고 생각하니..방법을 생각해내야한다!해결방법으로는..토큰을 늘리는것보다 input쪽을 줄여야할것 같다!즉, .. 2024. 9. 27. 3) ENS Project 시작을 위한 결제 :) Project 진행을 위해 결제 완료! A.I를 연동해서 만들어야 기능은?- 발주 시스템!! - 조건 : 하나의 네이버스토어에서 여러가지 업체 물건을 팔아야할 때 유용하다!Spring진영에서 제공하는 AI를 가지고 개발하려고 했는데 생각이 바뀌었다.기존 LangChain으로 만들었던 걸로 우선적으로 테스트를 하려고 하니..AI 이녀석...정말 빠르게 발전하고 있었다.이미 이전에 개발했던 소스는 Deprecated 되었다!!! 럴수럴수 이럴수가..차라리 Open AI에서 제공하는 api를 사용하는게 더 좋다고 판단하였다.아래처럼 여러가지 기능들을 제공하고 있었다.음성관련 STT/TTS도 보이고 파인튜닝이며 여러가지를 제공하는 것을 보고 우선은 간단한 기능을 구현해보겠지만 추후에 좀 더 유용하다고 판단했다... 2024. 9. 26. The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.] [n/a]] with root cause CBT에 배포를 했는데 아래와 같은 오류가 발생하였다.오류 내용SQLState: 08S01The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server."}{"service": "cruise-admin-backend","timestamp": "2024-09-25T15:54:57.068+09:00","level": "ERROR","log": "Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing fai.. 2024. 9. 26. 알아두면 좋은 Kafka 이모저모 :) Kafka란?데이터파이프라인 구축에서 꼭 들어가는 친구 입니다.그런데 아직 경험해보지 못했습니다...!!경험할 기회가 있다면...꼭! 경험해보고 싶습니다:)그 날을 위해 Study~!! GoGo!어색한 용어들과 개념들부터 정리해보도록 합니다.우선 데이터 파이프라인(Data Pipeline)이란?데이터의 흐름을 자동화하는 프로세스를 의미합니다.다양한 출처에서 데이터를 수집하고 변환하고 처리한 후에 저장하거나 분석 도구에 전달하는 일련의 단계를 포함 합니다.데이터 파이프라인의 유형은배치 처리와 실시간 처리가 있습니다.요 근래에 Airflow라는 친구를 알게 되었는데 데이터 파이프라인 도구 중 하나 입니다.또한 kafka 역시 실시간 스트리밍 데이터 처리를 위한 데이터 파이프라인 도구 중 하나 입니다.그런데 .. 2024. 9. 16. 2) ENS Project - 노가다 하지마! ㅋㅋ(홀딩!) 지인이 NaverStore 발주와 송장입력 때문에 고통받는것을 보고!효율적으로 노가다 없이 일을 할 수 있게 도와주기 위해 IT전문인력으로써 무일푼으로 간단하게 만들어주기로 하였다 ㅋㅋ 잘 만들면 팔아먹어야쥐~일단 아래처럼 NaverStore api를 먼저 연동하였다.아래 api는 간단히 소개하면..신규주문건이 들어오면 발주를 해줘야한다.즉, 판매자가 확인했어요~고갱님~이라는 표식을 해주는 것이다.표식이 된 상품들은 중간업체라면 실질적으로 제품을 picking&packging을 하는 업체에게 어떤 상품이 몇개 팔렸는지 알려줘야한다.그때 필요한 api들이 Support와 Option 상품들 관련 api들이다.그 이후에는 송장처리를 해줘야하는데 요건 일단 Pass :)LLM의 경우는 하나의 업체라면 상관이 .. 2024. 9. 11. k8s환경에서 리소스 파일을 읽을 경우 유의 사항 오류발생오류는 Graphql Query Validation때문에 동작을 하지 않아서 schema.graphql을 다시 만드는 과정에서 오류가 발생했다. 로그를 확인해보니 resources아래의 파일을 못읽어오고 생성도 못하고 오류가 빵빵 터지는 상황이였다ㅋㅋ아래처럼 path를 잡아주니 로컬에서는 잘 돌아가지만 jar로 배포되는 Docker환경에서는 리소스파일이 jar파일에 포함이 됩니다.그래서 경로말고 클래스패스를 통해 리소스를 읽어야합니다.public GraphQLSchema getGraphQLSchema() throws IOException { // 스키마 파일 경로 String schemaFilePath = "src/main/resources/graphql/schema.graphql"; .. 2024. 9. 11. JPA 연동 가이드 - 개발편 이런.. 개발편은 wiki에 작성했던것을 옮겨적으려고 했으나..gRPC 스터디 하면서 작성한거라다시 작성 고고고~:)JPA를 한다는건 DAO(Data Acess Obejct) or Repository단이라 DB랑 연관있는 친구라gRPC를 하든 GraphQL을 하든 Restful로 하든 상관이 없습니다.단지 객체를 가지고 테이블 관련 매핑하는 작업을 한다는 것 입니다!이번에는 GraphQL때문에 GraphQL Query를 만들기 위한 Template이 필요합니다.이 템플릿을 관리 할 수 있게 MySQL에 저장해서 사용하고자 합니다.환경은 Spring Boot+Gradle+Jdk 22+MySQL1) Gradle을 사용하고 있으니 build.gradle에서 Dependency를 걸어줍니다.(아주 오래전엔..직.. 2024. 9. 10. JPA 연동 가이드 - 이론편 들어가기전 주저리처음 DB를 연동할 때 jdbc를 통해 db를 연동했다가sql mapper라는 iBATIS/MyBatis의 등장으로 편하게 사용하다가사용하다보니 반복적인 sql들도 많고 sql에 의존적이여서 JPA라는 것을 통해 객체지향적인 개발에좀 더 중점을 두게 되었습니다. 향후 어떻게 변할지 기대되네요 ㅎㅎJPA는 무엇일까요?오래전 자바 진영에서는 EJB(Enterprise Java Beans)라는 기술 표준을 만들었는데그안에 Entity bean이라는 ORM 기술이 포함되어있었습니다.하지만 너무 복잡하고 기술 성숙도가 떨어지고 J2EE 어플리케이션 서버에서만 동작 했습니다.이때 Hibernate라는 오픈소스 ORM프레임워크가 등장했는데 EJB의 ORM 기술과 비교해서가볍고 실용적인데다 기술 성숙.. 2024. 9. 2. Redis Cache 연동(Spring Boot) 학습 목표Spring Boot와 Redis를 연동하여 Application에서 Caching하는 방법을 학습Redis SettingRedis는 사내에서 제공되는 Redis를 사용! 우선 dev용으로 셋팅! SpringBoot + Redis Cache 연동Gradle Dependency// redisimplementation 'org.springframework.boot:spring-boot-starter-data-redis'RedisTemplate과 RedisCacheManager가 있는데 Cache는 RedisCacheManager를 사용 합니다.RedisCacheManager의 동작은 RedisCacheManagerBuilder를 사용하여 구성할 수 있으며, 이를 통해 기본 RedisCacheConf.. 2024. 8. 23. 1) ENS Project - Spring Boot + LLM(Open ai 적용 해보기) 2024.05.20 - [A.I/RAG] - ai? 맨땅에 헤딩 -6(langChain) : 간단 daum news로 RAG 실습 2024.05.13 - [A.I/RAG] - ai? 맨땅에 헤딩 -5(langChain) : langsmith 셋팅 및 tracing해보기!!2024.04.29 - [A.I/RAG] - ai? 맨땅에 헤딩 -4(langChain): vector DB 간단 사용!2024.04.26 - [A.I/RAG] - ai? 맨땅에 헤딩 -3(langChain) : 주요 컴포넌트 체크!2024.04.24 - [A.I/RAG] - ai? 맨땅에 헤딩 -2(langChain) : 튜토리얼 따라해보기!2024.04.19 - [A.I/RAG] - ai? 맨땅에 헤딩 -1(langChain) : a.. 2024. 8. 17. Account 이해를 위한 정리(SpringSecurity + OAuth2.0) 용어인증(Authentication) 해당 사용자가 본인이 맞는지 확인하는 절차인가(Authorization)인증된 사용자가 요청한 자원에 접근 가능한지를 결정하는 절차Authentication(인증) -> 인증 성공 후 -> Authorization(인가)Principal(접근 주체) : 보호 받는 리소스에 접근하는 대상Credential(비밀번호) : 리소스에 접근하는 대상의 비밀번호AuthenticationAuthentication 은 현재 접근하는 주체의 정보와 권한을 담는 인터페이스입니다.SecurityContext에 저장되며, SecurityContextHolder 를 통해 SecurityContext에 접근하고, SecurityContext 를 통해 Authentication 에 접근할 수 .. 2024. 7. 5. SpringSecurity OAuth2.0 사용(feat. No Authroization Server Support) 아래는 OAuth2.0을 개발하기 위해 리서치를 하다가 발견했던 내용 입니다.회사 위키에만 작성하느라 블로그에 너무 소홀했던거 같아 재포스팅 합니다:)OAuth2.0 spec 중 AuthorizationServer의 역할이 필요!자체 개발SpringSecurity OAuth2.0 사용인증서버 오픈소스 사용(KeyCloak?)논의 후 SpringSecurity OAuth2.0 사용하기로 함.sample 소스를 작성하다 Deprecated된 것을 발견!그래서 왜 Deprecated가 된거지? 라는 호기심으로 찾아보니..스프링 블로그에서 원인을 찾을 수 있었습니다.아래의 내용처럼 더이상 Authorization Server를 지원하지 않기로 함!..번역)2012년 10월에는 OAuth 2.0 인증 프레임워크인.. 2024. 7. 5. Spring Boot GraphQL Client 목표 이미 제공하는 graphql server가 있으며 해당 server에서 제공하는 graphql api를 호출하는것이 목표 입니다.GrapQL Client를 구성하는데 있어서 2가지 구성을 검토GraphQL Client(WebClient)RestTemplate clientGraphql Client(WebClient) Configimport org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.graphql.client.HttpGraphQlClient;import org.springframework.web.reacti.. 2024. 7. 3. 이론만 공부했던 패턴을 적용해보자:) 보호되어 있는 글 입니다. 2024. 5. 22. json to dto or json to values json데이터를 dto에 매핑하는 방법에 대해서 알아보겠습니다.1. ObjectMapper를 이용해서 매핑하기- mapper.readValue(json, new TypeReference>(){}); public Map getJson() throws IOException { Map productInfoMap = new HashMap(); ApplicationContext context = new AnnotationConfigApplicationContext(); // "data" 폴더 아래 모든 JSON 파일 가져오기 Resource[] resources = context.getResources("classpath:data/*.json"); f.. 2024. 5. 13. springboot-RestClient?? 안녕하세요 REST Clients에 대해서 살펴보겠습니다. 아래처럼 스프링프레임워크는 여러가지 REST endpoints를 제공합니다:) RestClient WebClient RestTemplate 동기호출 방식으로 RestTemplate를 학습하였는데요 2024.04.07 - [OpenSource/Spring Boot] - springboot - RestTemplate 적용 REST Client라는 친구도 있어서 정리 해봅니다. The RestClient is a synchronous HTTP client that offers a modern, fluent API. 이 친구는 동기방식의 HTTP Client인데요 RestTemplate보다 모던하다고 하니 옛날사람이 되지 않으려면 학습해서 사용해도 좋을.. 2024. 4. 7. springboot - RestTemplate 적용 안녕하세요~ 오늘은 스프링부트에서 http통신을 할 때 많이 사용하는 친구입니다. RestTemplate를 적용해보겠습니다. 이제 사용하지 않는가 싶었는데 알아보니 비동기방식이 Deprecated되었군요! 비동기는 webClient를 사용! 동기 방식인 RestTemplate를 적용해보겠습니다. 따로 dependency를 걸 필요는 없습니다. Web을 사용한다면 이미 아래와 같이 디펜던시를 걸었을테니깐요! ㅎㅎ implementation 'org.springframework.boot:spring-boot-starter-web' 이제 필요한건 RestTemplate을 사용할 수 있도록 Bean을 생성하는 것 입니다. @Configuration과 @Bean을 사용해서 아래와 같이 만들어줍니다. @Config.. 2024. 4. 7. springboot bootBuildImage bootBuildImage라는게 있어서 돌려보았습니다. 아래의 오류 메시지가 떴습니다. What the..ㅋㅋ Image name must be in the form '[domainHost:port/][path/]name', with 'path' and 'name' containing only [a-z0-9][.][_][-] bootBuildImage관련해서 아래의 사이트나 help를 통해 알아봅시다. https://docs.spring.io/spring-boot/docs/current/gradle-plugin/reference/htmlsingle/#build-image ./gradlew help --task :bootBuildImage ./gradlew help --task :bootBuildImage.. 2024. 3. 21. 이전 1 2 3 4 ··· 9 다음 반응형