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 ..
컨테이너 관리하기
·
Infra
리눅스 부하 테스트stress tool 사용하기부하 발생시킬 container 생성90mega로 부하동작 시켜보기컨테이너 리소스 제한컨테이너 사용 리소스 확인cAdvisor 동작시켜보기cAdvisor github 이용해서 다운 받으면 cadviosr 도커 컨테이너가 동작한다. cadviosr container에 접근하는 방법먼저 cadvisor가 8080포트를 이용중이어서 포트포워딩 해주기그리고 localhost:108으로 접속하기docker stats로도 cpu momory block I/O 정보 확인 가능데이터 영구적으로 보존하는 방법도커 컨테이너에 있는 데이터를 나의 host에 저장한다.docker run -d --name db -v /dbdata:/var/lib/mysql -e MYSQL_ROOT..
컨테이너 다루기
·
Infra
Conatainer 만들기Dockerfile을 이용해 컨테이너를 빌드한다.dockerfile 문법FROM base 이미지(운영 환경)COPY 컨테이너 빌드시 호스트의 파일을 컨테이너로 복사WORKDIR 컨테이너 빌드시 명령이 실행될 작업 디렉토리 설정CMD 컨테이너 동작시 자동으로 실행할 서비스나 스크립트 지정build 해보기dockerfile과 소스 파일을 준비하고 빌드해보기docker build -t [컨테이너이름]:latest [docker파일 위치]만들어진 이미지 확인실행시켜보기docker hub에 이미지 배포docker login으로 docker 유저 이름 비밀번호 입력개인 저장소에 올릴 때는 docker tag webserver:v1 hyoungjoon/webserver:v1 이런식으로 tag..