전체 글 412

NestJS/Swagger 사용

Swagger? 간단하게 생각하면 api문서를 자동으로 만들어주는 라이브러리이다. Swagger 모듈 설치 npm install --save @nestjs/swagger swagger-ui-express Swagger모듈을 설치할때 주의할점 nestjs버전이 7버전이라면 swagger버전을 4버전으로 다운그레이드 해야합니다. npm i --save @nestjs/swagger@4 사용예시 main.ts에서 설정을 해준다. const config = new DocumentBuilder() .setTitle('C.I.C') .setDescription('cat') .setVersion('1.0.0') .build(); const document: OpenAPIObject = SwaggerModule.cre..

NestJS 2023.11.06

NestJs/MongoDB visual Field(가상필드)

visual Field 예를들어 회원가입을 진행할때 프론트단에서 백엔드 api로 통신하는 중에 password같은 중요한정보는 중간에 누군가가 낚아 체갈 수 있기때문에 숨겨주는것이 보안상 더 좋은데 이때 사용하면 유용한것이 몽고디비에서 제공해주는 visual Field라는 기능을 사용하면 좋다. 사용예시 //밑에서 정의한 가상필드를 스키마에 필드로 명시 readonly readOnlyData: { id: string; email: string; name: string }; } //virtual 메소드를 사용해서 하면된다. CatSchema.virtual('readOnlyData').get(function (this: Cat) { return { id: this.id, email: this.email, n..

NestJS 2023.11.06

NestJS Request lifecycle

https://docs.nestjs.kr/faq/request-lifecycle 일반적으로 요청 수명주기는 다음과 같습니다. 들어오는 요청 글로벌 바운드 미들웨어 모듈 바운드 미들웨어 글로벌 가드 컨트롤러 가드 루트 가드 글로벌 인터셉터 (프리 컨트롤러) 컨트롤러 인터셉터 (프리 컨트롤러) 라우트 인터셉터 (프리 컨트롤러) 글로벌 파이프 컨트롤러 파이프 라우트 파이프 라우트 매개 변수 파이프 컨트롤러 (메소드 핸들러) 서비스 (존재하는 경우) 라우트 인터셉터 (요청 후) 컨트롤러 인터셉터 (사후 요청) 글로벌 인터셉터 (요청 후) 예외 필터 (라우트, 컨트롤러, 글로벌 순) 서버 응답 Nestjs에서 aop처리를하거나 인터셉터처리를 할때 위 요청사이클을 알고있으면 좀더 쉽게 접근 할 수 있을 것 같다.

NestJS 2023.11.06

NestJs모듈이란?

Nest JS 모듈이란 ? 모듈은 @Module () 데코레이터로 주석이 달린 클래스입니다. @Module () 데코레이 터는 Nest가 애플리케이션 구조를 구성하는 데 사용하는 메타 데이터를 제공합니다. 각 응용 프로그램에는 하나 이상의 모듈 (루트 모듈)이 있습니다. 루트 모듈은 Nest가 사용하는 시작점입니다. 모듈은 밀접하게 관련된 기능 집합으로 구성 요소를 구성하는 효과적인 방법입니다. (기능별로 만듭니다) ex) 유저 모듈, 주문 모듈, 챗 모듈... 같은 기능에 해당하는 것들은 하나의 모듈 폴더안에 넣어서 사용합니다. (UserController, UserService, UserEntity 다 같은 기능이기에 UserModule안에 넣습 니다.) 모듈은 기본적으로 싱글 톤이므로 여러 모듈간에..

NestJS 2023.11.06

NestJs 프로젝트 기본구조

NestJs 프로젝트 기본구조 eslintrc.js -> 개발자들이 특정한 규칙을 가지고 코드를 깔금하게 짤 수 있게 도와주는 라이브러리. 타입스크립트를 쓰는 가이드라인제시,등등 prettierrc -> 주로 코드형식을 맞추는데 사용함.. 코드 포멧터 역할 nest-cli.json -> nest 프로젝트를 위해 특정한 설정을 할수 있는 json파일 tsconfing.json -> 어떻게 타입스크립트 컴파일할제에 대한 설정 tsconfig.build.json -> tsconfig.json의 연장선상 파일 build를 할때 필요한 설정들 에서는 빌드할 때 필요없는 파일들 명시 package.json -> bulid : 운영환경을 위한 빌드 format: 린트에러가 났을지 수정 start: 앱 시작 src 폴..

NestJS 2023.11.06

MYSQL/성능개선을 위한 인덱스 정의시 알아두면 유용한 정보(쿼리 실행 계획)

흔히 쿼리의 검색결과를 최적화 할때 새로운 인덱스를 정의하거나 명시적으로 인덱스를 정의하곤 한다. 인덱스에 대해서 쓰는 글은 아니므로 자세히 어떻게 정령되는지에 대한 정보는 나중에 따로 포스팅을 하겠습니다.인덱스 정의 프로세스문제가 되는 쿼리의 실행계획을 먼저 DB에 질의를 던저봐야합니다.EXPLAIN SELECT ~~~EXPLAIN 을 사용해서 mysql 옵티마이져가 쿼리를 어떻게 연산할것인지에 대한 정의가 테이블로 출력시킬 수 있는데 해당 결과를 보고 인덱스가 잘 먹히고는 있는지 검색되는 rows는 얼마나 많은지 비 효율적인 연산이 일어나지는 않는지 먼저 체크를 해봐야합니다.EX)[ { "id": 1, "select_type": "SIMPLE", "table": "test", ..

DB 2023.10.23

카프카 커넥트 정리

카프카 커넥트 카프카커넥트는 아파치 카프카의 오픈소스 프로젝트 중 하나로, 데이터베이스 같은 외부 시스템과 카프카를 손쉽게 연결하기 위한 프레임워크입니다. 대용량의 데이터를 카프카의 안팎으로 손쉽게 이동시킬수 있습니다. 코드작성없이.. 프로듀서와 컨슈머를 직접 개발해 원하는 동작을 실행하고 처리할 수 있지만, 개발 비용이 부담된다면 카프카 커넥트를 이용하면 빠르게 적용할 수 있다. • 데이터 중심 파이프라인: 커넥트를 이용해 카프카로 데이터를 보내거나,카프카로부터 데이터를 가져옵니다. • 유연성과 확장성: 커넥트는 테스트 및 일회성 작업을 위한 단독 모드 실행 할 수 있고, 대규모 운영 환경을 위한 분산 모드(클러스터형)로 실행할 수 도 있습니다. • 재사용성과 기능 확장: 커넥트는 이미 만들어진 기존 ..

kafka 2023.10.19

카프카 스키마 레지스트리

스키마? RDB에서 스키마란 정보를 구성하고 데이터가 저장될때에 약속을 만들어 주는것이라고 생각합니다. RDB에서는 스키마를 정의한 형태로 데이터를 입력해야하고 사전에 정의된 스키마의 내용과 다른 데이터를 추가하려고 시도하면 작업은 실패합니다. 카프카에서 스키마가 없을때의 예를 들어 보자면 한명만 카프카를 사용한다면 별 다른 이슈가 없겠지만 수많은 사용자가 카프카를 사용하고 수많은 사용자가 수많은 토픽을 사용합니다. 그리고 토픽마다 각기 다른 애플리케이션에 접근하기 때문에 하나의 데이터라도 사전에 정의되지 않은 토픽으로 데이터가 이전돼면 큰 문제가 생길 것입니다. 카프카는 대부분 브로드캐스트 방식으로 데이터를 전송하기 때문에 프로듀서를 일방적으로 신뢰 할 수 밖에 없는 방식입니다. 따라서 프로듀서 관리자..

kafka 2023.10.19

카프카 버전업그레이드

업그레이드를 위한 준비 현제 사용중인 버전 체크하기 kafkaᅳtopics.sh --version /usr/local/kafka/bln/kafka-toplcs.sh --version 카프카의 릴리스 노트등을 잘 살펴보면서 업그레이드시 문제가 될 만한 부분은 없는지 확인합니다. 스칼라 Scala 컨슈머, 프로듀서처럼 서비스가 종료된 경우도 있으므로 전체적으로 카프카의 릴리스 노트를확인해야합니다. 카프카가 다운타임을 가질 수 있다면 종료후 최신 버전을 실행시키면 됩니다. 하지만 대부분의 경우 카프카가 다운되는것은 상상하기 싫은 일입니다. 이런경우엔 브로커 한 대씩롤링 업그레이드를 하는것입니다. 주키퍼 의존성이 있는 카프카 롤링 업그레이드 먼저 토픽을 먼저 삭제합니다. 삭제가 성공적으로 됐다면 앤서블을 통해서..

kafka 2023.10.19

카프카 운영,모니터링

안정적인 운영을 위한 주키퍼와 카프카 구성 카프카는 애플리케이션이 워낙 안정적이기때문에 클러스터를 구성해놓은 뒤 신경을 쓰지 않는 경우가 많다. 하지만 장애를 대비해서 꼼꼼히 클러스터를 구성해 놓는것이 좋다. 주키퍼 구성 최근들어 아파치 카프카 오픈소스 진영에서는 카프카의 코디네이터 역할을 하는 주키퍼의 의존성을 제가혀라는 움직임이 있습니다. 주키퍼는 파티션과 브로커의 메타데이터를 저장하고 컨트롤러 서버를 선출하는 동작을 수행합니다. 주키퍼 서버 수량 주키퍼는 기본적으로 쿼럼(과반수)구성을 기반으로 동작하므로 반드시 홀수로 구성해야 합니다. 최소 서버수는 3입니다. 이렇게 3대로 구성된 주키퍼는 과반수인 2를 추족할 수 있는 최대 1대까지의 주키퍼 장애를 허용합니다.5로 구성한다면 3까지 허용하는것입니다..

kafka 2023.10.19