[AWS] serverless AWS Labmda testing - SQS & DynamoDB
AWS Lambda 테스트 코드를 작성한다. 나는 serverless 프레임워크 위에서 작업을 진행하고 있다. SQS 테스트serverless 문서에 따라 ElasticMQ를 사용했다. ElasticMQ는 Amazon SQS와 호환 가능한 메시지 큐 시스템이다. Amazon SQS를 테스트 하고 싶을때도 많이 사용된다고 한다.
[Error] Serverless DynamoDB local 설치 이슈
테스트를 위해 local DynamoDB를 serverless에 설치하려는데 에러가 발생했다. 1sls dynamodb install 설치 명령어를 입력하면 아래 에러가 발생하며 설치가 실행되지 않았다. Error: Error getting DynamoDb local latest tar.gz location undefined: 403 검색해보니 이미 많은 사람들이 겪고있는 문제였다. (Error getting DynamoDb local latest tar.gz location undefined: 403) 공식 해결법은 아직 없는 것 같고 라이브러리 코드를 조금 수정해서 해결할 수 있었다. 해결법node_modules/dynamodb-localhost/dynamodb/config.json 파일을 열어 download_url을 https://s3.us-west-2.amazonaws.com/dynamodb-local/dynamodb_local_latest.tar.gz로...
[React Native] 배포 및 릴리즈 기록
React Native로 개발한 앱을 여러번의 수정을 거쳐 빌드를 마치고 앱 스토어 심사를 기다리고 있다. 순탄하게 흘러갔던 과정이 단 하나도 없었던 것 같아 기록을 남겨놓으려고 한다. 빌드iOSiOS는 XCode 사용법이 익숙치 않아 초반에 어려움을 느꼈으나 한 번만 세팅만 잘 맞춰놓으면 그 뒤로 문제가 발생한 적은 없었던 것 같다. ‘Product > Scheme’ 설정에서 Build Configuration을 Release로 맞추고 ‘Product > Archive’를 눌러 실행하면 production 버전의 빌드가 시작된다. 정상적으로 빌드가 완료되면 Archive 히스토리와 함께 새로운 창이 뜬다. 배포할 버전을 선택하고 Distribute App 버튼을 누르면 배포가 진행된다. 앱 배포 및 TestFlight 기능을 사용하기 위해 App Store Connect를 선택했다. 다음 옵션도 대부분 App Store Connect에 관리를 위임하도록...
[React] ref 전달하기
React에서 자식 컴포넌트에 ref를 전달하려고 하면 오류가 발생한다. 123456789101112import { useRef, useEffect } from 'react'export function Parent() { const elementRef = useRef() useEffect(() => { // Does not work! console.log(elementRef.current) // logs undefined }, []) return <Child ref={elementRef} /> // assign the ref}function Child({ ref }) { // a new component return <div ref={ref}>Hello,...
[Javascript] Closure란
클로저란 함수의 레퍼런스와 함수를 둘러싼 state, 즉 lexical 환경을 합쳐서 부르는 말이다. 클로저는 내부 함수에서 외부 함수 scope에 접근할 수 있도록 해준다. JavaScript에서 클로저는 함수가 생성될 때마다 함수 생성 시점에 클로저가 생성된다. Lexical scoping아래 코드를 살펴보자. 123456789function init() { var name = "Mozilla"; // name 은 init에서 만들어진 local variable이다 function displayName() { // displayName() 은 내부 함수이다. 클로저를 형성한다. console.log(name); // 외부 부모 함수에서 만든 variable을 사용하고있다. } displayName();}init(); init()은 name이라는 local variable과...
React Native Xcode archive 실패 - Operation not permitted
Archieve를 진행하려고 하는데 계속해서 에러가 발생했다. 1jest-haste-map: Watchman crawl failed. Retrying once with node crawler. Usually this happens when watchman isn't running. Create an empty .watchmanconfig file in your project's root folder or initialize a git or hg repository in your project. Error: Watchman error: std::__1::system_error: open: /Users/sychoi/Desktop/Project/MyProject: Operation not permitted. Make sure watchman is running for this project. See...
svg 파일 크기 변경
로고 이미지로 svg 파일을 받아서 앱 아이콘 사이즈에 맞게 파일 변환이 필요했다. 이미지 비율은 유지하면서 로고가 중앙에 오도록 하여 전체 이미지 크기는 정사각형으로 고정이 필요했다. svg를 png로 변환해주는 사이트들이 많은데 그냥 프로그램을 설치하는게 제일 깔끔한 방법인 것 같다. 😌 rsvg-convert먼저 원하는 width와 height를 가진 png 파일로 변환한다. librsvg를 설치했다. ubuntu에서는 rsvg-convert로 사용가능하다. 1brew install librsvg 설치 후 아래 명령어를 입력한다. 1librsvg -a -w 1024 -h 1024 logo.svg > logo-libsrvg.png imagemagick이미지와 관련된 다양한 기능을 제공하는 소프트웨어이다. 1brew install imagemagick 아래 명령어를 입력하면 된다. 1magick -background none -resize 1024x1024...
Type 'false | Element' is not assignable to type 'ReactElement<any, string | JSXElementConstructor<any>> | ComponentType<any> | null | undefined'.
에러가 발생했던 코드는 아래와 같다. 12345678910111213export default function EventListScreen() { return ( <FlatList // ..... ListEmptyComponent={ !eventList.length && ( <Text>생성된 이벤트가 없습니다.</Text> ) } // .... /> )} 이 구문은 &&를 사용하는 inline logical 구문이다. React 공식 문서에서도 찾아볼 수 있다. 코드에 빨간 줄이 뜨긴 하지만 실행은 정상적으로 된다.React는 false를 만난 순간 그 뒤에 나온 코드를 무시하기...
TypeScript : Element implicitly has an 'any' type because expression of type 'string' can't be used to index
타입스크립트 에러가 발생했다. 실행에는 문제가 없었지만 빨간 줄이 너무 거슬렸다. 123456789const CONN_STATE = { 1: '준비', 2: '송출', 3: '종료', 4: '일시 중지',};console.log(CONN_STATE[stream.ConnState])// Error TS7053: Element implicitly has an ‘string’ type because expression of type ‘string’ can’t be used to index type ‘{ 1: string; 2: string; 3: string; 4: string; }’. index signature 관련 에러였다. Index SignatureJavascript에서 Object에 문자열로 접근할 수 있다. 이 때 암묵적으로 toString을 호출하기 때문에...