본문 바로가기

전체 글41

[개발 용어] Repaint와 Reflow 쉽게 이해하기 프론트엔드 개발을 하게되면 repaint와 reflow 라는 말을 자주 듣게 될 것이다. 브라우저의 렌더링 과정과 관련이 있다. repaint와 reflow를 이해하려면 먼저 브라우저가 어떻게 페이지를 그려서 보여주는지 알아야 한다. 우리가 HTML과 CSS로 작성한 코드는 '렌더링(Rendering)'이라는 과정을 거쳐 화면에 나타난다. HTML(DOM)과 CSS(CSSOM) 코드를 기반으로 브라우저 엔진이 Render Tree를 형성하고, 이 과정에서 reflow와 repaint가 발생한다. 자바스크립트로 DOM을 조작하거나 CSS를 동적으로 변경할 때 이 두 현상이 트리거된다.웹 브라우저의 렌더링 엔진(Rendering Engine)이 화면을 그리는 과정DOM과 CSSOM 생성: 웹 브라우저의 렌더.. 2025. 3. 20.
[운영체제] 병행 프로세스 - 세마포어 완벽 정리 Part 3 - 판독기-기록기 문제 지난 두 편의 글을 통해 세마포어의 정의와, '상호배제 문제'와 '동기화 문제', '생산자-소비자 문제'를 세마포어가 어떻게 해결하는지에 대해 알아보았다. 이번 포스팅은 세마포어 관련 마지막 포스팅으로, 세마포어로 해결할 수 있는 문제 중 판독기-기록기 문제를 집중적으로 살펴보도록 한다. 판독기-기록기 문제란? 판독기-기록기 문제는 다수의 협력 프로세스가 공유 자원을 사이에 두고 데이터를 읽는 판독기(reader)와 데이터를 쓰는 기록기(writer)로 나위어 동작할 때, 이들의 접근을 어떻게 제어할 것인지에 대한 문제다. 이 문제의 핵심은 두 가지 조건을 만족시키는 것이다. 기록기의 상호 배제: 한 기록기가 공유 자원에 데이터를 쓰는 동안 다른 기록기나 판독기는 접근할 수 없음. 데이터를 쓰고 있는 중.. 2025. 3. 19.
[운영체제] 병행 프로세스 - 세마포어 완벽 정리 Part 2 - 생산자-소비자 문제 지난 글에서는 세마포어의 정의와, '상호배제 문제'와 '동기화 문제'를 세마포어가 어떻게 해결하는지에 대해 공부해보았다. 이번 글에서는 세마포어로 해결할 수 있는 문제 중 생산자-소비자 문제에 대해 다뤄보려고 한다. 생산자-소비자 문제란? 생산자-소비자 문제는 두 프로세스가 협력하여 데이터를 주고받는 상황을 다룬다. 생산자-소비자 문제에서는 세 가지 용어를 먼저 정의해야 한다. 생산자(Producer) : 데이터를 생성하여 버퍼에 넣는 프로세스소비자(Consumer) : 버퍼에서 데이터를 꺼내 사용하는 프로세스버퍼(Buffer) : 생산자와 소비자 사이에 데이터를 저장하는 공유 공간 생산자-소비자 문제에는 두 가지 조건이 있다. 상호배제 : 여러 프로세스가 동시에 버퍼에 접근할 수 없다. 즉, 생산자가 .. 2025. 3. 18.
[깃] 깃(Git) GUI 클라이언트 "깃(Git)을 GUI로 사용한다"는 말은 Git의 기본 방식인 CLI(Command Line Interface, 명령줄 인터페이스) 대신, GUI(Graphical User Interface, 그래픽 사용자 인터페이스) 기반의 도구를 사용해 Git을 조작한다는 뜻이다. 즉, 터미널에서 git commit, git push 같은 텍스트 명령어를 입력하는 대신, 마우스 클릭과 버튼을 통해 시각적으로 Git 작업을 수행하는 방식이다. Git을 GUI로 사용하는 이유는, 무엇보다 초보자에게 친화적이기 때문이다. git 명령어를 다 외우지 않아도, 버튼을 클릭해서 쉽게 작업할 수 있다. 또한 시각적으로도 직관적이다. 저장소 상태, 커밋 히스토리, 브랜치 등을 그래픽으로 확인할 수 있다. 그리고 복잡한 명령어를 .. 2025. 3. 13.
[파이썬기초프로그래밍] 중첩 선택 구조 (feat. 놀이공원) 파이썬 프로그래밍에서 조건에 따라 다른 코드를 실행하는 선택 구조는 매우 중요하다. 특히 복잡한 조건을 처리해야 할 때 중첩 선택 구조가 필수적이다. 중첩 선택문은 영어로 Nested if statement라고 한다. Nested라는 단어에서 알 수 있듯, 중첩 선택문은 if문 안에 또 다른 if문이 들어가 있는 구조다.  "이 안에 너 있다...."가 갑자기 왜 생각나지..ㅋㅋㅋ 중첩 선택문의 구조중첩 선택문은 다음과 같은 구조를 가진다. if 조건 1: # 조건 1이 참일 때 실행되는 코드 if 조건 2: # 조건 1과 조건 2가 모두 참일 때 실행되는 코드 else: # 조건 1은 참이지만 조건 2는 거짓일 때 실행되는 코드else: # 조건 1이 거짓.. 2025. 3. 13.
[운영체제] 병행 프로세스 - 세마포어 완벽 정리 Part 1 - 상호배제, 동기화 (feat. 비행기 화장실) 운영체제에서는 프로세스의 상호배제 문제를 해결하기 위해 세마포어(semaphore)라는 도구를 사용한다. 상호배제란 여러 프로세스가 동시에 같은 자원(임계영역)을 건드리지 않도록 막는 것이다. 세마포어란? 쉽게 비유하면 자원의 좌물쇠 같은 역할이다. 세마포어는 정수형 변수(s)로 만들어졌는데, 이 값은 사용 가능한 자원의 개수나 잠김/열림 상태를 나타낸다. 예를 들어 s = 3 이면 사용 가능한 자원이 3개 있다는 뜻이니, 프로세스가 3개까지 들어갈 수 있다는 신호다. s = 0 이면 빈 자원이 없으니 대기하라는 뜻이다. 처음에 세마포어 s를 생성할 때, 상황에 맞춰 값을 설정한다. 이 값은 0 이상의 정수여야 한다. 그리고 이 s는 P와 V라는 두 가지 연산으로만 변할 수 있다. 즉, P 연산과 V 연.. 2025. 3. 12.
[이산수학] 행렬곱은 어떻게 구할까? (feat. 펭귄 90도 회전시키기) 행렬의 합과 차는 직관적으로 이해가 되는 반면 행렬곱은 그 원리와 계산 방식이 다소 복잡하게 느껴질 수 있다. 하지만 행렬곱은 명확한 규칙을 기반으로 하기 때문에 규칙만 알면 간단하게 구할 수 있다. 👌 행렬곱이란?우선 행렬은 숫자(꼭 숫자가 아닐 수도 있음)들이 행(가로)과 열(세로)로 배열된 구조다. 간단한 예를 들어, 두 학생의 국어와 수학 점수를 행렬로 나타내면 다음과 같다. 첫 번째 행은 학생 A의 점수 (국어 80, 수학 90)을, 두 번째 행은 학생 B의 점수 (국어 70, 수학 60)을 의미한다.행렬곱은 두 행렬을 결합하여 새로운 행렬을 생성하는 연산이다. 첫 번째 행렬의 행과 두 번째 행렬의 열을 특정 규칙에 따라 곱하고 더해 새로운 값을 만드는 것이다.  행렬곱의 기본 원리와 조건행렬.. 2025. 3. 11.
[개발 용어] Dev container (데브 컨테이너) Part 2 - 작성 방법 및 예시 지난 글에서는 데브 컨테이너의 개념에 대해 살펴보았다. 이번 글에서는 데브 컨테이너의 구조 및 작성 방법에 대해 간단히 알아보려고 한다. 참고로 데브 컨테이너는 JSON 형식을 사용하는데, 나는 아직 JS도 알못이다. 😂 어쨌든 나중에 내가 개발을 하게 되면 참고하려고 쓰는 소위 '와드' 성격의 글임을 감안했으면 좋겠다.형식(data format)데브 컨테이너는 JSON (JavaScript Object Notation) 형식을 사용한다. 먼저 알아야 할 것은, JSON은 프로그래밍 언어가 아니라는 것이다. 데이터를 저장하고 교환하기 위한 경량 데이터 형식(data format)이다. 따라서 JSON 자체는 실행 가능한 코드(로직, 함수) 등을 포함하지 않는다. 단지 데이터를 구조화하는 방식일 뿐이다... 2025. 3. 10.
[파이썬] 다형성(Polymorphism) Part 1. 개념 이해하기 (feat. 우주청소로봇) 다형성이란? 다형성(polymorphism)이란 "같은 이름을 가진 기능이 상황에 따라 다르게 동작함"을 의미한다. 비유를 해 보면, 똑같은 단어 "먹다"도 상황에 따라 다르게 쓰인다. "밥을 먹다"일수도 있고, "빵을 먹다"일수도 있다.  마찬가지로 파이썬에서 다형성은 객체지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 개념 중 하나로, 이 개념을 코드로 구현한다. 예를 들어 같은 이름의 함수나 메서드를 쓰더라도 어떤 객체(object)를 다루느냐에 따라 결과가 달라질 수 있다.  예를 들어, 우주에서 쓰레기를 수집하는 로봇이 있다고 가정해 보자.  "진공 로봇"은 우주 먼지를 빨아들여 블랙홀 에너지로 바꾼다. "분쇄 로봇"은 고철 조각을 나노 입자로 분쇄해 우주로 .. 2025. 3. 7.