전체 글 132

사용자(클라이언트)를 식별하는 네트워크 헤더

네트워크 헤더 사용자(클라이언트)가 접속한 기기(Web, Mobile 등), 아이피, 프로토콜 등 사용자를 식별할 수 있는 데이터가 담겨있다. 종류 Host 반드시 하나가 존재해야 하며 포트를 포함한 도메인 이름을 나타낸다. User Agent 브라우저 또는 다른 HTTP 클라이언트가 서버에게 자신을 식별할 수 있는 정보를 전달하는 HTTP 헤더 중 하나다. 해당 헤더는 클라이언트의 소프트웨어 또는 브라우저, 운영 체제 등의 정보가 담겨있다. 서버는 해당 헤더의 담겨있는 정보를 통해 클라이언트의 브라우저가 호환되지 않는다면 대체 콘텐츠를 제공하거나 페이지를 다르게 렌더링 할 수 있다. 식별 정보 브라우저 종류(Chrome, Safari, IE 등)와 버전 운영 체제(Windows, MacOS, Linux..

네트워크 2023.10.10

ExpressJS multer-s3 builder pattern

서버는 클라이언트로부터 다양한 형식의 파일을 업로드 받을 수 있다. PNG 형식의 이미지 파일은 사용자의 프로필 이미지가 될 수 있으며, MP3 형식의 음성 파일은 사용자의 목소리를 녹음한 자기소개가 될 수 있다. 다음 코드는 이미지와 비디오 각자 다른 형식의 파일을 업로드하는 로직이다. 이미지는 images/..., 5MB 비디오는 video/..., 20MB 두 형식 모두 저장될 경로와 저장 사이즈를 다르게 처리해야 한다. 추후 허용할 업로드 형식이 추가된다면 파일이 늘어날 수 있다. 파일 개수가 많아지다 보면 유지 보수적인 측면에서 비효율적이고 의도치 않는 실수로 이어질 수 있다. // image.multer.js const s3 = new S3Client({...}); const storage =..

카테고리 없음 2023.04.24

JavaScript Call by value Call by reference

JavaScript Call by value Call by refrence Call by value와 Call by refrence는 각각 값 전달, 참조 전달 로 불리며, 변수, 객체 등이 함수에 인자(Argument)로 들어가 매개 변수(Parameter)를 어떤 식으로 전달 할지 결정하는 방식이다. Parameter와 Argument Parameter (매개 변수) 함수 선언부에 정의되고, 호출 시 인수로 전달된 값을 함수 내부에서 사용할 수 있게 해주는 변수 매개 변수의 전달 방식으로 Call by value, Call by Reference가 있다. Argument (인수) 함수 호출부에 정의되고, 호출 시 함수로 값을 전달해 주는 변수 Call by value (값 전달, 값에 의한 호출) A..

Error: error:1E08010C:DECODER routines::unsupported

Error: error:1E08010C:DECODER routines::unsupported 구글 계정 인증 과정 중 에러가 발생했다. sign, passphrase, rsaPadding 키워드를 보니 privateKey가 틀렸음을 직감했다. await doc.useServiceAccountAuth({ client_email: process.env.GOOGLE_CLIENT_EMAIL, private_key: process.env.GOOGLE_PRIVATE_KEY, }); 원본의 privateKey는 다음과 같다. process.env.GOOGLE_PRIVATE_KEY는 다음과 같다. \n 개행 키워드가 문자열로 취급되어 정상적으로 동작하지 않았던 거 같다. .env 파일에 값은 모두 문자열로 취급되므로 ..

기타/에러 2023.01.06

ExpressJS Google Spreadsheet API

ExpressJS Google Spreadsheet API API 사용 전 GCP에 프로젝트와 사용자(IAM)를 생성해야 한다. 생성 방법은 이미 여러 사이트에 나와있으므로 생략한다. 설치 npm i google-spreadsheeet Instance 생성 인수로 스프레드시트의 아이디를 넣어준다. (Sheet의 고유값을 의미) const doc = new GoogleSpreadsheet(process.env.GOOGLE_SPREADSHEET_ID); 사용자 Authentication useServiceAccountAuth 메서드는 객체를 인수로 받으며 사용자 정보가 들어간다. 여기서 사용자 정보는 프로젝트명-""-"".json 파일에 데이터를 의미한다. 사용자 인증과 사용자 로드 동작의 결과값이 unde..

서버/Express 2023.01.06

NodeJS xlsx Excel

NodeJS xlsx Excel 최근 회사에서 OTA(Over The Air) 차량 업데이트 관련 업무를 진행하였다. 업데이트는 Button 클릭 시 HTTP Request를 통해 이루어지는 방식이다. Button 클릭 시 총 5번의 Request가 일어나며 Polling이 포함되어 있고 소요 시간은 최대 1분이다. Button을 클릭하여 1분 동안 대기 후 업데이트 결과를 확인하여 Excel 파일에 기록해야 했다. 설치 npm i xlsx Parsing 할 xlsx 파일(예시)에 내용은 다음과 같다. xlsx.readFile(Path, ParsingOption)을 통해 Parsing 할 xlsx 파일 전체를 읽은 후 Sheet 메서드를 사용해 특정 시트만 읽는다. Parsing 된 시트는 Sheet_t..

서버/Node 2023.01.04

NestJS Module

NestJS Module 특정한 기준(도메인)으로 쪼개진 코드 집합이며 @Module 데코레이터가 달린 클래스를 의미한다. 기능별로 코드를 모듈화(쪼개는) 하는 이유는 책임을 나누고 응집도를 높여 코드의 이해도와 유지 보수가 용이한 이점을 가져가기 위해서다. 하나의 애플리케이션은 하나 이상의 Root 모듈이 존재하고 Root 모듈 아래 여러 개의 하위 모듈로 구성된다. 모듈은 기본적으로 프로바이더를 캡슐화하며 현재 모듈에 속해있지 않거나 가져온 모듈에서 export 하지 않는 프로바이더는 주입할 수 없다. Root Module 프로젝트 main.ts 진입 파일에서 NestFactory에 create 메서드 인수로 들어가는 모듈을 의미한다. @Module 데코레이터는 다음 코드와 같은 ModuleMetad..

서버/Nest 2022.12.12

NestJS Controller Versioning

NestJS Controller 애플리케이션의 관문이며 기본적으로 클래스와 데코레이터를 사용한다. 클라이언트로부터 특정 요청을 수신하고 그에 대한 응답을 반환하는 인터페이스 역할을 수행한다. 서버에서 정의한 리소스를 클라이언트와 어떤 식으로 주고받을지에 대한 정보와 데이터의 구조를 정의한다. 각각의 컨트롤러는 하나 이상의 경로(/user, /user/:userId)가 있고 각기 다른 로직을 실행할 수 있다. - 컨트롤러 클래스 작성 후 @Controller 데코레이터를 사용해 Prefix를 명시한다. - @Get, @Post 등 HTTP Method 데코레이터 인수로 경로(Path)를 명시한다. 다음 사용자 컨트롤러의 getUserList 메서드의 경로는 /user/user-list와 같다. import..

서버/Nest 2022.12.06

webRTC

webRTC webRTC(Web Real Time Communication)이란 웹 브라우저에서 실시간 커뮤니케이션을 가능하게 해주는 기술이다. 구글에서 개발되었으며 Client의 브라우저가 서로 연결됨으로써 별도의 서버를 경유하지 않고 데이터를 송수신 할 수 있다. 자바스크립트 API의 조합인 webRTC는 P2P(Peer To Peer Connection) 연결 방식을 사용한다. 핵심 API P2P 기존의 서버와 클라이언트가 데이터를 송수신하는 과정과는 본질적으로 다른 구조를 가지고 있다. 중앙 서버 없이 관련 프로그램에 접속돼있는 단말 또는 사용자들끼리 실시간으로 데이터를 공유할 수 있는 연결 방식이다. 구현 방식 하이브리드 (Hybrid) 기존 서버와 클라이언트의 구조와 동일하다. 중앙 서버가 존..

네트워크 2022.12.01