반응형

 

DynodbDB partiQL

NoSQL은 처음이라 

사실 등록, 조회, 수정, 삭제 모두 처음이다.

 

DynamoDB는 기본 키를 사용하여 테이블의 각 항목을 고유하게 식별하므로 등록 시 주의 점은 

기본키만 중복 안되게 하면 됐었다.

 

업데이트 쿼리를 진행하다 보니 하다 보니 아래 문구가 나왔다.

Where clause does not contain a mandatory equality on all key attributes

RDBMS에선 가능한 업데이트가 안된다.

where절엔 구분이 가능한 키 값이 들어가야 된다고 한다.

 

업데이트 후엔 리턴 값 설정이 있다.

  • ALL OLD * - 업데이트 작업 전에 표시된 항목 속성을 모두 반환합니다.
  • MODIFIED OLD * - 업데이트 작업 전에 표시된 업데이트된 속성만 반환합니다.
  • ALL NEW * - 업데이트 작업 후에 표시되는 항목 속성을 모두 반환합니다.
  • MODIFIED NEW * - UpdateItem 작업 후에 표시되는 업데이트된 속성만 반환합니다.

일단은 ALL NEW *  설정으로 사용해보기로 했다.

 

MODIFIED OLD  옵션은 업데이트된 내용을 속성만 반환된다고 했는데, 

실제 변경된 건지 안된 건지 중요해 보이지 않는다. 기존 값과 업데이트 값이 같아도 값이 리턴된다.

기존 값과 업데이트 값이 같든 다르든 해당 업데이트되는 속성은 무조건 업데이트되는 거 같다.

 

업데이트 문에

각 항목마다 SET을 추가해주고, 각 항목이 배열 형식이 있어서 다음과 같은 옵션이 있다.

  • LIST_APPEND: 목록 형식에 값을 추가합니다.
  • SET_ADD: 숫자 또는 문자열 집합에 값을 추가합니다.
  • SET_DELETE: 숫자 또는 문자열 집합에서 값을 제거합니다.

 

 

반응형
반응형

 

javascript로 dynamoDB 연동중

조회 후 리턴 정보가 object로 되어 있길래 

찾아보니 unmarshall 하는 게 있었다.

 

https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/Introduction.html

 

What is Amazon DynamoDB? - Amazon DynamoDB

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

공식문서엔 관련 내용이 없다. 

 

마샬링이란 한 객체의 메모리에서의 표현방식을 저장 또한 전송에 적합한 다른 데이터 형식으로 변환하는 과정이다.

DynamoDB에서 전송에 적합에 데이터 형식으로 변환해서 보내준다고 이해하면 되겠다.

조회 결과의 데이터는 object로 사용하려면 언마샬링이 필요하다.

 

https://hwanine.github.io/network/Marshalling/

 

import  { unmarshall } from '@aws-sdk/util-dynamodb';

// marshall된 오프젝트를 unmarshall 함수를 통해 변환해서 사용해야 한다.
const dataRow = unmarshall(data.Items[0]);

 

 

공통 조회에서 결과 리턴전에 처리하는 것도 고려해볼 만하다.

 

const send = async (queryParams) => {
  try {
    const data = await ddbDocClient.send(new ExecuteStatementCommand(queryParams));
    // console.log(data.Items[0]);
    // return unmarshall(data.Items);
    return {Items : data.Items.map(item => unmarshall(item)) };
    // return data
  } catch (err) {
    return {
      message: err.message,
      httpStatusCode: err.$metadata.httpStatusCode
    };
  }
};

 

 

참고

https://www.tabnine.com/code/javascript/functions/marshall

반응형
반응형

DynomoDB local

dynamoDB 도커로 검색하면 아래 링크로 안내한다.

https://hub.docker.com/r/amazon/dynamodb-local

 

Docker Hub

 

hub.docker.com

 

Simply run docker run -p 8000:8000 amazon/dynamodb-local to execute DynamoDB locally.

 

저걸 믿고 실행한 후  aws-sdk를 이용하여 접속 테스트를 했는데,테이블 목록이 조회도가 안되는 것이다.

 

AWS NoSQL Workbanch로는 접속이 되고 조회가 되는데도 안됐다.

하루 온종일 찾아봤다.

 

docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -inMemory -sharedDb

-inMemory는 필요 없다.

inMemory는 옵션은 도커 껐다 켜면 데이터가 없어지는 거 같다.

 

중요한 건 -sharedDB 요거다.

저거 한 줄 때문에. 2일 정도 고생. 

반응형
반응형

환경 sourcetree 3.4.7,  window 11에서 

소스트리 커밋 메시지에 한글 입력 시 중간에 한글이 없어진다.

 

해결 방법 :

설정 -> 시간 및 언어 > 언어 및 지역 > 옵션 > Microsoft  입력기에서

이전 버전의 Microsoft IME를  켬(ON)으로 한다.

 

설정 -> 시간 및 언어 > 언어 및 지역 > 옵션 > Microsoft  입력기

반응형
반응형

kotiln

// 처음 시행 함수정의는 main 으로 
fun main() {
 println("Hello, world!")

 // 주석은 이렇게

 // 한번 값 할당, 변경할 수 없다.
 val age = "5"
// Val cannot be reassigned 
 age = "6"

 // 값 할당과 변경 필요한다.
 var roll = 6
 roll = 7 
 // 타입 정의 
 var rolledValue: Int = 4
 
 // 문자열 템플릿 
 println("You are already ${age}!")
}

// 데이터 타입
Int       //  숫자 
String    // 쌍따옴표 사이 문자
IntRange  // 숫자 범위 정의 1..6
Boolean   // true or false


// 함수 정의
fun printHello () {
    println ("Hello Kotlin")
}

// 함수 호출
printHello()

// arguments 가 있는 함수 정의
fun printBorder(border: String, timesToRepeat: Int) {
    repeat(timesToRepeat) {
        print(border)
    }
    println()
}

// 리턴값이 있는 함수 정의
fun roll(): Int {
     val randomNumber = (1..6).random()
     return randomNumber
}

// 기본 연산자
*     // 곱
/     // 나누기
+     // 더하기
-     // 빼기
=     // 할당

// 논리 연산자
>    // 큰다
<    // 작다.
==   // 같다.
>=   // 크거나 같다
<=   // 작거나 같다.
!=   // 같지 않다


// 랜덤 숫자 생성
val diceRange: IntRange = (1..7)
val randomNumber = diceRange.random()

fun roll() {
     val anotherRandomNumber = (1..6).random()
     println(randomNumber)
     println(anotherRandomNumber)
}

// repeat 함수를 이용한 반복 실행
fun printBorder() {
    repeat(23) {
        print("=")
    }
}

// if /else 조건문
fun main() {
   val num = 4
   if (num > 4) {
       println("The variable is greater than 4")
   } else if (num == 4) {
       println("The variable is equal to 4")
   } else {
       println("The variable is less than 4")
   }
}


// when 조건문 

when (rollResult) {
    luckyNumber -> println("You won!")
    1 -> println("So sorry! You rolled a 1. Try again!")
    2 -> println("Sadly, you rolled a 2. Try again!")
    3 -> println("Unfortunately, you rolled a 3. Try again!")
    4 -> println("No luck! You rolled a 4. Try again!")
    5 -> println("Don't cry! You rolled a 5. Try again!")
    6 -> println("Apologies! you rolled a 6. Try again!")
}

// when 을 활용한 변수 값 할당.
val drawableResource = when (diceRoll) {
    1 -> R.drawable.dice_1
    2 -> R.drawable.dice_2
    3 -> R.drawable.dice_3
    4 -> R.drawable.dice_4
    5 -> R.drawable.dice_5
    else -> R.drawable.dice_6
}

// 간단한 클래스 : property와 메서드
class Dice {
 // class property 선언
    var sides = 6

 // class method 선언
    fun roll() {
        val randomNumber = (1..6).random()
        println(randomNumber)
    }
}


// 클래스 파라메터 
class Dice (val numSides: Int) {
    fun roll(): Int {
        val randomNumber = (1..numSides).random()
        return randomNumber
    }
}

val myFirstDice = Dice(6)

 

https://developer.android.com/courses/android-basics-kotlin/kotlin-quick-guide/?hl=ko

반응형
반응형

docs.aws.amazon.com/ko_kr/serverless-application-model/latest/developerguide/serverless-sam-cli-install-mac.html

 

에 AWS SAM CLI 설치macOS - AWS Serverless Application Model

Docker는 애플리케이션을 로컬로 테스트하고 --use-container 플래그를 사용하여 배포 패키지를 빌드하기 위한 전제 조건일 뿐입니다. 처음에는 이러한 기능을 사용하지 않으려는 경우 이 섹션을 건

docs.aws.amazon.com

 

  1. 계정을 생성합니다. AWS
  2. (AWS Identity and Access Management) 권한 및 IAM 자격 증명을 구성합니다. AWS
  3. 도커 설치 참고: Docker는 애플리케이션을 로컬로 테스트하기 위한 사전 조건일 뿐입니다.
  4. Install Homebrew.
  5. AWS SAM CLI를 설치합니다.

1, 2에 AWS계정과 IAM 설정은 별도로 진행

 

3번 해보자.

docs.docker.com/docker-for-mac/install/

 

Install Docker Desktop on Mac

 

docs.docker.com

도커 사이트에 있는 공식 안내문을 따라서 설치

맥북은 버전이 macOS High Sierra 10.13.6 이다.

요구하는 버전은 10.14 이상인데 될지 모르겠다. 일단 다운로드 후 설치 진행한다.

 

설치하면 도커를 이동하라고 나오고, 설치 버전이 표시된다.

도커를 실행 하면 처음엔 인터넷에서 다운로드된 거라며 열기 확인 창이 열리면 열기 버튼으로 진행한다.

이번엔  네트워크를 통해 설치한다고 특정 접근이 필요하다며 패스워드를 물어본다고 알림이 뜬다.

패스워드를 확인해주면 먼가 진행이 된다.

 

macOS docker desk init

 

도커 설치하고 공유 드라이브 구성하라는데 먼지 모르겠다.

설치확인 도 하라고 한다.

명령줄에서 도커 명령을 실행할 수 있는지 확인합니다(예: docker ps).

터미널에서 docker ps 하면 이상 없이 된 거 같다.

 

docker ps

 

이제 단계 4:  Homebrew 설치할 차례다.

먼저 Git이 설치돼 있어야 한다고 한다.

git은 설치되어 있었다. 

git --version

 

 이제 homebrew를 설치한다.

아래와 같이 터미널에서 실행

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

패스워드를 입력해주면 죽 화면이 올라가며 먼가 가 계속 실행되고 완료된 거 같은 메시지가 보인다.

좀 오래 걸린다. 

Homebrew install

이제 버전 확인

brew --version

3.0.9 버전이 나온다.

 

이제 단계 5: CLI 설치 AWS SAM

SAM CLI 설치만 남았다.

brew tap aws/tap
brew install aws-sam-cli

install 은 시간이 꾀나 많이 걸린다.

의존 라이브러리가 많아선지 시간이 많이 걸린다.

이것저것 다운로드하고 make , make install 작업이 실행된다.

 

 

설치 확인

sam --version

1.21.1 이 설치 됐다.

 

반응형
반응형

nuxtjs

 

miragejs 설치

  • nuxtjs 프로젝트로 이동

  •  소스 파일 받기

miragejs  폴더에 소스가 받아진다.

$ npx degit vedovelli/miragejs-starter-kit miragejs

 

  • 의존성 라이브러리 추가

npm 사용 시

npm install --save-dev miragejs faker

 

yarn 사용 시 (  nuxt  프로젝트 생성 시 사용하는 패키지 관리 사용하면 된다. )

yarn add -D miragejs faker

 

 

github.com/vedovelli/miragejs-starter-kit

 

vedovelli/miragejs-starter-kit

A bolierplate for a Mirage JS server with initial data - vedovelli/miragejs-starter-kit

github.com

 

 

일단 이걸로 설치 끝.

 

이젠 사용할 수 있게 환경을 세팅한다.

 

nuxt 프로젝트 내에 plugins 폴더 안에 mirage.js 파일을 생성 다음과 같이 저장한다.

if (process.env.NODE_ENV === 'development') {
  require('../miragejs/server').makeServer();
}

 

nuxt.config.js 파일에 다음과 같이 추가

...
plugins: ['@/plugins/mirage.js'],
...

 

이렇게 까지가 사용할 수 있게 설정

yarn dev 실행 시 사용할 수 있다.

 

 

반응형
반응형

랜더링 설정

서버 측 렌더링을 한다는 건  사용자가 요청이 있을 시 서버에서 요청 페이지를 렌더링 되므로, 당연히 서버가 필요하다.

적정 사이트는 서버측 렌더링과 매우 비슷하지만, 차이점은 정적 사이트가 빌드 시에 랜더링 된다는 것이다. 그래서 서버가 필요 없고, 정적 사이트 내에서 페이지 이동은 클라이언트 측에서 이동된다.

export default { 
	ssr: true // 기본값
}

 

ssr을 false로 하면 서버 측 렌더링을 안 함으로 설정

AWS S3와 같은 곳에선 ssr: false로 설정

 

 

타겟 설정

nuxt generate명령은 웹 사이트의 정적 html을 생성하고 dist/ 디렉터리에 파일을 이동한다.

성능이 좀 더 좋아지고, SEO 및 기타 다른 지원을 좋게 한다.

 

export default {
  target: 'static' // 기본값 'server'
}
  • context에서 req, res 제거된다.
  • 404, 오류, 리다이렉션 처리는 클라이언트 측에서 처리
  • $route.query 사용.
  • process.static 속성은 true

AWS S3로 사용 시 static 

 

 

반응형
반응형

SAM

API 로컬 테스트를 할 수 있게 

로컬에서 구동시켜봤다.

>sam local start-api

 

설치 후 오랜만에 구동해보는 건지 구동이 안됐다.

Traceback (most recent call last):
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\runpy.py", 
line 193, in _run_module_as_main
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\runpy.py", 
line 85, in _run_code
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\__main__.py", line 12, in <module>
    cli(prog_name="sam")
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 782, in main
    rv = self.invoke(ctx)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 1259, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\decorators.py", line 73, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\click\core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\telemetry\metrics.py", line 96, in wrapped
    raise exception  # pylint: disable=raising-bad-type
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\lib\telemetry\metrics.py", line 62, in wrapped
    return_value = func(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\local\start_api\cli.py", line 86, in cli
    parameter_overrides,
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\local\start_api\cli.py", line 142, in do_cli
    aws_profile=ctx.profile,
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\commands\local\cli_common\invoke_context.py", line 136, in __enter__
    if not self._container_manager.is_docker_reachable:
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\samcli\local\docker\manager.py", line 47, in is_docker_reachable
    self.docker_client.ping()
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\client.py", line 187, in ping
    return self.api.ping(*args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\api\daemon.py", line 166, in ping
    return self._result(self._get(self._url('/_ping'))) == 'OK'
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\utils\decorators.py", line 46, in inner
    return f(self, *args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\api\client.py", line 230, in _get
    return self.get(url, **self._set_request_timeout(kwargs))
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\requests\sessions.py", line 543, in get
    return self.request('GET', url, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\requests\sessions.py", line 530, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\requests\sessions.py", line 643, in send
    r = adapter.send(request, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\requests\adapters.py", line 449, in send
    timeout=timeout
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\urllib3\connectionpool.py", line 677, in urlopen
    chunked=chunked,
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\urllib3\connectionpool.py", line 392, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\client.py", line 1252, in request
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\client.py", line 1298, in _send_request
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\client.py", line 1247, in endheaders
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\client.py", line 1026, in _send_output
  File "D:\obj\windows-release\37amd64_Release\msi_python\zip_amd64\client.py", line 966, in send
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\transport\npipeconn.py", line 32, in connect
    sock.connect(self.npipe_path)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\transport\npipesocket.py", line 23, in wrapped
    return f(self, *args, **kwargs)
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\transport\npipesocket.py", line 72, in connect
    raise e
  File "C:\Program Files\Amazon\AWSSAMCLI\runtime\lib\site-packages\docker\transport\npipesocket.py", line 59, in connect
    0
pywintypes.error: (2, 'CreateFile', '지정된 파일을 찾을 수 없습니다.')

위와 같이 에러가 표시되며 실행이 안됐다.

왜 실행이 안되지 하며

다시 설치 과정을 다시 짚어보다가 도커 실치 과정을 봤다.

도커를 실행하고 나니 제대로
서비스가 올라갔다.

 

Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
You can now browse to the above endpoints to invoke your functions. You do not 
need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. You only need to restart SAM CLI if you update your AWS SAM template
2020-09-09 23:25:23  * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)

도커가 실행되지 않고 있어서 로컬 실행이 안되었던 것이다. 

 

서비스가 올라간 후 해당 서비스로 브라우저로 접속해보면
http://127.0.0.1:3000/hello
아래와 같이 도커 이미지를 마운트 하는 작업을 그때서야 시작하고 
도커에서 공유 폴더 수락하겠냐고 경고가 나오면 수락해줬다.

 

2020-09-09 23:30:52 127.0.0.1 - - [09/Sep/2020 23:30:52] "GET / HTTP/1
.1" 403 -
2020-09-09 23:30:52 127.0.0.1 - - [09/Sep/2020 23:30:52] "GET /favicon
.ico HTTP/1.1" 403 -
Invoking app.lambdaHandler (nodejs12.x)

Fetching lambci/lambda:nodejs12.x Docker container image.....................................................................................................................................................................................................................................................................................
Mounting C:\Users\ej\daonstar\nuxt\sam-app\.aws-sam\build\HelloWorldFunction as /var/task:ro,delegated inside runtime container
START RequestId: 01f99077-c224-1bdf-84fa-21ea94f2387b Version: $LATEST

END RequestId: 01f99077-c224-1bdf-84fa-21ea94f2387b
REPORT RequestId: 01f99077-c224-1bdf-84fa-21ea94f2387b     Init Duration: 
1312.10 ms      Duration: 6.05 ms       Billed Duration: 100 ms Memory Size: 128 MB    Max Memory Used: 40 MB  
No Content-Type given. Defaulting to 'application/json'.
2020-09-09 23:31:36 127.0.0.1 - - [09/Sep/2020 23:31:36] "GET /hello HTTP/
1.1" 200 -
2020-09-09 23:31:36 127.0.0.1 - - [09/Sep/2020 23:31:36] "GET /favicon
.ico HTTP/1.1" 403 -

 

 

로컬에 도커 대시보드의 화면이다.

관련 도커 이미지가 올라와 있다.

도커 대시보드 SAM local start-api

 

기본 예제를 시행해서인지 생각보단 쉽다.

결과는 브라우저에 아래와 같이 잘 나왔다.

{"message":"hello world"}

 

 

반응형
반응형

선행작업은 nodejs 설치다.

nodejs는 잘설치 됐다는 전재하에 yarn 설치한다.

하단 환경변수 path만 잘 잡아주면 잘된다.

 

1. 커맨드 창 열기

window  key + r 실행 창에서 cmd 입력

 

 

윈도우 실행창

2. 커맨드 창에서 npm i -g yarn 입력 설치

설치가 완료되면 아래와 같이 설치 정보가 표시된다.

window cmd npm install yarn

 

 

3. yarn 설치확인

아래와 같이 명령어가 아니라고 한다.

 

4. 환경변수에 설치 경로 Path 잡아주기

환경변수 중 Path를 선택하고 편집 -> 새로 만들기를 통해 설치된 yarn의 bin 디렉터리를 등록한다.

환경변수 선택 Path
yarn 설치 경로 Path 추가 

5. yarn 버전 확인

cmd 창을 닫고 재시작해줘야 확인할 수 있다.

 

 

 

 

 

반응형

+ Recent posts