반응형

분류 전체보기 10

S3 preSigned url

1. 개요기존에 S3에 파일을 저장할 때는 파일을 spring 서버로 보낸 후에 서버에서 S3와 연결해서 저장하는 과정으로 진행했다.  public String saveImage(MultipartFile multipartFile, String type) throws IOException { if(multipartFile == null || type == null) { throw new CustomException(INPUT_INVALID_VALUE_ERROR); } String originalFilename = multipartFile.getOriginalFilename(); String extend = originalFilename.substring(originalFilename.lastIn..

minIO S3

1. 개요알파프로젝트를 진행하면서 파일저장소(Object Storage)가 필요하게 되었다. 기본에는 AWS의 S3를 사용하였지만, 서버를 제공해주시는 바람에 사용할 수 없게 되었다. 그러던 와중 minIO S3에 대해 알게 되었다.1.1 minIO S3MinIO는 경량화된 고성능 객체 저장소로, AWS S3 API와의 호환성을 제공합니다. 이를 통해 기존의 S3 코드나 API를 크게 수정하지 않고도 프로젝트에 빠르게 적용할 수 있습니다. 또한, MinIO는 오픈 소스 기반으로 제공되어 사용자에게 비용 부담 없이 효율적인 객체 저장소 환경을 구축할 수 있습니다.MinIO를 도입함으로써 프로젝트의 서버 환경 제약을 극복하고, 안정적인 파일 저장 기능을 구현할 수 있게 되었습니다. 다음으로 MinIO의 설치..

WebRTC 번역중

socketwebrtc 연결 과정start를 통해 socket open, message, close, error 를 listen 상태로 유지handlePerrConnectioncreatePeerConnectionnew RTCPeerConnection을 통해 myPeerConnection 설정handleICECandidateEventsendToServer를 통해 ice data전송handleTrackEvent : 해당 함수를 통해서 얻어온 정보를 video tag의 srcObject 로 연결해준다?getMedia기존의 track을 stop미디어 장치를 얻어옴myPeerConnection에 track, localStream 추가handleNegoriationNeededEvent(createOffer).the..

코딩/WebRTC 2024.11.04

AWS monolithic APP 고도화(3)

1. 개요이번 글에서는 route 53을 중점적으로 사용한다. 이를 이용해서 도메인을 등록하고 https 통신을 구축한다2. 세팅2.1 도메인 설정먼저 도메인이 필요하다. route53에서도 구매가 가능하지만 가비아에서 도메인을 구매해서 사용한다. route53에 접속해서 구매한 도메인 이름을 입력해서 호스팅 영역을 생성한다. 그러고 리스트로 돌아가게 되면 다음과 같이 NS 유형이 생성되고 값이 4개가 존재한다.이 4개의 값을 가비아의 도메인 통합 관리툴에 접속한 뒤 네임서버 설정을 통해 입력해 준다.그리고 10분 정도 기다리게 되면 가비아에서 구매한 도메인을 AWS에서 관리할 수 있게 된다. 설정이 완료된 것을 확인해보고 싶으면 이메일을 통해 가비아의 알림을 확인하거나 다음의 명령어를 입력해 결과가 A..

코딩/aws 2024.11.03

AWS monolithic APP 고도화(2)

1. 개요이번 글에서는 저번에 만들어 두었던 stateless한 application을 ALB와 Auto Scale을 통해서 대용량 요청에 대해 scability 하게 처리할수 있도록 구조를 변경한다.2. 세팅2.1 대상 그룹대상 그룹은 ALB를 통해 관리되는 대상으로 해당 그룹 내에서 트래픽을 분배해 준다. 인스턴스 유형을 선택하고 앞서 생성해 준 VPC를 연결해 준다. 이때 상태검사 경로로는 기본 "/"를 선택하게 되면 코드 내부에서 추가적인 외부 api를 호출하기 때문에 응답이 느려지거나 외부 api에서 주기적인 연결로 인해 연결을 차단할 때 unhealty 판정을 받을 수 있다. 이를 해결하기 위해 "/suppliers" 주소로 상태 검사를 요청한다.대상 등록하는 과정은 Auto Scale이 처리..

코딩/aws 2024.11.03

AWS monolithic APP 고도화(1)

1. 개요이번 파트에서는 DB와 어플리케이션을 분리하는 작업을 진행할 것이다. 이를 통해서 어플리케이션들은 하나의 DB를 참조하는 stateless 한 구조로 변경할 수 있다. 또한 private subnet에 DB를 위치함으로 외부로부터의 접근을 막고 어플리케이션을 통해서만 접근할 수 있다.2. 세팅2.1 VPC 생성프로젝트를 위한 가상 네트워크를 만들어 준다. 단순하게 이름과 IPv4 CIDR 만 임의로 설정해 주면 된다. 다음과 같이 설정했다2.1.1 인터넷 게이트웨이가상 네트워크인 VPC에서 외부 인터넷과 통신을 하기 위해서는 인터넷 게이트웨이가 필요하다. 생성한 후에 뒤에서 routing table과 연결해서 각각의 subnet에서 외부와 통신이 가능하다.2.2 Subnet 생성생성된 VPC ..

코딩/aws 2024.11.02

AWS monolithic APP 고도화

1. 개요클라우드 컴퓨팅 수업에서 첫 번째 과제로, 서버와 DB가 하나의 인스턴스로 결합된 coffeesuppliers라는 monolithic 앱을 고가용성 측면에서 개선하는 과제를 받았다. 이번에는 이 monolithic 앱의 문제점을 분석해보고자 한다.2. 발견한 문제점2.1 stateful 서버DB와 서버가 같은 인스턴스에서 실행되기 때문에, 하나의 인스턴스에서 작업을 진행하다 다른 인스턴스로 변경되면 모든 작업이 사라지게 된다. 즉 DB에 대한 의존도가 높아 stateless 설계를 적용할 수 없다.또한 서버와 DB가 같은 컴퓨팅 자원을 공유하기 때문에 리소스 경합(Resource Contention)이 발생한다. 이로 인해 해당 자원에 문제가 생기더라도 어느 어플리케이션에 의해 발생한 문제인지..

코딩/aws 2024.11.02

Spring S3 파일 저장시 413 에러

1. 개요이미 spring 프로젝트로 S3에 이미지를 저장하는 api를 만들어서 EC2에 배포한 상황에서 팀원이 2mb 크기의 이미지를 업로드하니 413 에러가 발생한다고 말해주었다. 기존에 크기가 작은 이미지들에 대해서는 테스트를 통과했고, application.yml을 통해 받을 수 있는 multipartFile 형식의 크기를 20mb로 잡아놓았기 때문에 문제가 발생하지 않을 거라고 생각했기 때문에 해당 소식을 들었을 때 당황했지만 금방 문제를 해결할 수 있었다. servlet: multipart: max-file-size: 20MB max-request-size: 20MB 2. Nginx현재 EC2 서버에서는 nginx 를 통해 리버스 프록시 및 ssh 인증을 해둔 상태였다..

코딩/nginx 2024.09.29

spring boot, google sheets 자동화

1.  개요이번 프로젝트를 진행하면서 특정 요청에 대해 코드 내부적으로 해결하려 했지만, 시간의 부족으로 인해 축소해야 되는 기능이 생기게 되었다. 그렇다고 완전히 빼기에는 나름 핵심 기능이기 때문에 대안을 찾아야 했다. 그렇게 찾게 된 대안이 특정 요청에 대해서 해당 내용을 엑셀과 같은 오프라인에서 확인하고 해당 요청에 대한 후속 작업을 바로 처리하는 것이다. 원래는 엑셀을 활용해 수기로 해당 요청 데이터를 처리하려고 하였으나 이미 구현된 서비스들이 있을 거 같아서 찾아보게 되었다.2.  Google Sheets api그렇게 찾게 된 서비스가 GCP에서의 google sheets api이다"Google Sheets API는 Google 스프레드시트에 프로그래밍 방식으로 접근하고 조작할 수 있도록 해주는..

google AutoML Vision fastapi 연동

이번 학기 알파프로젝트를 진행하게 되면서 이미지 분석이라는 문제에 마주했다. 프로젝트 내용은 재활용품을 인식해서 적절한 처리 방법을 알려주는 앱으로 쓰레기의 사진을 찍게 되면 해당 사진을 분석해 어떤 물품인지(PP, PE, PS 등등) 판단해야 됬다.  처음엔 단순히 open ai의 vision을 사용하려 하였으나 우리는 단순히 큰 분류로 분류를 하려는게 아닌 플라스틱 내에서도 PP, PE, PS등을 분류하고 싶어서 더 좋은 모델이 필요했다.  또한 google 의 Teachable Machine 을 사용해서 우리가 직접 라벨링을 통해서 학습 모델을 만들 수도 있었다. 하지만 학습이 완료된 모델(keras) 를 fastapi에 연동하려 하였으나 tensorflow의 버전문제인지 아니면 python의 설정..

반응형