본문 바로가기

All posts123

[JS] 0.1 + 0.2 !== 0.3 인 이유 이전부터 한 번은 정리해서 올리려고 했던 주제인데, 이제서야 글을 써 본다. 대부분의 컴퓨터 프로그래밍 언어에서 0.1 + 0.2 를 연산하면 정확한 값인 0.3 이 나오지 않는다. 대신, 근사값인 0.30000.... x 가 나오는 것을 확인할 수 있다. 사람보다 더욱 정확한 연산을 하는 컴퓨터가 이런 오차를 출력하다니, 이상한 일이다. 하지만 이는 컴퓨터가 데이터를 저장하는 방법이 사람이 연산을 하는 방법과 다르기 때문에 생기는 현상이다. 즉, 오히려 컴퓨터가 연산을 너무 정확하게 하기 때문에 발생하는 side effect 인 것이다. 컴퓨터의 숫자 체계 모든 컴퓨터들은 자료를 비트와 바이트 (bit & byte)에 저장한다. 비트는 컴퓨터에서 사용하는 가장 작은 데이터 단위이다. 하나의 비트는 2진.. 2022. 1. 9.
[NestJs] Parsing error: Cannot read file '.../tsconfig.json'.eslint [현상] 새로운 NestJs 프로젝트를 생성했을 때, 어떤 파일을 열든 "Parsing error: Cannot read file '.../tsconfig.json'.eslint" 에러가 발생함. [시도한 방법과 결과] tsconfig 파일 경로를 찾는 모든 명령어 또는 configuration 을 상대경로인 ./tsconfig.json 로 수정함. 위의 현상 여전히 동일함. [원인] .eslintrc.js 의 parserOptions 내 project 들은 현재 작업 경로 (current working directory) 에 따라 상대적으로 구성됨. 가령, 프로젝트 경로가 아래와 같이 되어 있고 00.dev 폴더를 root 으로 하여 workspace 를 열게 된 경우, ./tsconfig.json 은.. 2022. 1. 9.
[Network] 이중화 기술 서버가 잘 굴러가기 위해서는 어떤 요소가 필요할까? 깔끔한 코드도, 획기적인 기획도 모두 중요한 요소이겠지만, 사실 가장 근본이 되는 것은 네트워크 인프라이다. 비즈니스에는 Time-to-Market (TTM, 제품이 개발되고 실제로 '판매'되기까지 걸리는 시간) 이라는 것이 존재하는데, TTM 이 길어질수록 손실이 발생하게 된다. 따라서 이를 줄이기 위한 방법을 찾게 되는데, 여기에 가장 큰 영향을 미치는 것이 바로 인프라의 가용성, 연속성, 안정성이다. 어려운 말 같아 보이지만, 결국 인프라가 끊기지 않고 계속 공급되는 것이 중요하다는 것이다. 이때, "끊기지 않고" 에 가장 치명적일 수 있는 것이 SPoF (Single Point of Failure, 단일 장애점) 이다. SPoF 는 시스템 구성 .. 2021. 12. 15.
10월 4일자 페이스북 장애 원인 파헤치기 지난 10월, 전 세계적으로 페이스북 서비스를 사용할 수 없는 대규모 장애가 발생했었다. 이와 관련된 글을 작성해 두었는데, 업로드 시기를 놓쳐 저장만 해두었다가 SPoF 관련 내용의 사례로 활용하기 위해 업로드하게 되었다. 💡 사건의 개요 2021년 10월 04일, 페이스북과 인스타그램, 왓츠앱이 한 순간에 접속이 불가능해졌다. EST (동부 시간) 기준 오전 11시 40분부터 약 6시간 동안 접속할 수 없었다고 하니, 한국 시간으로는 5일 새벽 12시 반 즈음부터 오전 6시 넘어서까지 접속할 수 없었던 셈이다. 개인적으로 이번 장애가 특이했던 이유는 두 가지이다. 같은 회사의 서비스인 페이스북, 인스타그램, 왓츠앱 전부가 한 번에 다운되었다는 점과, 여느 때와는 다르게 접속 시 화면에 어떠한 에러 메.. 2021. 12. 15.
[JavaScript] 클래스 (Class) 자바스크립트를 비롯한 여러 프로그래밍 언어에는 "클래스", 한국어로 번역하면 "분반, 개체군" 이라는 개념이 존재한다. 이 개념은 "객체지향 프로그래밍" 과도 깊은 연관성을 가지고 있어, 개발자로써는 알아두어야 할 필수 상식이기도 하다. 클래스는 말 그대로 하나의 그룹, 또는 묶음이라고 생각하면 편하다.가령, '이름', '성별', '나이' 라는 속성이 있고, '이름 부르기', '개명하기', '나이 계산하기' 등의 메서드 (기능) 이 있다고 하자. '이름' 속성과 '이름 부르기', '개명하기' 메서드를 하나로 그룹화하여 관리하는 것이 이들을 개별적으로 분산시키는 것보다 훨씬 작업에 용이할 것이다. 이렇게 비슷한 기능을 하거나 속성을 갖는 요소들을 하나의 객체에 담아 사용하고 관리할 수 있도록 하는 자료구조.. 2021. 12. 12.
끝날 때까지 끝난 게 아니다 🌟 신입 개발자 적응기 / Week 5 & 6 (백엔드) 개발에 존재하지 않는 것 두가지: "끝" 과 "완벽" 스프린트에 본격 투입되어 작은 기능 개발 및 Fix 에 참여중이다. 이 과정에서 느끼는 점이 정말 많은데 몇 가지 굵직한 내용을 정리하여 적어본다. 💫 1 : 9 의 비율 여기서 개발은 1 이고 디버깅이 9 이다. 사실 API 를 구현하거나 기능을 만드는 것 자체는 간단하다. 하드코딩으로 당장 필요하다고 생각되는 값만 보내주거나 정말 눈 앞에 보이는 대로만 개발하면 되니까. 하지만 코드를 그렇게 짜면 결국 고려하지 않은 수많은 예외 케이스가 발생하여 디버깅에 오랜 시간을 할애하게 된다. 시간을 더 효율적으로 쓰기 위해서라도 좋은 코드를 짜야 하는데, 사실 아무리 꼼꼼히 봐도 개발자가 예상하지 못.. 2021. 12. 6.
회사에서도 과제를 한다니, 너무 좋잖아? (제목은 낚시나 어그로가 아닌 나의 진심이다. 100%) 🌟 신입 개발자 적응기 / Week 3 & 4 : 일단 해보고나 말하자 !! 💫 협력과 책임감 3주차에는 API 구현 과제를 진행하며 오롯이 모바일 서버 구조와 코드를 이해하는 데 시간을 들였고, 4주차에는 팀 회고/회식/배포 등의 일정으로 "팀"의 협동 과정에 참여할 수 있었다. 두 가지 매우 다른 경험이었음에도 "협력"을 통해 책임감을 배웠다는 점에서 본질이 같았다. 협력과 책임감, 사실 어릴 때부터 집이나 학교, 교회나 나의 사회 반경에서 자주 들어 익히 알고 있던 가치였다. 그런데 유독 지난 이주간 협력이라는 개념이 뇌리에 깊이 박혀있었다. 굳이 이유를 찾자면 아마 그간 내가 인문사회학적인 배경에서 접했던 "협력과 책임"의 추상적 개념이 실.. 2021. 11. 23.
서버 API 과제 회고록 약 1주일 정도의 기간 동안, 팀에서 부여한 API 구현 과제를 진행하고 배운 점을 기록했습니다. 해당 글은 전체 회고 시간에 팀원들에게 먼저 공유되었던 내용이며, 이후 약간의 수정을 거쳐 블로그에 게시하게 되었습니다. 📍 개요 ❗ 회고를 굳이? 그럴 시간에 코드나 한 줄 더 치지.. ← 를 방어하기 위한 쉴드용 서두입니다. 개발을 시작하기 훨씬 전부터 '회고'의 중요성은 익히 알고 있었습니다. 스프린트나 프로젝트를 진행하면서 얻은 좋은 점들은 확실히 족적을 남기고 걸러내야 할 것들은 확실히 걸러내는 회고 작업은 개발에서야말로 더욱 빛을 발한다고 생각합니다. 그렇기 때문에 (예비)개발자로 거듭난 뒤에도 회고를 늘 곁에 두려고 노력했고, 이번 과제를 계획할 단계에서부터 회고까지도 과제의 일부라고 생각하고 .. 2021. 11. 23.
[Network] GSLB (Global Server Load Balancing) GSLB 는 Global server load balancing, 또는 Global service load balancing 의 약어로, 도메인을 이용한 로드밸런싱 구현 기술이다. 개념을 구체적으로 알아보기 전에 먼저 로드밸런싱의 의미와 종류부터 간략히 알아보자. ✨ 로드밸런싱 개요 로드밸런싱이란 "부하 분산"으로, 중앙 장치에서 자원 또는 부하를 여러 개로 나누어 실제 작업을 처리하는 기술이다. 가령, 하나의 서버에 모든 요청이 몰리지 않도록 중간에서 요청을 일정하게 나누어 여러 대에 순서대로 보내주는 서버가 있다면, 해당 서버가 로드밸런서의 역할을 하는 것이다. 로드밸런싱 기술은 기능과 역할에 따라 크게 3가지 종류로 나뉜다. 📍 SLB (Server Load Balancing) - 하나의 서버에 트.. 2021. 11. 10.