728x90
반응형

Javascript Async (비동기 처리)

2023.12.06에 작성됨

 

Javascript에서 비동기처리를 하기 위해서는 Promise 객체를 이용한다.

Promise는 3가지 중 하나의 Status를 갖는다.

  • pending (작업이 진행중인 상태)
  • fulfilled (작업이 성공적으로 완료된 상태)
  • rejected (작업이 실패한 상태)

Javascript의 비동기는 두 부분으로 나누어 생각할 수 있는데 Promise를 생성하는 Producer 와 사용하는 Consumer 이다.

  1. Producer:

Promise 객체는 executor(resolve, reject) 라는 콜백 함수를 인자로 받아서 생성하며,

Promise 객체가 생성되는 순간 executor는 실행된다.


const promise = new Promise((resolve, reject) => {

// ... 어떤 작업 처리 ...

// 성공했을 경우

resolve();

// 실패했을 경우 

reject();

});
  1. Consumer:

Promise로부터 나온 결과를 처리하는 부분이다.


promise

.then((value) => {})      // promise가 resolve()를 호출할 경우 실행됨.

.catch((error) => {})     // promise가 reject()를 호출할 경우 실행됨.

.finally(() => {});       // promise의 성공여부와 상관 없이 완료된 경우 최종적으로 실행됨.

Async/Await

Async/Await은 Promise를 조금 더 편리하게 사용할 수 있도록 고안된 문법 이다. (Syntactic Sugar)

Promise를 직접 사용한 비동기 함수와 Async/Await을 사용하여 만든 함수를 아래 예제를 통해 비교해보자.


// Promise 를 사용한 경우 

function readFileAsync() {

return new Promise((resolve, reject) => {

// ...어떤 작업 처리...

resolve(value);

});

}



function logFile() {

const file = readFileAsync();

file.then((value) => console.log(value));

}



logFile();

// Async-Await을 사용한 경우

async function readFileAsync() {

// ...어떤 작업 처리...

return value;

}

// 설명: 

// 함수 앞에 async를 붙이면 내부적으로 Promise를 반환하는 함수로 변환해준다. 

// 함수에서 value를 바로 리턴하는 것 처럼 보이지만 실제로는 Promise 객체를 반환한다. 



async function logFile() {

const file = await readFileAsync();

console.log(file);

}

// await 은 async 함수 안에서만 사용이 가능하며, 

// .then으로 처리했던 것과 같이 비동기함수의 수행 완료를 기다렸다가 

// resolve() 함수에 의해 처리된 값을 반환해준다. 

// reject() 함수에 의해 처리된 값을 처리할 때는 try-catch문을 통해서 처리할 수 있다. 



logFile();



참고:

https://youtu.be/JB_yU6Oe2eE?si=9z4D5QRuaqy4XRkO

https://youtu.be/aoQSOZfz3vQ?si=RVdbsuqfNgtwG_wp

728x90
반응형
728x90
반응형

Typescript 세팅하기


 

2023.12.06에 작성됨 (node: v18.17.0, npm: 10.2.1)

시작하기

# 글로벌로 설치할 경우
npm i -g typescript   
tsc --init            # tsconfig.json 생성됨

# 개별 프로젝트에 설치 할 경우
npm i -D typescript   
npx tsc --init        # 프로젝트에 설치된 경우 앞에 npx를 붙여줘야한다.

NOTE: 많은 사람들이 ts-node를 같이 같이 설치 해주는 것 같은데 Typesciprt도 VS Code에서 디버깅 모드를 바로 사용할 수 있기 때문에 굳이 필요한지는 잘 모르겠다.

// tsconfig.json
{
    "compilerOptions": {
        // 일반적으로 사용하는 option
        "target": "ES2016",
        "module": "commonjs",
        "rootDir": "./src",
        "outDir": "./dist",
        "removeComments": true,
        "noEmitOnError": true,
        // 유용한 Type Checking Options
        "noUnusedParameters": true,
        "noImplicitReturns": true,
        "noUnusedLocals": true,
        // 디버깅 사용할 때
        "sourceMap": true,
    }
}

NOTE: “tsconfig.json” 이 생성되면 뒤에 파일이름을 붙이지 않아도 tsc만 입력해서 컴파일을 실행시킬 수 있음.

VS Code에서 디버깅하기

  1. tsconfig.json
    • compile 할 때 [filename].js.map 이라는 파일이 생성되고 디버거가 읽는 파일이라고 생각하면됨.
  2. “sourceMap”: true
  3. create launch.json
    • “preLaunchTask”: “tsc: build - typeconfig.json” 추가
    // launch.json
    // 기본적으로 생성되는 파일 안에 
    // “preLaunchTask”: “tsc: build - typeconfig.json” 추가
    {
      // Use IntelliSense to learn about possible attributes.
      // Hover to view descriptions of existing attributes.
      // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
      "version": "0.2.0",
      "configurations": [
        {
          "type": "node",
          "request": "launch",
          "name": "Launch Program",
          "skipFiles": [
            "<node_internals>/**"
          ],
          "program": "${file}",
          "preLaunchTask": "tsc: build - tsconfig.json",
          "outFiles": [
            "${workspaceFolder}/**/*.js"
          ]
        }
      ]
    }

Typescript CLI (Command Line Interface)

tsc --build (혹은 tsc -b)를 실행하면 다음의 작업을 합니다:

  • 참조된 모든 프로젝트를 찾습니다
  • 최신 상태인지 감지합니다
  • 올바른 순서로 최신 상태가 아닌 프로젝트를 빌드 합니다

만약 config 파일 이름이 tsconfig.json이라면 이름을 지정하지 않고 tsc --project(혹은 tsc -p)를 사용할 수 있다.

일반적으로는 package.json 파일에 스크립트로 저장하고 사용한다.

//package.json
"scripts": {
    "build": "tsc -p"
}
// terminal> npm run build

Common Errors

  1. Cannot find module 'xxx' or its corresponding type declarations.ts(2307)
import path from "path"; 
// Cannot find module 'path' or its corresponding type declarations.ts(2307)

NOTE: Typescript는 Typescript가 아닌 기본 Node 패키지를 바로 사용할 수 없다. (타입을 추론할 수 없기 때문에). 아래와 같이 Typescript 전용 패키지를 설치 해주어야 한다.

# npm i @types/<패키지>
npm i -D @types/node
# 일반적으로 -D 옵션을 붙여 Development Dependency 로 설치해준다.

참고:

https://youtu.be/d56mG7DezGs?si=UvvP1NosR6QV23mZ

 

728x90
반응형
728x90
반응형

 

 

소금빵 팡 메종 긴자점

 

 

 

위치: 일본 〒104-0061 Tokyo, Chuo City, Ginza, 2 Chome−14−5 Twg銀座イースト 1階

영업시간: 8:30 - 19:00

화요일 휴무

 


 

소금빵 최초 개발 원조 집이 도쿄에 있다고 해서 다녀왔다.

여러 블로그에서 대기 시간이 길다는 글을 많이 봤었어서

일단 가긴 가보지만

대기가 너무 길면 그냥 포기하자는 결심을 하고 갔던 곳이다.

(19개월 아들래미 데리고 빵사자고 긴 대기를 할 사진이 없었으므로..)

 

 

 

줄이 있긴 했는데

길지 않았다!!

기다릴만 했다.

또 효자 아들래미는 때 마침 유모차에서 잠들었어서

이런 행운이 어딧나 싶었다.

 

가게 안이 좁아서 대부분의 인원이 문 밖에서 기다렸다.

나도 문 밖에서 기다리면서 가게 안으로 들어가길 기다렸다.

 

 

방금 나온 소금빵들이 선반을 채웠다.

냄새가 너무 향긋했다.

 

 

또 한쪽에서는 계속 빵을 만드시는 것 같았다.

 

 

기본도 있고 명란 맛도 있고 감자맛도 있고

샌드위치 같은 애들도 있었다.

 

 

나는 기본 맛으로 4개 샀다.

 

 

따끈따끈 해서 더 맛있었다.

 

 

일단 가격이 너무 최고다.

110엔이라니..?

우리나라는 빵이 왜이렇게 비싼지...

 

더 많이 샀으면 좋았게찌만,

욕심부리지 않았었다.

근데 딱 4개만 사길 잘했던게 시간이 좀 지나고 먹어보니 사자마자 먹는 그 맛이 아니었었다.

 

728x90
반응형
728x90
반응형

 

 

 

저녁을 먹으러 아메요코 상점가로 갔다.

사람들이 북적북적했다.

 

 

미리 어디갈지 알아보지 않았었는데

배가 너무 고파서 눈에 보이는 식당에 들어갔다.


 

Nondeko Sakaba Ueno

 

 

 

위치: 일본 〒110-0005 Tokyo, Taito City, Ueno, 4 Chome−6−6 松本ビル 1/2F

구글평점: 3.7

 


 

 

 

 

야외 테이블에 자리를 잡고 앉았다.

 

 

계란말이와 라면, 꼬치를 주문했다.

술 마실 사람이 없어서 콜라를 주문했다.

 

 

그냥 저냥 평범했다.

꼬치가 더 먹고 싶었는데 더 맛있는 집이 있을까봐 

이정도에서 끝내고 나왔는데 그 뒤로 다른 식당은 못들어가고 편의점에서 야식 사다가 먹었다.

 

여기서 먹은 건

모둠꼬치 590*2

콜라 350*3

라면 390

계란말이는 지금보니 580엔인데 영수증에는 590엔이 찍혀있네..

그리고 콜라가격..ㅋㅋㅋㅋㅋㅋㅋㅋ

심지어 김빠진 콜라였다.

 

여튼 총 3531엔을 결제했다.

 

 


 

지하철 선로쪽에 더 가까운 골목이라고 해야하나?

더 뒷골목 느낌이 나는 곳이었는데

이쪽이 진짜였다.

진짜 사람들로 바글바글 했다.

유모차 끌기 힘들었다.

 

 

 

흡연이 가능한 술집이었는지

애기 동반 금지여서

그냥 집으로 가기로 했다.

 

아메요코 상점가에서 타코야키 쇼핑을 마지막으로 집으로 돌아왔다.

 

 

 

728x90
반응형
728x90
반응형

 

 

돈카츠 스즈키

とんかつ 寿々木

 

 

 

위치: 일본 〒100-0005 Tokyo, Chiyoda City, Marunouchi, 1 Chome−9−1 グランスタ八重北 1階 Yaekita Shokudo

영업시간: 11:00 - 21:30

구글평점: 4.5

 


 

도쿄역에 식당이 정말 많았다.

점심시간이라 가게마다 줄이 길게 서있었다.

물론 줄이 적은 가게도 있었으나, 

또 그런곳은 왜인지 들어가고 싶지 않았다.

돈까스가 먹고싶어서 겉모습이 마음에 드는 가게에 줄을 섰다.

 

 

줄 서서 기다리고 있는데 한국어 메뉴판을 가져다 주셨다.

미리 메뉴를 고를 수 있어서 좋았다.

 

 

30분 기다린 끝에 들어갈 수 있었다.

 

 

남편은 로스돈까스에 새우튀김까지 나오는 세트를 주문했고

나는 로스돈까스 덮밥을 주문했다.

사실 내가 주문한게 돈까스 인줄 알았는데

메뉴판에 밥이 안써있고 로스돈까스만 써있어서 밥이 안나오는 메뉴인가 하고 주문했는데

덮밥이 나왔다.

다시 보니 영어 문장에 "On Rice"라는 문구가 보였다.

한국어만 보고 골라서 몰랐던 거였다.

 

 

남편이 주문한 돈까스+새우튀김 새트에는

밥 한공기가 별도로 나왔다.

 

 

너무 맛있게 먹었다.

울 ㅣ19개월 아들래미는 편식이 심한 아이라

가져온 햇반과 된장국을 먹였다.

 

 

2880엔을 지불했다.

확실히 도쿄..

물가가 비싸다.

 

728x90
반응형
728x90
반응형

 

도쿄역에 도착하면 짐을 보관할 수 있는 동전 사물함이 곳곳에 정말 많이 보인다.

사물함 크기에 따라 보관 가격도 다르다.

작은 칸은 400엔, 중간칸은 500엔, 큰 칸은 700-800엔이다.

우리 가방은 800엔 칸에도 안들어가는 큰 가방이었다.

 

 

하지만 짐 맡길 수 있는 곳은

동전사물함만 있는 것이 아니다.

 

'JR EAST Travel Service Center Tokyo Station' 쪽(마루노우치 북쪽입구 쪽)으로 가면

짐을 맡길 수 있는 곳이 있다.

 

 

 

 

여기서는 사이즈 상관 없이

700엔에 짐을 맡길 수 있다.

오전 8시 반 부터 오후 8시까지 운영한다. 

 

 

700엔을 지불하고

동전사물함에 안들어가는 큰 가방 하나를 맡겼다.

 

728x90
반응형
728x90
반응형

 

비행기에서 보이는 일본!

저 멀리 후지산이 보이는 듯 했다.

 

 

나리타 공항에 도착해서 입국심사를 받는데

아기와 함께라고 별도의 빠른 심사줄로 안내받았다.

아기와 함께인 덕분에 빠른 줄에서 빠르게 입국심사를 통과할 수 있었다.

 

남편한테 짐 찾는걸 맡기고

애기 기저귀를 갈아주러 수유실로 갔다.

정말 깔끔한 수유실이었다.

기저귀 갈이대도 있었는데

애기가 서서 기저귀 갈 수 있도록 되어있는 구역도 있었다.

 

우리 애기 혼자 신발 신는 동안에 사진 한장

 

짐을 찾고 우리 첫 목적지인 도쿄역으로 이동하기 위해

버스 티켓을 사러 나왔다.

도쿄까지 이동하는 방법은 다양한데 (나리타 익스프레스, 스카이 라이너, 버스 등)

우리는 버스를 선택했다.

이유는 가장 배차간격이 짧고, 저렴했기 때문!

(근데 카시트 설치가 안되서 집에 올때는 스카이 라이너를 이용했다.)

 

 

도쿄역으로 이동하는 버스 티켓은 1인 1300엔이었다.

우리 애기는 24개월 미만이었는데, 무료였다.

성인 2명의 버스 티켓만 구매했다.

 

 

바로 버스를 타러 이동했다.

 

 

버스가 정말 작은 느낌이었다.

좌석간 간격도 정말 좁았다.

왜 가격이 저렴한지 알 것 같았다.

나리타 공항부터 도쿄역까지 1시간 반 넘게 걸린것 같다.

 

728x90
반응형
728x90
반응형

 

 

원주 자연생태원

 

 

위치: 강원 원주시 소초면 검엉터길 7-20

(장양리 851)

전화: 010-3379-7313

 운영시간:

*평일 13:00 - 18:00

*주말: 10:00 - 18:00

*동절기(11월-2월) 11:00 - 17:00

*매주 월요일 휴무

 


 

동물 좋아하는 울 19개월 애기와 다녀왔다.

 

 

입장료는 5천원이고

24개월 미만 영유아는 무료입장이다.

본관에 들어가서 먼저 입장권을 구매하고

관람을 시작하면 됐다.

 

 

우리는 먹이통도 구매했다.

돼지, 양, 염소가 배불러서 먹이를 안먹는다고

가격인하도 해주셨다.

 

 

주의사항을 확인했다.

 

 

입장권을 구매하면 입장 팔찌를 준다.

받은 팔찌를 차고다니면 된다.

 

 

 

먹이통을 받아서 동물들이 모여있는 곳으로 갔다.

 

 

 

요즘 동물들 먹이주는거에 푹 빠진 울 애기는

이번에도 적극적으로 동물들 먹이주기를 시작했다.

아~ 아~ 하면서 입에 잘 넣어줬다.

 

 

기니피그를 보면서 귀여워서

꺄~ 하기도 했다.

그러다가 기니피그 맘마가 식빵이라는 걸 알고 눈치보다가 하나 입에 넣었다^^;

 

적극적으로 체험하는 울 아들램, 기니피그 빵 하나 먹어보려고 타이밍 보는 중

 

타조와 오리도 있었는데

무서워하는 것 같으면서도

먹이주는거 해보려고 바가지를 꼭 잡고 있는 모습이 신기했다.

 

 

병아리 체험실에 갔다.

작은 생명체를 너무 귀엽다는듯이 관찰하는 울 아들래미.

사장님께서 이것저것 설명도 해주시고

체험할 수 있도록 지도도 해주시는데

우리 아들래미도 만져볼 수 있도록 도와주셨다.

작은 동물들을 세게 꽉 잡지않고

소중하게 살짝 잡아보는 모습이 신기했다.

 

 

사막 챙거루쥐와 고슴도치가 신기한지

발판위에 올라가서 한참 구경했다.

 

 

 

닭과 병아리 맘마도 먹여주면서

정말 좋아했다.

닭은 약간 무서워하고 병아리는 정말 귀여워하는게 눈에 보였는데

용기내서 닭한테도 먹이를 주는 모습이 너무 기특했다.

누가 시켜서 닭한테 먹이를 준게 아니고

본인 스스로 약간 갈등하다가 용기내서 먹이를 준것 같아서 

그 모습이 정말 신기하고 귀여웠다.

 

병아리 맘마주려고 갔는데 닭이 와서 살짝 놀랐다가 용기내서 닭 맘마 주고 뿌듯해진 아들램

 

 

728x90
반응형
728x90
반응형

 

 

석죽재물고기나무

 

 

위치: 경기 파주시 탄현면 헤이리마을길 18-61

(법흥리 1652-303)

전화: 070-7762-7727

영업시간:

*평일: 11:00 - 18:00

*주말: 10:30 - 18:30

블로그: https://blog.naver.com/seo_gak

 


 

토끼 먹이주기 체험이 가능하다고 해서 찾아간 곳이다.

 

 

 

야외 테라스도 정말 잘 되어 있었는데

토끼도 야외에 있었다.

 

 

보통 동물카페에 가면 동물들 냄새때문에

거부감이 드는데

여기는 야외에 토끼가 있다보니 실내에는 냄새가 하나도 안나서 정말 좋았다.

 

 

토끼굴 체험은 6천원이었다. (미취학 아동은 4천원)

무료입장을 하려면 애기 포함해서 1인 1잔을 주문해야 했다.

그리고 당근도 별도로 구매해야했다.

 

주말, 공휴일은 목각단청 체험시만 재입장이 가능했다.

우리는 공휴일에 방문 했고 목각단청 체험을 안해서 재입장이 안된다고 이해해서

한번 들어가서 충분히 즐기고 나오자고 결심했다.

 

포크레인 체험도 있는 것 같은데

이건 4천원이 었다.

 

 

빙수는 2잔으로 계산됐다.

19개월인 우리 아들래미꺼까지 1인 1음료로 주문하기로 했따.

 

 

실내에서 먹을까 하다가

날씨가 좋아서 밖으로 나가기로 했다.

밖에 토끼굴이 있다보니 아무래도 냄새가 좀 났는데

바람 부는 방향을 고려해서 앉으니

토끼굴이 바로 옆에 있었는데도 냄새가 하나도 안났다.

 

주문한 메뉴가 나왔다.

 

 

토끼 당근도 같이 나왔다.

 

 

음료를 좀 먹고나서 토끼굴로 들어갔다.

사장님께서 주의사항을 설명해주셨다.

토끼가 사람을 물지는 않지만 아기 손가락을 당근으로 생각하고 물 수도 있으니

손 안물리게 조심해야 한다고, 애기 손 관리 잘 해야 한다고 하셨다.

(남편이 초 긴장상태로 우리 애기 손을 계속 지켜줘서 다행이 토끼가 울 애기 손가락 무는 일은 없었다.)

 

 

토끼굴은 사장님께서 토끼가 응가할 때 마다

계속 구석탱이로 응가를 치워서 그런지

깨끗했다.

토끼 응가를 밟지 않아도 되서 너무 좋았다.

 

그리고 우리 애기가 정말 상상 이상으로 좋아했다.

토끼 당근 먹는걸 정말 사랑스럽다는 듯이 쳐다보는 울 애기가 정말 사랑스러웠다.

 

 

당근을 들이대면 토끼들이 몰려드는데

저기 구석탱이에 혼자 있는 못먹고 있는 아이한테도 주겠다고

아장아장 걸어가는게 너무 너무 귀여웠다.

 

 

울 애기가 너무 좋아해서

당근 하나 더 추가로 구매했다.

 

 

728x90
반응형
728x90
반응형

 

 

더풋샵 미사강변점

 

 

위치: 경기 하남시 미사강변대로226번길 48 구산프라자 406호

(망월동 974)

전화: 0507-1374-3391

네이버 예약: https://naver.me/57w8LMJ7

 


 

남편이랑 같이 마사지를 받으러 다녀왔다.

 

 

 

슬리퍼로 갈아신었다.

 

 

옷을 갈아입으러 탈의실로 들어갔다.

탈의실은 남/여 방으로 구분되어 있었고

탈의실 안으로 들어가니 샤워실, 드라이기, 옷장이 있었다.

 

 

 

족욕부터 시작했다.

 

 

 

족욕이 끝나고 남편이랑 같은 방으로 들어가서 각자 침대에 누웠다.

 

 

애기 얼집 보내고 남편이랑 둘이 간만에 마사지 받으니

육아피로가 날아가는 느낌이었다.

(그리고 곧바로 다시 쌓임^^

 

 

728x90
반응형

+ Recent posts