전체보기

    [바미] Typescript와 AWS Lambda로 모니터링에 유용한 API 패턴 구성하기

    람다를 크게 세 부분으로 나눕니다. 사용자로부터 받은 데이터를 검증해주는 컨트롤러 비즈니스로직을 구성하는 서비스 API나 데이터베이스와 연결되는 레파지토리 그럼 상품을 구매하는 Shop 예제를 통해 차근차근 보겠습니다. Shop예제 shop.ts const repo: ShopRepository = new ShopRepository(); const service: ShopService = new ShopService(repo); const controller: ShopController = new ShopController(service); export const purchaseItem = controller.purchaseItem 위 이미지처럼 컨트롤러는 생성자로 서비스를, 서비스는 생성자로 레파지토리를..

    [바미] AWS Cloud9 개발 환경에서 TypeScript를 사용하기.

    이 샘플은 AWS Cloud9 개발 환경에서 TypeScript를 사용하는 방법을 보여줍니다. 이 샘플을 생성하면 AWS 계정에 요금이 부과 될 수 있습니다. 여기에는 Amazon EC2 및 Amazon S3와 같은 서비스에 대한 가능한 요금이 포함됩니다. 자세한 내용은 Amazon EC2 요금을 참조하십시오. 및 Amazon S3 요금. 목차 전제 조건 1 단계 : 필요한 도구 설치 2 단계 : 코드 추가 3 단계 : 코드 실행 4 단계 : Node.js에서 AWS SDK for JavaScript 설치 및 구성 5 단계 : AWS SDK 코드 추가 6 단계 : AWS SDK 코드 실행 7 단계 : 정리 전제 조건 이 샘플을 사용하기 전에 다음 요구 사항을 충족해야합니다. 기존 AWS Cloud9 EC..

    [바미] Web Socket에 대해 알아보자!

    WebSocket이란 WebSocket은 컴퓨터 네트워크용 통신 규약의 하나이다. ( ws:// ) 인터넷의 표준화 단체인 W3C(World Wide Web Consortium) 와 IETF(Internet Engineering Task Force) 가 Web server 와 Web browser 간의 통신을 위한 규정을 정의한 쌍방향통신(Duplex)용 기술 규약이다. API는 W3C가 책정을 맡고 있고, WebSocket 프로토콜은 IETF가 책정을 맡고 있다. WebSocket의 등장 배경 초기 웹의 탄생 목적은 문서 전달과 하이퍼링크를 통한 문서 연결이었다. 웹을 위한 HTTP 프로토콜은 이러한 목적에 매우 부 합하는 모델이다. 그러나 시대가 변하고 환경이 발전할 수록 웹이 더 이상 문서공유에만 ..

    [바미] typeorm에 대해 알아보자!

    참고사이트 TypeOrm (object Relational Mapping) TypeORM 에서 ORM 기본, NativeScript, 박람회 및 전자 플랫폼 반응, NodeJS, 브라우저, 코르도바, 폰갭, 이온 성에서 실행할 수 있으며, 타이프 라이터와 자바 스크립트 (ES5, ES6, ES7, ES8)와 함께 사용할 수 있습니다. 이 솔루션의 목표는 항상 최신 JavaScript 기능을 지원하고 몇 가지 테이블이있는 소규모 응용 프로그램부터 여러 데이터베이스가있는 대규모 엔터프라이즈 응용 프로그램에 이르기까지 데이터베이스를 사용하는 모든 종류의 응용 프로그램을 개발하는 데 도움이되는 추가 기능을 제공하는 것입니다. ORM 이란? Object Relational Mapping, 객체-관계 매핑 객체와 ..

    [바미] JMT이 아닌 JWT에 대해 알아보자!

    세션 기반 인증 방식 옛날에 토큰 기반 인증이 없었을 때 서버 세션을 사용해 인증을 했습니다. 클라이언트가 로그인 성공하면 서버가 유저 세션을 만들고 메모리나 데이터베이스에 저장한다. 서버가 클라이언트에게 세션 ID를 보낸다. 클라이언트의 브라우저에 세션의 ID만 쿠키에 저장하게 한다. 세션 데이터가 서버의 메모리에 저장되므로, 확장 시 모든 서버가 접근할 수 있도록 별도의 중앙 세션 관리 시스템이 필요합니다. 세션 기반 인증 방식 단점 중앙 세션 관리 시스템이 없으면, 시스템 확장에 어려움이 생깁니다. 중앙 세션 관리 시스템이 장애가 일어나면, 시스템 전체가 문제가 생깁니다. 만약 메모리에 세션 정보가 들어있다면, 메모리가 많이 사용될 수 있습니다. 규모 확장이 필요없는 소규모 프로그램 작성에서는 세션..

    [바미] Typescript-restful-starter - Plan 부분 실행.

    수정 사항. 여기 Plan부분 시행. name외에도 age, phonenumber와 같은 데이터를 추가 할 수 있도록 수정. 기존 데이터에서 1번에서 추가한 컬럼 값들을 넣지 않은 데이터들이 Update될 수 있도록 수정. Create로 생성된 데이터 중 입력한 이름을 가진 데이터, 입력한 나이를 가진 데이터, 입력한 전화번호를 가진 데이터, 등을 검색하여 조회 할 수 있도록 수정. 코드 Sample.controller.ts // select -> routes/Sample.route.ts 참조. public async find5(): Promise { const { age } = this.req.params as unknown as { age: number }; const sample = await th..

    [바미] Typescript-restful-starter - DB 컬럼 중 'name'값을 추가하여 id, text, email외에도 name값을 추가 할 수 있도록 수정해보자!

    수정사항 DB 컬럼 중 'name'값을 추가하여 id, text, email외에도 name값을 추가 할 수 있도록 수정. 변경 전 Sample.controller.ts // input -> routes/Sample.route.ts 참조. public async create(): Promise { const { text, email} = this.req.body as { text: string, email: string}; this.sample.text = text; this.sample.email = email; try { const result = await this.sampleService.save(this.sample); return this.res.status(200).send(result); }..

    [바미] Typescript-restful-starter - Update 될 때 텍스트뿐만 아니라 이메일도 수정 할 수 있게 변경하기!

    코드 수정 전 Sample.schemas.ts import { number, object, string } from "joi"; /* 구조 정의 */ export const createSample = object().keys({ text: string().required(), email: string().required(), }); export const updateSample = object().keys({ id: number().required(), text: string().required(), }); export const deleteSample = object().keys({ id: number().required(), }); 코드 수정 후 Sample.schemas.ts import { num..

    [바미] Typescript-restful-starter - services에 있는 코드와 repository에 있는 코드의 차이점에 대해 알아보자.

    이 부분에 대해 궁금하여 물어본 내용을 답변을 받아 적었습니다. Sample.repository.ts import { EntityRepository, Repository } from "typeorm"; import { Sample } from "../models"; @EntityRepository(Sample) export class SampleRepository extends Repository { public bulkCreate(Samples: Sample[]): Promise { return this.manager.createQueryBuilder().insert().into(Sample).values(Samples).execute(); } public async removeById(id: numb..