이번 포스트에서는 Annotation Processor에 대해 정리해 보겠습니다. Annotation Processor란? Annotation Prcoessor란 소스 코드에 붙어있는 어노테이션 정보를 읽어서 컴파일 단계에서 컴파일러가 java 파일 혹은 바이트 코드를 생성하여 새로운 소스 코드를 생성할 수 있는 기능을 제공하는 javac(Java Compiler)에 내장된 도구입니다. 여기서 컴파일될 때 어떤 프로세서가 동작할지 결정하는 것은 프로세서를 찾는 'Service Loader'라는 기능의 도움으로 수행됩니다. Annotation Processing 원리 Annotation Processing은 javac에 의해 여러 round에 걸쳐서 동작합니다. 첫 번째 라운드는 컴파일이 사전 컴파일 단계..
문제 발생 Caused by: NotAuthorizedException{message=Failed since user is not authorized., cause=com.amazonaws.services.cognitoidentityprovider.model.NotAuthorizedException: Temporary password has expired and must be reset by an administrator. (Service: AmazonCognitoIdentityProvider; Status Code: 400; Error Code: NotAuthorizedException; Request ID: a28d40a9-5e7c-4661-9453-f2adeb8c4b61), recoverySugge..
이번에는 도커 컨테이너의 라이프사이클과 관련 명령어를 정리하겠습니다. 도커 컨테이너의 라이프사이클 도커 이미지가 컨테이너로 생성될 때의 라이프 사이클은 위의 그림과 같습니다. 도커 컨테이너 생성부터 종료까지 생명주기별로 다루어보겠습니다. 도커 컨테이너 생성 컨테이너 생성 - docker create $ docker create [image] docker create 명령어는 받은 도커 이미지를 컨테이너로 생성합니다. docker create 명령어를 입력하면, 도커엔진이 로컬 호스트에서 이미지 정보를 찾아서 컨테이너를 생성합니다. 정상적으로 수행되면 도커 엔진이 생성한 컨테이너의 해쉬값을 반환합니다. 만약, 로컬 호스트에 이미지가 없을 경우에는 도커엔진이 자동으로 docker pull을 실행하여 Dock..
이번 포스트에서는 코루틴의 suspend 함수 원리와 CPS(Continuation Passing Style)에 대해 정리하겠습니다. 코루틴의 suspend는 어떻게 동작할까? 코루틴을 이용하면 비동기 작업을 순차적으로 처리하여 동시성 문제를 해결할 수 있습니다. 그러므로, 코루틴을 사용하면 콜백 지옥에서 벗어날 수 있고, 혹은 Reactive streams를 사용하기 위해서 복잡한 함수형 프로그래밍의 체이닝 방식을 사용하지 않을 수 있습니다. 그런데 코루틴이 네트워크 요청과 같은 비동기 작업을 순차적으로 처리할 수 있는 이유는 무엇일까요? 결론부터 말하면, 코루틴의 일시 중지하고 작업을 처리한 후 나중에 해당 지점에서 다시 재개할 수 있는 기능 덕분입니다. 이러한 기능 덕분에 비동기 작업을 처리할 때 ..
도커란? 도커(Docker)는 리눅스 컨테이너에 리눅스 어플리케이션을 프로세스 격리기술을 사용하여 더 쉽게 컨테이너로 실행하고 관리할 수 있게 해주는 오픈소스 프로젝트 입니다. 도커는 일반적으로 도커 엔진(Docker Engine) 혹은 도커에 관련된 모든 프로젝트를 말합니다. 도커 엔진(Docker Engine)은 컨테이너를 생성하고 관리하는 주체로서 이 자체로도 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 프로젝트입니다. 도커의 생태계에 있는 여러 프로젝트들은 도커 엔진을 좀 더 효율적으로 사용하기 위한 것에 불과하기 때문에 도커의 핵심은 도커 엔진이라고 할 수 있습니다. Virtual Machine(가상머신) vs Docker Container(도커 컨테이너) 기존에도 가상화 기술은 존..
원시 문자열(Raw String Literal)이란? Kotlin의 원시 문자열(Raw String)은 문자열을 표현하는 리터럴 중 한 유형으로 문자열 내에 이스케이프 문자를 사용하지 않고 특수 문자나 여러 줄의 텍스트를 문자 그대로 표현하는 문자열 리터럴입니다. 원시 문자열의 특징 원시 문자열은 아래와 같은 특징을 가집니다. 원시 문자열은 삼중따옴표(""")로 묶어서 정의 -> 따옴표가 아닌 삼중따옴표로 묶어서 정의합니다. 이스케이프 문자를 사용하지 않음 -> Raw String Literal 내에서는 \n, \t, \"와 같은 이스케이프 문자를 사용하지 않아도 됩니다. 따라서 특수 문자를 그대로 포함할 수 있어 가독성이 높아집니다. 여러 줄의 텍스트 처리 -> 여러 줄로 구성된 텍스트를 표현할 때 유..
Fastlane이란? Fastlane은 Android 및 iOS 어플리케이션의 배포를 자동으로 도와주는 오픈소스 프로젝트입니다. Fastlane을 이용하면 스크린샷, 앱 릴리즈, 코드 서명 등의 배포할 때 필요한 반복작업들을 자동화시킬 수 있습니다. Fastlane에서 지원하는 기능은 다음과 같습니다. 1. 스크린샷 자동화 2. 베타 배포 3. Play Store 배포 4. 코드 서명 (iOS용) 이 포스트에서는 Fastlane 설치 및 설정, Beta 배포와 Play Store에 배포하는 방법을 다루어보도록 하겠습니다. Fastlane 설치 Fastlane을 설치하는 방법은 homebrew를 이용하는 방법 등의 다양한 방법이 존재하지만, 가장 권장하는 방법은 Bundler를 이용하여 설치하는 것입니다...
이번 포스트에서는 AWS Access key를 발급받고 aws-cli를 사용하는 법을 정리하겠습니다 IAM에 들어가기 먼저, [Security, Identity, & Compiliance] -> [IAM] 에 들어갑니다. 사용자 선택하여 들어가기 Users 탭에 들어가서 사용자가 없다면 Add Users에 들어가서 사용자를 만들어주고 사용자가 존재한다면 Access key를 발급하고 싶은 사용자를 클릭하여 들어가줍니다. Access key 생성하기 Security credentials 탭을 선택하고 Access keys 항목에 있는 Create access key 버튼을 선택해줍니다. 그러면 Access key가 정상적으로 생성이 됩니다. 생성된 Access key ID와 Secret access key..
이번 포스트에서는 Cognito를 통해서 S3에 액세스 할 수 있도록 설정을 하고, 안드로이드에서 Amplify를 이용해서 S3에 파일을 업로드하는 과정을 정리하겠습니다. App에서 AWS Resource에 접근하는 과정 AWS는 많은 서비스들을 제공하는데 이 서비스들에 접근하는 방법들은 여러가지가 있습니다. 가장 빠르고 간단한 방법은 IAM 사용자 Access Key와 비밀번호를 사용하여 AWS 리소스에 액세스하는 것입니다. 하지만, Access Key와 비밀번호를 사용하여 접근하는 방법을 사용하려면 개발자는 이 Access Key를 노출시켜야 합니다. 다행히도, Client Secret들을 노출시키지 않고 AWS 서비스에 안전하게 접근할 수 있는 방법이 있습니다. 이 방법은 Identity pool을..