Typescript declare
declare는 이미 다른 파일에서 정의된 변수를 사용할 때 type 오류가 발생하는 것을 막는 용도로 사용할 수 있다. html 파일에서 차례대로 load 되어서 값을 읽는데 문제가 없을 것임에도 Typescript는 해당 변수에 대한 정보를 알 수 없기 떄문이다. 123declare const a :number;console.log(a) // no type error declare문은 Javascript로 변환할 때 사라진다. 이렇게 정의된 변수들은 테스트 코드를 실행하면 오류가 발생하기 때문에 gloabl에 선언해두고 테스트를 진행했다. 12345beforeAll(() => { (global as any).fruit = { apple: 'apple' };});
yarn 전체 라이브러리 upgrade
yarn upgradepackage.json에 명시된 버전 범위 내에서 패키지들을 업데이트 한다. yarn.lock 파일도 재생성된다. yarn upgrade –latestupgrade 명령어가 실행되지만 package.json에 명시된 버전 범위는 무시된다. yarn upgarde를 사용할 경우 package.json 내용이 업데이트 되지 않는다. yarn outdated설치된 모든 패키지의 dependency를 리스팅한다. 현재 설치된 버전과 최소 요구 버전, 그리고 최신 버전을 보여준다. 1234Package Current Wanted Latest Package Type URLlodash 4.15.0 4.15.0 4.16.4 devDependencies https://github.com/lodash/lodash#readmeunderscore 1.6.0 1.6.0 1.8.3 dependencies ...
Method Naming Convention
Apple 개발자 문서를 참고하여 정리한다. 일반적인 Rule 이름은 소문자로 시작한다. 뒤에 붙은 단어의 첫번째 글자는 대문자로 작성한다. _, / 등의 문장부호는 이름에 포함시키지 않는다. (camel-case 사용) 예외 케이스 통용되는 명칭을 사용하는 경우(ex. PDF) 대문자로 시작할 수 있음 여러 private 메소드를 그룹짓고싶은 경우 대문자로 시작할 수 있음 private 메소드의 이름을 underscore(_) 로 사용하는것을 지양한다. (클래스 멤버 변수 이름의 경우 사용 가능) “do” 또는 “does”를 이름으로 사용하는 건 지양한다. 모호한 동사는 전달하는 의미가 별로 없기 때문이다. Accessor 메소드 메소드가 반환하는 정보가 명사로 표현된다면 형식을 다음과 같이 한다.12_title: string;setTitle = (title: string) => {_title = title}; 메소드가 반환하는 정보가...
NestJS Service 상속을 해도 될까?
현재 만들고있는 app의 구조를 개선하던중 service 상속과 dependency injection에 대해 고민하게 되었다.내가 맡은 프로세스는, A 요청시 A 컴포넌트를 실행하고 B 요청시 B 컴포넌트를 실행한다. A와 B는 각각의 설정 방법이 다르지만 공통적으로 사전에 수행되어야하는 작업들이 있다.코드를 넘겨받을 당시 가장 초기 구조는 A와 B 각 provider에 같은 코드가 작성되어 실행되고 있었다. 이렇게 할 경우 수정사항이 생겼을 때 한 곳만 고친다던가 하는 실수가 잦았다. 초반에는 A 서비스만 제공했기 떄문에 B를 추가하면서 복붙한 것 같다. 하지만 그 뒤에 C 서비스까지 들어온 것으로 보인다.이렇게는 안되겠다! 싶어서 리팩토링을 진행하면서 공통 작업을 수행하는 provider를 생성하고 A, B, C에서 extends 하도록 했다. 이렇게 할 경우 constructor가 너무 지저분해져서 방법을 찾다가 service 상속은 NestJS가 지향하는 것과 맞지...
Dependency Injection
Angular Document - Understanding dependency injection 해석 Understanding dependency injectionDependency injection, 또는 DI는 Angular의 기본 컨셉입니다. DI는 Angular 프레임워크에 결합되어 Components, Directives, Pipes, Injectables과 같은 decorator로 class를 필요에 맞게 설정할 수 있도록 합니다. DI 시스템의 두 가지 주요한 역할은 다음과 같습니다: dependency consumer와 dependency provider Angular는 Injector라는 추상화를 이용해 dependency consumer와 dependency provider 사이의 상호작용을 용이하게 합니다. dependency가 요청되면, injector는 이미 사용 가능한 instance가 존재하는지 registry부터 확인합니다. 사용 가능한...
Webhook 테스트 사이트
Callback url 동작을 테스트 해야 했는데 좋은 사이트를 찾았다. webhook.site 접속하면 uuid를 붙여서 새로운 url을 생성해준다. 거기로 요청을 보내면 사이트에서 확인할 수 있다. 화면 좌측에는 최근에 전송한 요청들이 차례대로 나타난다. 거기서 요청을 누르면 화면 중앙에 요청에 대한 세부 정보들이 출력된다. 유용하게 쓸 수 있을 것 같다.
cloudwatch log insights query sdk
javascript sdk를 사용해 cloudwatch log insight를 사용하는 법을 정리한다. 코드12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455var AWS = require('aws-sdk');AWS.config.update({region: 'ap-northeast-2',credentials: { accessKeyId: "", secretAccessKey: "",}, });// Create CloudWatch service objectvar cl = new AWS.CloudWatchLogs();const params = { startTime: new...
Web Components
Web Components는 재사용이 가능한 커스텀 element를 만들 수 있게 해주는 기술이다. 캡슐화를 함으로써 나머지 코드와 별개로 실행된다. 따라서 코드가 섞여서 혼란을 가져오진 않을까 걱정할 필요 없이 여기저기 붙여 재사용 할 수 있다. 세 가지 주요 컨셉이 있다. Custom elements커스텀 element를 정의하게해주고 element의 동작을 구현하게 해주는 자바스크립트 API의 집합이다. 웹 컴포넌트 기능을 명시하는 클래스를 생성하여 웹 컵포넌트를 구현한다.아래와 같이 customElements.define() 메서드로 커스텀 컴포넌트를 등록할 수 있다. 1234567class CustomComponent extends HTMLElement { constructor(){ super(); }}customElements.define('my-component',...
pm2 permission denied 에러
pm2로 프로세스를 시작하려고 했는데 permission denied 에러가 발생했다. 123456789101112131415161718192021$ npm start development> mbus-api-play@1.0.1 start> pm2 start ./ecosystem.config.js --env developmentError: EACCES: permission denied, mkdir '/root/.pm2/logs' at Object.mkdirSync (node:fs:1382:3) at mkdirpNativeSync (/usr/local/lib/node_modules/pm2/node_modules/mkdirp/lib/mkdirp-native.js:29:10) at Function.mkdirpSync [as sync]...
AWS RDS Aurora MySQL DataGrip으로 접속하기
DataGrip이 그렇게 좋다고해서 사용해보려고 설치했는데 연결이 잘 안돼서 좀 헤맷다. 데이터 소스 리스트를 보면 MySQL이 보인다. 선택하고 DB 정보를 입력하고 Test Connection을 누르면 연결이 잘 되는지 확인할 수 있는데 계속 접속 에러가 났다. 한참 헤맷는데 생각보다 간단하게 해결할 수 있었다. General > Driver 설정에서 ‘MySQL’을 누르면 위와 같이 다른 옵션들을 볼 수 있는데, 여기서 Amazon Aurora MySQL을 선택하면 된다.그럼 아래쪽에 이런 경고가 뜰 수도 있다. 경고 메세지가 시키는대로 다시 드라이버를 바꾸면 안된다. 무시하고 Test Connection을 누르면 정상적으로 연결되는 것을 볼 수 있다!