728x90

aws자원을 이용하면서 어렵게 느껴졌던 부분이 네트워크와 보안이었어요.

오늘은 bastion host를 이용하여 private subnet에 있는 DB server에 접속하는 설정을 해보겠습니다.

 

AWS console 화면에 접속해주세요.

"인스턴스 시작"을 눌러 인스턴스를 생성해 봅니다.

 

업데이트가 빠른 Image 목록이 보이네요. 제일 최신 버전으로 선택해 봅니다.

 

비용에 연연하지 않는 편이지만, 그래도 공짜는 좋으니까요^^ 프리티어로 선택했어요.

 

다음으로 인스턴스 세부 정보를 구성합니다.

네트워크 : 사용할 VPC를 선택하는데요. 새 VPC를 생성해도 되지만 저는 기존에 사용하던 VPC를 선택했어요.

서브넷 : VPC를 선택하면 그와 연결된 서브넷 목록이 보입니다. 그중 퍼블릭 서브넷을 선택해 주면 됩니다.

스토리지는 기본값으로 설정하고 넘어가겠습니다.

 

다음은 태그입니다. aws계정을 여러 명이 사용하다 보면 태그가 중요해요.

누가 어떤 용도로 만들었는지 tag를 달아주는 것이 추후에 관리하기 편리합니다.

 

다음으로 보안 그룹이에요.

기존에 사용 중인 보안 그룹이 없다면 새 보안 그룹을 선택하여 허용할 포트를 설정해 주면 됩니다.

 

 

저는 bastion host용 보안 그룹을 이미 만들어 두어서 그걸로 선택하였습니다.

아래 인바운드 규칙을 보시면 ssh사용을 위한 22번 포트, mongoDB연결을 위한 27017 포트가 허용되어 있어요.

 

새로운 보안 그룹을 생성할 때에도 위의 인바운드 규칙을 참고하셔서 만드시면 됩니다.

 

검토 및 시작을 누르게 되면 7단계 인스턴스 시작 검토 내용이 나오고, 키 페어 선택하는 화면이 나옵니다.

키 페어는 해당 ec2에 연결할 때 사용할 인증서라고 보시면 됩니다.

새 키 페어를 생성하는 경우 키 페어 이름을 입력한 다음 [키 페어 다운로드]를 통하여 보관하면 됩니다.

 

저는 기존에 사용 중인 키 페어를 선택하였어요. 키 페어를 선택하면 

"해당 프라이빗 키 파일에 액세스 할 수 있으며 이 파일이 없으면 내 인스턴스에 로그인할 수 없음을 확인합니다." 이 부분에 동의를 해주고 [인스턴스 시작]을 해주면 됩니다.

인스턴스 시작이 됩니다.

 

728x90
반응형
728x90

드디어 지정한 배송일이 되었어요.

아침에 7시쯤 배송 도착했다고 문자로 알려주셨어요.

쿠*처럼 사진 찍어서 보내주시니 확실하네요.

출근이었음 남편보고 냉장고에 넣어놔줘 하고 쏜살같이 나갔을 텐데, 재택 근무일이라 일어나서 배송 온걸 바로 확인해 보았어요.

 

우선 제 주문목록은 이렇고요.

임산부 친환경 농산물 꾸러미라고 쓰여있어서 박스도 맘에 들어요. 더 배려받는 느낌이랄까요.

박스도 열기 쉽게 되어 있네요.

 

 

배송온 농산품들을 살펴보니 상태가 너무 좋아요!

지역별로 다른 업체에서 담당한다고 하는데 제가 사는 지역은 두레생협에서 오는데 갖 따온 거처럼 아주 신선해요!!

유기농 저지방우유만 먼저 뜯어서 먹어봤는데, 오 흰 우유 특유의 냄새가 안 나고 맛있어요! 900ml짜리인데 다음번 주문엔 더 많이 시켜야겠어요. 금방 먹을 거 같아요.

좀 이따 딸기랑 참외도 먹어봐야겠어요!

728x90
반응형
728x90

월 4회 3만 원 이상 구매 시 사용할 수 있는 임산부 친환경 농산물 꾸러미!

완성형과 선택형 중 저는 제 맘대로 골라서 주문할 수 있는 선택형 꾸러미를 주문해 보았어요.

 

구매할 상품들을 장바구니에 담아야겠죠.

저는 딸기, 참외, 방울토마토, 유기농 저지방 우유 등을 제사랑 과일과 야채 몇 가지를 담았어요.

 

여기서 주의사항!

※ 총 주문금액에서 농산물이 50% 이상 되어야 한다.

이것 말고는 모두 알고 있는 사항이네요.

그럼 결제하는 페이지로 가볼게요.

 

배송지 입력란 밑에 공동현관 출입 번호 입력란이 있어요.

일부 배송기사님들은 입력해도.. 공동현관 앞에 놓고 가셔서 불편할 때가 있는데, 두레생협은 어떻게 배송 올지 배송 오면 후기도 올려볼게요.

 

아무래도 야채, 과일, 육류 등 신선제품이다 보니 배송일이 중요한데요.

배송일을 선택할 수 있어요. (굿굿 칭찬합니다.)

저는 3-15(화)를 선택했어요. 맛있는 건 빨리 받고 싶으니까요.^^

 

3만 원만 넘겨야지 했는데 담다 보니 4만 원이 넘었네요;;;

결제내역을 보면 48,700원 중 포인트 38,960원 사용했고요. 제가 결제한 금액은 9,740원입니다.

 

와.. 이렇게 많은 친환경 농산물들을 9,740원에 집 앞까지 배송해준다니.. 임산부한테 정말 좋은 혜택인 거 같아요.

이런 혜택 많이 많이 만들어주면 좋겠어요. 세금 내는 보람 좀 느껴봅시다.

 

이제 배송이 어떻게 올지! 화요일에 후기로 돌아올게요.

 

 

728x90
반응형
728x90

회사에서 모니터를 32인치로 바꿔주었어요. 이제 노트북 화면은 볼일이 없어지고, 모니터를 나눠서 사용하려고 하는데, 왼쪽은 더 크게 하고 싶었습니다.

삼성에 찾아보니 "Easy Setting Box"라는 프로그램을 이용해서 가능하더군요.

 

1. 분할 프로그램 "Easy Setting Box" 설치하기

https://www.samsung.com/sec/consumer/learningresources/monitor/EasySettingBox/EasySettingBox/

 

Easy Setting Box 프로그램 설치

Easy Setting Box 프로그램 설치

www.samsung.com

 

PC 사양에 맞는 설치 파일을 다운로드합니다. 아쉽게도 window만 지원하네요.

 

2. 분할 프로그램 "Easy Setting Box" 실행 및 설정

프로그램을 화면이에요. 저는 1번이 노트북, 2번이 모니터입니다.

노트북은 그대로 두고 2번 모니터에 적용할 [화면 분할 방식]을 선택하고 [영역 조절]을 클릭합니다.

빨간색으로 영역이 보이고 이를 드래그하여 조절해줍니다.

저는 왼쪽에는 코딩 화면, 오른쪽엔 도큐먼트나 메모장을 주로 열어서 이렇게 세팅하였어요.

[나가기]를 누르면 분할 설정이 완료됩니다.

사용 방법은 창을 이동하면 상단에 어느 분할화면에 위치시킬지 창이 뜹니다.

왼쪽에 위치해 볼께요.

원하는 위치에 놓으면 창크기 조절 완료!

 

아주 편리합니다.

그럼 오늘도 즐거운 개발되세요.

 

 

+ 일부 프로그램에서 적용되지 않을 수 있다더니...

vscode는 되지 않네요ㅠㅠ

728x90
반응형
728x90

기존 RDB에 익숙한 개발자로 document DB 중 하나인 mongo DB에 컬럼을 추가해야 될 일이 생겼어요.

 

생소한 DB라 개념이 잘 이해되지 않았는데 RDB에서 스키마> 테이블> 컬럼 이러한 구조가 document db에서는 하나의 서류철?처럼 생각하니 좀 쉬웠습니다.

 

우리가 흔히 테이블이라고 부르는 것을 하나의 서류파일이라고 생각하고 거기에 컬럼을 하나 추가한다고 하기보단 서류양식을 update 한다고 생각하면 됩니다.

 

DataGrip을 이용하여 컬럼을 추가하려고 하는데.. 좀처럼 add column이 보이지 않아요;;; 

여기저기 눌러보고 검색해 보다 테이블명을 우클릭 하니 [Modify Table]이라고 메뉴가 보입니다.

 

하지만, + 버튼이 활성화 되지 않네요.... datagrip 공홈에서도 사용법은 나와있지만 모두 막혀있어 권한 문제인가도 고민했지만, 전 이미 admin이기에.. 권한 문제는 아닐 거 같고요.

 

sql은 standard니까 라는 생각으로 콘솔창에 sql DDL 명령문을 입력하니

네.. 빨간색이 보입니다... 개발자라면 보기싫은 저 빨간 지렁이들이요.

 

다시 검색해보니 mongodb의 명령문은

였어요. 

sql은 alter table <테이블명> add column <컬럼명> <테이터타입>의 형태이지만

mongoDB에서는

  • db : 데이터베이스의
  • bcheckemps : bcheckemps 라는 테이블에
  • updateMany : 전체를 update 해준다. (한 건을 실행할 때는 updateOne을 사용하면 됩니다.)
  • $set부분 : ""값이 들어있는 login_password 컬럼을 set 한다.

이렇게 생각하니 쉬웠습니다.

명령어 입력 시에도 DataGrip에서 . 입력하면 사용 가능한 명령어 목록이 나와서 아주 편리하네요.

 

728x90
반응형
728x90

nest cli는 많은 기능을 제공하는 데, 그중 generator를 이용하여 CRUD를 구현해 보겠습니다.

먼저 nest -h 명령어를 통해 nest에서 사용하는 alias를 확인해 볼게요.

nest -h
Usage: nest <command> [options]

Options:
  -v, --version                                   Output the current version.
  -h, --help                                      Output usage information.

Commands:
  new|n [options] [name]                          Generate Nest application.
  build [options] [app]                           Build Nest application.
  start [options] [app]                           Run Nest application.
  info|i                                          Display Nest project details.
  update|u [options]                              Update Nest dependencies.
  add [options] <library>                         Adds support for an external library to your project.
  generate|g [options] <schematic> [name] [path]  Generate a Nest element.
    Schematics available on @nestjs/schematics collection:
      ┌───────────────┬─────────────┬──────────────────────────────────────────────┐
      │ name          │ alias       │ description                                  │
      │ application   │ application │ Generate a new application workspace         │
      │ class         │ cl          │ Generate a new class                         │
      │ configuration │ config      │ Generate a CLI configuration file            │
      │ controller    │ co          │ Generate a controller declaration            │
      │ decorator     │ d           │ Generate a custom decorator                  │
      │ filter        │ f           │ Generate a filter declaration                │
      │ gateway       │ ga          │ Generate a gateway declaration               │
      │ guard         │ gu          │ Generate a guard declaration                 │
      │ interceptor   │ in          │ Generate an interceptor declaration          │
      │ interface     │ interface   │ Generate an interface                        │
      │ middleware    │ mi          │ Generate a middleware declaration            │
      │ module        │ mo          │ Generate a module declaration                │
      │ pipe          │ pi          │ Generate a pipe declaration                  │
      │ provider      │ pr          │ Generate a provider declaration              │
      │ resolver      │ r           │ Generate a GraphQL resolver declaration      │
      │ service       │ s           │ Generate a service declaration               │
      │ library       │ lib         │ Generate a new library within a monorepo     │
      │ sub-app       │ app         │ Generate a new application within a monorepo │
      │ resource      │ res         │ Generate a new CRUD resource                 │
      └───────────────┴─────────────┴──────────────────────────────────────────────┘

맨 아래에 보시면 CRUD가 있습니다. resource 또는 res를 이용하면 CRUD에 필요한 템플릿을 만들 수 있습니다.

저는 auth라는 CRUD 기능을 만들어 보겠습니다.

nest g res auth 
? What transport layer do you use? 
> REST API
  GraphQL (code first)
  GraphQL (schema first)
  Microservice (non-HTTP)
  WebSockets
? Would you like to generate CRUD entry points? (Y/n) Y
CREATE src/auth/auth.controller.spec.ts (556 bytes)
CREATE src/auth/auth.controller.ts (883 bytes)  
CREATE src/auth/auth.module.ts (240 bytes)      
CREATE src/auth/auth.service.spec.ts (446 bytes)
CREATE src/auth/auth.service.ts (607 bytes)
CREATE src/auth/dto/create-auth.dto.ts (30 bytes)
CREATE src/auth/dto/update-auth.dto.ts (164 bytes)
CREATE src/auth/entities/auth.entity.ts (21 bytes)
UPDATE src/app.module.ts (388 bytes)

nest g res 명령 실행 시 어떤 전송방법을 사용할지, CRUD point를 생성할지에 대해 물어봅니다.

저는 REST API, Y를 선택하여 생성하였습니다. 이제 start를 해보겠습니다.

 yarn start

"Nest application successfully started" 성공적으로 시작했다고 합니다.

"http://localhost:3000/auth"로 접속해 보니 "Hello" 메시지를 정상적으로 만나볼 수 있습니다.

하지만 우리는 이걸 목적으로 한 것이 아니기에 "http://localhost:3000/auth/1"로 접속해 봅니다.

이렇게 나오게 되면, Resource생성이 정상적으로 완료되었음을 확인할 수 있습니다.

생성된 폴더 구조를 살펴보도록 하겠습니다.

.ts파일 중 spec.ts는 테스트 파일, dto, entities폴더에 있는 파일은 DB와 관련된 파일입니다.

먼저 이외의 controller, moduel, service에 대해서 살펴보겠습니다.

 

> service

service파일은 비즈니스 로직을 처리하는 파일입니다. auth.service.ts의 AuthService를 살펴보면

create, findAll, findOne, update, remove라는 메서드가 있습니다.

방금 전, "http://localhost:3000/auth/1"를 호출하였을 때 만났던 메시지가 findOne 메서드를 통해 response 되었겠네요.

findOne(id: number) {
    return `This action returns a #${id} auth`;
  }

> controller

@Controller('auth')
export class AuthController {
  constructor(private readonly authService: AuthService) {}

  @Post()
  create(@Body() createAuthDto: CreateAuthDto) {
    return this.authService.create(createAuthDto);
  }

  @Get()
  findAll() {
    return this.authService.findAll();
  }

  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.authService.findOne(+id);
  }

controller를 살펴보면 @Get, @Post, @Delete, @Patch와@Controller('auth') 데코레이터들을 볼 수 있습니다.

"localhost:3000/auth"로 request 하면 이 클래스에서 처리한다는 의미이고, 데코레이터들을 기준으로 각 메서드들이 처리함을 의미합니다. 

"http://localhost:3000/auth/1"를 호출하였을 때 service 중 findOne메서드를 통해 메시지가 출력되었는데, controller에서는 @Get(':id')인 데코레이터를 가진 findOne이 호출되어 service를 호출한 것입니다.

':'으로 시작하는 문자열이 파라미터 값이구나 하는 걸 직관적으로 알 수 있으시겠죠?

 

> module

@Module({
  controllers: [AuthController],
  providers: [AuthService]
})
export class AuthModule {}

auth.module.ts를 살펴보면 굉장히 간단하지만 중요한 역할을 합니다.

auth폴더 내에 있는 resource들을 어떻게 이용하겠다!라고 선언해주는 부분이기 때문입니다.

controller는 AuthController를, providers는 AuthService를 이용한다는 의미입니다. 

마지막으로 AuthModule로 export 하여주는데, 이는 프로젝트 전체의 app.module.ts에서 확인해보면

@Module({
  imports: [SharedModule, AuthModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

"imports: [ "부분에 AuthModule이 import 되어 이용되는구나 확인할 수 있습니다.

 

 

728x90
반응형

'NestJS' 카테고리의 다른 글

[NestJS] swagger에서 테스트하기  (0) 2022.03.23
[NestJS] Authentication 구현  (0) 2022.03.18
[NestJS] app.controller 살펴보기  (0) 2022.03.02
[NestJS] 개발하기  (0) 2022.02.25
[NestJS] 시작하기  (0) 2022.02.25
728x90

app.controller.ts 소스 살펴보기

지난번엔 서버를 구동하여 "hello world"를 띄워 보았어요.

localhost의 root경로로 request가 response 되는 것을 확인한 것입니다.

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

app.controller.ts를 보면 Spring 프레임워크와 굉장히 익숙한 구조임을 알 수 있어요. 서버가 수행해야 할 일을 '@' Annotation, Decorator(어노테이션, 데코레이터)로 기술합니다.

 

@Controller 데코레이터를 클래스에 선언함으로써 해당 클래스는 컨트롤러의 역할을,

@Get() 데코레이터를 가진 getHello 함수는 root경로로 들어오는 request(요청)를 처리할 수 있습니다.

 

@Controller() 데코레이터를 보면 ( )가 있다. 여기에 인자를 입력하여 라우팅 경로는 정해줄 수 있어요. 예를들어 backend에서 주로 사용하는 'app'이라고 입력하면 우리가 지난번에 테스트했던 https://localhost:3000/app으로 접근해야 "hello world"를 만날 수 있는 것이죠!

  @Get('/helloworld')
  getHello(): string {
    return this.appService.getHello();
  }

@Get() 안에는 '/'가 생략되어 루트 경로이며, '/helloworld'로 변경한다면, 기존의 http://localhost:3000/ 요청에 대하여 404 에러를 만나게 될 것이고, http://localhost:3000/helloworld로 요청해야 "hello world"페이지를 응답받을 수 있을 것이다.

좌 : helloworld로 호출&nbsp; &nbsp; &nbsp; /&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 우 : root 호출&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;

 

소스로 보면 @Controller(에는 "prefix:", @Get(에는 "path"라고 붙여진 게 확실히 보여서 더 쉽게 이해할 수 있습니다.

728x90
반응형

'NestJS' 카테고리의 다른 글

[NestJS] swagger에서 테스트하기  (0) 2022.03.23
[NestJS] Authentication 구현  (0) 2022.03.18
[NestJS] CRUD 구현해보기  (0) 2022.03.07
[NestJS] 개발하기  (0) 2022.02.25
[NestJS] 시작하기  (0) 2022.02.25
728x90

가입 후에 로그인하니 우측에 포인트 정보가 딱!! 38만 4천 원이 들어와 있네요.

해당 포인트는 22년 12월 15일까지, 한달에 4회 사용할 수 있게 되어 있어요.

최소 주문금액 3만원이상 이고요. 한 번에 10만 원까지 주문할 수 있습니다.

 

그럼 포인트를 사용해볼까요?

 

요즘 최애 과일인 딸기를 산다는 가정하에 주문해보았어요.

 

배송일을 선택할 수 있게 되어 있네요.

마감시간은 오전 11시 30분이니 다음번에 주문할때도 참고해야겠어요.

 

다음은 제일 궁금했던 결제정보에요.

 

구매금액 39,600원 중 본인부담 20%인 7,920원만 결제하면 선택한 배송일에 배송되는 거겠죠?

임산부 혜택 앞으로도 많이 만들어주세요^^

728x90
반응형
728x90

안녕하세요. 오늘은 임산부 친환경농산물 지원사업 관련 글이에요.

임신하고 정부에서 받을 수 있는 혜택 중 하나인데요. 지역별로 선착순 신청을 하였고, 운 좋게 선정되어서 주문안내 문자가 왔어요.

승인 코드번호를 입력하여 가입하고 지원금을 이용해 결제하면 된다고 하는 데요.

먼저 해당 링크로 들어가 봅니다.

https://ii.ecoop.or.kr/pwFood/

 

친환경농산물 꾸러미지원

친환경농산물 꾸러미지원

ii.ecoop.or.kr

회원가입 메뉴가 바로 보이지 않네요;;

[로그인] - [아이디 만들기]로 들어가 문자로 온 코드번호와 신청 시 입력한 핸드폰 번호를 입력해 주세요.

 

[확인]을 클릭하면 위와 같이 "※ 본인 인증 완료"가 뜨고 [필수 정보 입력] 란이 보이게 됩니다.

개인정보 입력 후 동의 [가입 완료하기]버튼을 클릭합니다.

 

가입이 완료되었다는 메시지가 나오면 완료!

이제 쇼핑을 해보면 되겠죠?

저는 서울 강서구로 신청하여 두레생협연합회에서 배송이 되네요.

다음엔 주문 방법에 대해서 포스팅 해보겠습니다.

 

 

728x90
반응형
728x90

구글 검색에 등록하고 나니 네이버에서는 안될까 라는 생각이 들었습니다.

그래서 네이버도 서치 콘솔도 찾아보았어요.

네이버에서는 '서치 어드바이저'라고 부르네요.

 

먼저 네이버로 서치어드바이저로 들어가 주세요.

https://searchadvisor.naver.com/

 

네이버 서치어드바이저

네이버 서치어드바이저와 함께 당신의 웹사이트를 성장시켜보세요

searchadvisor.naver.com

 

 

로그인이 완료되면 [웹마스터 도구]로 들어갑니다.

티스토리 주소를 입력하면 사이트 소유확인 페이지로 넘어갑니다.

저희는 구글에서 했던 방법과 동일하게 HTML 태그로 인증하도록 하겠습니다.

<meta~로 시작하는 태그를 복사해 주세요.

음 아쉽게도 네이버는 자동 복사 버튼이나 기능이 없어서 태그를 선택해서 복사합니다.

 

다음은 블로그 관리 홈으로 들어가 주세요.

메뉴 중 [꾸미기] - [스킨 편집] - [html 편집]을 선택해 줍니다.

이번엔 구글 서치 아래쪽에 네이버 서치 어드바이저를 붙여볼게요.

구글 서치 등록되어 있는 거 보이시죠?

아래에 복사한 <meta 태그 붙여 넣기 후 적용하면 됩니다.

 

그럼 다시 네이버 서치 어드바이저로 돌아와서 [소유확인]을 클릭해주면 

자동 등록 방지 보안 문자 입력 후 확인하여 등록을 완료합니다.

 

728x90
반응형

+ Recent posts