GCP에 ElasticSearch 띄워서 검색 기능 구현하기
·
Dev
intro앱 기능 중 음식명으로 레시피를 조회하는 기능이 있습니다. 이 검색 기능에는 ElasticSearch를 사용해서 구현했습니다. ElasticSearch를 사용하면 성능이 매우 좋다는 정보를 많이 접했기 때문에 이를 기반으로 구현해 보았습니다.elasticsearch를 사용한 이유엘라스틱서치를 검색 엔진으로 사용할 때 독보적인 성능을 가지고 있습니다. 그 이유는 데이터를 저장하는 방식이 rdb와는 다른 방식을 사용해서 저장을 하고 있습니다. 엘라스틱 서치에서는 색인이라고 표현하는데 rdb에서 인덱스라고 표현하는 것을 역인덱스 구조로 저장하는 방식입니다.키워드에 인덱스를 주어지게 되어서 검색할 때 키워드를 이용해서 찾기 때문에 빠른 검색을 할 수 있습니다.ToolSpring 2.7.7ElasticS..
위치 기반으로 글 조회 기능 구현
·
Dev
들어가며게시판 기능인데 근처에 거주하고 있는 사람의 글을 조회할 수 있는 기능이 필요해서 게시글을 저장할때와 조회할때 위치를 반영해서 조회와 저장하도록 구현했습니다.ToolSpring boot 버전 2.7.7Naver Cloud MapsNaver Cloud Platform에서 Service 이용신청하기저는 위도, 경도를 이용해서 위치를 찾아낼 수 있는 Reverse Geocoding API를 사용했습니다.API요청은 가이드대로 요청하였습니다.https://api.ncloud-docs.com/docs/ai-naver-mapsreversegeocoding 일단 사용자 위치를 저장하고 조회할 수 있는 기능을 먼저 구현했습니다. 위도와 경도는 클라이언트에서 받아온 뒤 위치를 저장하고 조회하는 기능을 구현했습니다..
AWS IAM 계정 공유 와 AWS 서비스에 IAM 역할 적용
·
Infra
INTROAWS의 S3와 Lambda를 사용하면서 IAM에 대해서 알게 되었는데 좀 더 다양한 기능이 있어서 역할 생성과 사용자 관리를 사용해 보았습니다.AWS 공식 문서 https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/introduction.html 와 블로그 https://somaz.tistory.com/181를 통해서 학습했습니다.IAM이란?AWS Identity and Access Management(IAM)은 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스입니다. IAM을 사용하면 사용자가 액세스할 수 있는 AWS 리소스를 제어하는 권한을 중앙에서 관리할 수 있습니다. IAM을 사용하여 리소스를 사용하도록 인증(로그인) 및 권한..
fcm 이용해서 앱 푸쉬 구현
·
Dev
의존성spring boot 버전 : 2.7.7implementation 'com.google.firebase:firebase-admin:9.1.0'  https://firework-ham.tistory.com/111Google Firebase에서 새로운 프로젝트를 생성하고 새로운 비공개 키를 다운받습니다.Client에서 Firebase 서버에 요청을 해서 Token을 발급받습니다.우리 서버에 Client에서 발급 받은 Token을 저장합니다.서버에서 Push 알림을 보내야할 때 Token과 Message를 만들어서 Firebase 서버에 전송합니다.Firebase 서버에서 Push 알림을 Device에 전송합니다.구현일단 firebase 프로젝트를 만들면서 생성된 json파일을 resources 폴더에 ..
소켓 통신(채팅방 구현)
·
Dev
소켓 통신 사용하는 이유소켓 통신은 실시간 통신을 할 수 있고 HTTP 통신보다 효율적으로 통신을 할 수 있습니다.HTTP와 소켓 차이 HTTP 통신HTTP 통신은 클라이언트에서 서버로 요청을 보내고 서버가 응답하는 방식으로 통신이 이루어진다. 응답에는 클라이언트의 요청에 따른 결과를 반환한다.클라이언트의 요청이 있을 때 서버가 응답하는 방식(단방향 통신)최근에는 Keep Alive 옵션을 통해 일정 기간 동안 클라이언트와 Connection을 유지하는 방식으로 통신이 가능해졌다.소켓 통신클라이언트와 서버 양쪽에서 서로에게 데이터 전달을 하는 방식의 양방향 통신보통 스트리밍이나 실시간 채팅 등 실시간으로 데이터를 주고 받아야 하는 경우 Connection을 자주 맺고 끊는 HTTP 통신보다 소켓 통신이 ..
OCR로 영수증 데이터 가져와서 식품 데이터 분류하기(분류 모델 만들기) + Trouble shooting
·
Dev
Tool네이버 OCR General 버전python BeautifulSoup, SeleniumSpring boot 2.7.7AWS Lambda, API GatewayDockerOCR로 영수증에서 텍스트 추출하기Naver에서는 영수증에 특화된 OCR을 제공하지만 너무 비싸서 General 버전의 OCR을 이용해서 텍스트를 추출했습니다.상품 이름 외의 데이터는 정규식을 이용하거나 특정 문자를 필터링해서 List형태로 추출해냈습니다.)분류 모델 만들기분류모델을 만들기 위해서는 dataset이 필요해서 사용자들이 자주 사용할 마트를 선정해서 크롤링을 통해 데이터를 15000개 수집했습니다.전국통합식품영양성분표준데이터에 있는 식품 데이터를 사용했습니다.모델은 scikit-learn의 CountVectorizer ..
ElasticSearch로 검색 성능 높이기
·
Dev
intro검색 기능 구현이 필요한데 elasticsearch를 이용하면 빠르게 검색이 가능하기 때문에 elasticsearch를 도입하기 위해 테스트를 진행해보았습니다.Springboot 의존성 추가spring boot 버전과 맞는 elasticserach 의존성을 추가해 주기spring boot 2.7.7implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch:4.4.2'elasticsearch docker로 설치하기docker 먼저 설치 docker pull elasticsearch:7.17.3docker run -d -p 9200:9200 -e "discovery.type=single-node" elasticsea..
Swagger 사용하기
·
Dev
SwaggerAPI 문서화 자동화 툴어떤 API가 있고 해당 API를 쓰기 위한 양식을 알려주고 API를 호출해보고 테스트 할 수 있다.프론트에서 API를 쉽고 빠르게 이해하기 위해 활용한다.SpringDocSwagger UI를 만들고 Swagger annotation을 제공하는 라이브러리이다.SpringFox UI와 SpringDoc UI가 있는데 spring의 버전이 올라갈수록 SpringFox는 지원을 못하는 경우가 많다.dependency 설정implementation 'org.springdoc:springdoc-openapi-ui:1.6.15'Swagger Configure 작성import org.springframework.context.annotation.Bean; import org.spr..
Github Action을 이용한 CI/CD 파이프라인 구축
·
Ops
Docker와 github Action을 이용해서 구현했습니다.1. 프로젝트에 github-action workflow 작성할 yml 파일 생성.github/workflows 폴더 안에 위치해야 합니다.name: CI/CDon: push: branches: ["dev"] # dev 브랜치에 push 했을경우 pull_request: types: [closed] # pull_request closed 됐을 경우 workflow_dispatch: # 수동 실행 가능jobs: build: runs-on: ubuntu-latest # OS 환경 #if: github.event.pull_request.merged == true && github.event.pull_request.bas..
Docker-compose 다루기
·
Infra
Docker-compose여러 컨테이너를 일괄적으로 정의하고 실행할 수 있는 툴하나의 서비스를 운영하기 위해서는 여러 개의 application이 동작해야 한다.컨테이너화 된 application 들을 통합 관리할 수 있다.docker-compose의 문법에 맞춰서 yaml 파일을 만들어서 컨테이너를 실행시킨다.yaml 파일 작성 문법version : compose 버전(버전마다 지원 문법 다름)services : compose 이용해서 실행할 컨테이너 옵션 정의e.g. service: webserver:(컨테이너) (세부 정보들) bulild : . image:nginx ..