TIL 22

node.js 에서 Swagger 사용하기 - 기본

Swagger 란? 먼저 위키백과에서는 스웨거(Swagger)는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크이다. 대부분의 사용자들은 스웨거 UI 도구를 통해 스웨거를 식별하며 스웨거 툴셋에는 자동화된 문서화, 코드 생성, 테스트 케이스 생성 지원이 포함된다. 스마트베어 소프트웨어의 후원을 받는 스웨거는 오픈 소스 소프트웨어의 튼실한 후원자이며 널리 채택되고 있다. 라고 말하고 있다. 결국엔 REST API를 설계도 할 수 있고, 빌드하고, 문서화 해서 소비까지 할 수 있는 종합선물 셋트 같은 오픈 소스 소프트웨어 프레임워크이다. 우리는 그 Swagger 를 좀 더 편하고 쉽게 볼 수 있는 Swagger UI..

TIL 2022.06.04

[ Database ] DB 인덱스

인덱스란 인덱스란 데이터베이스 테이블의 대한 검색 성능의 속도를 높여주는 자료구조이다. 마치 책의 목차와도 같은 역활을 한다. 특정 칼럼의 인덱스를 생성하면, 해당 칼럼은 데이터들을 정렬하여 별도의 메모리 저장 공간에 데이터의 물리적 장소의 주소와 함께 저장된 다. 인덱스를 타게 되면 먼저 인덱스에 저장되어 있는 물리적 장소의 주소로 가서 데이터를 조회 후 가져오는 식으로 검색 성능을 향상 시킬 수 있다. 그리고 인덱스는 오름 차순으로 정렬되기 때문에 정렬된 주소 체계라고 표현할 수 있다. 인덱스의 장점 1 . 조건 검색 where 절의 효율성 테이블에 데이터가 점점 쌓이게 될때 테이블의 레코드에 데이터를 어떠한 순서도 없이 뒤죽박죽으로 들어오는 족족 저장하게 된다. 그리고 어떠한 상황에 where를 통..

TIL 2022.04.29

[ DataBase ] Atrribute (속성)

Atrribute 란? - 인스턴스로 관리하고자 의미상 더이상 분리 되지 않는 최소의 데이터 단위로 정의 할 수 있다. Atrribute 의 특징 - 업무에 필요하고 관리되어야 하는 대상 - 하나의 속성엔 하나의 값만 - 다양하게 있는 인스턴스 중에서 식별할 수 있는 주 식별자로 구별 할 수 있어야한다. 엔터티, 인스턴스, 속성, 속성값의 관계 - 한개의 엔터티에는 두개 이상의 인스턴스의 집합 - 한개의 엔터티는 두개 이상의 속성을 지닌다. - 한개의 속성에는 한개 이상의 속성의 값을 가진다. Atrribute 분류 속성 특징에 따른 분류 - 기본 속성 업무 분석을 통해 바로 정의한 속성을 기본속성이라고 부른다. 엔터티에 있어서 가장 일반적이고 많은 속성을 차지한다. 코드성 속성, 엔터티를 식별하기 위해..

TIL 2022.04.21

[DataBase ] Entity

Entity 란?? 간단하게 요약 하자면 - 데이터의 집합 - 개념, 장소, 사건 등을 의미한다. - 무형 또는 유형의 데이터를 의미한다. - 업무상 관리되고 저장되어야 하는 데이터 이다. Entity 의 특징 - 엔터티가 사용되는 곳의 업무에서 필요하며 관리되어야 하는 정보 - 유일한 식별자를 가지고 있어야한다. - 다른 엔터티와 최소 한개 이상의 관계를 가지고 있어야한다. - 2개이상의 인스터스의 조합이어야 한다. - 반드시 속성을 지녀야 한다. 모든 엔터티가 이러한 특징을 가지고 있는 것은 아니나 일반적으로 이러한 특징을 가지고 있지 않다면 잘못된 엔터티일 활률이 높다. Entity 의 분류 1) 유무형의 따른 분류 - 유형 엔터티 물리적인 형태를 지닌 엔터티. 안정적이고 지속적으로 활용이 가능한 ..

TIL 2022.04.19

[기술면접준비] Node.js 란 무엇인가

Node.js Node.js 는 Crome V8 엔지으로 빌드된 Javascript 런타임이다. 특징으로는 넷플릭스와 같이 빈번한 I/O 데이터 처리가 용이 하고, 서버 확장성, 그리고 Javascript 한 언어로 프론트엔드, 백엔드 모두 작성이 가능 하다는 큰 장점을 가지고 있다. Node.js 의 특징에 대해 자세히 알아보자 논 블록킹 I/O 블록킹 I/O 와 논 블록킹 I/O의 차이점 부터 알아보자 먼저 블록킹 I/O 란 CPU의 가장 기본적은 I/O 모델로 리눅스의 모든 소켓 통신은 기본 블록킹으로 동작한다. I/O 작업이 진행 되는 동안 유저 프로세서는 작동하지 않고 I/O 작업이 끝날때 까지 대기하며 기다린다. 이게 블럭킹 I/O 모델이다. 예시 그림을 살펴보자 1. 유저가 커널에게 read..

TIL 2022.04.06

[React] React에서 Typescript 사용하기(1) - React Component를 TypeScript로 작성해보기

먼저 나는 왜 React로 Typescript를 사용하는 지 얘기해보자면.. 개인프로젝트를 진행하려고 하는데 요즘 TypeScript를 사용하는 회사가 많아지는 거 같아 Nest.js 와 TypeScript 를 공부하고 싶어졌고 겸사겸사 개인프로젝트에 적용시켜서 프로젝트와 기술 공부를 한번에 하고 자 했다. 그런데 React를 사용해야 하는데 React에서도 TypeScript 가 사용 가능 할까? 라는 의문감에 구글링을 했고 React 레퍼런스에 Tpyescript 사용법이 나와있어 공부하며 정리 해본다. 1. React Component를 TypeScript로 작성해보기 먼저 React 프로젝트를 생성해본다. npx create-react-app ts-react-tutorial --template t..

TIL 2022.03.25

[node.js] Bcrypt 를 이용한 비밀번호 암호화

Bcrypt란 레인보우 테이블 공격 방지를 위해 Salt(솔트)를 통합한 적응형 함수의 하나이다. 기존 SHA 종류의 암호화가 GPU연상에 유리한 32비트 놀리 및 산술 연산만 사용하기에, 공격자가 빠른 연산으로 공격할 수 있다. 그래서 Bcrypt 설계자들은 이런 문제로 SHA가 아닌 Blowfish*를 이용해 구현하였다.Bcrypt는 키 스트레칭* 를 이용해 좀 더 보안성을 높였다 *Blowfish - 데이터 암호화 표준(DES)과 국제 데이터 암호화 알고리듬(IDEA)을 대신하여 사용되는 암호화 알고리듬. 키의 길이가 32~448비트인 가변 길이 키를 사용하는 비밀 키 블록 암호이다. * 키 스트레칭 - 해쉬 함수를 통해 나온 다이제스트를 다시 해쉬 함수에 넣어 다이제스트 하는 방법. Bcrypt ..

TIL 2022.03.18

[node.js] multer 미들웨어를 이용해 서버에서 파일 다루기

multer는 파일 업로드를 위해 사용하는 multipart/form-data 를 다루기 위한 미들웨어이다. 우리는 프로젝트 도중 음원의 cover 파일을 업로드 하는 부분을 구현중이었다. 프론트엔드 팀원 분께서 파일을 업로드 하는 파트를 이미 구현해 두셨고 백엔드인 나는 업로드 해주신 파일을 받아서 static 폴더에 저장하고 DB에도 파일을 찾기위한 path를 저장해야 했다. 그런데 request를 console.log 했을때 아무것도 들어오는 것이 없었다. form-data를 처음 접한 나는 어떻게 해야할지 몰라 망설이다. 클라이언트를 구현하신 팀원분께 도움을 요청하였다. 팀원 분께서 10분정도 알아보고 오시더니 multer 라는 미들웨어를 이용해야 multipart/form-data 를 다룰 수 ..

TIL 2022.02.24

[React] react-router-dom v6 에 대해

사실 이것도 HA 중간에 막히면서 알게 된 사실이다. react-router-dom v6로 업그레이드 되면서 여러가지가 달라진다. HA 과제는 react-router-dom v5를 사용중이었고 Redirect 가 잘 되지 않아서 이것저것 구글링 중 알게 된 사실이다. 먼저 React Router v6은 React Hook을 많이 사용하므로 React Router v6으로 업그레이드를 시도하기 전에 React 16.8 이상에 있어야 합니다. 좋은 소식은 React Router v5가 React >= 15와 호환된다는 것입니다. 따라서 v5(또는 v4)를 사용 중이라면 라우터 코드를 건드리지 않고도 React를 업그레이드할 수 있어야 합니다. React 16.8로 업그레이드했으면 앱을 배포해야 합니다. 그런..

TIL 2022.01.14

Sequelize 다루기

Sequelize란 Node.js 에서 sql을 사용할 수 있게 해주는 라이브러리이다. Sequelize는 ORM 으로 분류된다. ORM 이란 Object-Relation Mapping 의 약자로 객체와 데이터베이스 간의 맵핑을 해주는 도구이다. Sequelize를 사용하면 JavaScript 에서 mysql 을 사용할 수 있는 것도 ORM 이기 때문이다. Sequelize 쿼리는 promis를 반환하므로 then 이나 async/await 문법도 사용이 가능하다. 레코드 생성하기 User.create({ name : 'kimcoding', age : 31, jop : wep developer }); 레코드 조회 하기 findOne - 한가지만 조회 module.export = async (req,res..

TIL 2021.12.25