분류 전체보기
-
데이터베이스 인덱스는 왜 'B-Tree'를 선택하였는가개발 블로깅/Server&DataBase 개념 2020. 10. 25. 13:17
데이터베이스의 탐색 성능을 좌우하는 인덱스. 인덱스는 데이터 저장, 수정, 삭제에 대한 성능을 희생시켜 탐색에 대한 성능을 대폭 상승하는 방식이라 볼 수 있다. DB의 인덱스는 B-tree 자료구조를 이용하여 테이블의 요소를 빠르게 탐색하도록 설계되어있다. 그러면 인덱스는 그 많은 자료구조 중에 왜 하필 'B-tree'를 사용하는 것일까? 참고로 해당 글에서는 데이터베이스의 인덱스가 무엇인지에 대해서는 다루지 않는다. 하지만 인덱스에 대해 잘 몰라도 이 글을 읽는 것에 큰 어려움이 없을 것이다. DB를 직접 다루는 개발자가 아니더라도 SW 성능에 관심이 많거나 자료구조, 알고리즘 공부를 하는 사람이라면 관심을 가지고 읽어볼 만한 글이 될 것 같다. 인덱스가 B-Tree를 이용하는 이유에 대해 알기 위해,..
-
[2020.10.16] Google Chrome V8 엔진을 파헤쳐보자개발 블로깅/기타 개념 2020. 10. 17. 00:56
Google V8 엔진 V8은 Google Chrome과 Node.js에서 사용되고 있는 구글에서 제작한 자바스크립트 엔진이다. C++로 작성되었고 고성능의 자바스크립트 전용의 웹 어셈블리 엔진이라 할 수 있다. 일반적으로 자바스크립트 엔진은 코드 한 줄을 해석하고 바로 실행하는 인터프리터 형식이지만, V8 엔진은 자바스크립트 코드를 바이트코드(ByteCode)로 컴파일하고 실행하는 방식을 사용한다. 또한 V8엔진은 독립형으로 개발되었기 때문에 웹 브라우저 뿐 아니라 C++ 프로그램에 별도로 내장하여 실행시킬 수도 있다. 이러한 점은 엄청나게 강력한 기능이다. C++자체가 하드웨어 레벨에 훨씬 더 가까운 언어인 만큼 자바스크립트보다 더 많은 특성을 가지고 있다. 그렇기에 C++로 작성한 언어를 V8엔진을..
-
Netflix의 웹 성능 최적화를 위한 기법 소개개발 블로깅/Improving Performance 2020. 9. 30. 00:21
넷플릭스는 전 세계적으로 유명한 스트리밍 콘텐츠 서비스이다. 그만큼 서비스 내 사용되는 콘텐츠 데이터가 엄청나며 이를 이용하는 대용량 트래픽 또한 만만치 않을 것이다. 그럼에도 불구하고 신기한 점은, 수많은 트래픽 처리 속에서도 저렇게 많은 섬네일 이미지와, 이미지 위에 마우스를 올리면 보여지는 일부 영상이 매우 빠른 로딩 속도를 자랑한다는 것이다. 넷플릭스는 과연 어떻게 이러한 성능을 만들어 낼 수 있었을까? 지금부터 넷플릭스 페이지의 비밀에 대해 알 수 있는 만큼 최대한 파헤쳐 보도록 하자. 섬네일 이미지 사용 우선 개발자 도구-네트워크 탭을 열어, 페이지 로드 시 요청받는 리소스 목록들을 확인해 보았다. 페이지 렌더링이 완료된 후에도 쉬지 않고 계속해서 많은 리소스가 다운로드되며 리스트가 쭉쭉 늘어..
-
[2020.09.16] (운영체제) 사용자 수준 스레드와 커널 수준 스레드의 차이개발 블로깅/기타 개념 2020. 9. 16. 17:04
운영체제 공부 중에 사용자 수준 스레드와 커널 수준의 스레드에 대해 개념이 이해가 되지 않았다. 다른 블로그 글을 찾아봐도 뭔가 애매모호하게 설명하고 말아 버린 느낌으로 받아들여져서 이해하는데 시간이 꽤 걸렸다. 혹시나 나 같은 사람이 있을까봐 직접 최대한 쉽게 정리를 해보려고 한다. 스레드 우선 스레드부터 정리해 보자면, 운영체제 공부를 했으면 다들 알 듯이 '프로세스 내 작업 단위'이다. 이것은 하나가 될 수도 있고 여러 개가 될 수 도 있다. 여러 개의 스레드가 동작하면 '멀티 스레드' 방식으로 동작하게 되는 것이다. (더 자세한 설명은 이번 글과 맥락이 맞지 않으니 생략...) 그런데 스레드 중에 커널 수준 스레드와 사용자 수준의 스레드로 종류가 나뉜다... 우선 이 두가지가 각자 무엇인지 알아보..
-
자바스크립트 메모리 관리(Garbage Collection)에 대해 알아보자개발 블로깅/Javascript 개념 2020. 9. 4. 17:06
자바스크립트는 언어 특성상 메모리를 자동으로 관리하도록 동작하기 때문에 개발자가 '메모리 관리'에 대해 많이 소홀해질 수 있다는 특징을 가지고 있다. 서비스의 성능 관리를 신경 쓰려면 자바스크립트 내에서 메모리 관리가 어떻게 이루어지고 어떻게 메모리에 신경을 써야 하는지 파악할 필요가 있다. 그래서 이번 블로그에서 자바스크립트 내에서 메모리 관리 핵심 요소인 가비지 컬렉션(Garbage Collection)과 개발자가 메모리 효율성을 높이기 위해서 주의해야 할 점들에 대해 한번 정리해 보려고 한다. 기본적인 메모리 사용 우선 C언어와 같은 로우(Low) 레벨 언어에서는 메모리 관리를 위해 malloc()과 free()를 사용한다. #C언어의 메모리 할당 #include #include // malloc,..
-
Javascript Engine & Event Loop 동작 원리개발 블로깅/Javascript 개념 2020. 8. 30. 03:50
이번 기회에 내가 제일 좋아하는 언어인 자바스크립와 더욱 더 친해지기 위해서, 실제 자바스크립트을 동작시키는 엔진의 내부 구조와 동작 원리에 대해 파헤쳐보고 블로그로 정리해보려고 한다. 자바스크립트 엔진 자바스크립트 언어는 자바스크립트 엔진이라는 녀석을 통해 실행된다. 이 엔진은 웹 브라우저 내부 또는 Node.js 안에 구성되어있다. 자바스크립트 엔진은 가능한 짧은 시간 내에 최적화된 코드를 생성하기 위해 전통적으로는 인터프리터 방식으로 구현되지만, 특정한 방식으로 바이트코드로 JIT(Just-In-Time: 번역한 기계어를 저장해놨다가 필요할 때 다시 꺼내 쓰는 방식) 컴파일을 할 수도 있다. 💡인터프리터와 컴파일러의 차이 사람이 작성한 소스코드를 동작시키기 위해서는, 컴퓨터 언어에 맞는 0과 1로 ..
-
[2020.08.27] 우아한 테크러닝 3기에 선발되었다핵인싸 개발자의 길/Life Log 2020. 8. 27. 16:27
평소 리액트를 이용하여 여러 페이지와 서비스 기능들을 구현할 때마다, 항상 컴포넌트를 어떤 식으로 설계해야 재활용성을 높이고 효율적인 개발을 할 수 있을지 고민이 많았다. 같은 패턴일지라도 재활용을 하기에는 내부적으로 각기 다른 기능과 디자인 요소들이 너무나 다양했고, 이를 구분하기 위해 요구되는 파라미터들이 하나하나 추가될 때마다 코드의 가독성과 효율성이 극도로 떨어지는 것을 많이 느꼈기 때문이다. 나름 시간을 들여 고민도 많이 해보고 시도도 해봤지만, 항상 만족스럽지 않은 방향으로 컴포넌트를 사용하게 되었고 그때마다 정말 컴포넌트 설계를 잘하는 고수에게 제대로 배워보고 싶다는 생각을 많이 했다. 우아한 테크러닝 3기 그러다 며칠 전, 우아한 형제들에서 리액트와 타입스크립트를 이용하여 컴포넌트 설계와 ..
-
[2020.08.13] 퇴사 후, 한 달을 되돌아보며핵인싸 개발자의 길/Life Log 2020. 8. 13. 20:01
트레바리를 퇴사한 지 어느덧 한 달 남짓이 되었다. 사실 한 달만 더 채우고 8월에 퇴사를 했다면, 입사 1년을 채워서 한 달치 월급인 퇴직금과 새로 주어질 1년 치 연차를 돈으로 환산 받음으로써 지금보다 훨씬 더 많은 생활비를 보유할 수 있었을 것이다. 그래서 그런지, 주위에 퇴사 얘기를 하면 무조건 '한 달만 더 채우지...'라는 말을 꼭 들었다. 그럼에도 불구하고 내가 그 많은 돈을 포기한 채 입사 11개월만 채우고 퇴사를 결심한 이유는, '한 달이라는 시간이 그 몇 백만 원어치의 돈보다 더 값질 것'이라 생각했기 때문이다. 이러한 생각을 가지고 최종 결정을 하기까지, 그 당시엔 엄청나게 많은 시간과 에너지를 쏟으며 고민을 하게 되었다. 말 그대로 정말 적지 않은 금액이었기 때문에... 하지만 그 ..