전체 글

안녕하세요. 사진과 철학에 관심이 많은 웹 프론트엔드 개발자 오원종입니다. 시간이 지나도 꾸준히 읽힐 수 있는 글을 쓰고 싶습니다. 재미있는 일만 하면서 살고 있는 사람입니다.
이번주는 크로스핏 박스에 3번 갔다. 원래 오늘(토요일)까지 네 번 가려고 했는데 오늘은 늦잠을 자느라 못 갔다 ㅠㅠ 스쿼시 주 2회 강습까지 받으면서 총 일주일에 운동을 5번씩 하니까 ㅋㅋㅋ 몸이 저절로 좋아지는 것이 느껴진다. 앞으로 두 달 정도 기간동안 내 27년 인생에서 최고의 바디 컨디션을 만들고 입사를 하는 걸 목표로 잡았다! 남들이 보기에 멋있는 몸을 만드는 것도 좋은데, 나는 건강한 몸을 만들고 싶다. 체력적으로도 지치지 않고 부상 쉽게 안 당할 수 있는 그러한 건강한 몸 말이다 ㅎㅎ 이번주에 했던 와드 3개와 배웠던 동작 하나를 이번 포스팅에서 적어본다. 그리고 앞으로 매주 동작 하나와, Fran, Cindy 같은 크로스핏 대표 와드도 매주 하나씩 해볼까 한다. ㅋㅋㅋ 4월 20일 월요일..
지난 포스팅에 이어서 메모리 관리에 대해서 이어서 설명해 보도록 한다. 페이지 테이블 관리 페이지 테이블 관리가 복잡한 이유는 시스템에 여러 개의 프로세스가 존재하고, 프로세스마다 페이지 테이블이 하나씩 있기 때문이다. 메모리 관리자는 특정 프로세스가 실행될 때 마다 해당 페이지 테이블을 참조하여 가상 주소를 물리 주소로 변환하는 작업을 반복한다. 페이지 테이블은 메모리 관리자가 자주 사용하는 자료 구조이므로 필요시 빨리 접근할 수 있어야 한다. 따라서 페이지 테이블은 물리 메모리 영역 중 운영체제 영역의 일부에 모아놓는다. 페이지 테이블의 수가 늘어나거나 페이지 테이블의 크기가 늘어나면 운영체제 영역이 그만큼 늘어나 사용자 영역이 줄어든다. 물리 메모리의 크기가 작을 때는 프로세스만 스왑 영역으로 옮겨..
자바스크립트 객체와 클래스에 대한 포스팅에 이어 이번에는 프로토타입에 대해서 정리해 보려고 한다. [[Prototype]] 자바스크립트 객체는 [[Prototype]]이라는 내부 프로퍼티가 있고 다른 객체를 참조하는 단순 레퍼런스로 사용한다. [[Prototype]]은 어디에 쓰이는 걸까? 객체 프로퍼티를 참조할 때(myObject.a), 객체는 기본적으로 객체 자체에 해당 프로퍼티가 있는지를 찾고, 만약 있다면 그 프로퍼티를 사용한다. 하지만 만약에 myObject에 a라는 프로퍼티가 없다면 그 다음에는 이 객체의 [[Prototype]] 링크다. 두 번째 예제에서 connectObject는 anotherObject와 [[Prototype]]이 링크되었다. 분명히 connectObject.a 라는 프로..
이전 포스팅에서 도커 이미지가 무엇인지, 컨테이너가 무엇인지를 알아 보았다. 이번에는 좀 더 실용적인 방법에 대한 고민과 함께 퍼시스턴트 데이터와 볼륨에 대해서 연결해서 설명해 보려고 한다. 도커를 사용해 시스템을 구성한다는 것은 대부분 자신이 만든 어플리케이션의 컨테이너는 물론이고 도커 허브에 공개된 어플리케이션이나 미들웨어 이미지로 만든 컨테이너가 서로 협력하는 스택을 구축하는 것이다. 실제 운영에서는 어플리케이션을 컨테이너 안에 어떻게 배치하는지가 매우 중요하다. 컨테이너 하나가 어느 정도의 책임을 맡는 것이 적정 수준일까? 단일 컨테이너의 시스템 내 비중을 어떻게 결정하는지 알아보자. 정기적으로 어떤 작업을 실행해야 하는 컨테이너가 있다고 가정하자. 스케줄러는 직접 갖춘 어플리케이션도 있겠지만, ..
이번 포스팅에서는 자바스크립트 클래스에 대해서 정리해 보려고 한다. 클래스 이론 클래스와 상속은 특정 형태의 코드와 구조를 형성하며 실생활 영역의 문제를 소프트웨어로 모델링 하기 위한 방법이다. 객체 지향 또는 클래스 지향 프로그래밍에서 데이터는 자신을 기반으로 하는 실행되는 작동(behavior)과 연관되므로 데이터와 작동을 함께 잘 감싸는(캡슐화) 것이 올바른 설계라고 강조한다. 예를 들어, 일련의 문자들은 보통 String이라는 단어를 나타낸다. 여기서 데이터는 문자들인데, 우리는 이 데이터를 가지고 원하는 작업을 하는 것이 관심사이므로 데이터에 적용 가능한 작동들을 모두 String 클래스의 메서드로 설계한다. 그래서 어떤 문자열이 주어지더라도 데이터와 작동이 잘 포장된 String 클래스의 인스..
오늘 설명할 문제는 백준 16946번 문제이다. https://www.acmicpc.net/problem/16946 16946번: 벽 부수고 이동하기 4 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 한 칸에서 다른 칸으로 이동하려면, 두 칸이 인접해야 한다. 두 칸이 변을 공유할 때, 인접하다고 한다. 각각의 벽에 대해서 다음을 구해보려고 한다. 벽을 부수고 이동할 수 있는 곳으로 변경한다. 그 위치에서 이동할 수 있는 칸의 개수를 세어본다. www.acmicpc.net 단순한 BFS 문제로 접근했다가 여러번 틀리고 깨달음을 얻은 문제이다. 처음에는 N * M 격자점들에 대해서 하나하나 BFS로 돌면서 이동할 수 있는 ..
이번 포스팅에서는 메모리 관리에 대해서 정리해 보고자 한다. 참고로 내용이 많으므로 두 번에 나누어서 정리한다. 컴퓨터가 널리 보급되면서, 범용 컴퓨터 시스템의 목적은 CPU의 활용률을 극대화 하는 것으로 나아갔다. 사용자들에게 빠른 응답을 제공하기 위해서 보다 많은 프로그램을 메모리에 올려서 실행(multi-programming) 시키게 되었고, 여러 프로그램을 동시에 실행시키기 위한 스케줄링 기법이 등장하게 되었다. 이와 같이 여러 프로그램이 동시에 메모리에 적재되어 실행되면서, 메모리를 공유할 필요가 생겼다. 컴퓨터의 메모리는 한정되었는데, 실행하는 프로그램이 많아지면 메모리 요구량이 증가했기 때문이다. 컴퓨터에서 작동하는 응용 프로그램은 프로그래밍 언어로 만들며, 보통은 컴파일러를 사용하여 작성된..
이번 포스팅에서는 자바스크립트 객체에 대해서 공부한 내용을 정리해 보려고 한다. 객체 타입 객체는 선언적(Declarative, 또는 Literal) 형식과 생성자 형식, 두 가지로 정의한다. 그리고 객체는 언어 타입(Language Types)이라 불리는 7개의 주요 타입 중 하나를 가지고 있다. null undefined boolean number string object symbol(ES6에서 추가) 참고로 여기에서 단순 원시타입(Simple Primitives) 5개(string, number, boolean, null, undefined)는 객체가 아니다. 그리고 복합 원시타입(Complex Primitives)이라는 독특한 객체 하위 타입도 존재한다. 예를 들면 function 타입이 여기에 ..
DevOwen
오웬의 개발 이야기