본문 바로가기
OpenSource/Spring Boot

6) ENS Project - DB로 전환01

by 태하팍 2024. 10. 9.
반응형
오늘의 개발 목표!

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] - Study - JPA 소개

2016.12.15 - [OpenSource/JPA] - Study - JPA 맛보기 냠냠~

2021.11.22 - [Study/Study group] - springbootStudy07- 스프링부트에서 JPA 사용하기

2021.12.20 - [Study/Study group] - springbootStudy07 - SpringBoot + Jpa + Mustache로 개발

2024.09.02 - [OpenSource/JPA] - JPA 연동 가이드 - 이론편

2024.09.10 - [OpenSource/JPA] - JPA 연동 가이드 - 개발편


JPA에서 가장 중요한 것은 기존에는 table구조를 미리 잡고 들어갔다면 JPA는 객체로 테이블을 다룬다.
그래서 Entity들을 보고 어떤 구조로 잡혀있는지 알수가 있다.

말하자면 2가지 능력이 필요하다.
1.  DB 테이블 설계 능력
2. JPA 활용 능력

우선 필요한 것들을 정리해보자.
Naver api 사용시 필요한 것은?
accessToken 생성을 위한 clientId, clientSecret가 필요하다.
위의 아이디와 시크릿은 네이버 커머스 api센터에서 발급한 애플리케이션 id와 secret이다.

머릿속에 그림을 그려보자.

고객이 네이버 로그인을 통해 로그인을 수행한다.
여기서 얻을수 있는 정보는 이름과 이메일 사진 정보 등이 있다.
여기서 이메일이 유니크Key이다! 로그인이 200 ok이면 db를 이메일 정보로 찔러서 있으면 필요한 정보들을 가져오고 
없으면 DB에 Insert 시킨다.
정보는 아래와 같다.
이름, 이메일, clientId, clientSecret을 저장 시킬수 있다.  
단, clientId, clientSecret는 어플리케이션을 만들어야한다.
이 커머스 api를 사용하기 위해 만들어야할 어플리케이션이다.
정책상 수작업을 해야할 듯 싶다. 이 부분은 자동화 할 수 있는지 찾아보자!

이제 업체 테이블이 만들었다면 이 업체가 가지고 있는 상품정보들을 저장해야한다.
이 상품 정보들은 엑셀을 만들때 사용된다.

1:N 관계가 될 것이다.

LLM을 통해 리턴되는 Json을 text로 저장
당연히 업체 id가 필요하다.

간단하게 발주만 생각하고 현재 기능만 생각하면 아래처럼 만들수 있다.
상품id, 업체id, json data, 수정날짜, 생성날짜


이제 뭘 해야할 지 딱~정해졌다 ㅋㅋ
위에서 언급한 아래의 2가지 능력 중 설계를 마쳤다.
이제 JPA연동을 하여 활용하면 끝이다:) 참 쉽죠잉~

1.  DB 테이블 설계 능력
2. JPA 활용 능력

JPA를 활용하려면?

Database가 필요하다.
현재는 CI/CD조차 없으니 AWS 같은건 패스~
로컬에 DB를 생성하자!

전제조건으로 Docker가 깔려져있다는 가정하에 진행한다.

DB 생성은 참 간단하다.
회사에서도 그냥 클릭클릭으로 만들수 있고
AWS에서도 클릭클릭으로 연동이 가능하다.  - 
2022.02.04 - [CM/aws] - aws db연동을 해보자!

로컬이니 그냥 docker로 이미지를 pull 받아서 셋팅 하면 끝이다.

docker pull mysql

 혹은 버전을 지정해서 pull 할 수 있는데 버전은 https://hub.docker.com/_/mysql/?tab=tags 요기에서 확인하면 된다.

최신으로 셋팅해보자!

docker images명령어로 확인!

이제 Docker DestTop으로 가서 런 시키면 됩니다.
명령어로 해도 좋고 가서 해도 좋고 자유죵!

런을 할 때 옵션이 있는데 옵션을 선택해줍니다.

명령어로는 아래와 같습니다.

docker run --name ens-mysql -e MYSQL_ROOT_PASSWORD=ens1004 -d -p 3306:3306 mysql:latest

아래처럼 mysql을 동작 시킵니다.

터미널에서 확인해봅니다.

docker ps -a

이제 컨테이너에 있는 파드에 접근하여 mysql db를 만들어보겠습니다.

docker exec -it ens-mysql bash

mysql에 접속 합니다!
위에서는 root 에 패스워드를 설정했습니다.
-u는 user : root
-p는 password :  컨테이너 띄울때 설정 해줌!

mysql -u root -p

우리의 목표는 데이터베이스를 만드는 것 입니다.
그리고나서 JPA를 통해서 테이블을 만들려고 합니다! 

현재는 아래와 같이 4개의 필수 databaes가 있습니다.

 

CREATE DATABASE ens;

이번 포스팅은 여기까쥐~

7) ENS Project - DB로 전환02에서 투 비 컨틴유~~~

반응형