분류 전체보기

    [JavaScript] throw와 return의 차이

    문득 다른사람의 코드를 보다가 에러처리하는 방법에 의구심이 생겼습니다. throw와 return 둘의 역할이 비슷한거 같은데 정확히 어떤 차이 때문에 구분해서 쓸까 궁금했습니다. 자료를 찾다보니 medium의 글이 있어서 참고하였습니다. const inner1 = () => { throw new Error('some error') } function main() { inner1() console.log('I am waiting') } main() 위는 throw로 에러처리를 한 경우입니다. 스레드가 멈추고 console이 실행되지 않습니다. 다음은 try catch를 추가하여 에러가 나와도 스레드를 계속 실행하도록하고 에러를 핸들링할 수 있게 했습니다. const inner1 = () => { throw..

    [DataBase] typeORM find시 어떤 칼럼을 기준으로 찾아야 빠를까?

    프로젝트로 nestJS 와 Mysql(TypeORM)을 사용했습니다. entity에서 find 혹은 findOne을 하는 경우 unique한 값인 id 값으로 찾아오는 경우가 있는데 다른 칼럼(예를 들면 email)도 unique할 수 있습니다. 따라서 email로 찾아도 값은 동일할 것입니다. 여기서 id값과 email의 차이는 id의 경우 auto increment로 설정되어있고 email은 그렇지 않다는 점입니다. 이 경우 email은 랜덤하기 때문에 시간이 오래 걸릴 것이고 id값은 정렬되어있기 때문에 빠르게 탐색할 것이다.라는게 저의 가정이었습니다. 하지만 검색 결과 DB는 B-Tree라는 다른 자료 구조를 가진다는 것을 알았습니다. B-Tree 자료구조는 2가지로 나뉘는데 선형 자료구조와 비선..

    [부트캠프] 실전 프로젝트 정리

    실전프로젝트 최종 제출을 완료하고 회고해보고자 합니다. 1. 피드(게시글) CRUD 저희가 만든 서비스에 퀘스트를 완수함에 있어서 3가지 타입의 퀘스트가 있습니다. 그 중 피드(게시글)를 작성하는 퀘스트가 있습니다. 지도에서 피드에 해당하는 퀘스트가 뜬 장소에 도착하여 피드를 작성할 수 있습니다. 피드 목록은 이웃 커뮤니티에 초점을 맞춰서 현재 위치의 동에서 생성된 피드만 볼 수 있습니다. 피드를 보여줄 때 최신순, 인기순, 거리순 세 카테고리로 정렬하여 보여줍니다. 2. 댓글 작성 위에서 작성한 피드에 댓글을 작성, 수정, 삭제할 수 있는 기능입니다. 댓글은 해당 피드가 작성된 위치가 아니어도 어디서든 자유롭게 작성할 수 있습니다. 3. 좋아요 자신의 동네에서 올라온 피드 목록을 보고 마음에 드는 피드..

    [실전프로젝트] 메인서버와 채팅(socket)서버를 분리하는 이유

    프로젝트를 하는 중 메인서버와 채팅서버를 분리했습니다. 처음엔 당연히 "다들 이렇게 하니깐" 이라고 넘겼습니다. 하지만 하나의 인스턴스에 넣고 로드밸런싱을 통해 서버가 자동적으로 증설되면 되는거 아닌가 라는 생각이 들었습니다. 이에 관해 멘토님께 질문을 드렸고 명확한 답변을 얻을 수 있었습니다. 답변 하나의 인스턴스에 넣고 서버를 올려도 됩니다. 하지만 채팅서비스의 트래픽으로 인해 서버가 자동적으로 추가될 때 채팅과 관련없는 메인서버까지 추가 되기 때문에 불필요한 자원이 추가됩니다. 채팅서비스의 트래픽이 증가된다면 채팅관련 서버만 추가 되는 것이 불필요한 자원이 추가되는 것을 막을 수 있습니다. 따라서 메인서버와 채팅서버를 나누고 각 서버의 트래픽이 증가하면 해당 서버만 증설되어야 하는 것입니다.

    [Git] git commit history를 지우고 싶을 때

    환경변수가 저장되어 있는 파일을 그대로 올린 경우 파일 삭제는 물론 git commit history역시 삭제해 주어야합니다. 다음과 같은 절차를 따라 하시면 됩니다. 가고자 하는 commit으로 $ git reset HEAD@{3} 다시 add 하고 commit 합니다. $ git add . $ git commit -m 'message' 강제로 push 합니다. $ git push --force

    [Socket] socket 채팅 서버 부하 테스트하기

    Artillery 설치하기 $ npm i artillery 간단하게 테스트 해보기 $ npx artillery quick --count 100 -n 50 http://localhost:[port] --count 옵션: 가상의 사용자 수 --n 옵션: 요청 횟수 --rate: 초당 요청 지금 저는 로컬에서 테스트 했지만 AWS등의 클라우드에서 테스트할 경우 요금 폭탄이 나올 수 있습니다. 따라서 실제 서버와 같은 사양의 컴퓨터에서 테스팅하는 것을 추천드리며 이를 staging서버라고 부릅니다. report 생성하기 $ artillery run -o testResult.json test_ver1.yml test_ver1.yml 경로에 testResult.json이라는 report 파일이 생깁니다. 보기 편하..

    [WIL] 이번주에 마주했던 문제들 (typeORM, socket.io, DB index)

    1. TypeORM에 queryBuilder 적용하기 이전에 ORM에 대해서 글을 쓴 적이 있습니다. 개념적으로 이해했지만 프로젝트에 적용을 하는 것은 또 다른 문제였기에 만났던 문제들을 적어보고자 합니다. 현재 NestJS와 typeorm을 사용하여 프로젝트를 진행 중입니다. DB에서 데이터를 뽑아올 일이 굉장히 잦은데 처음엔 queryBuilber를 사용하지 않고 sequelize와 같은 문법으로 사용하여 데이터를 뽑아오다가 좀 더 복잡한 쿼리가 필요하여 queryBuilder를 사용하여 보았습니다. 제가 예시를 들 부분은 feed(게시글) 조회 부분입니다. 현재 지역에서 발생한 피드를 클라이언트에 보내줘야하는데 각 피드의 작성자에 대한 정보를 응답해야합니다. 단순히 join하는 경우에는 문제가 되지..