본문 바로가기

Development/TIL

(56)
항해99를 마치며 회사를 다니며 의사 결정에 있어 데이터의 역할이 얼마나 중요한지 깨닫게 되었고 그 부분에 있어 내 능력의 부족함이 점점 명확해졌다. 평생 직장과 직업이 없는 시대에 나의 커리어를 지속해 나가기 위해 방향 전환을 결정했다. 짧고 굵은 고민 끝에 우선 개발을 배워보기로 했고 코딩을 배울 방법을 찾아보았다. 몇년 전부터 개발자라는 직업이 떠오르고 정부 정책으로 지원도 많이 해주는 것 같았다. 내 선택 기준의 우선 순위는 교육 기간이었다. 교육 비용과 생활비를 고려했을 때 6개월 이상의 교육 기간은 내게 부담으로 다가왔다. 그러던 중 스파르타의 항해99라는 부트 캠프를 알게되었다. 우선 한 기수당 정규 교육 기간이 3개월이라는 점이 최우선 조건을 만족했다. 거기다 엄격한 교육생 선발 과정과 타이트한 커리큘럼 또..
프로젝트 간단 소개 영상 제작 항해99의 최종 프로젝트 발표일이 3일 앞으로 다가왔다. 총 6주 동안의 최종 프로젝트 기간에서 마지막 1주일은 프로젝트의 기획, 실행, 트러블 슈팅등의 전반적인 내용을 문서화하는 기간이다. 팀 노션에 기술 스택이나 트러블 슈팅등의 내용은 정리가 거의 끝나서 프로젝트 간단 소개 영상을 제작해봤다. 간단 소개 영상 예시를 봤는데 크게 두 가지 컨셉으로 나뉘는 것 같았다. 첫 번째는 영상 편집 기술 측면에서 퀄리티는 다소 떨어지지만 유머러스한 컨셉, 두 번째는 프로젝트 시연 영상의 일부를 잘라낸 정석적인 컨셉이다. 운영 매니저님에게 받은 팁은 대부분의 팀들이 두 번째 컨셉으로 가는데 프로젝트 발표 영상이나 시연 영상이 비슷한 분위기라서 약간의 유머를 곁들여 재밌게 만들어 보는 것도 좋다는 것이었다. 그래서 ..
스트레스 테스트2 (feat. 배포 서버 다운) 오늘은 최종 프로젝트 브로슈어 제출일이었다. 브로슈어에 스트레스 테스트 지표를 추가하기 위해 무비위키의 배포된 서버에 테스트를 진행하던 중 과부하로 인해 서버가 다운이되었다. 비용을 투자하여 서버 성능을 업그레이드 시키느냐 로컬에 테스트를 진행하느냐 고민하다가 브로슈어 제출 시간이 얼마남지 않아 로컬에 빠르게 테스트를 진행하기로 했다. 배포된 서버는 aws의 프리티어를 이용한 것이라 성능이 로컬 서버와 큰 차이가 나지 않는다. 테스트 진행 artillery는 시나리오 테스트 진행을하면 결과를 json 파일로 저장을 하고 저장된 데이터를 바탕으로 테스트 결과를 visualizing 해준다. 그래서 단일 API 테스트였지만 시나리오 파일을 작성하여 진행했다. 먼저 root 디렉토리에 테스트를 진행할 시나리오..
스트레스 테스트 (feat. artillery) 무비위키 프로젝트에 멀티 프로세싱을 적용하고 성능을 테스트해보기 위해 artillery로 스트레스 테스트를 진행했다. Artillery란? 오픈 소스 로드 테스트 도구로, 소프트웨어 애플리케이션의 성능과 신뢰성을 평가하기 위해 사용한다. 주로 웹 애플리케이션, 마이크로서비스, API 등 다양한 유형의 애플리케이션을 대상으로 테스트 가능하다. Node.js로 작성되었으며, 사용자가 시나리오를 정의하고 해당 시나리오에 따라 애플리케이션에 부하를 가하는 방식으로 동작한다. 시나리오는 사용자의 요청과 동작을 정의하며, 테스트를 위해 다양한 유형의 요청을 생성하고, 트래픽을 모니터링하고, 성능 지표를 측정할 수 있다. 강력한 스트레스 테스트 기능을 제공한다. 여러 사용자 요청의 동시성, 요청 속도, 지연 시간, ..
Redis Sorted Set (Zset) 무비 위키 메인 화면에 인기리스트를 띄워주기 위해 Redis의 Sorted Set을 사용해보았다. 기존에는 특정 영화를 검색해서 조회하면 db에 해당 영화의 movieId를 참조하여 view 컬럼의 숫자를 1 증가시켜주고 그 숫자를 기준으로 내림차순 정렬해 상위 5개의 영화를 메인 화면에서 보여주고 있었다. 거기에 실시간 현황을 반영해 주기 위해 방법을 약간 바꾼 것이다. Sorted Set (Zset)이란? 정렬된 집합으로 값을 정렬된 순서로 저장하면서 각 값에 고유한 식별자인 score를 부여하는 데이터 구조이다. sorted set은 key-value 구조로 되어 있는데 key는 문자열이며 value는 정렬된 순서로 저장되는 요소들의 집합니다. 각 요소는 고유한 member로 식별되며 member와..
Nest.js 클러스터링 무비위키 프로젝트의 성능 개선을 위해 cluster 모듈을 이용해 멀티 프로세싱을 적용했다. 멀티 스레드와 멀티 프로세스가 같은 개념인줄 알았는데 다른 개념이었다. 멀티 스레딩 단일 프로세스 내에서 여러 개의 스레드를 생성하여 동시에 작업을 수행하는 것을 의미한다. 각 스레드는 같은 주소 공간을 공유하므로 데이터 공유가 간단하고 효율적이다. 하지만 스레드 간의 동기화와 경쟁 조건 같은 복잡한 문제를 처리해야 하므로 디버깅이 어려울 수 있다. 멀티 프로세싱 또는 클러스터링 여러 개의 독립된 프로세스를 생성하여 각각을 별도의 CPU 코어에서 실행하는 것을 의미한다. 각 프로세스는 자체적인 주소 공간을 가지고 있으며, 데이터 공유와 통신을 위해 별도의 매커니즘이 필요하다. 각 프로세스가 독립적으로 실행되므로 ..
비교 단위별 Diff 및 Patch 코드 동작 속도 측정 문장 단위 diff 및 patch 알고리즘 구현이 완료되었다. 현재까지는 특이사항 없이 안정적으로 작동하는 것으로 확인된다. 그런데 문득 글자와 문장 단위 diff 및 patch 코드 동작 속도가 궁금해졌다. 그래서 각각 속도 측정을 하여 비교해보았다. 프로젝트 폴더에서 테스트를 진행할 수 없어 새 폴더를 만들었다. 그런데 서버까지 만들기는 번거로워서 터미널을 통해 코드 동작 속도를 확인하는 방법을 찾아봤다. 타입스크립트 코드 실행 시간 측정 방법 실행 시간을 측정하고자 하는 코드 시작과 끝 지점에 아래 코드를 넣으면 된다. (간단해서 좋았다!) const start = performance.now(); // 성능을 측정하려는 코드 블록 또는 함수 실행 const end = performance.now(..
patch 알고리즘 수정 (feat. </p> 태그 지옥) 현재 진행중인 프로젝트인 무비위키의 버전 관리 기능은 크게 두 부분으로 나뉜다. 두 문서의 변경 사항을 추적하여 데이터화 하는 diff 알고리즘과 원본 문서와 변경 사항 데이터를 더해서 최신 버전 문서를 만들어내는 patch 알고리즘이다. 그런데 기능 테스트 중 오류를 발견했다. 한산 : 리덕스 (moviId : 3721)의 버전 기록 버전 6의 content에 버전 7의 diff를 더하면 버전 7의 content가 나와야하는데 변경 사항 데이터인 diff가 제대로 반영이 되지 않는다..... { "postId": 148, "userId": 13, "content": "이순신 3부작의 2탄!노량의 기록을 깰 수 있을 것인가최종 스코어 720만박해일 버전 이순신은 뭔가 냉철한 느낌이네요가슴이 웅장해지네요...