세살마을 부모(임산부)교육 소개

2019. 3. 23. 17:41

세살마을 부모(임산부)교육에 다녀왔습니다.

정말 교육이라 추천하기 위해 글을 남깁니다.


"세살마을??"


부모라는 것은 매우 중요하고 어려운 역할입니다.

그럼에도 많은 경우 준비없이 부모가 되죠.


부모가 될 준비.

세살마을에서 그것을 도와주는 교육을 진행합니다.

그것도 무료로 말이죠.

교육을 이수하면 각종 지원과 선물도 줍니다!


세살마을 부모교육 신청화면


더욱 추천하는 이유는 보듬이 신청!

교육수료자에게 주어지는 또다른 기회.

가정보듬이 3회 방문

놀이보듬이 행사 참여기회.

심지어 무료입니다.


서울, 경기, 인천 지역은 교육 신청이 가능합니다. 

육아종합지원센터별로 일정이 상이합니다.

상세 일정은 홈페이지에서 확인해보세요.

교육 내용은 아래와 같습니다.


임산부 부모교육 목차


신청 경쟁이 꽤나 치열합니다.

제가 거주하는 성남지역은 5분 만에 마감..

5분이면 느리다구요?


입력해야하는 필수 정보가 꽤나 많습니다.

출생예정일부터 기본 신상정보에 수면습관까지...

배우자와 함께 들으려면 배우자 정보도 추가...

열심히 신청해야합니다.


아직 1강 밖에는 듣지 못했지만 참 유익합니다.

콘서트 예매 좀 해보신 분.

대학교 때 수강신청 좀 잘하셨던 분.

곧 태어날 아기를 위해 실력 발휘해보세요.

화이팅!

TechTrip 부모교육./아기에 대해 알아가기

[건대] 마스터키-썸

2019. 3. 4. 20:30

오랜만에 건대 마스터키에 방문했다.

위험했던 이불 밖 이후로 거의 1년만..

([건대] 마스터키-이불 밖은 위험해)


이곳은 테마 포스터부터 왠지 끌리는...


몸조심하느라 한동안 쉴 수 밖에 없었으나..

선물 같은 존재와 함께 하는 첫 방탈출!

힘들지 않고 달달할 것만 같은 감성테마!


마스터키

업체난이도: ★★★ (3/5)

체감난이도: ★★★☆ (3.5/5)

스토리: ★★ (4/5)

추천도: ★★★ (4/5)


Player 참고: 방탈출 경력 26회 부부


Comment: (성공 / 2 hint)

 Jason: "이것은!! ㅇㅇㅇㅇ ㅇㅇ?!"

 Julie: "설렘 가득한 그 때로 돌아가고 싶다면?!"


역시 마스터키는 입장부터 색다르다.

주인공인 대학생이 된 기분부터 내고 시작한다.

그리고 그것이 단서로 사용되는 센스~


방탈출은 역시 롤플레이 잼.

스토리 몰입이야 말로 재미의 필수 요소다.


그에 더하여 비용도 할인 받았...

취미로 쓰는 블로그 후기로 3000원 할인.

(원래는 오방카페, 네이버 블로그만 된다고..)

인스타 팔로우로 1000원 할인.

할인된 꽃길이라니~~


비현실적인 깔끔한 인테리어로 눈요기하고 시작.

장치보다는 자물쇠가 많다.

하지만 깔끔한 가이드로 푸는 재미가 있다.

문제수가 많아서 어느새 시간이 훌쩍!


활동성은 거의 없는 편.

활동성을 아주 조금 요하는 지점이 있다.

태중의 아이와 함께해도 괜찮을 정도~


늘 당하는 관찰력 부족 이슈와

(눈에 떡하니 보이는데...)

자주 당하는 한 번 꼬아놓은 문제에...

2번이나 힌트를 사용했다.

괜히 스스로 압박감에 힌트를 서둘러 사용 ㅠ


변명하자면...

아침 일찍가서 건물 앞에 주차를 했다.

방탈출 도중 차 키를 맡기느라 잠시 방해를 받았다.

미리미리 차 키를 맡기면 더 좋을 듯 하다.


아무튼 그래도 탈출 성공!

힌트는 무제한이지만 3개 이하로 썼으니 대성공!

인증샷으로 마무리~


탈출 인증샷


TechTrip 스압없는 소소한 Ep./방탈출

NodeJS 개발 시 Mocha 테스트 디버깅

2019. 2. 23. 18:49

Express를 이용한 API 서버를 개발중입니다.

Express는 JS(JavaScript) 프레임워크 입니다.

Mocha를 이용한 단위테스트를 하고 있죠.


Java나 C#과 달리 디버깅이 까다롭더라구요.

Mocha 구동 시 옵션을 넣어주어야합니다.

그리고 Chrome을 사용합니다.


1. package.json 수정


pakage.json 파일을 수정합니다.

npm 스크립트에 debug 옵션을 넣었죠.

"scripts": {
  "test": "./node_modules/.bin/mocha --recursive --exit",
  "debug": "./node_modules/.bin/mocha --recursive --inspect-brk"
}

물론 npm run을 사용하지 않아도 됩니다.

mocha에 옵션을 주어 직접 실행도 가능해요.


2. 테스트 코드에 debugger 추가


디버그를 하고 싶은 위치에 코드를 넣습니다.

Chrome 디버거가 멈출 위치에요.

it('...', function () {
  ...
  const expenseController = new ExpenseController(mockDailyExpense);
  expenseController.saveDailyExpense(request, response);
  debugger
  
  saveDailyExpenseStub.calledOnceWithExactly(...);
  saveDailyExpenseStub.restore();
})


3. npm run debug


디버그 스크립트를 실행합니다.

npm run debug

만약 package.json을 수정하지 않았다면

mocha를 직접 실행하는 것도 가능합니다.

mocha --inspect-brk '파일명'

그러면 아래와 같은 문구가 나옵니다.


Debugger listening on ws://127.0.0.1:9229/...

For help see https://nodejs.org/en/docs/inspector


4. Chrome 실행 (chrome://inspect/)


크롬을 실행해서 주소창에 아래를 입력합니다.

chrome://inspect

node 테스트가 실행 중인 것이 보입니다.


chrome inspect 실행 화면


5. inspect 클릭 후 Debug


inspect를 클릭하면 디버거 창이 실행됩니다.

테스트가 시작되지 않고 멈춰있죠.

실행을 시키면 테스트가 시작됩니다.

그리고 debugger 위치에서 멈추게 되지요.


Chrome 디버그 화면

익숙한 사용 경험으로 충분히 디버깅이 됩니다.

Control 영역을 통해 코드 진행이 가능하구요.

Scope에서 변수들의 값 확인이 가능합니다.

Console 창에서 코드 입력/실행도 됩니다.


nodeJS 테스트가 막힌다면 큰 도움이 되실거에요.

문제를 훨씬 빠르게 파악하는 것이 가능하답니다.

TechTrip IT Tech/NodeJS

야민정음? 트렌드?!

2019. 2. 19. 22:24

대학교 동기의 결혼식에 가서 친구를 만났습니다.

그 중 한 친구의 일화 입니다.


그 친구의 아내는 항공승무원이구요.


친구의 아내가사진을 보여주며 자랑합니다.

아내: "나 어제 박막례 할머니 만나서 사진찍었어!"

친구: "이 할머니가 누군데?"

아내: "..."


박막례 할머니는 구독자 67만에 달하는 유튜버 입니다.


박막례 할머니


다른 에피소드도 있습니다.


아내: "나 펜타곤(아이돌) 봤다!"

친구: "너 노선은 그쪽(미국 국방부)이 아니잖아?"

아내: "..."


펜타곤아이돌의 이름이기도 합니다.


펜타곤(큐브엔터테인먼트)


오늘은 팔도비빔면이 괄도네넴띤으로 

35주년 기념으로 비싸게 팔더라구요.


'야민정음'이라고 하네요.

대표적으로 멍멍이댕댕이라고 부르죠.

모양이 시각적으로 비슷해서요.


관심을 갖지않으면 대화조차 어려울 정도입니다.

트렌드인가 공부해야하나....


이미지출처: 

https://www.youtube.com/channel/UCN8CPzwkYiDVLZlgD4JQgJQ

http://www.cubeent.co.kr/pentagon_photo/4181848

TechTrip 스압없는 소소한 Ep.

Angular Dialog(Material Design)

2019. 1. 1. 23:24

이번에는 Material Dialog를 추가해보겠습니다.

Dialog는 아래와 같이 동작합니다.


Dialog 동작화면


부모창이 어두워집니다. (dimmed)

모달(modal) 창이 뜨고 입력한 값이 부모로 전달되죠.


Material의 장점은 역시 미리 구현된 동작입니다.

 - 모달(modal)과 부모 컴포넌트간 데이터 전달

 - 모달(modal) 이외 영역 클릭시 닫기

 - ESC로 창닫기

 - 웹접근성 고려(자동 포커스)

   (창을 닫고 아이콘이 포커스 되는 그 부분)


그럼 코드로 살펴보겠습니다.


1. Import MatDialogModule


app module에 MatDialogModule을 추가합니다.

@angular/material 모듈에 포함되어있습니다.

import { MatDialogModule } from '@angular/material';
...

@NgModule({
  ...
  imports: [
    ...
    MatDialogModule,
    ...
  ],
  ...
})
export class AppModule { }


2. Dialog Component 생성


Dialog에 구성될 화면을 만듭니다.

저는 컴포넌트를 따로 분리하였습니다.

컴포넌트 생성은 굉장히 쉽죠?

(ng g c '이름' Angular 새로 Component 만들기)


Dialog는 부모 컴포넌트로 data를 전달합니다.

MatDialogRef 라는 의존성을 주입합니다.

(여기서 설명했었죠? Angular Service 만들기)

import { Component } from '@angular/core';
import { MatDialogRef } from '@angular/material'
...

@Component({
  selector: 'app-consumption',
  templateUrl: './consumption.component.html',
  styleUrls: ['./consumption.component.css']
})
export class ConsumptionComponent {

  constructor(private dialogRef: MatDialogRef) { }
  ...
  
  onCancel(){
    this.dialogRef.close();
  }

  onSave(){
    const returnData = {
      amount: this.consumptionForm.controls.amount.value,
      desc: this.consumptionForm.controls.desc.value
    }
    this.dialogRef.close(returnData)
  }
}

cancel 버튼과 save 버튼에 이벤트를 연결했죠.

dialogRef의 close 메서드에 data를 전달합니다.

화면 Template은 생략하겠습니다.

그저 Form 컨트롤일뿐.

(Angular Forms)


3. Dialog Component Factory에 등록


그럼 생성해준 Dialog는 동적으로 만들어집니다.

이런 컴포넌트들은 다른 설정이 필요해요.

app module에 entryComponents 라는 것이죠.

...

@NgModule({
  ...
  entryComponents: [
    ConsumptionComponent
  ],
  ...
})
export class AppModule { }

위와 같은 설정으로 Dialog를 그릴 수 있게됩니다.

Component Factory에 추가가 되기 때문이죠.


4. Dialog 표출


부모 컴포넌트에서 Dialog를 보여주면 됩니다.

아래와 같이 가능합니다.

import { MatDialog } from '@angular/material';
import { ConsumptionComponent } from '../consumption/consumption.component';
...

@Component({
  ...
})
export class BudgetComponent implements OnInit {
  ...
  constructor(public store: Store, public dialog: MatDialog) { }
  ...

  onAdd() {
    const dialogRef = this.dialog.open(ConsumptionComponent, {
        width: '250px'
    });

    dialogRef.afterClosed().subscribe(result => {
        if (result) {
            let amount: number = Number(result.amount);
            let desc: string = result.desc;
            this.addConsumption(new Consumption(amount, desc));
        }
    });
  }
  ...
}

MatDialog 의존성 주입이 되었구요.

(여기서 설명했었죠? Angular Service 만들기)

MatDialog의 메서드를 호출해주면 됩니다.

open이라는 메서드입니다.

dialog에 사용할 컴포넌트와 정보를 넣었죠.

width이외에 data도 전달할 수 있습니다.


open 메서드는 dialogRef를 리턴합니다.

dialogRef를 이용해 닫혔을 때 동작을 정의합니다.

observer 패턴이에요.

result라는 객체로 dialog에서 전달한 값을 받습니다.


조금 복잡하지만 크게 수고를 덜 수 있습니다.

물론 디자인을 변경하려면....

나중에 필요해지면 해보도록 하죠.


전체 소스는 아래 링크에서 볼 수 있습니다.

https://github.com/jsrho1023/account-book

'IT Tech > Angular' 카테고리의 다른 글

Angular Test Tips (Mock)  (0) 2019.06.01
Angular Component Communication (Output)  (0) 2018.12.16
Angular Component Communication (Input)  (0) 2018.12.02
Angular Test Headless  (0) 2018.11.18
Angular Pipes  (0) 2018.11.12

TechTrip IT Tech/Angular

Angular Component Communication (Output)

2018. 12. 16. 19:30

지난 번에는 부모(Parent)에서 자식(Child)으로 

Input을 통해 데이터를 전달하였습니다.

Angular Component Communication (Input)


이번에는 반대로 자식에서 부모

Output을 통해 데이터를 전달해보겠습니다.


달력 컴포넌트에서 날짜를 선택하면

부모 컴포넌트로 선택한 날짜를 전달할게요.


1. Import Output, EventEmitter


자식에서 부모로 이벤트를 전달하는 형태에요.

Output과 EventEmitter 모듈을 사용합니다.

angular/core 모듈 안에 있습니다. 

import { ... Output, EventEmitter } from '@angular/core';
...
@Component({
  selector: 'app-calendar',
  templateUrl: './calendar.component.html',
  styleUrls: ['./calendar.component.css']
})
export class CalendarComponent implements OnInit {
  ...
}


2. Output 정의 및 emit 함수 생성


Input과 비슷한 형태의 어노테이션을 사용합니다.

괄호 안에 부모로 전달할 이벤트 이름을 적습니다.

그리고 EventEmitter 타입으로 초기화했어요.

마지막으로 날짜 선택 이벤트를 부모로 전달할 함수를 만들었습니다.

참고로 selectDay는 날짜 click과 연결된 메서드입니다.

...
@Component({
  ...
})
export class CalendarComponent implements OnInit {
  ...
  @Output('dateChange') dateChange: EventEmitter = new EventEmitter();
  ...
  selectDay(day){    
    ...
    this.dateChange.emit(new Date(this.selectedYear, this.selectedMonth, day));
  }
  ...
}


3. 부모 템플릿에서 Event Binding


자식에서 전달하는 Event를 부모에서 받도록 해줍니다.

이벤트 바인딩과 동일하게 설정하면 됩니다.

데이터는 $event에 담겨 전달됩니다.

<div class="budget">

    <app-calendar [date]="date" 
         (dateChange)="onDateChange($event)"></app-calendar>
    ...
</div>

이벤트를 부모 컴포넌트의 함수와 연결해주었습니다.

전달되는 $event를 콘솔에 찍도록 했죠.

원했던 데이터가 전달되는 것을 확인할 수 있습니다.


Output 동작화면


전체 소스는 아래 주소에서 확인가능합니다.

https://github.com/jsrho1023/account-book

'IT Tech > Angular' 카테고리의 다른 글

Angular Test Tips (Mock)  (0) 2019.06.01
Angular Dialog(Material Design)  (0) 2019.01.01
Angular Component Communication (Input)  (0) 2018.12.02
Angular Test Headless  (0) 2018.11.18
Angular Pipes  (0) 2018.11.12

TechTrip IT Tech/Angular

[대학로] 룸이에스씨(RoomESC)-탐정 사무소 살인사건

2018. 12. 13. 20:47

룸이에스씨의 마지막 방이다.

바로 탐정 사무소 살인사건!

개인적으로 셋 중 가장 맘에 들었던 테마.


1. 도깨비 집의 보물

2. 숨겨진 방의 비밀

3. 탐정 사무소 살인사건


가장 차별화되면서 독특했던 방이다.


룸이에스씨탐정 사무소 살인사건

업체난이도: ★★★ (5/5)

체감난이도: ★★★ (4/5)

스토리: ★★ (3/5)

추천도: ★★★ (4/5)


Player 참고: 방탈출 경력 25회 부부


Comment: (성공 / 1 hint)

 Jason: "흐름을 이해해야... Thanks to Julie"

 Julie: "Thanks to 쿠도 신이치(남도일), 셜록 홈즈"


Intro: 

내 이름은 헨리. 사설 탐정이다.

몇 가지 위험한 일들과 

번거로운 일들이 있는 것을 

제외하면 순조롭다. 

이 거리에서 가장 낡은 건물이지만 

사무소도 가지고 있는데다, 

함께 일하는 성실한 조수도 한 명 있다. 

오늘은 1919년 8월 20일. 

여느 때와 다름없는 평범한 날이었다. 

‘나’는 몇 년간 집중하던 

중요한 사건을 하나를 해결하여 

모든 일을 미뤄두고 사건을 브리핑 했다. 

브리핑 과정에서 약간의 마찰이 있었고, 

정전도 일어나고 조금 시끄러웠지만 

무사히 일을 마무리 지었다. 

지친 나머지 남은 일을 모두 미뤄놓고 

내일부터 짧게 휴가도 냈다. 

성실한 조수 아나이스를 먼저 들여보내고 

열어놓은 서랍을 모두 잠그고 

서류를 정리하려 하는데 

바닥에 흐른 이건 뭐지? 

오래된 서류철을 가려놓은 칸막이 뒤에 

아나이스의 남편 휴고의 시체가 있다. 

기다렸다는 듯 울리는 전화 벨 소리....

오늘 사건 브리핑을 함께했던 경찰 토마스가 

1시간 후에 사무실에 오겠다고 한다. 

서둘러 범인을 찾지 않으면 

꼼짝없이 내가 살인범이 될 판이다. 

범인을 찾아야 한다.


이번 방 역시 넓지 않은 사무실.

탈출이 아니라 범인을 찾는 새로운 스타일

그래서 더 색다른 재미를 느꼈다.

(물론 혼자서는 못나왔겠지만..)


문제를 풀면서 단서를 모은다.

단서를 조합해서 범인을 찾아야 탈출!


왠지 보드게임 클루가 생각나는...


문제 수는 생각보다 많지 않은 편

그러나 문제를 다 푼다고 끝이 아니라...


Julie가 아니었다면

처음부터 다시 읽어봤거나...

아니면 끼워맞추다가 실패할 뻔...


문제 하나 하나보다

전체 흐름을 봐야 한다.

나무보다 숲을 봐야 한다.


넓지 않기 때문에 활동성은 거의 없다.

사무실이라 무서운 요소도 전혀 없다.


이 테마에도 어김없이

모자란 단서로 도구를 하염없이 보다가...

힌트를 쓰고 말았다.

교훈을 톡톡히 얻어가는 하루랄까


얼떨결에 Julie 버스타고 탈출해서

나중에 설명을 듣고 아~~ 했다.


그래도 룸이에스씨에서

가장 색달랐고,

가장 재미있었고,

가장 추천하는 테마다.


탈출 인증샷으로 마무리.


탈출 인증샷


TechTrip 스압없는 소소한 Ep./방탈출

[대학로] 룸이에스씨(RoomESC)-숨겨진 방의 비밀

2018. 12. 12. 23:15

이번에는 룸이에스씨의 2번째 방

숨겨진 방의 비밀 이다.

룸이에스씨에는 총 3개의 방이 있다.

지난 주말 모두 클리어하였다.

1. 도깨비 집의 보물

2. 숨겨진 방의 비밀

3. 탐정사무소 살인사건


셋 중에 가장 수월하게 탈출한 이 곳.


룸이에스씨숨겨진 방의 비밀

업체난이도: ★★★★ (4/5)

체감난이도: ★★★ (3/5)

스토리: ★★ (3/5)

추천도: ★★★ (3/5)


Player 참고: 방탈출 경력 24회 부부


Comment: (성공 / 1 hint)

 Jason: "현재에 감사"

 Julie: "공포인듯 공포아닌 공포같은 너"


Intro:

축하한다. 

당신은 내 집 마련의 꿈을 이뤘다.


작은 정원이 딸린 당신의 집은,

수십 년 전에 지어지긴 했으나 

말끔하게 관리된 멋진 집이다.

더욱 멋진 것은 집값이 

당신 예상보다 훨씬 저렴했다는 것이다.

아담한 집에서 평화로운 나날을 보내던 어느 날,

당신은 원래부터 이 집에 있었던 

원목 책장을 청소하다가 

책장 뒤에 감춰진 비밀의 방을 발견한다.

제법 널찍한 방이다.

호기심이 동한 당신은 비밀의 방에 들어간다.

누군가 지내던 방이었는지 

오래된 가구들과 난로가 있다. 

당신이 잠시 그것들을 구경하는 사이, 

알 수 없는 존재가 방의 문을 굳게 닫는다. 

당신은 있는 힘을 다해 문을 열어보려 하고, 

고래고래 소리를 지르지만 아무런 소용이 없다. 

나갈 수도, 도움을 요청할 수도 없는 상황. 

당신을 가둔 알 수 없는 존재는, 

이 집의 새 주인인 당신이 

이곳에서 있었던 일들을 알아내길 원하고 있다.

비밀의 방에 얽힌 기억을 모두 풀어내고 

다시 안락한 당신의 집으로 돌아가라.


작고 아담한 공간이다.

룸 이에스씨는 모든 방이 작은 편이다.

2명이 적당하고 3명 까지는 가능하지만

그 이상은 너무 비좁아 보인다.


장치도 있지만 자물쇠가 좀 많은 편.

문제 수가 다른 방보다는 많다.

여기저기 잠겨있으니 잘 살펴보길~!


감성 테마라고 하던데..

감성이라기보다는 스토리 테마이다.

감정이입이 잘된다면 복잡한 심정이 될 듯.


문제 푸는 순서를 놓쳐서 힌트를 썼다.

안풀리는 문제 부여잡지 말 걸...

모자란 단서로 머리 싸매지 말고

선행될 문제가 없는지 살펴보자.


활동성은 거의 없다.

몸을 수그리거나 잠시 쪼그려 앉는 정도?


겁 많은 쫄보라면 스토리와 분위기에 

공포를 느낄 수 있다.

(사실 하나도 안무섭...)

징그럽거나 무서운 소품이 있는건 아니다.


방탈출 초창기 좋은 테마들이 적을 때,

좁은 공간에 스토리를 잘 녹인

이 테마가 좋게 평가받았을 듯 하다.


요즘은 공간 넓고 스토리 좋은 곳 많아서...


아무튼 탈출 인증샷으로 마무리.


탈출 인증샷





TechTrip 스압없는 소소한 Ep./방탈출

[대학로] 룸이에스씨(RoomESC)-도깨비집의 보물

2018. 12. 9. 23:19

오랜만에 방탈출을 달려보았다.

2달 만에 3개의 방을 연달아...

대학로의 룸이에스씨 모든 방 깨기!

1. 도깨비 집의 보물

2. 숨겨진 방의 비밀

3. 탐정사무소 살인사건


룸이에스씨에 대한 이미지는 최상!

직원이 웃으면서 열정적으로 일한다.

특히 탈출했을 때 축하 제대로 해준다.

기분 좋아지는 서비스!

테마가 더 있다면 또 갈 수도...

이 업체 추천 추천~~


힌트를 주는 방식이 독특하다.

맵이 그려진 전용 어플리케이션이 있다.

시간에 따라 맵 위에 번호가 뜬다.

번호를 클릭하여 힌트를 볼 수 있다.

제한은 5개.

진행이 느린지 빠른지 살피기에 좋다.


그리고 라인 메신저로 힌트를 준다.

메신저로 질문은 무제한.

직원분이 친절하게 답변해 주신다.

진행이 좀 빠르다면 메신저로 물어야 한다.


시즌에 맞게 크리스마스 장식도 해두었다.

머리띠나 말풍선 들도 있어서

기념 사진을 찍기 매우 좋다.


룸이에스씨도깨비 집의 보물

업체난이도: ★★★★ (4/5)

체감난이도: ★★★ (3/5)

스토리: ★★ (3/5)

추천도: ★★★☆ (3.5/5)


Player 참고: 방탈출 경력 23회 부부


Comment: (성공 / 2 hint)

 Jason: "돈 쉽게 버는 거 아니다"

 Julie: "어허 거참... 도깨비들이..."


Intro:

나무꾼 김서방네 가족은 오늘도 배고프네.

암만 나무를 해도 뭔 놈의 세금이 그리도 많은지, 

있지도 않은 땅값을 내고 

두 살 아들내미 군역비를 내고 

빌린 쌀을 갚으면 남는 것도 없다지? 

"아이고, 이대로 가다가는 다 굶어죽겠다!" 

참다 못한 김서방은 

도깨비부자 만석꾼 안영감을 찾아 사정사정을 하네. 

"영감님, 우리 좀 살려주십시오. 

곳간 채우는 법 좀 알려주십시오" 

마음씨 착한 안영감, 

장농에서 허름한 두루마리를 꺼내주며 

은밀히 하는 말이 

"여기로 가면 도깨비 노름판이 있을 걸세. 

내가 적어놓은 대로만 한다면 

자네도 만석꾼이 될 게야."

도깨비 노름판이 다 뭔가, 

반신반의 하면서도 당장 굶어죽게 생겼으니 어쩌나, 

가봐야지. 가서 땡전 한 푼이라도 건져야지.


오랜만의 방탈출이라 두근두근.

짐을 보관하는 캐비넷부터 테마랑 맞춰져 있다.

옛스럽다.


3가지 테마의 입구가 요밀조밀 모여있다.

눈도 가리지 않고 작은 방으로 안내해준다.

직원의 친절한 설명과 함께 문을 닫고 시작.


공간은 다른 방탈출에 비해 작아보인다.

하지만 요밀조밀하게 잘 구성되어 있었다.

좁다는 느낌은 들지 않았다.


인원은 2명이 제일 적합해 보인다.

1인 탈출은 불가능하다. 

협동이 필요한 문제가 있다.

운 나쁘면 서로 답답해 죽을지도...

다행히 우리는 운이 좋았다.


자물쇠와 장치가 적절히 섞여있는 테마이다.

자물쇠는 사극 테마에 맞게 독특하게 생겼다.

이것도 옛스럽다.


무엇보다 음악이 진행상황에 따라 바뀐다.

음악은 신나지만 활동성은 거의 없다.

치마, 힐 상관없을 듯 하다.


공포도는 없지만...

소리에 놀란다면...? 할 말은 없다.

장치 동작하는 소리가 좀 있긴 하다.


2개의 힌트를 사용하여 10분을 남기고 탈출.

문제 수는 적당해보인다.

약 15개 정도?


적당히 즐기기에 괜찮은 테마.

하지만 서비스가 좋아서 추천한다.


예쁘게 꾸며진 곳에서 찍은 인증샷으로 마무리!


탈출 인증샷



TechTrip 스압없는 소소한 Ep./방탈출

Angular Component Communication (Input)

2018. 12. 2. 22:41

지인 디자이너의 도움으로 디자인을 좀 수정했습니다.

그러다보니 컴포넌트 안에 컴포넌트가 들어갔어요.

Date picker 보다는 달력을 이용하기로 했습니다.

아래 처럼요.


변경 디자인 초안


그리하여 달력 컴포넌트를 만들었습니다.

상위 컴포넌트와 달력이 서로 통신해야하죠.

부모(Parent), 자식(Child) 관계로 부르는데요.


저의 경우에는 아래와 같습니다.

달력을 싸고 있는 컴포넌트가 부모(Parent)

달력 컴포넌트가 자식(Child) 입니다.


부모 -> 자식 방향의 데이터 전달부터 볼게요.

@Input 이라는 annotation을 사용합니다.


자식(Child)입장에서 Input이 되겠죠?

자식 컴포넌트에 먼저 작업을 해줍니다.


1. 자식 컴포넌트에 Import Input


달력 컴포넌트에 Input을 Import 합니다.

@angular/core 모듈에 있어요.


2. 자식 컴포넌트에 @Input 추가


달력 컴포넌트 안에 @Input을 추가합니다.

@Input의 이름을 지정해줄 수 있습니다.

지정하지 않으면 기본 값은 변수명입니다.

이름이 변수명과 같아서 생략해도 됩니다.

저는 명시적으로 적었어요.


코드로 볼게요.

import { Component, Input, ... } from '@angular/core';
...

@Component({
  selector: 'app-calendar',
  templateUrl: './calendar.component.html',
  styleUrls: ['./calendar.component.css']
})
export class CalendarComponent implements OnInit {

  @Input('date') date: Date;

  ...
}


3. 부모 템플릿에서 데이터 전달


자식(Child) 컴포넌트에 @Input이 추가되었죠.

부모에서 데이터를 넣어줄 차례입니다.

매우 간단합니다.

Template의 Property 바인딩을 이용하면 됩니다.

<div class="budget">
    <app-calendar [date]="date" 
                  (dateChange)="onDateChange($event)">
    </app-calendar>
    ...
</div>

@Input의 date에 부모 컴포넌트의 date를 연결합니다.

주의할 점은 Input에 이름을 지정했을 경우

그 이름이 property 이름이 됩니다.


당연히 부모 컴포넌트에 date가 있어야겠죠.

기본으로 오늘 날짜로 셋팅해주었습니다.

...

@Component({
    selector: 'app-budget',
    templateUrl: './budget.component.html',
    styleUrls: ['./budget.component.css']
})
export class BudgetComponent implements OnInit {    
    date: Date = new Date();
    ...
}

아래처럼 달력 컴포넌트에 오늘 날짜가 표시됩니다.

아직 디자인은 엉성하지만요.


달력 컴포넌트 실행 화면


다음에는 자식 -> 부모로 방향을 알아볼게요.


전체소스는 아래에서 볼 수 있습니다.


소스주소: https://github.com/jsrho1023/account-book

'IT Tech > Angular' 카테고리의 다른 글

Angular Dialog(Material Design)  (0) 2019.01.01
Angular Component Communication (Output)  (0) 2018.12.16
Angular Test Headless  (0) 2018.11.18
Angular Pipes  (0) 2018.11.12
Angular Router (NGXS)  (0) 2018.11.05

TechTrip IT Tech/Angular