지난번 포스팅 동기화 Part1에 이어서 데드락과 동기화의 고전적 문제들에 대해서 정리를 해 보려고 한다. 데드락(교착상태, Deadlock) 데드락은 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만을 기다리며 작업을 더이상 수행하지 않는 상태를 의미한다. 교착상태가 발생하는 조건은 여러가지가 있는데 아래와 같다. 상호 배제(mutual exclusion): 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원이어야 한다. 배타적인 자원은 임계구역으로 보호되기 때문에 다른 프로세스가 동시에 사용할 수 없다. 따라서 배타적인 자원을 사용하면 교착 상태가 발생한다. 비선점(non-preemption): 한 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는 비선..
전체 글
안녕하세요. 사진과 철학에 관심이 많은 웹 프론트엔드 개발자 오원종입니다. 시간이 지나도 꾸준히 읽힐 수 있는 글을 쓰고 싶습니다. 재미있는 일만 하면서 살고 있는 사람입니다.오늘은 제가 좋아하는 밀맥주를 들고 찾아왔습니다. ㅎㅎ 폴란드 맥주는 개인적으로 처음 마셔보는데요. (많이 마셨지만 모르는 것 일수도..) 칼스버그 그룹에 속해 있고 Abbey 양조장에서 만든 그림버겐 블랑쉬(Grimbergen Blanche)를 여러분께 소개해 드릴까 해요! 그림버겐 블랑쉬는 1128년 벨기에 그림버겐 지역의 Norbertine 수도원에서 양조된 맥주에서 유래가 시작합니다. 수 세기 동안 프랑스 침공 등의 이유로 중간중간 맥주 생산이 중단되는 시기도 있었지만 1958년 다시 그림버겐 브랜드의 맥주는 제조되기 시작했습니다. 현재는 프랑스와 벨기에에서 생산을 하고 있으며, 칼스버그 그룹 소속의 맥주라고 해요. 그림버겐 블랑쉬는 벨지안 화이트 에일로 벨기에식 밀맥주입니다. 도수는 6.0%로 ..
오늘 살펴볼 문제는 백준 1655번 문제이다. https://www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 수빈이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 수빈이가 외치는 정수가 차례대로 주어진다. 정수는 -10,000보다 크거나 같고, 10,000보다 작거나 같다. www.acmicpc.net 나는 처음에 이 문제를 정말 단순하게 직관적으로 접근했었다. N개의 입력값을 받아서 하나씩 ArrayList에 받고 그 때마다 정렬을 한 뒤 i/2 번째 원소를 찾아서 출력하면 되지 않나? 라고 접근해서 풀었고 시간초과가 나왔다. 이는 당연한게 시간 복잡도가 O(N*N*logN)..
오늘은 자바스크립트에서 많은 개발자들이 헷갈려하는 this 키워드에 대해서 확실하게 짚고 가보려고 한다. 많은 개발자들은 this를 다음 두 가지 의미로 많이 생각한다. 함수 그 자체를 가리킴 함수의 스코프(scope)를 가리킴 결론적으로 둘 다 올바른 의미로 이해한 것은 아니다. 하나씩 설명해 보려고 한다, 자기 자신으로의 this 함수가 내부에서 자기 자신을 가리킬 일이 언제 있을까? 재귀 로직이 들어가는 경우도 있고 최초 호출 시 이벤트에 바인딩 된 함수 자신을 언바인딩 할 때도 자기 참조가 필요하다. 아래의 코드는 함수가 this로 자기 참조를 할 수 없다는 것을 보여주는 예제이다. foo.count = 0을 하면 foo라는 함수 객체에 count 프로퍼티가 추가된다. 하지만 this.count에..
이번 포스팅을 시작으로 도커를 처음 시작하는 사람이 알아야 할 내용 및 실습 방법에 대한 포스팅을 해 보려고 한다. 도커란 무엇인가? 도커는 컨테이너형 가상화 기술을 구현하기 위한 상주 어플리케이션과 이 어플리케이션을 조작하기 위한 명령행 도구로 구성되는 프로덕트이다. 어플리케이션 배포에 특화되어 있기 때문에 어플리케이션 개발 및 운영을 컨테이너 중심으로 할 수 있다. 웹 어플리케이션을 개발한다고 가정해 보자. 로컬에 Apache나 Nginx 같은 웹 서버를 구축한다고 생각해 보자. 가상 환경에 운영 환경과 같은 운영 체제를 설치하고 환경 구축 작업을 해야 한다. 이 때 로컬 환경에 도커만 설치하면 몇 줄짜리 구성 파일과 명령어 한 줄로 어플리케이션이나 미들웨어가 이미 갖추어진 테스트용 가상환경(도커 컨..
오늘은 타입스크립트 모듈(modules)에 대해 공부했던 내용을 정리해 보려고 한다. 모듈 모듈은 독립 가능한 기능의 단위이다. 여러 모듈을 결합하면 하나의 프로그램을 만들 수 있는데, 모듈을 사용하면 다음과 같은 장점이 있다. 유지 보수의 용이성 : 중복 코드의 최소화 전역 스코프 오염을 방지 : 이름 공간이 파일 단위로 제한되어 전역 이름 공간을 침범하지 않음 재사용성 향상 : 모듈을 다른 프로젝트에 공유하여 재사용 가능 모듈러 프로그래밍(modular programming)은 프로그램의 설계 기술로 모듈의 분리와 손쉬운 교체를 중심으로 설계한다. 모듈러 프로그래밍은 다음 세 단계를 통해 진행된다. 모듈을 식별함 : 공통 기능이 무엇인지, 다만 설계와 분석만 가지고는 어려움 모듈을 분리해 선언함 : ..
오늘은 동기화를 공부한 내용에 대해서 정리 해 보려고 한다. 프로세스 간 통신 프로세스는 시스템 내에서 독립적으로 실행 되기도 하고, 데이터를 주고받으며 협업하기도 한다. 프로세스가 다른 프로세스와 데이터를 주고받는 프로세스간 통신(IPC)에는 같은 컴퓨터 내에 있는 프로세스 뿐만 아니라 네트워크로 연결된 다른 컴퓨터에 있는 프로세스와의 통신도 포함된다. 프로세스간 통신에는 크게 세 가지가 있다. 프로세스 내부 데이터 통신 하나의 프로세스 내에 2개 이상의 스레드가 존재하는 경우의 통신이다. 프로세스 내부의 스레드는 전역 변수나 파일을 이용하여 데이터를 주고받는다. 전역 변수를 이용한 통신 : 전역 변수를 이용한 통신은 공동으로 관리하는 메모리를 사용하여 데이터를 주고 받는 것이다. 데이터를 보내는 쪽에..
오늘은 여름에 바닷가에서 마시기 좋은 맥주를 소개할까 합니다. 코아 브루어리에서 만든 빅웨이브 골든에일 맥주에요. 기본적으로 표지에서도 알 수 있듯이 더운 여름날 서핑 하고 가볍게 마실 수 있게 만든 맥주입니다. 골든 '에일' 이긴 하나, 빅 웨이브는 라거에 가까운 에일로 보아야 할 것 같아요. 골든 에일은 효모의 특징을 남기지 않고 깔끔하게 발효되는 효모를 사용하고 골든 에일 답게 진한 단 맛과 색을 낼 수 있는 카라멜 맥아의 비율을 줄이며 홉의 쓴 맛 보다는 향이나 고유의 맛에 중점을 둔 도수가 그리 높지 않은(4.4%) 맥주입니다. 과일 향이 살짝 나긴 합니다. 다만 그 정도가 과하지 않아서 맥주를 처음 접하시는 분들도 부담이 없어 보여요. 거품이나 탄산도 막 엄청 감탄이 나올 만큼(?) 많은 건 ..