분류 전체보기 203

TinkerCAD로 아두이노와 친해질 준비하기

학교에서 8월에 소프트웨어 경진대회가 열린다. 나는 아직 개발 경험은 없지만 사회적으로 의미 있는 좋은 프로젝트가 있어 용기 내서 참여하게 되었다. 내가 참여하게 된 프로젝트의 산출물은 IoT로 구현되기 때문에 기본적으로 C를 사용한 임베디드 프로그래밍이 필요하다. 내가 프로그래밍에 직접 참여할 수 있을지는 모르지만 어쨌든 프로젝트가 진행되는 동안 맥락을 이해하는 것이 반드시 필요할 것이기 때문에 나도 아두이노와 좀 친해져 보기로 했다. 우선 알리익스프레스에 아두이노 우노 키트를 주문해놨다. 어차피 키트를 받자마자 바로 코딩을 할 준비가 안 되어있기 때문에, 키트 없이도 아두이노를 실습해볼 수 있는 TinkerCAD로 먼저 간단한 실습을 해 보기로 했다. 마침 야심차게 1년치 구독중인 교보문고 sam ..

[책리뷰] "IT세계의 괴물들" - 포기하지 않기 위해 읽은 책

올해 2월부터 대학생이 되어 CS 공부를 시작하면서 책을 읽는 시간이 급격히 줄어들었다. 세상에 좋은 책이 얼마나 많은데 갑자기 할 일이 많아졌다는 핑계로 이렇게 책 읽기를 내려놓는다는 게 여간 아쉬운 일이 아니었다. 이 기회에 같은 공부를 하는 사람들과 IT 분야의 책을 함께 읽고 얘기를 나눌 수 있다면 더할 나위 없이 좋은 동기부여가 될 것 같았다. 교보문고에 가서 평소에는 잘 가지 않던(하지만 앞으로는 자주 가야 할) "I 섹션"에서 책들을 이리저리 뒤적거려봤다. 좋은 책은 차고 넘치지만, 문제는 나의 CS 지식 수준이 그 좋은 책들을 소화하기에 아직 한참 부족하다는 거였다. 그래서 적어도 처음으로 도전할 책 만큼은 내가 앞으로 읽어야 할 많은 책들에 좀 더 의욕적으로 다가갈 수 있도록 물꼬를 터..

책리뷰 2025.04.21

[운영체제] 가상 메모리와 주소 변환 - Part 1. 기본 개념 이해하기

가상 메모리란? 가상 메모리는 운영체제가 프로그램에게 제공하는 추상화된 메모리 주소 공간이다. 이는 실제 물리적 메모리(RAM)의 크기와 상관없이 프로그램에게 더 크고 연속적인 메모리 공간을 제공한다.가상 메모리의 핵심은 주소 변환 메커니즘이다. 프로그램은 가상 주소를 사용하고, 이 주소는 메모리 관리 장치(MMU)에 의해 실제 물리 주소로 변환된다. 이때 모든 가상 주소가 항상 물리 메모리에 매핑되어 있는 것은 아니며, 필요한 경우에만 하드 디스크와 같은 보조 기억장치에서 물리 메모리로 데이터를 가져온다.따라서 하드디스크 자체가 메모리처럼 동작하는 것이 아니라, 가상 주소 공간을 효율적으로 관리함으로써 제한된 물리 메모리를 효율적으로 사용하고 필요시 보조 기억장치를 활용하는 것이다. 운영체제는 가상 메..

[SQL] 서브쿼리(Subquery)에 대해 알아보자

방송대 편입 첫 학기에 데이터베이스 과목을 수강하면서 SQL을 처음 배우기 시작했다. SQL의 핵심이라고 할 수 있는 그룹 질의, 중첩 질의, 조인 질의와 같은 질의(쿼리)의 여러 종류를 배우고 있다. 이러한 질의의 원리를 좀 더 꼼꼼하게 정리할 필요를 느껴서 이 포스팅을 쓰게 되었다. 오늘은 그 중에서도 서브쿼리에 대해 최대한 자세히 알아보려고 한다. 서브쿼리, 왜 필요할까?SQL을 쓰다보면 단일 쿼리만으로는 해결이 어려운 상황이 자주 발생할 것이다.예를 들어, 전체 평균 점수보다 점수가 높은 학생의 명단을 조회하는 쿼리는 단일 쿼리로 작성할 수 없다.이런 문제를 해결해주는 도구가 바로 서브쿼리(Subquery)다.서브쿼리를 이용하면 복잡한 조건이나 계산을 한 번에 처리할 수 있어서, SQL을 더 유연..

[파이썬] OOP - 캡슐화 개념과 데이터 은닉, getter/setter 이해하기

지난 포스팅에서는 파이썬의 객체지향 프로그래밍(OOP) 핵심 개념 중 하나인 다형성(Polymorphism)에 대해 알아보았다. 이번 포스팅에서는 데이터 보호와 코드의 안정성에 매우 중요한 역할을 하는 캡슐화(Encapsulation) 개념과 함께 이를 구현하는 getter와 setter 메서드에 대해 자세히 알아보자. 캡슐화란?캡슐화(Encapsulation)는 객체의 내부 상태(속성)를 외부에서 직접 접근하지 못하도록 감추고, 접근을 위한 메서드를 통해 데이터를 간접적으로 제어하는 방법이다.즉, 객체 내부의 데이터 보호와 인터페이스 제공을 목적으로 하며, 불필요하거나 위험한 접근을 제한함으로써 코드의 안정성과 유지보수성을 높여준다. 만약 캡슐화를 통해 객체의 데이터를 보호하지 않으면, 외부에서 내부 ..

[이산수학] 다익스트라(Dijkstra) 알고리즘으로 최단 경로 문제 해결하기

최단 경로 문제란 ?우리가 길을 찾을 때 가장 빠른 길을 고민하듯이, 컴퓨터 과학에도 비슷한 문제가 있다. 바로 최단 경로 문제(Shortest Path Problem)이다. 이 문제는 가중 그래프에서 한 정점(시작점)에서 다른 정점(도착점)까지 가는 경로 중 가중치의 합이 최소가 되는 경로를 찾는 것을 목표로 한다. 여기서 가중치는 간선(edge)에 붙은 숫자로, 거리, 시간, 비용 등을 나타낼 수 있다.예를 들어, 도시 A에서 도시 C로 가는 길이 두 개 있다고 해보자. 하나는 직진해서 10km이고, 다른 하나는 B를 거쳐서 7km라면, 당연히 7km인 경로를 선택할 것이다. 최단 경로 문제는 이런 상황을 수학적으로 해결하는 방법이다. 이번 포스팅에서는 이 문제를 효율적으로 푸는 방법 중 하나인 다익..

[이산수학] 팩토리얼(계승)함수의 재귀적 정의와 파이썬: 수학과 코딩의 만남🤍

이산수학의 함수 챕터를 공부하다가 팩토리얼의 '재귀적 정의'를 보고 왜 굳이 이렇게 정의를 해야 하는지 의문이 생겼다.팩토리얼은 지난 글에서도 한 번 다뤘지만 이번엔 좀 다른 관점에서 바라보려고 한다.팩토리얼이란? 팩토리얼은 양의 정수 n에 대해 n!라고 쓰고, 1부터 n까지의 모든 정수를 곱한 값이다. 수식으로 보면 다음과 같다. n!=1×2×3×⋯×n 그리고 하나 기억할 것은, 수학에서는 0!=1 로 정의되어 있다는 것이다. 이게 앞으로 다룰 재귀적 정의에서 중요한 역할을 하게 된다. 재귀적 정의, 팩토리얼의 마법 공식팩토리얼을 계산하는 방법은 여러 가지가 있지만, 오늘의 주인공은 재귀적 정의이다. 재귀(recursion)는 어떤 문제를 해결하기 위해 그 문제의 더 작은 버전을 반복적으로 해결하는 방..

[파이썬] os 모듈, 언제 어떻게 쓰면 좋을까?

이번 포스팅에서는 다시 파이썬으로 돌아와 os모듈에 대해 알아본다. 파이썬의 os 모듈은 이름에서 알 수 있듯이 운영체제와 상호작용하는 다양한 기능을 제공하는 라이브러리로, 파일과 디렉토리를 관리하거나 시스템 명령어를 실행하는 등의 작업을 할 때 유용하다. 예를 들어, 운영체제 내의 특정 디렉토리의 파일 목록을 가져오거나, 파일 이름을 수정하고, 디렉토리를 생성하거나 삭제할 때 os 모듈을 사용할 수 있다. 따라서 텍스트, 이미지, 파이썬 파일 등 어떤 종류의 파일이든 다룰 수 있다. os 모듈이 필요한 이유디렉토리나 파일을 핸들링하는 일은 GUI나 CLI에서도 충분히 가능한데 "굳이 왜" 파이썬 os모듈을 사용해야 하는지 의문이 들 수 있다. 하지만 os 모듈은 우리가 일상에서 하는 많은 노가다 업무를..

[개발 용어] Repaint와 Reflow 쉽게 이해하기

프론트엔드 개발을 하게되면 repaint와 reflow 라는 말을 자주 듣게 될 것이다. 브라우저의 렌더링 과정과 관련이 있다. repaint와 reflow를 이해하려면 먼저 브라우저가 어떻게 페이지를 그려서 보여주는지 알아야 한다. 우리가 HTML과 CSS로 작성한 코드는 '렌더링(Rendering)'이라는 과정을 거쳐 화면에 나타난다. HTML(DOM)과 CSS(CSSOM) 코드를 기반으로 브라우저 엔진이 Render Tree를 형성하고, 이 과정에서 reflow와 repaint가 발생한다. 자바스크립트로 DOM을 조작하거나 CSS를 동적으로 변경할 때 이 두 현상이 트리거된다.웹 브라우저의 렌더링 엔진(Rendering Engine)이 화면을 그리는 과정DOM과 CSSOM 생성: 웹 브라우저의 렌더..

Journey to CS/웹 2025.03.20

[운영체제] 병행 프로세스 - 세마포어 완벽 정리 Part 3 - 판독기-기록기 문제

지난 두 편의 글을 통해 세마포어의 정의와, '상호배제 문제'와 '동기화 문제', '생산자-소비자 문제'를 세마포어가 어떻게 해결하는지에 대해 알아보았다. 이번 포스팅은 세마포어 관련 마지막 포스팅으로, 세마포어로 해결할 수 있는 문제 중 판독기-기록기 문제를 집중적으로 살펴보도록 한다. 판독기-기록기 문제란? 판독기-기록기 문제는 다수의 협력 프로세스가 공유 자원을 사이에 두고 데이터를 읽는 판독기(reader)와 데이터를 쓰는 기록기(writer)로 나위어 동작할 때, 이들의 접근을 어떻게 제어할 것인지에 대한 문제다. 이 문제의 핵심은 두 가지 조건을 만족시키는 것이다. 기록기의 상호 배제: 한 기록기가 공유 자원에 데이터를 쓰는 동안 다른 기록기나 판독기는 접근할 수 없음. 데이터를 쓰고 있는 중..