조만간 운영할 사이트를 하나 만들며 이미지와 글이 혼합하여 보이는 블로그 형식의 게시글을 구현하고 있었습니다.C(R)UD를 구현하며 느낀것, 어떻게 더 성능을 끌어 올릴까 등 다양한 방법과 후기를 남기고자 합니다. 우선 CRUD는 어떻게 보면 기본적인 플랫폼/서비스의 기본이 되는 작업이죠. 블로그도 sns도 모두 여기서부터 시작됩니다. 저는 이러한 CRUD에 있어서 가장 중요한 것은 데이터 정합성, 효율적인 데이터 처리라고 생각합니다. 문제이번 고민 또한 이러한 데이터 정합성 문제에서 부터 시작되었습니다. 제가 원하는 형식은 블로그처럼 글과 글 사이에 이미지가 첨부 가능한 게시글입니다. 이를 블로그형 게시글이라고 부르도록 하겠습니다. 블로그형 게시글은 크게 보면 다음과 같은 순서의 작업이 필요합니다...
현재 혼자 진행중인 프로젝트는 Next.js + Nest.js 조합으로 진행중입니다. 프로젝트를 진행하며 백엔드 로그인 코드를 조금 수정하였는데, 기존에 잘 작동하던 프론트 부분 코드가 작동하지 않는 상황이 발생하였습니다. 분명 로직은 그대로이고 (오히려 단순화 되었고) 변한 부분이 크지 않은데 왜 갑자기 안되지 싶었는데, 원인은 아래 코드였습니다. 해당 코드의 const result = await res.json() 부분이 문제였습니다.그냥 return받은 response의 json객체를 사용하는 것인데 왜? 라고 생각하실 수 있는데, 문제는 백엔드 로직이 json객체를 더 이상 반환하지 않게 수정 되었다는 것입니다. 기존에는 다양한 정보와 토큰을 주었지만 로직이 변경되며 정보 객체를 반환하지 않도록 ..
최근 프로젝트를 진행하며 http status code와 에러처리에 대해서 나름대로의 규칙을 정하는게 좋겠다는 생각이 들었습니다.특히, try-catch문에 대해서는 왜 쓰는지보다는 그냥 무작정 쓰고 본다는 느낌으로 코드를 작성했는데 오늘 자세히 정리해보고자 합니다. try-catch 의 작동try-catch는 아래의 작동 알고리즘을 갖습니다.먼저, try {...} 안의 코드가 실행됩니다.에러가 없다면, try 안의 마지막 줄까지 실행되고, catch 블록은 건너뜁니다.에러가 있다면, try 안 코드의 실행이 중단되고, catch(err) 블록으로 제어 흐름이 넘어갑니다. 변수 err(아무 이름이나 사용 가능)는 무슨 일이 일어났는지에 대한 설명이 담긴 에러 객체를 포함합니다.만약 try {…} 블록 ..
TypeORM을 활용하며 데이터를 삽입할 때 주로.save()를 사용하곤 합니다.하지만 성능 최적화를 위해서 .insert()와 .update()를 적극 활용하면 좋은데요. 단순하게 계산하면 2배 이상 차이나는 이 메서드들에 대해 알아보려고 합니다. .save()의 동작.save()는 아래와 같이 동작을 합니다.아직 존재하지 않는 경우 엔티티를 삽입한다.엔티티가 존재하는 경우 기존 엔티티를 업데이트 하려고 시도한다.그럼 이미 존재하는지에 대한 확인은 어떻게 할까요?우선 SELECT 쿼리를 통해 엔티티 객체에 정의된 Primary Key (기본 키)를 사용하여 데이터베이스 내 해당 엔터티의 존재 여부를 확인합니다.만약 없다면 TypeORM은 이를 새로운 엔티티로 간주하고 삽입 작업을 수행합니다. 만약 엔티..