함께 이야기

  1. 사용하시는 언어/프레임워크에서 비동기 처리를 사용할 때 주의해야할 점이 있나요?

  2. 사용하시는 프레임워크에서는 비동기 처리시 스레드 관리는 어떻게 해야하나요?

  3. 동기와 비동기, 블로킹과 넌블로킹의 차이는 무엇인가요?

    동기와 비동기는 작업 완료 여부에 대한 관점이고, 블로킹과 넌블로킹은 호출한 함수가 반환될 때까지 기다리는지 여부에 대한 관점입니다. 동기적인 작업은 블로킹 또는 넌블로킹이 될 수 있으며, 비동기적인 작업은 주로 넌블로킹입니다.

    동기/비동기는 요청한 작업에 대해 완료 여부를 신경 써서 작업을 순차적으로 수행할지 아닌지에 대한 관점이고,블로킹/논블록킹은 단어 그대로 현재 작업이 block(차단, 대기) 되느냐 아니냐에 따라 다른 작업을 수행할 수 있는지에 대한 관점이다.

    블로킹 논블로킹 → 제어권을 넘기는지 안넘기는지 차이. 블로킹은 제어권을 넘기고, 논블로킹은 제어권을 넘기지 않는다.

    Untitled

  4. 쓰레드에서 스택만 별개로 가지는 이유가 무엇인가요?

    함수를 실행하려면 콜 스택이 있어야 하기 때문. 스레드는 각자 다른 작업을 하기 때문에, 매개변수나 지역 변수를 가지려면 스택이 필요하다.

  5. 멀티 쓰레드 환경에서 힙 영역을 공유한다면 생길 수 있는 문제점이 있나요? 있다면 어떻게 해결해야하나요?

    동시성 문제 발생

  6. 사용하시는 프레임워크에서는 멀티 쓰레드 환경에서 쓰레드가 부족하면 어떻게 되나요?

    스레드풀에 대기 큐 쌓이게 됩니다 → 메모리 부족 성능 저하

  7. 쓰레드를 너무 많이 생성하면 어떤 일이 발생할까요?

    컨텍스트 스위칭 오버헤드

    OOM 발생 가능

  8. 멀티 프로세싱과 멀티 프로그래밍의 차이는?

    멀티 프로세싱은 여러 개의 프로세서가 독립적으로 다수의 프로세스를 동시에 처리하는 것이고, 멀티프로그래밍은 단일 프로세서가 여러 프로세스를 번갈아가며 처리하는 것입니다.

  9. 프로세스 혹은 스레드의 동기화란 무엇인가요?

    여러 프로세스 또는 스레드 간에 실행 순서나 자원 접근 등을 조절하여 같은 자원에 접근할 때 발생하는 문제를 방지하는 기법.

  10. 도커 컨테이너들은 도커엔진을 공유하는데 그렇다면 도커엔진에 문제가 생긴다면 컨테이너들은 모두 종료되나요?

    도커 엔진에 OS에서 자원을 받음 도커 엔진에 문제가 생기면 모든 컨테이너가 종료될 가능성 있음

  11. 도커를 사용하는 이유는 무엇이고 사용해봤다면 그 장점을 설명해주세요.

    서버 배포 편의성, 일관된 환경에서 실행 가능

  12. 도커 동작 원리에 대해서 설명해주세요.

  13. 도커와 VM의 차이점에 대해 설명해 주세요

    가상화가 등장하기 전에는 서버 하나에 하나의 어플리케이션만 구동시켰습니다. 자원을 효율적으로 이용하기 위해 하이퍼바이저 기반의 가상화 기술들이 등장했고 논리적으로 분할된 공간에서 VM이라는 독립된 가상 환경을 만들고 호스트 시스템에서 VM에 설치된 Guest OS를 구동, 모니터링 하였습니다.

    도커와 VM의 차이점은 Guest OS의 유무입니다. 도커는 Guest OS를 설치하지 않으므로 자원을 더욱 효율적으로 사용할 수 있습니다. VM이 하나씩 증가할 때마다 OS를 위한 자원을 할당해 주는 반면 도커는 어플리케이션을 구동하기 위한 패키지만 있으면 컨테이너를 구동할 수 있습니다.

    Docker: 가볍고 성능 좋은 것, 커널에 취약점이 있으면 도커에도 그대로 전파 VM: 격리수준이 높아서 보안적인 측면

  14. 만약 API 서버에서 스레드 풀에 있는 모든 스레드가 사용 중이고, 새로운 api 요청에 대해서 응답이 제대로 오지 않는 상황이라고 가정해보자. 이 상황에서 어떻게 이 문제에 접근하실 건가요?

    api 서버에 접근해서 thread dump를 떠서 확인한다. 만약 대부분의 스레드 상태가 block/waiting 이라면 데드락이 발생했을 수 있다. 스레드 덤프를 통해서 어떤 부분이 문제인지 병목이 어디서 발생하는지 확인한다.

  15. 힙 메모리 공간을 어느정도로 잡아야 하나?

  16. 메모리 힙 영역을 너무 크게 잡으면 어떻게 되나?