AWS Lambda - API Gateway로 S3 파일 업로드 API 만들기 #3 - API Gateway - Lambda 연결 및 테스트

이미지
안녕하세요. 남산돈가스입니다.

AWS Lambda - API Gateway로 S3 파일 업로드 API 만들기 #1 , #2 에 이어 마지막 시간인 API Gateway - Lambda 연결 및 테스트가 남았습니다.

지난 포스팅까지 Lambda를 이용해 업로드 함수를 생성했고, API Gateway와 S3 기본설정을 통해 S3 파일 업로드 기능의 기본설정을 마무리했습니다. 오늘은 이 두 설정들을 연결하여 최종적으로 S3 업로드 Micro Service를 완성하겠습니다.


먼저 지난 포스팅에서 API Gateway를 생성했고, uploader라는 리소스까지 생성했습니다. 이번엔 이 uploader라는 리소스에 POST 매서드를 추가하고 작성했던 Lambda Function을 설정합니다.


통합 유형 - Lambda 함수Lambda 리전 - 'Lambda함수를 생성한 리전'Lambda 함수 - '작성한 Lambda 함수명(리전 선택 시 자동완성으로 검색 가능)' 위와 같이 설정한 뒤 저장을 선택합니다.



저장을 선택 시 다음과 같이 uploader라는 리소스 밑에 post 매서드가 생성 된 것을 확인하실 수 있습니다.



다음으로, 우측 상단의 통합 요청을 선택하시면 아래와 같은 화면이 나옵니다.
그 중에서 하단의 본문 매핑 템플릿을 선택합니다.


요청 본문 패스스루에서 '정의된 템플릿이 없는 경우'를 체크하고 Content-Type에 매핑 템플릿 추가하여

multipart/form-data 
을 추가하고 '템플릿 생성'에서 매서드 요청 패스스루를 클릭하시고 아래와 같은 패스스루가 나온 것을 확인하셨으면 저장을 누릅니다.

여기까지 설정을 완료하셨다면, API Gateway와 Lambda Function의 연결이 모두 완료 된 것입니다.
이제 실제 이 API Gateway를 배포하여 엔드포인트를 발급받고 실제 업로드가 되는지 확인만 해보면 됩니다.
작업 탭을 선택하시고 API 배포를 선택한 뒤 배포할 스테이지 이름 및 설명…

android Multidex 적용

테스트 프로그램을 만들거나 프로젝트 초기에는 별문제 없지만
개발하는 소스와 라이브러리가 많아지면서 꼭 발생하는 오류가 있습니다.

LEVEL EXCEPTION: com.android.dex.DexIndexOverflowException: method ID not in

바로 Dex 오류 입니다.

1. 오류 발생 원인
 android apk에는 Dalvik Executable이라는 Dex 파일 존재합니다. 1개의 Dex파일 안에는 참조 될수 있는 함수의 개수는 65,536개 라고 합니다. 위의 에러는 함수가 총 65,536개 이상이 되었을때 발생하는 오류 입니다.
난 저렇게 많이 안썼는데 생각 하실수도 있지만 개발에 필요한 라이브러리 파일들의 함수들 까지 생각한다면 저 숫자는 어느정도 납득할수 있을 것입니다.

그래서 문제의 해결방법으로 Multidex를 적용하는 방법을 알아보도록 하겠습니다.

2. gradle 설정

android { defaultConfig { multiDexEnabled true } } dependencies { compile 'com.android.support:multidex:1.0.1' } Multidex를 사용하기위해서 defaultConfig 쪽에 사용하도록 설정 하고
dependecies 를 추가 합니다.

3. 소스 추가(Application이 있는 프로젝트)

@Override protected void attachBaseContext(Context base) {super.attachBaseContext(base); MultiDex.install(this);}
Application을 만들어서 작업하는 경우 Application 클래스안에서
MultiDex.install 함수를 추가 합니다.


3. 소스 추가(Application이 없는 프로젝트)

<application android:name="android.support.multidex.MultiDexApplication&quo…

[카드뉴스] 댕댕이와 따뜻한 겨울나기

이미지
1. 털관리
겨울에는 개의 털이 체온이 떨어지지 않도록 하는 효과가 있으므로 절대 털을 짧게 깎거나 자르지 않도록 한다.
엉킨 부분을 빗겨주고 전체적으로 꼼꼼하게 브러쉬로 정돈해준다.
엉킨 털은 겨울철 눈이나 비로부터 개를 보호해주지 못하며 보온 기능 역시 떨어지기 때문이다.
꾸준한 털 관리는 건조한 겨울 동안 비듬이 발생하지 않도록 예방해준다.

2. 목욕은 실내에서
목욕 후에 개를 야외로 내보내야 할 때는 털이 완전히 말랐는지 확인한다.
갑작스러운 추위에는 목욕의 횟수를 줄이거나 안 하는 것도 좋다. 추운 날씨에는 개의 털을 말리는 데 더욱 많은 시간이 소요된다. 날씨가 추워짐에 따라 개가 감기에 걸리지 않도록 주의해야 한다. 꼭 목욕을 시켜야 한다면 따뜻한 물로 간단하고 짧게 목욕을 시킨 후 최대한 빨리 털을 말리는 것이 좋다. 찬물 목욕은 개의 체온을 너무 떨어뜨리고, 겨울의 낮은 기온으로 인해 목욕 후 개의 체온이 다시 올라가기 힘들기 때문에 피해야 한다. 3. 발바닥 털 정리 이것은 발바닥 사이사이에 눈이나 얼음이 붙지 않도록 예방해준다. 산책을 한 후 개의 발바닥에 균열이나 상처가 있는지, 쓰레기 등이 붙지 않았는지 확인한다. 이를 방지하기 위해 발바닥에 바셀린 혹은 크림을 바르면 효과적이지만, 바닥에 자국이 남고 끈적일 수 있으니 주의한다. 려견용 신발을 착용하지 않는다면, 산책 후 발바닥에 묻은 눈 위에 뿌려진 제설용 화학 약품이나 소금 등을 잘 닦는 것이 중요하다. 이러한 화학물질은 독성이 있으며 소금은 개의 발바닥을 자극하고 따끔하게 할 수 있다. 4. 사료는 적당히 개가 규칙적으로 먹이를 잘 먹는 것은 몸에 필요한 에너지를 비축하고 체온을 유지하여 겨울을 잘 나는데 중요하다. 실내에서 기르는 개들은 겨울에 식사량을 늘릴 필요가 없으며, 되려 과체중이나 비만 등의 문제를 야기할 수 있다. 사료의 양을 늘이는 것은 오직 겨울에 활동량이 많거나 겨울 내내 야외에서 생활하는 개들에게 해당되는 사항이다. 개의 사료 양이나 필요…

[Xcode Tip] Git LFS 대용량 파일 다운받기

이미지
지난번에는 svn에 있는 레파지토리를 Git허브로 옮겨보았는데요. 사용하고 있던 라이브러리 중 500MB가 넘은 파일이 있었습니다.
이파일은 업로드 하고 나서, git clone으로 다운받아서 빌드를 했는데. 빌드가 되지 않았습니다. 여기저기 구글링을 해보았는데, LFS 설정이 되지 않아서 였습니다.
LFS란large file handling을 하기 위해 github에서 만든 오픈 소스입니다. Git에서는 대용량 파일을 다루기가 적절하지 않기 때문에, 이부분을 지원하기 위해 나온 오픈소스입니다.

Git에서 clone을 받은 프로젝트에는 해당파일이 134 바이트였습니다. git 허브 에는 525MB으로 확인됩니다.




사용법은 의외로 간단했습니다.
우선 Xcode로 clone을 받습니다.  (터미널이나, github에서 직접 다운받으면, clone받은 프로젝트 내에 git 폴더가 생기지 않을 수 있으니, xcode로 clone을 해주세요)


그다음 터미널을 열고, 해당 프로젝트로 가서 git lfs pull 명령어를 눌러주시면, 다운로드 받는걸 보실수 있습니다.


다운로드가 완료 된 뒤에, 빌드를 하니, 정상적으로 빌드가 되었습니다.
lfs을 이용하면, 대용양 파일을 git에 저장하고 사용할수 있습니다.
* 참고 URL https://docs.gitlab.com/ee/workflow/lfs/manage_large_binaries_with_git_lfs.html










[AWS] 통합결제를 위한 조직에 계정 초대

이미지
지난번 포스팅에서 AWS 통합결제 계정의 구성방법에 대해 확인 해 보았습니다.

이번 포스팅 에서는 실제 통합계정을 구성하는 방법에 대해 알아 보겠습니다.

통합계정 생성을 위해서는 AWS Organizations 을 활용합니다.


먼저 저희 팀에서는 실제로 진행 중인 서비스의 구성을 어떻게 적용하였는지
소개해 드리고자 합니다.

아래는 통합계정을 설정하기 전 운영 상황입니다.


위와 같이 각 서비스 별로 별도의 계정을 구성하였으며
대금은 동일한 계정에서 지급되고 있었습니다.

이런경우
단지  각각의 계정에서 청구서를 별도로 확인해야 하는 번거로움 뿐만 아니라
AWS 사용량 증가에 따른 할인률 적용도 불가능한 상황이었습니다.


통합결제 할인 적용 및 운영의 편의를 위하여 아래와 같이
통합계정 조직을 구성하였습니다.

이렇게 구성하면
iFriendsPet 계정에서 Namdopass 및 Fico2000 계정의 청구서를 통합관리 할 수 있으며
3개의 계정에서 사용되는  AWS 사용량을 합산하여 통합할인 적용이 가능하게 됩니다.

통합계정 생성을 위해서는
결제를 진행할 마스터 계정에서 조직을 생성해 주어야 합니다.

AWS 콘솔의 상단 우측 사용자 명을 클릭하고  “내 조직” 으로 이동합니다.




조직 설정 페이지로 이동하여 Create organigation을 선택합니다.



All Feature 와 Consolidate Billing 선택 화면이 표출되는데 일단 All Feature를 선택하여 계정을 생성하겠습니다.


조직이 생성 되었습니다.
이제 조직에 계정을 추가하기 위해 Add Account  를 선택합니다.





계정 초대를 위한 화면이 표출되면
Invie Account 를 선택하고
아래 입력란에 초청하고자 하는 계정의 Master Account E-mail 주소를 입력한 후
Invite 를 선택합니다.


이제 연결 하고자 하는 계정에 초대 진행이 완료 되었습니다.


이제 초대받은 계정에서
조직가입 수락을 진행해 주면 계정 연결이 완료 됩니다.

초대…

android의 SharedPreferences알아보기

android에서 최초실행 여부, 간단한 설정한 값등을 어디에 저장 하면 좋을까요?
로컬DB에 쓰기, 파일에 쓰기, SharedPreferences 사용하기등 다양한 방법이 존재합니다.

그중에 이러한 작업들은 android에서 기본적으로 제공하는 SharedPreferences를 활용하면
쉽게 쓰고 읽을수 있습니다.

1. SharedPreferences란?

 - 간단하게 말해 xml파일에 필요한 데이터를 저장하여 쉽게 읽고 쓰게 하는 것 입니다.

 - 경로 : data/data/패키지명/shared_prefs/SharedPreference 에 파일이 저장

2. 객체얻어오기

 - getSharedPreferences(String name, int mode)
  -> 위 함수를 통하여 SharedPrefrences 객체를 받아 올수 있습니다.
  -> 첫번째 인자  name은 해당 SharedPreferences의 이름입니다. 특정 이름으로 생성할수 있고 해당 이름으로 xml 파일이 생성된다고 생각하시면 됩니다.
  -> 두번째 인자 mode는 읽고 쓰기 권한 관련된 Mode라고 생각하시면 됩니다. 일단 MODE_PRIVATE만 생각하세요.

3. 저장하기

SharedPreferences pref = getSharedPreferences("pref", MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); editor.putString("key1","value"); editor.putInt("key2",10); editor.commit(); 저장 하는 소스입니다.
SharedPreferences 객체를 생성하고 데이터를 저장하기 위해서 Editor 객체를 받아 옵니다.
Editor 객체를 통해 원하는 값을 key, value 형태로 입력하고
commit을 통하여 완료 하면 데이터 저장은 완료 됩니다.

저장할수 있는 데이터…

AWS Lambda - API Gateway로 S3 파일 업로드 API 만들기 #2 - API Gateway, S3 셋팅

이미지
안녕하세요. 남산돈가스입니다.

지난 포스팅에 이어 오늘은 두번째 시간인 API Gateway와 S3 셋팅을 진행해보겠습니다.

먼저 API Gateway 콘솔로 이동해서 새로운 API Gateway를 생성합니다.


그 다음 API URL에 매칭 될 리소스를 생성합니다. 저 같은 경우는 리소스 명을 fileUpload로 생성했습니다.
 리소스는 실제 API Gateway가 배포가 되면 엔드포인트 URL이 발급되는데 그 해당 {{URL}}/리소스명 으로 API 요청을 보내면 해당 리소스 내의 매서드들을 호출할 수 있게 됩니다.


리소스까지 생성이 되었다면, 해당 리소스에 대한 매서드는 다음시간에 다루어보기로 하고,
왼쪽 탭에 이진지원이라는 탭을 선택하시고 이진 미디어 형식에 'multipart/form-data'를 추가합니다.

multipart/form-data 이 이진 미디어를 추가해준 이유는 해당 형식, 즉, multipart폼 형식으로 요청을 보낸 파일들을 API Gateway에서 받으면 자체적으로 파일데이터를 이진 바이너리 형식으로 변환하여 처리해준다는 것을 의미합니다. 
개인적으로 이 부분을 알지못해서 많은 시간동안 헤맸던 기억이 납니다..ㅠ


여기까지 설정을 모두 마쳤다면, Lambda 함수 연결 전의 API Gateway 설정은 모두 마쳤습니다.

그럼 다음으로, 실제 파일이 업로드 될 스토리지인 S3의 권한 설정을 해보겠습니다.

S3 콘솔로 이동하여 파일이 업로드 될 버킷을 선택합니다.

해당 버킷화면에서 권한 탭을 선택하시고 버킷 정책 메뉴를 선택합니다.
아래와 같이 권한을 부여합니다.


{"Version":"2012-10-17","Statement":[{"Sid":"AddPerm","Effect":"Allow","Principal":"*","Action":"s…