목록전체 글 (518)
개발놀이터
다음 프로젝트를 기획하면서 Redis를 사용해봐야겠다는 생각을 하게 되었습니다. 기존 이론적으로 알고 있었던 내용으로는 Redis가 캐싱이나 세션 데이터 저장소로서 사용된다는 것은 알고 있었지만 실제 어떻게 사용하는지 그 이외의 사용처는 무엇이 있는지에 대해서 공부가 부족해 조금 알아보게 되었습니다. 이번 공부는 특별히 요즘 핫한 Open AI의 Chat GPT 3.5 버전을 이용해 공부를 진행했습니다. 하지만 어디까지나 생성형 대화 AI인만큼 정보가 정확한지에대한 더블체크를 진행했으니 정보의 신뢰성은 걱정하지 않으셔도 될 것 같습니다. 때문에 이번 포스팅의 출처에는 제가 정보를 얻은 출처가 아닌 더블체크에 사용된 출처가 기입될 예정이니 참고해주시면 감사하겠습니다. 또한, GPT를 이용해 얻은 정보들은 ..
Q. 뮤텍스와 세마포어의 차이점에 대해서 설명해주세요. A. 뮤텍스는 Locking 매커니즘이고 세마포어는 Signaling 매커니즘입니다. 이 둘은 식당에 있는 화장실 예시로 설명할 수 있습니다. 이 화장실 예제에서 사람은 프로세스 혹은 스레드로, 화장실은 자원으로 묘사됩니다. 뮤텍스는 식당에 화장실이 한개이고 열쇠도 한개인 경우입니다. 화장실에 가고싶으면 열쇠를 획득해야하고 만약 이미 화장실에 사람이 있다면 열쇠를 획득할 때 까지 기다려야합니다. 세마포어는 화장실이 여러개이고 화장실 밖에 전광판이 있는 경우입니다. 만약 화장실이 세개라면 전광판에는 3이라는 숫자가 적혀있고 누군가 화장실에 들어가면 전광판의 숫자가 2로 줄어듭니다. 화장실에 들어간 사람이 화장실을 나온 경우 숫자는 다시 3으로 바뀌게 ..
프로세스 동기화에 대한 면접질문을 외우다가 문득 생각이 들었습니다. "Critical Section (이하 임계구역) 에 접근하는 것을 제어하기 위해 세마포어나 뮤텍스를 사용합니다." 라는 문장에서 세마포어가 뭐지? 뮤텍스는? 원래 이런 궁금증이 생기진 않았습니다. 하지만 문득 들더군요. 저것에 대한 꼬리질문이 나올 수도 있겠다는 생각이말이죠. 때문에 오늘 포스팅에선 세마포어와 뮤텍스에 대해서 알아보도록 하겠습니다. 세마포어와 뮤텍스 우선 결론부터 말해보겠습니다. 뮤텍스는 락을 걸어서 임계구역으로의 접근을 막는 매커니즘을 가지고 있습니다. 우리가 자바에서 흔히 사용하던 synchronized 키워드가 바로 뮤텍스입니다. 세마포어는 신호를 주고받아서 임계구역으로의 접근을 막는 매커니즘을 가지고 있습니다. ..
abort : 중단 preemption : 선점 Resources are taken one by one from a process and assigned to higher priority processes until the deadlock is resolved. 교착 상태가 해결될 때까지 프로세스에서 리소스를 하나씩 가져와 우선순위가 높은 프로세스에 할당합니다.
Q. 교착상태와 기아상태에 대해서 설명하고 해결방안에 대해서 설명해주세요. A. 교착상태는 서로 다른 프로세스가 서로 점유하고 있는 자원의 반납을 대기하고 있는 상태를 말합니다. 교착상태가 발생하기 위해서는 한번에 한 프로세스만 자원을 사용할 수 있는 상호 배제, 할당된 자원을 가진 상태에서 다른 자원을 기다리는 점유 대기, 다른 프로세스가 자원의 사용을 끝날 때 까지 자원을 뺏을 수 없는 비선점, 각 프로세스가 순환적으로 다음 프로세스를 요구하는 자원을 가지고 있는 상태인 순환 대기가 모두 만족하는 경우 발생합니다. 이를 해결하기 위해서는 앞선 네가지 조건 중 하나라도 만족하지 않도록 설계하거나, 알고리즘을 통해 교착상태가 발생하지 않도록 하는 방법을 사용하거나, 교착상태를 감지하고 회복하거나, 시스템..
잘 기억은 안나지만 2022년 여름 주말이었는데 지인들끼리 다같이 모여서 쿠팡이츠로 점심을 시켜먹으려고 했는데 서버가 내려가 주문이 안된 사태가 있었습니다. 여자친구가 당시 쿠팡이츠에서 일하고 있었고 사내톡으로 해당 문제가 교착상태 (DeadLock) 때문에 발생한 문제라고 판단하고 이내 두시간정도에 걸쳐서 문제를 해결했던 일이 생각납니다. 가장 매출이 잘 나오는 주말 점심에 이런 일이 터졌기 때문에 고객들은 부정적인 고객경험과 경쟁사에 고객을 뺏기는 상황이 발생했죠. 이처럼 데드락, 교착상태는 서비스를 운영함에 있어서 큰 문제가 될 수 있는 상황입니다. 오늘 시간에는 교착상태에 대해서 알아보고 왜 교착상태가 일어나는지, 해결하려면 어떻게 해야하는지에 대해서 알아보도록 하겠습니다. 교착상태 교착상태 (이..
serves as : ~의 역할을 하다 retrieve : 검색하다 A non-leaf node's number of keys is one less than the number of its children. 리프 노드가 아닌 노드의 키 개수는 자식노드의 키 개수보다 하나 더 적습니다.
Q. 데이터베이스 인덱스에 대해서 설명해주세요. A. 기존 DBMS는 검색을 하기 위해서는 풀 스캔을 통해 검색에 대한 결과를 반환했습니다. 이는 효율적인 방식이 아니기 때문에 고대 개발자들은 데이터를 정렬한 후 이진 탐색 트리를 활용하여 데이터를 쉽게 반환할 수 있었습니다. 이렇게 정렬된 데이터들을 인덱스라고 부릅니다. 인덱스의 장점은 검색성능의 압도적인 향상입니다. 이는 데이터 수가 많으면 많을 수록 좋은 성능을 보여줍니다. 단점으로는 삽입, 수정, 삭제 연산을 수행할 때 인덱스도 데이터 일관성을 위해 삽입, 수정, 삭제의 작업을 해줘야하고 이때 성능상 불이익을 받을 수 있습니다. 또한, 인덱스를 저장하기위해 데이터베이스의 10퍼센트 정도 되는 데이터 공간이 필요한 것이 단점이 될 수 있습니다.
Q. 프로세스 동기화에 대해 설명해주세요. A. 프로세스 동기화는 다중 프로세스 환경에서 공유자원에 하나의 프로세스만 접근가능하도록 하는 것입니다. 프로세스 동기화를 하지 않으면 데이터의 일관성이 깨지기 때문에 연산결과가 잘못 반환될 가능성이 존재하므로 주의해야합니다. 각 프로세스에는 Critical Section이라고 부르는 임계구역이 존재합니다. 한 프로세스가 자신의 임계구역에서 작업하는 동안에는 다른 프로세스가 그들의 임계구역에 들어갈 수 없습니다. 임계구역에 접근한는 것을 제어하기 위해 세마포어, 뮤텍스와 같은 매커니즘을 사용합니다. 이런 임계구역 문제는 여러 프로세스나 스레드가 동기화 매커니즘 없이 자원에 접근하려는 상황인 race condition을 막을 수 있는 해결책이 됩니다. 임계구역 문..
작년 12월쯤에 데이터베이스 인덱스에 관한 포스팅을 진행한 적이 있습니다. 하지만 그때 당시 제대로 된 문서를 찾아보고 포스팅을 한 것이 아니라 다른 분들이 블로그에 올리신걸 짜집기 해서 적은 것이라 내용이 많이 부실합니다. 이번 포스팅에서는 이전 인덱스에 관한 내용을 리뉴얼하는 과정을 거칠 것이고 그렇기 때문에 이번 포스팅은 꽤나 알차게 작성할 예정입니다. 각설하고 시작해보죠 인덱스 우선 이런 데이터가 있다고 가정해봅시다. 이 상태에서 점수가 30점인 학생을 찾고 싶습니다. SQL문 SELECT 어쩌구 해서 만들겠죠? SQL문을 그렇게 만들면 데이터를 가져올겁니다. 하지만 기존 DBMS는 데이터를 검색할 때 모든 데이터를 다 뒤져서 가져옵니다. 점수가 30점인 학생을 찾기 위해서 다섯개의 레코드를 다 ..