coding 97

로그 남기기 1 - winston 사용

코딩 공부를 하면서 로깅이라는 말을 많이 들었다. 백앤드 개발자는 로그를 가지고 유지 보수할 때 로그 기록을 보면서 보완해가면 좋다는 말을 많이 들어서 로깅에 관심이 많았다. 예를 들어 어떤 사람이, 어떤 이벤트, 어떤 데이터를 요청했는지, 어떤 동작을 하다가, 어떤 트랜잭션을 돌리다가, 어떤 에러가 났는지 로그가 남아있다면 그 부분을 중점적으로 보완해 가면 에러들을 잡을 수 있을 것이다. 그래서 실전 프로젝트를 진행하면서 winston과 morgan을 사용해서 로깅을 구현하였고, 분량이 많아 따로 정리해보겠다. winston winston은 개발 환경보다는 배포 환경에서 로그를 남기기 위해 사용한다. 개발환경에서는 콘솔 로그나 콘솔 에러를 통해 무슨 문제가 어디서 생겼는지 바로 알 수 있지만, 배포 환..

coding/Node.js 2022.09.09

npm - "minor" / "23 packages are looking for funding" 에러

혼자서 로깅 작업을 구현해보고 배포 환경에서 어떻게 동작 하나 보기 위해 ec2에서 배포를 하였다. 근데 처음 보는 에러를 만났는데 가볍게 해결해서 글을 남겨본다. 먼저 폴더를 만들어주고, 깃 헙을 클론 해서 파일을 생성해주었다. 그 후 npm i을 하니 npm 버전이 맞지 않는다는 듯한 에러가 나왔다. 구글링을 통해 확인해보니 내가 생각했던 것과 비슷했다. 새로운 버전이 나와서 업데이트를 해주어야 한다고 한다. 해결방법 npm install -g npm // or sudo npm install -g npm 위 코드의 첫 번째 코드를 입력하면 npm이 npm을 설치하는 꼴이다 ㅋ 하지만 저렇게 설치를 하려고 하니 설치할 수 없다는 err가 나왔다. 해당 블로그엔 당황 말고 sudo를 붙여서 하면 된다고 ..

coding/Error 2022.09.08

socket.io - 실시간 채팅 / 채팅방 구현

프로젝트를 하면서 핵심기능 중 하나인 실시간 채팅, 채팅방을 구현해보았다. socket.io를 사용했고, 전에 알림이나, 소캣을 이용해 같은 페이지에 몇 명이 같이 보고 있는지를 보여주기 위해 소캣을 사용해 본 적은 있었다.(강의 내용) 하지만, 실시간 채팅은 한 번도 해본 적이 없었는데 생각보다 간단한 것 같다. 간단하게 소캣을 프론트와 백 둘 다 연결하고, 소캣 안에서 메시지를 주면 서버에서 받아서 모두에게 뿌려주면 끝이다. 말은 간단하지만, 적용이 정말 쉬운 건 아니다. 나 같은 경우 파일을 분리하는 곳에서 조금 애를 먹었고, 채팅방처럼 방에서 말한 건 방 사람들끼리 공유가 되어야 하고, 채팅 내용을 저장해서 잠깐 나갔다 들어와도 전에 나누었던 채팅들을 볼 수 있게 해야 했기 때문에 쉽지만은 않았다..

coding/Node.js 2022.09.07

소켓 / 웹소켓

소켓 프로그램이 네트워크에서 데이터를 주고받을 수 있도록 네트워크 환경에 연결할 수 있게 만들어진 연결부 프로토콜, IP, 주소, 포트넘버로 정의됨 일반적으로 TCP/IP 프로토콜을 이용 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 소켓에 데이터를 써보내거나 소켓으로부터 데이터를 읽어들여야 함 통신의 흐름 서버 클라 소켓의 연결 요청을 대기하고, 연결 요청이 오면 클라 소켓을 생성하여 통신이 가능하게 함 1. socket() 함수를 이용하여 소켓을 생성 2. bund() 함수로 ip와 pot 번호를 설정 3. listen() 함수로 클라이언트 접은 요청에 수신 대기열을 만들어 몇개의 클라이언트를 대기 시킬지 결정 4. accept() 함수를 사용하여 클라의 연결을 기다림 클라이언트 실..

coding/Node.js 2022.09.05

TCP / UDP

네트워크의 계층들 중 전송 계층에서 사용 하는 프로토콜 TCP, UDP에 대해 알아보자 전송 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하며, IP에 의해 전달되는 패킷의 오류를 검사하고, 재전송 요구 등의 제어를 담당한다. 즉, 데이터 전달 담당 그 데이터를 보내기 위해 사용 하는 프로토콜 : TCP, UDP *패킷이란, 인터넷 내에서 데이터를 보내기 위한 경로배정(라우팅)을 효율적으로 하기 위해서 데이터를 여러개의 조각들로 나누어 전송하는데 이때 데이터의 조각을 패킷이라고 함. TCP(Transmission Control Protocol) 전송을 제어하는 프로토콜(규약) 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜 일반적으로 TCP와 IP는 함께 사용, I..

coding/IT, CS 2022.09.04

에러 핸들러

지금까지 프로젝트를 진행하면서 에러 처리를 항상 try catch 문으로 정의하여 사용했었다. try문안에서 에러가 발생하면 서버의 오류이기 때문에 500 status와 함께 메시지를 보냈고, if문을 통해서 클라이언트에게 유요한 값을 받지 못하거나, 사용자가 찾는 값이 db에 없는 경우에는 잘못된 요청이기 때문에 400 status와 오류 메시지를 보냈다. 하지만 이렇게 진행할 경우 예외처리가 많아질수록 잘못된 응답이라고 전달해주어야 하는 게 많아져 코드가 지저분해지고, 길어졌다. 예전에 에러 미들웨어를 만들어서 try문에서 에러가 발생하거나 예외처리에 걸러지는 경우 catch문으로 에러를 보내서 가장 마지막에 에러 핸들러를 통해서 잘못된 응답을 보내주면 좋다고 들어서 이번 기회에 에러 핸들러를 만들어..

coding/Node.js 2022.09.03

.prettierrc 설정

실전 프로젝트를 진행함에 앞서 이제 6주 동안 다른 사람들과 코드를 작성해서 공유를 많이 할 텐데 각자의 코드 작성 스타일이 다르면 나중에 깃 허브에서 충돌이 많이 날 것이다. 이를 대비해서 최대한 남의 코드는 건들지 않겠지만 불가피하게 남의 코드나 파일을 수정할 경우 최대한 같은 스타일을 사용한다면 충돌이 날 확률도 낮아질 것이다. 또한 나중에 보았을 때도 모든 코드가 같은 설정으로 통일되어있다면 보다 좋은 가독성을 주고 안정감을 주기 때문에 협업을 하기 전엔 코드 컨벤션을 통해 팀끼리 코드 스타일 설정을 맞추는 것이 좋은 협업의 지름길이라고 생각한다. 사실 이 글을 쓰기 전 컨벤션이 정확히 무엇인지 잘 모르고 필자도 prettier만 사용해서 스타일만 정해서 협업에 들어갔다. 이 글을 쓰면서 생각보다..

coding/JS 2022.09.01

http 상태코드

api통신을 하다 보면 http의 상태 코드를 어떻게 해서 응답해야 할지 고민이 많이 든다. 이번 기회에 http상태 코드를 공부해보고 자주 사용하는 코드를 정리해서 잘 사용하려고 정리해본다. status code 사용자가 웹 서버에 요청을 보냈을 때, 응답으로 보내주는 숫자 코드 각 숫자는 미리 약속된 특정한 의미를 가지고 있다. 클라이언트는 응답으로 온 코드의 숫자를 통해 요청이 성공했는지, 실패했다면 무슨 이유인지 대략적으로 알 수 있다. 기본적인 status code 1xx(정보) : 요청을 받았으며 프로세스를 계속 진행 2xx(성공) : 요청을 성공적으로 받았으며 인식했고 수용 3xx(리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요 4xx(클라이언트 오류) : 요청의 문법이 잘못되었거나..

coding/IT, CS 2022.08.31

ERR_HTTP_HEADERS_SENT

ERR_HTTP_HEADERS_SENT 오류는 서버가 클라이언트에게 둘 이상의 응답을 보내려고 할 때 발생하는 오류 [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client 처음에 이런 에러를 보았을 땐 매우 당황했다. 처음 보는 에러였고, 정확히 어디서 문제가 있는지 알 수가 없어 에러를 천천히 보고 구글링을 했다. 클라의 요청에 내(서버)가 둘 이상의 응답을 보내면 나타나는 오류라고 한다. 음... 난 분명히 응답을 하나만 했을 텐데.. 왜냐하면 res.status().json({})으로 응답을 보내줄 때 항상 return문을 붙여주니까 2개 이상이 가지 않을 것이라 생각했다. 문제는 내 미들웨어에 있었다. 로그인 유무..

coding/Error 2022.08.31

소수점 반올림

js에서 소수점 반올림하여 사용하는 방법 1. Math.round() Math.round(123.456); // 123 Math.round(123.678); // 124 Math.round(123.9191); // 124 사용 시 소수 첫 번째 자리에서 반올림하여 정수로 표현됨 정수가 아닌 소수로 표현하고 싶을 경우 const num = 6.789; const roundNum = Math.round(num * 10) / 10; console.log(roundNum); // 6.8 const roundNum2 = Math.round(num * 100) / 100; console.log(roundNum2); // 6.79 소수 첫 번째 자리까지 표현하고 싶으면 숫자에 10을 곱해서 Math.round()를 ..

coding/JS 2022.08.30