목록전체 글 (531)
개발놀이터
Q. 데이터베이스 인덱스에 대해서 설명해주세요. A. 기존 DBMS는 검색을 하기 위해서는 풀 스캔을 통해 검색에 대한 결과를 반환했습니다. 이는 효율적인 방식이 아니기 때문에 고대 개발자들은 데이터를 정렬한 후 이진 탐색 트리를 활용하여 데이터를 쉽게 반환할 수 있었습니다. 이렇게 정렬된 데이터들을 인덱스라고 부릅니다. 인덱스의 장점은 검색성능의 압도적인 향상입니다. 이는 데이터 수가 많으면 많을 수록 좋은 성능을 보여줍니다. 단점으로는 삽입, 수정, 삭제 연산을 수행할 때 인덱스도 데이터 일관성을 위해 삽입, 수정, 삭제의 작업을 해줘야하고 이때 성능상 불이익을 받을 수 있습니다. 또한, 인덱스를 저장하기위해 데이터베이스의 10퍼센트 정도 되는 데이터 공간이 필요한 것이 단점이 될 수 있습니다.
Q. 프로세스 동기화에 대해 설명해주세요. A. 프로세스 동기화는 다중 프로세스 환경에서 공유자원에 하나의 프로세스만 접근가능하도록 하는 것입니다. 프로세스 동기화를 하지 않으면 데이터의 일관성이 깨지기 때문에 연산결과가 잘못 반환될 가능성이 존재하므로 주의해야합니다. 각 프로세스에는 Critical Section이라고 부르는 임계구역이 존재합니다. 한 프로세스가 자신의 임계구역에서 작업하는 동안에는 다른 프로세스가 그들의 임계구역에 들어갈 수 없습니다. 임계구역에 접근한는 것을 제어하기 위해 세마포어, 뮤텍스와 같은 매커니즘을 사용합니다. 이런 임계구역 문제는 여러 프로세스나 스레드가 동기화 매커니즘 없이 자원에 접근하려는 상황인 race condition을 막을 수 있는 해결책이 됩니다. 임계구역 문..
작년 12월쯤에 데이터베이스 인덱스에 관한 포스팅을 진행한 적이 있습니다. 하지만 그때 당시 제대로 된 문서를 찾아보고 포스팅을 한 것이 아니라 다른 분들이 블로그에 올리신걸 짜집기 해서 적은 것이라 내용이 많이 부실합니다. 이번 포스팅에서는 이전 인덱스에 관한 내용을 리뉴얼하는 과정을 거칠 것이고 그렇기 때문에 이번 포스팅은 꽤나 알차게 작성할 예정입니다. 각설하고 시작해보죠 인덱스 우선 이런 데이터가 있다고 가정해봅시다. 이 상태에서 점수가 30점인 학생을 찾고 싶습니다. SQL문 SELECT 어쩌구 해서 만들겠죠? SQL문을 그렇게 만들면 데이터를 가져올겁니다. 하지만 기존 DBMS는 데이터를 검색할 때 모든 데이터를 다 뒤져서 가져옵니다. 점수가 30점인 학생을 찾기 위해서 다섯개의 레코드를 다 ..
이번 시간에는 프로세스 동기화에 대해서 알아보도록 하겠습니다. 프로세스 동기화란 OS에서 같은 메모리 공간을 공유하고 있는 프로세스들을 관리하기위한 방법입니다. 프로세스 동기화를 진행하게 되면 변수를 사용함으로써 데이터의 일관성을 유지하는데 도움이 됩니다. 프로세스 동기화를 하기위해 여러가지 방법이 있는데 이번 시간에 semaphore (이하 세마포어), mutex lock (이하 뮤텍스 락), hardware synchronization (이하 하드웨어 동기화)를 알아봅니다. 프로세스 동기화란? OS는 컴퓨터에서 모든 애플리케이션을 관리하는 소프트웨어이고 기본적으로 우리 컴퓨터에서 부드럽게 동작하는 것을 도와줍니다. 이러한 이유때문에 OS는 많은 일을 수행할 수 밖에 없습니다. 때로는 동시에 일을 수행..
suspend : 일시중단 resume : 다시시작 coincide : 일치(하다) / 동시 circute : 순환 ceiling : 천장
Q. Thread-safe에 대한 정의와 구현방법에 대해서 설명해주세요. A. 두개 이상의 스레드가 같은 객체에 접근해도 연산결과의 정합성이 보장될 수 있게끔 메모리 가시성이 확보된 상태를 말합니다. Thread-safe를 구현하기 위해서는 불변 객체를 사용하거나, java.util.concurrent 클래스를 사용하거나, ThreadLocal을 사용하거나, synchronized 키워드를 사용하거나, final 변수를 사용해야 합니다.
동시성 문제와 Thread-safe를 고민하는 것은 개발자로서 정말 중요한 과제라고 생각됩니다. 서비스가 커지면 커질수록 멀티스레딩이 절실히 필요해질텐데 성능을 위해 멀티스레딩을 강요받았지만 동시성문제로 버그가 생겨버리면 참 골치아플 것 같습니다. 이번 시간에는 동시성문제와 Thread-safe 그리고 자바에선 어떻게하면 동시성문제를 해결할 수 있는지까지 알아봅니다. 동시성문제 동시성문제가 발생하는 코드는 한눈에 봐서는 알아차리기 쉽지 않습니다. 차라리 동시성문제가 발생하는 패턴을 외워두고 있다가 해당 패턴이 나오면 해결하는 것이 더 타당해보일 정도로 정말 알기 쉽지않습니다. 저는 프로젝트를 할 때 동시성문제에 대해 진지하게 고민하고 코드를 짜본 적은 없지만 어떤 상황이 동시성 문제가 발생하는지는 대강 ..
Q. 멀티스레드 프로그래밍에 대해서 설명해주세요. A. 멀티스레딩은 하나의 프로세스에서 여러개의 스레드를 만들어 자원의 생성과 관리의 중복을 최소화하는 것을 말합니다. 멀티스레딩의 장점은 멀티프로세싱에 비해 메모리 자원소모가 적고 힙 영역을 통해서 스레드간 통신이 가능해서 프로세스간 통신보다 간단하다는 점이 있고 단점은 힙 영역에 있는 자원을 사용할 때는 동기화를 해야하고 이때 락을 과하게 사용하면 성능이 저하될 수 있다는 점입니다.
Q. 프로세스와 스레드의 차이에 대해서 설명해주세요. A. 프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이고 스레드는 프로세스 내에서 실행되는 여러 흐름의 단위입니다. 각각의 프로세스는 고유한 주소와 메모리 공간이 부여되고 독립적입니다. 반면에 스레드는 부모 프로세스에서 자원을 공유하기 때문에 논리적으로 연결되어 있습니다. 즉, 스레드는 프로세스 안에 포함된 개념이며 스레드는 경량화된 프로세스라고 볼 수 있습니다. Q. Context Switching에 대해서 설명해주세요. A. Context Switching은 동작 중인 프로세스가 대기하면서 해당 프로세스의 상태를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업을 말합니다. 보..
fragment : 단편적인 instruction : 설명 / 컴퓨터 프로세서가 이해할 수 있는 일련의 코드들 intensive : 강한 / 격렬한 resume : 다시 시작하다 The Context switching is a technique or method used by the operating system to switch a process from one state to another to execute its function using CPUs in the system. Context Swithcing은 시스템안에서 CPU를 사용하는 기능을 실행하기위한 하나이상의 상태를 스위칭하는데 필요한 OS에 의해 사용된 기술 혹은 방법이다.