본문 바로가기

Project/APP

kotlin으로 s3 버킷에 이미지 올리기(awscognito)

 

 

진행하는 프로젝트 시나리오에서 aws s3에 사진을 업로드하고 ai서버로 key값을 보낸다.

 

그러면 ai서버에서 그 사진을 판독해서 다시 s3 버킷에 판독한 사진이 올라올린다.

 

이 후 그 사진을 다시 불러와 사용자에게 보여주며 판별 값을 통해 결과를 보여주는 형식인데

 

 aws s3와 통신하는 방법은 여러가지가 있지만

 

 그 중에서 aws cognito라는 사용자 인증방식을 통한 방법으로 진행했다.

 간단히 말하면 내가 접근 할 수 있도록 자격을 갖췄다라는 걸 증명해주는 플랫폼이다.

Amazon Cognito는 웹 및 모바일 앱을 위한 자격 증명 플랫폼입니다. Amazon Cognito는 OAuth 2.0 액세스 토큰 및 AWS 보안 인증을 위한 사용자 디렉터리, 인증 서버, 인증 서비스

 

 

 사용방법은 너무 많이 널려있기에 생략하고 

 문제가 생겼던 부분은 IAM 사용자의 역할에도 따로 S3 버킷에 접근할 수 있는 권한을 따로 설정했어야 했었다.

 

 이 문제로 꽤나 고생했지만 쓰고 보니 별거 아닌거 같다..ㅎㅎ

 

 사실 이 방법을 찾기 위해 시행착오가 두가지나 된다.

 

 1번째로는 서버에서 aws-s3와 통신할 수 있는 동적url을 가지고 s3에 접근해 업로드하는 방법

 

 - 가장 많이 사용하는 방법인거 같긴한데 아쉽게도 이미지파일이 자꾸 일반 파일처럼 올라가서 실패했다.

    동적 url을 받아와서 그 주소에 이미지파일을 바로 올리려고 해서 생긴 문제 같아서

    Bitmap을 사용한 이미지파일을 전환해서 보내려했지만 AI에서 사진 분석을 위해선 최대한 원본 그대로가
    좋을 것 같다는 생각이라고 하셔서 다른 방법을 찾아보게 됐다.

 

 2번째로는 AI서버에 직접 사진을 쏘고 s3에서 받아서 진행하는 방법

 

 - 다른 방법으로 전전긍긍하던 와중에 AI서버와의 직접 소통을 통한 방법이 생각 나 서버관리자 분이랑 해서 시나리오대로 
    잘 소통할 수 있게 됐지만 보안적인 측면에서 탈락됐다.

 

 그렇게 마지막 방법으로 앞선 이야기로 다룬 aws cognito를 통한 자격증명 방법으로 통신에 성공했고,

 보안도 챙기고 시나리오 대로 잘 진행 할 수 있게 됐다.

 

또한, 다운받을 때도 같은 방법을 사용하게 되어 시간을 훨씬 단축할 수 있게 됐다.

 

아 맞다 머릿속으로 생각한 데이터의 형식과 들어온 데이터의 형식이 달라서 조금 헤맸었는데

아직은 미숙해서 잘못된 생각을 한 것 같고 꼭 로그를 통한 데이터 확인은 필수 인것 같다.