Node.js 7

Cannot set headers after they are sent to the client 오류

express.js를 활용해 프로젝트를 하던 중 실행을 했는데 오류가 발생했다오류 발생 코드를 살펴보니[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client라고 오류메시지가 떴다.기존에는 잘 됐었는데 이번에 추가한 코드를 작성하다가 실수한 부분이 있던 것 같다 코드를 살펴보고 오류 메시지 구글링을 해본 결과서버가 클라이언트에 한 번만 응답을 해야 하는데 두 번 이상의 응답을 하려 할 때 발생한 오류인 것이다 그래서 이유를 알아보고 코드를 찾아보니 조건 안에서 res.status(). json으로 응답하는게 하나 있고조건 밖에서도 res.status().json으로 응답하는 게 있었다. 둘의 차이는조건 안에는 return이..

Node.js 2024.06.05

put과 patch의 차이

express에는 CRUD를 따른다 C는 create로 post메서드이다R은 read로 get메서드이다.U는 update로 put과 patch가 있다.D는 delete로 delete메서드이다. 여기서 put과 patch는 두 가지가 있는데 둘은 각자 어떤 차이점이 있는지 알아보자 둘의 공통점은 일단 수정하고 업데이트를 하는 기능이다먼저 put 메서드는 새로운 리소스를 생성하거나 대상 리소스를 나타내는 데이터를 대체한다patch 메서드는 리소스의 부분적인 수정을 할 때 사용한다.차이점이 어떤 것이냐put는 수정을 통해 리소스를 전체 다 갈아엎는다고하면patch는 리소스의 일부분만 갈아 끼우는 것이다. put은 update시 기존 리소스의 값들을 전부 넣어줘야 전체 갈아엎기가 된다.안 넣어도 갈아엎기는 되지..

Node.js 2024.05.31

트랜잭션

트랜잭션(Transaction)이란?작업의 완전성을 보장해 주기 위해 사용되는 개념이다.특정한 작업을 전부 처리하거나, 전부 실패하게 만들어 데이터의 일관성을 보장해 주는 기능 트랜잭션을 사용하는 이유는 작업의 단위를 하나의 쿼리에 종속하는 것이 아닌, 여러개의 작업(쿼리)을하나로 묶어 하나의 작업 단위로 그룹화하여 처리하는 작업이다. 트랜잭션을 왜 사용해야할까? 한 가지 예시로 친구 A가 B에게 돈을 계좌이체한다고 가정해 보자은행에서 작업의 순서가 내 잔액을 차감한 후 친구 잔액을 더하는 작업이다.하지만 만약 이 사이에서 에러가 발생하게 된다면 어떤 문제가 발생할까?내 돈만 빠져나가고 친구에게는 입금이 안 되는 오류가 나타나거나내 돈은 빠져나가지 않았지만 친구한테는 입금처리되어 잔액이 증가하는오류들이 ..

Node.js 2024.05.29

JWT

JWT란?(Json Web Token) 웹 표준으로써, 서버와 클라이언트 사이에서정보를 안전하게 전송하기 위해 도움을 주는 웹 토큰이다. JSON 형식의 데이터를 안전하게 전송하고 검증할 수 있는 기능을 제공인터넷 표준으로서 자리 잡은 규격이다다양한 암호화 알고리즘을 사용할 수 있어, 신뢰성을 보장한다.header.payload.signature 세 가지의 데이터를 포함한다JWT의 형식으로 변환된 데이터는 항상 2개의 .이 포함되어야 한다. header는 토큰의 타입과 어떤 암호화를 사용하여 생성된 데이터인지 정의되어 있다.{"alg": "HS256","typ": "JWT"} payload는 실제로 전달하려는 데이터를 담고 있다. 개발자가 원하는 데이터를 payload에 저장한다{"sub": "12345..

Node.js 2024.05.27

[TIL] ORM 과 Prisma

Prisma란?ORM(Object Relational Mapping)으로 써객체와 데이터베이스의 관계를 연결해주는 도구이다. Prisma와 같은 ORM은 관계형 데이터베이스를 사용할 수 있다.  전에 배웠던 Mongoose는 ODM으로써 객체를 Document와 연결하는 것으로ORM과 차이가 나타난다 mongoose는 mongoDB밖에 사용을 못하지만Prisma는 여러 관계형 데이터베이스를 사용할 수 있다기존 mongoose에서 스키마 설정으로 콜렉션에 속성을 설정했다면Prisma는 Model로 테이블의 속성을 설정할 수 있다. ORM의 장단점 장점 1번째 프로덕션에서 사용하는 데이터베이스가 언제 바뀔지 알 수 없다기존에 MySQL을 사용했는데 어떠한 이유로 Oracle이나 다른 RDBM으로 변경할 때O..

Node.js 2024.05.24

[TIL] 관계형 데이터베이스와 비관계형 데이터베이스

관계형 데이터베이스(RDB)각 데이터를 테이블이라는 표형태인 구조이다.각 테이블마다 여러 정보가 저장되어 있고 서로 연관관계를 설정해서 여러 테이블에 다른 데이터들을 서로 연결하고 관리할 수 있다대표적인 관계형 데이터베이스는 MySQL이 있다. 관계형 데이터베이스는 테이블 형식인 표 형식이기 때문에복잡한 비즈니스 로직과 정형화된 데이터를 체계적으로 관리할 수 있다는장점이 있기 때문에 보안이 중요한 기관이나, 은행 등 안정성이 필요한 회사에서 주로 사용한다. 비관계형 데이터베이스(NoSQL)데이터의 형식이 고정되어 있지 않고 유연하게 확장할 수 있는 데이터베이스관계형과 달리 유연성이 뛰어나기 때문에 sns 서비스나 빅데이터 형식의 다양한데이터를 빠르게 저장할 경우에 사용한다.대표적인 비관계형 데이터베이스는..

Node.js 2024.05.20

[TIL] 미들웨어 Middleware 개념

미들웨어란? 웹서버에서 요청을 받을 때 모든 요청에 대한 공통적인 처리를 하고 싶을 때가 있다.이때 필요한 것이 바로 미들웨어이다. 위 그림처럼 request와 response 사이에있는 것이 미들웨어인데정상적인 요청인지 검증하는 것으로app에서는 좀 더 핵심적인 비즈니스 로직을 실행할 수있다.에러처리도 공통적으로 도와줄 수 있다. 예를 들어 모든 요청에 대해서 로그를 남기거나, 특정 사용자만 API에접근하게 하고 싶을 때도 미들웨어를 사용한다 express.js의 미들웨어 사용방법은 app.use(express.urlencoded({ extended: false}));app.use(express.json()); 이런 식으로 사용한다. 첫 번째 줄의 의미는클라이언트 요청을 받을 때 body에 있는 데이터..

Node.js 2024.05.14