분류 전체보기
-
어차피 다 똑같은 반복인데 for문만 사용하면 안되는걸까개발/자바스크립트로의 깊은 잠수 2026. 3. 25. 20:00
자바스크립트에는 다양한 반복 방법이 존재합니다.먼저 문의 형태인 `for, for...of, for...in, while, do while`이 있습니다.그리고 메서드의 형태인 `forEach, map, reduce, some, every, find, filter,` ...등이 있습니다.아니 어차피 반복하는 것이 목적인데, for 하나면 충분하지 않을까요?왜 이렇게 다양한 반복 방법이 존재하는 걸까요? 코드는 반복이 싫어요사실 반복을 위해서는 for문도 필요가 없습니다.그냥 코드를 여러번 쓰면 됩니다. 위의 그림처럼 별 다섯 줄을 출력하는 코드는 그냥 여러번 쓰는 것이 더 효율적입니다.하지만 별 5천 줄, 5만 줄을 출력해야 한다면,그리고 실무에서 5백만 행의 데이터를 반복해서 처리해야 한다면 얘기가..
-
자바스크립트에서 함부로 덧셈하지 마라개발/자바스크립트로의 깊은 잠수 2026. 3. 18. 21:30
`[] + []` 는 `''` 입니다.`[] + {}` 는 `'[object Object]'` 입니다.`{} + []` 는 `0` 입니다.`+{}` 는 `NaN` 입니다. 자바스크립트는 어쩌다 이렇게 되었을까요? + 기호가 가지는 세 가지 의미자바스크립트에서 더하기(+) 기호는 세 가지 의미를 가질 수 있습니다. 단항(unary) 산술 연산자이항(binary) 산술 연산자문자열 연결 연산자 피연산자 앞에 홀로 쓰이면 단항 산술 연산자가 됩니다.두 피연산자 사이에 쓰이면 이항 산술 연산자가 됩니다.두 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자가 됩니다. +'1'; // 1+'Hello'; // NaN1 + 2; // 31 + '2'; // '12''1' + 2; // '1..
-
(x = 1) + 5 는 왜 가능한가? 할당문이 값으로 평가되는 이유개발/자바스크립트로의 깊은 잠수 2026. 3. 11. 21:35
자바스크립트에서의 할당문은 값으로 평가되는 표현식입니다. let x; // 변수 x 선언console.log((x = 1) + 5); // 6 을 출력한다 왜 이런 짓이 가능하도록 만들어졌을까요? 표현식과 문알아보기에 앞서 표현식과 문이 무엇인지에 대한 정의를 짚어 보겠습니다. `let x;` 는 변수 선언문입니다.`x = 1;` 은 할당문임과 동시에 표현식입니다. 표현식(expression)은 값으로 평가될 수 있는 문(statement)이다. 즉, 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.- 이웅모, 『모던 자바스크립트 Deep Dive』, 위키북스, 2020, p.52 따라서 문보다 표현식이 더 좁은 개념이라고 볼 수 있습니다.문은 무엇일까요? 정의는 아래와 같이 할 수 있습니..
-
브라우저는 메모리를 어떻게 관리하길래 크롬 탭 하나가 700MB씩 먹는걸까개발/자바스크립트로의 깊은 잠수 2026. 3. 4. 21:32
크롬 탭 위에 마우스를 올려보면 메모리 사용량을 알려줍니다.별거 없는 페이지라고 생각했는데 700MB씩 잡아먹는 모습을 보면 문득 이게 700MB씩 먹을 페이지인가? 싶은 의문이 드는 경우가 종종 있었습니다.그 이유를 찾아봤습니다.V8 엔진이 범인인가?크롬 브라우저는 V8 엔진이라는 자바스크립트 엔진으로 JS 코드를 컴파일하고 실행합니다.어쩌면 V8 엔진이 메모리를 좀 희생해서 속도를 얻어내는 건 아닐까요?보통 속도와 메모리 사용량 사이에는 trade-off 관계가 있으니까 말이에요. 이런 합리적 의심을 바탕으로, V8이 메모리를 관리하는 방식을 한번 살펴보겠습니다. 위의 그림은 V8 엔진의 메모리 구조를 도식화한 그림입니다.모든 JS 프로그램은 V8 프로세스에 속하는 일련의 메모리 영역들로 대변될 수..
-
[독후감] 이펙티브 엔지니어 - AI 시대에 효율적인 엔지니어란 뭘까개발/오피니언 2026. 3. 2. 18:19
이펙티브 엔지니어라는 책을 읽게 되었습니다. 이 책의 저자가 전달하고자 하는 메시지는 명료합니다.내가 하는 일이 높은 레버리지를 가지도록 해라.시간이라는, 누구에게나 공평하게 주어지는 이 한정된 자원을 가장 효율적으로 사용하라는 메시지입니다. AI 시대를 살아가는 소프트웨어 엔지니어로서, 우리는 어떻게 일해야 효율적으로 일할 수 있을까요? 이 책에서 소개하는 예시들 중에 제가 중요하다고 생각하는 두 가지를 골라 봤습니다. 여러 명에게 영향을 미칠 수 있는 일이 더 큰 레버리지를 가진다.급하지만 중요하지 않은 일을 위임하면, 급하지 않지만 중요한 일에 시간을 더 투자할 수 있다. 이런 명제들은 논리적으로 옳습니다.그렇기 때문에 시간이 지나도 변하지 않습니다.세상이 바뀌고 환경이 변화하더라도 바뀌지 않습니..
-
라즈베리 파이 홈서버 구축하기개발/개발 지식 공유 2025. 11. 30. 18:08
친한 개발자 동생이 요즘 홈서버를 만들까 고민 중이라고 합니다.저는 이미 홈서버를 운영하고 있기 때문에 이런저런 팁을 전달해 주기로 했습니다. 제가 홈서버를 구성하면서 나중에 헷갈리지 않으려고 노션 문서로 정리해 둔 것이 있습니다.그런데 이 문서는 혼자 보려고 만든 것이라 누굴 보여주기에는 상당히 불친절합니다.그래서 따로 노션 페이지로 정리해서 전달할까 했는데, 그럴 바에는 블로그 포스팅을 작성해서 더 많은 사람들이 참고하면 좋을 것 같아서 블로그에 써 보려 합니다. 개발자로서 이것저것 사이드 프로젝트를 하다보면 배포할 일이 생깁니다.보통은 간편하고 안정적인 AWS, GCP, Azure 등 클라우드 서비스를 활용하게 됩니다.하지만 비싸요.. 서비스에 따라 한달에 최소 몇천원에서 수십만원까지 청구될 수 ..
-
Android Jetpack Glance: 위젯에 최신 데이터 전달하기개발/개발 지식 공유 2025. 10. 8. 20:29
Jetpack Glance Widget을 사용하여 할 일 목록(Todo List) 위젯을 홈 화면에 만들었습니다. 저는 앱에서 데이터를 수정했을 때 자동으로 최신 데이터가 위젯에도 반영되기를 원했습니다.하지만 제대로 된 방식으로 데이터를 제공하지 않는다면 위젯이 업뎃되지 않는 문제가 발생할 수 있습니다. 성공적으로 위젯을 업데이트 하는 방법을 공유하려고 합니다. 위젯에 State 데이터 제공하기일단 위젯에 데이터를 제공하는 가장 좋은 방법은 Flow.collectAsState() 메서드를 사용하는 것입니다.class TodoWidget : GlanceAppWidget() { override suspend fun provideGlance(context: Context, id: GlanceId) {..
-
Raspberry Pi 5 에서 Docker 사용하기개발/개발 지식 공유 2025. 10. 7. 15:32
Docker 공식 가이드에서 소개하고 있는 Docker를 사용하는 가장 쉬운 방법은 Docker Desktop을 설치하는 것입니다.하지만 Raspberry Pi 5 는 arm64(aarch64) CPU 아키텍쳐를 사용하고 있기 때문에, Docker 공식 홈페이지의 설치 가이드를 따라하더라도 Docker Desktop을 제대로 설치할 수 없습니다.해당 가이드에서는 사용자의 CPU가 amd64 기반의 x86_64 아키텍쳐라고 상정하고 있기 때문입니다.어찌저찌 커뮤니티를 돌며 arm64 설치 방법을 찾아서 설치하더라도, 제대로 동작하지 않았습니다. (Docker Desktop을 설치하기 위해서는 KVM을 활성화해야 하는데, 제가 삽질을 해본 결과 무슨무슨 모듈을 설치해야 하고... 또 arm64 아키텍쳐에서는..