본문 바로가기

전체 글

(30)
마인크래프트 서버 운영기 이 나이 먹고 말하기 조금 부끄러운 얘기지만.. 난 마인크래프트를 아주 좋아한다.어릴땐 마크가 초딩겜 아니냐면서 쳐다도 안 봤는데 나이 지긋해져서 해보니 아니 내가 왜 이 갓겜을 안 했지? 하는 생각이 들정도로 정말 잘 만든 게임인 것이다. 그리고 재미를 떠나서도 창의력과 사고력 발달에 도움이 될만한 요소들도 정말 많아서, 나는 나중에 자식이 생기면 꼭 마크를 시켜볼 생각을 하고있다ㅋㅋ 아무튼 내가 마인크래프트 서버를 운영하게 된 건, 일단 친구들과 마크를 같이 하고 싶은데 마크의 독특한 멀티플레이 시스템덕에 멀티플레이를 하려면 플레이어가 직접 서버를 구축해야하기 때문이었다. 그게 안 된다면 공개서버에서 여러명의 유저와 함께 플레이해야하는데, 나는 친구들과만 하고 싶었고, 이런 작업을 할 가장 적합한 사..
2023년 회고 취업한지가 엊그제 같은데, 어느새 23년이 훌쩍 지나가버렸다. 올해는 지난해의 고통과 좌절의 시간들을 거름삼아 꾸준히 성장하는 해가 되자고 다짐했었는데, 평화로운 나날들에 다소 안주했던 기간도 꽤 되는 것 같아 조금 아쉬움이 남는다. 하지만 이런 마음을 생각만으로 흘려 보내면 아쉬움은 계속해서 되풀이되겠지. 올해도 역시 회고를 통해 반성하고 다잡는 시간을 가져보고자 한다. 올 한 해는 얼마나 성장하는 삶을 살았을까? 하나씩 되짚어봐야겠다. 회사 업무 다소 오래된 기술들을 다루던 이전의 솔루션 회사에서 B2C 서비스 회사로의 이직을 한 직후였기에, 내가 담당하게될 업무에 대한 기대감이 상당히 컸었다. 우리 회사 서비스가 네이버같은 대형 포털에 비할 바는 아니지만, 그래도 몇 안 되는 국내 포털 서비스 3사..
[Elasticsearch] master not discovered yet 문제 사내에서 이번 AI프로젝트를 하면서 겪은, 역대급으로 가장 원인을 찾기 힘들었던 문제를 정리해보고자 한다. 내가 여태 정말 어려운 문제를 안 만나봤던 걸수도 있지만, 웬만한 문제들은 대부분 당일에 해결이 됐었는데 이번 문제는 하루 종일 매달려도 도저히 답이 나오지 않았고, 다음날도 반나절 정도를 해매고서야 해결을 한 문제라 그냥 잊어버리기엔 아쉬워 기록을 남기려고 한다. 당시 진행 상황 먼저 당시 개발 상황을 간단하게 요약하자면, 키워드 유사성 검색과 비슷한 개념인 KNN Search를 진행해줄 Vector DB로 오픈소스인 ChromaDB를 사용하여 개발하다가, 각 document에 delete query를 날리거나 collection 자체를 삭제해도 삭제는 진행되지만 용량이 줄어들지 않는 치명적인 버..
JSCODE 운영체제 모의 면접 스터디 회고 스터디 참여 계기 이제 4년차 개발자가 된 나였지만, 비전공으로 시작해서 실무와 관련된 기술 위주로 계속 학습을 해왔던 나는 꾸준히 컴퓨터 공학 베이스 지식에 대한 필요성을 느끼고 있었다. 그 중에서도 특히 운영체제는 개발과 직접적으로 연관되는 부분이 많지가 않아 실무 중에서도 운영체제 개념을 찾아볼 일은 잘 없었고, 그래서 DB, Network, 자료구조/알고리즘 등에 비해 연차가 쌓여도 운영체제에 대한 이해도가 쌓이는 느낌은 없었기에 기회가 되면 한번 각잡고 공부를 해봐야겠다고 생각했다. 하지만 운영체제는 막연히 재미없고 어렵다라는 인식이 있었기 때문에 기왕 공부를 할 것이라면 스터디를 통해서 학습의 강제성도 어느 정도 부여하고 타인들과의 교류를 통해서 좀 더 재밌게 하고 싶었기 때문에 관련 스터디를..
운영체제 스터디 5주차 메모리 관리(Memory Management) 운영체제에서 프로그램을 실행하면 해당 프로그램의 데이터는 메모리(RAM)에 로드된다. 이 때 메모리 공간은 한정적이기 때문에, 어떤 데이터를 메모리에 올릴지, 각 프로그램의 메모리 주소를 어떻게 구분할지, 어떤 프로그램에게 더 많은 공간을 줄지 등등 수많은 고려사항이 필요하다. 운영체제는 이러한 메모리 관리를 자동적으로 수행하는 다양한 기법을 갖고 있으며, 그 덕분에 사용자는 메모리에 신경을 쓰지 않고 편하게 컴퓨터를 이용할 수 있게 되는 것이다. 이러한 메모리 관리 기법에는 어떤 것들이 있는지 하나씩 알아보자. 주소바인딩 프로그램이 메모리에 적재되면 그 프로그램만의 독자적인 주소 공간이 생성된다. 이 주소 공간을 논리적 주소(logical address) ..
운영체제 스터디 4주차 프로세스 동기화 프로세스 동기화란 여러 프로세스가 동시에 같은 자원을 공유하며 실행될 때 자원의 일관성을 유지하는 기법을 의미한다. 여러 프로세스가 같은 자원을 공유하면 메모리를 효율적으로 사용할 수 있다는 장점이 있지만, 공유자원에 대한 삽입, 삭제, 수정 등의 작업이 일어나는 경우 각 프로세스들 간에 같은 자원을 서로 다르게 해석하는 문제(Race Condition)가 발생할 수 있으므로 동기화 작업은 필수라고 할 수 있다. 그리고 현대에는 프로세스간의 동기화 보다는 스레드간의 동기화가 더욱 활발하므로 스레드 동기화라고도 부른다. 경쟁 상태(Race Condition) 경쟁 상태란 여러 프로세스들이 동시에 공유 자원에 접근하는 상황에서, 어떤 순서로 접근하느냐에 따라 결과 값이 달라질 수 있는 상황을..
운영체제 스터디 3주차 CPU 스케줄링 CPU 스케줄링은 CPU사용에 대한 권한을 여러 프로세스들에게 분배하여 효과적인 다중 프로그래밍을 구현할 수 있게 하는 기법이다. CPU 스케줄링의 목적은 CPU를 유휴 상태로 낭비하는 시간 없이 최대로 활용하여 다중 프로세스의 처리를 효율적으로 수행할 수 있도록 하는 것이다. 프로세스 스케줄링 과정 프로세스는 실행되면 종료되기 전까지 준비 상태, 실행 상태, 대기 상태를 전환하며 작업을 수행한다. 준비 상태 CPU를 할당 받기 위해 준비 큐에서 스케줄러의 선택을 기다리는 상태 준비 큐는 반드시 FIFO 입출력 구조가 아닌 알고리즘에 따라 여러 방식으로 구현된다 일반적으로 메모리에 적재되어 있고 실행 가능한 상태의 프로세스들이 준비 상태에 있는다. 실행 상태 CPU를 할당 받아 실제 코드..
운영체제 스터디 2주차 프로그램, 프로세스, 스레드 1. 프로그램(Program)이란? 프로그램은 어떤 작업을 수행하기 위해 개발자가 프로그래밍 언어를 통해 작성한 코드들의 집합을 실행 가능한 형태로 변환해 디스크에 적재한 정적인 파일이다. 윈도우의 경우 우리가 익히 아는 .exe파일이 대표적이며, 자바의 빌드 파일인 jar나, 배치파일인 bat등도 프로그램으로 볼 수 있다. 또한 우리가 직접 실행하지는 않더라도 운영체제가 스스로 실행하는 여러 시스템 프로그램들도 존재한다. 프로그램의 실행 이런 프로그램을 실행한다는 것은 크게 두가지 의미를 갖는다. 첫째는 디스크에 존재하던 실행파일을 메모리에 적재한다는 의미이고, 둘째는 프로그램이 명령을 수행하기위해 CPU를 할당받는다는 뜻이다. 그리고 이렇게 실행되어 수행중인 단위를 프로세..