SMAIVNN
article thumbnail
[웹개발] 면접에 나오는 몇 가지 백엔드 지식 돌아보기
Web 2024. 10. 24. 16:58

최근에 면접을 볼 기회가 있었는데요.. 몇가지 질문에 확실히 답을 못했습니다. 더 아쉬운 것은, 해당 질문들이 분명 과거에 프로젝트를 하고 공부를 하면서 한 번은 본 내용이라는 것입니다. '아 그렇구나' 하면서 분명히 기억하던 내용인데 막상 면접에 들어가니 긴장해서인지 기억이 나지 않더라고요.. 면접장을 나오면서 차분히 떠올리니 스멀스멀 머릿속에 떠오르덥니다 ㅋㅋ 이와 관련한 내용을 저도 복기 및 숙지할 겸 기록합니다. OSI 7계층, 전송 계층 그리 패킷  우선, 네트워크의 통신 과정을 담는 OSI 7계층은 다들 아실겁니다. OSI 모델의 각 계층은 특정 작업을 처리하고 그 위와 아래의 계층과 통신합니다. 그 중 전송 계층은 네트워크 통신을 이해하기 위해 자주 언급되는데요, 주로 데이터 전송의 신뢰성과..

article thumbnail
[NestJS] 진짜 에러 처리 더 잘하기
Web 2024. 9. 16. 01:06

'부끄럽지만 나는 지금까지 'try-catch'가 없으면 혹시 모를 이유로 에러가 발생하면 서버가 crash되지 않을까?'라는 생각으로 냅다 코드블럭을 'try-catch'로 감싸는 습관이 있었다.  하지만 이번 배포를 진행하고, 클린 코드 스터디를 진행하며 내가 작성한 코드를 돌아보는 시간을 가졌다. 내 코드는 특히 'try-catch'와 에러처리 때문에 명백하게 '좋은 코드'는 아니라고 생각했다. 또한, 해당 글 에 남겨준 함께 스마일게이트 캠프를 진행한 형의 아래 댓글을 읽고 이참에 확실히 정리하고, 나도 제대로 알고 코드 작성하자는 마음가짐으로 글을 쓴다. NestJS의 에러결론적으로 앞서 내가 한 서버 crash의 고민은 조금 덜어놔도 된다. NestJS의 공식 홈페이지에는 아래와 같이 써있다...

article thumbnail
[Next.JS / Nest.JS] S3와 이미지가 포함된 게시글 그리고 성능
Web 2024. 7. 27. 23:38

조만간 운영할 사이트를 하나 만들며 이미지와 글이 혼합하여 보이는 블로그 형식의 게시글을 구현하고 있었습니다.C(R)UD를 구현하며 느낀것, 어떻게 더 성능을 끌어 올릴까 등 다양한 방법과 후기를 남기고자 합니다. 우선 CRUD는 어떻게 보면 기본적인 플랫폼/서비스의 기본이 되는 작업이죠. 블로그도 sns도 모두 여기서부터 시작됩니다. 저는 이러한 CRUD에 있어서 가장 중요한 것은 데이터 정합성, 효율적인 데이터 처리라고 생각합니다. 문제이번 고민 또한 이러한 데이터 정합성 문제에서 부터 시작되었습니다.  제가 원하는 형식은 블로그처럼 글과 글 사이에 이미지가 첨부 가능한 게시글입니다. 이를 블로그형 게시글이라고 부르도록 하겠습니다.  블로그형 게시글은 크게 보면 다음과 같은 순서의 작업이 필요합니다...

article thumbnail
[API 디자인] Response 어떻게 return해야 할까?
Web 2024. 7. 12. 02:56

현재 혼자 진행중인 프로젝트는 Next.js + Nest.js 조합으로 진행중입니다. 프로젝트를 진행하며 백엔드 로그인 코드를 조금 수정하였는데, 기존에 잘 작동하던 프론트 부분 코드가 작동하지 않는 상황이 발생하였습니다. 분명 로직은 그대로이고 (오히려 단순화 되었고) 변한 부분이 크지 않은데 왜 갑자기 안되지 싶었는데, 원인은 아래 코드였습니다. 해당 코드의 const result = await res.json() 부분이 문제였습니다.그냥 return받은 response의 json객체를 사용하는 것인데 왜? 라고 생각하실 수 있는데, 문제는 백엔드 로직이 json객체를 더 이상 반환하지 않게 수정 되었다는 것입니다. 기존에는 다양한 정보와 토큰을 주었지만 로직이 변경되며 정보 객체를 반환하지 않도록 ..

article thumbnail
[Nest.JS] 에러 처리 더 잘하기
Web 2024. 4. 30. 21:28

최근 프로젝트를 진행하며 http status code와 에러처리에 대해서 나름대로의 규칙을 정하는게 좋겠다는 생각이 들었습니다.특히, try-catch문에 대해서는 왜 쓰는지보다는 그냥 무작정 쓰고 본다는 느낌으로 코드를 작성했는데 오늘 자세히 정리해보고자 합니다. try-catch 의 작동try-catch는 아래의 작동 알고리즘을 갖습니다.먼저, try {...} 안의 코드가 실행됩니다.에러가 없다면, try 안의 마지막 줄까지 실행되고, catch 블록은 건너뜁니다.에러가 있다면, try 안 코드의 실행이 중단되고, catch(err) 블록으로 제어 흐름이 넘어갑니다. 변수 err(아무 이름이나 사용 가능)는 무슨 일이 일어났는지에 대한 설명이 담긴 에러 객체를 포함합니다.만약 try {…} 블록 ..

article thumbnail
[Nest.JS] TypeORM 삽입 최적화
Web 2024. 4. 27. 00:52

TypeORM을 활용하며 데이터를 삽입할 때 주로.save()를 사용하곤 합니다.하지만 성능 최적화를 위해서 .insert()와 .update()를 적극 활용하면 좋은데요. 단순하게 계산하면 2배 이상 차이나는 이 메서드들에 대해 알아보려고 합니다. .save()의 동작.save()는 아래와 같이 동작을 합니다.아직 존재하지 않는 경우 엔티티를 삽입한다.엔티티가 존재하는 경우 기존 엔티티를 업데이트 하려고 시도한다.그럼 이미 존재하는지에 대한 확인은 어떻게 할까요?우선 SELECT 쿼리를 통해 엔티티 객체에 정의된 Primary Key (기본 키)를 사용하여 데이터베이스 내 해당 엔터티의 존재 여부를 확인합니다.만약 없다면 TypeORM은 이를 새로운 엔티티로 간주하고 삽입 작업을 수행합니다. 만약 엔티..

article thumbnail
[Nest.JS] TypeORM의 soft-delete와 회원 탈퇴 정책
Web 2024. 4. 17. 23:31

프로젝트 시작 전, 기존 몽고DB로 생성되었던 boilerPlate 코드를 TypeORM과 RDB로 변경하는 작업을 진행하고 있습니다. 또한 추가적으로 기본적인 Auth 관련 코드를 작성중입니다. 오늘은 서비스에서 회원 탈퇴시 고려할만한 사항들과 구현에 대해서 알아보고자 합니다. 회원 탈퇴 정책회원 탈퇴는 우선 '개인정보 보호법'을 준수하는게 우선입니다. 하지만 이 글에서는 개인정보 보호법과 관련 내용은 다루지 않고 서비스 운영에서 회원의 탈퇴시 고려할 상황에 관해 알아보겠습니다.자원 보유 검토사용자가 서비스에서 갖고있는 포인트 / 주문 내역 등 여러가지 자원에 대해서 인지하고 있는지, 이에 대한 삭제를 인지하고 있는지 등을 검토해야합니다.  서비스 측에서도 이러한 자원이 필수..

article thumbnail
[WebRTC] mediasoup을 사용한 SFU 영상 통화 미디어 서버 구현 (24.10.01 업데이트)
Web 2024. 3. 21. 18:23

목적프로젝트에서 mediasoup을 사용하며 많은 사건 사고가 있었다. 이것을 기록 할 겸 공유하고 싶어 mediasoup을 한국에서 가장 쉽게 설명해보고자 기록을 남긴다.... 코드 업데이트를 하며 설명과 github에도 자세한 내용을 작성해놨으니 언제든 댓글 부탁드립니다. mediasoup이란화질 조정, 재생 시간 등을 전문적으로 다룰 수 있는 음성 통화, 영상 통화 등 미디어를 다루는 미디어 서버를 구축하는 것은 굉장히 어렵다. mediasoup은 이를 편리하게 가능하게 해 주는 미디어 서버 오픈 소스 라이브러리이다. webRTC를 기반으로 하며 그렇기에 낮은 지연률, 높은 확장성을 보장한다. 이는 mediasoup이 SFU 기반의 중계된 peer-to-peer(이하 p2p)서버라는 이유도 한 몫 ..

article thumbnail
[NestJs/트러블슈팅] mongoDB document 반환
Web 2023. 11. 20. 11:17

발단 프로젝트에서 아래 간단한 코드를 실행하던 도중 서버 오류가 발생하였다. 우선 발단이 된 코드는 다음과 같다. async createStat(stat: CreateStatDto): Promise { const newStat = { ...stat, }; const createdStat = await this.statModel.create(newStat); return createdStat } 발생한 서버 오류는 다음과 같다. [MyApp] error 2023-11-20 09:48:40 [ExceptionsHandler] callback is not a function - { stack: [ 'TypeError: callback is not a function\n' + ...code... 처음에는 인터셉..

article thumbnail
[NestJs/트러블슈팅] NestJs에서 mongoDB find(), virtual field
Web 2023. 10. 26. 18:59

더 공부하고 정리한 추가 게시물이 있습니다. node.js의 Express와 nestJs에서의 mongoDB find()메서드 차이점 mongoose의 find()메서드를 Express환경에서 사용할 경우 다음과 같이 출력된다. [ { "_id": "id항목입니다", "title": "test2", "content": "toDo Contents2", "status": true, "priority": 0, "dueDate": "2024-03-21T00:00:00.000Z", "category": "sports", "completedDate": "2023-10-25T07:59:36.295Z" }, ] 반면nestJs에서 find()를 사용할 경우 다음과 같이 메타데이터들이 출력된다. [ { "$__": { ..