면접 예상 질문

KangWook·2025년 1월 8일
0
  • 개인별 맞춤 질문
    1. MSA와 모놀리틱의 차이점은 무엇이라고 생각하는가?
      MSA는 기능별로 독립적인 마이크로 서비스로 분리되어 유연한 배포 및 확장성을 가지고
      모놀리식은 단일 코드베이스로 관리 되어 구조는 단순하지만 변경시 전체 배포가 필요
    2. Spring Batch란 무엇이고 왜 사용했는가?
      대규모 데이터 처리와 배치작업을 효율적으로 관리하기 위한것으로 데이터 마이그레이션이나
      대량 데이터 처리에 사용됨
    3. 경쟁 상태와 교착상태에 대해서 설명해주세요.
      경쟁상태는 자원접근 순서에 따라 결과가 달라지는 것이고
      교착 상태는 두개의 프로세스가 자원을 서로 대기하며 멈추는 상태입니다
    4. 동시성 문제란 무엇이고 어떻게 해결할 수 있는가?
      동시성 문제는 다수의 프로세스가 공유자원에 동시에 접근할때 발생하는 문제 이고
      동기화 및 락 , 트랜잭션 관리 등으로 해결 합니다.
    5. DB의 인덱스란 무엇이고 복합 인덱스와 커버링 인덱스가 무엇인지 설명해주세요.
      DB인덱스는 데이터를 빠르게 조회하기위한 자료구조
      복합인덱스는 여러컬럼을 조합한 인덱스
      커버링 인덱스는 인덱스 만으로 데이터를 조회하는 방식
    6. N+1 문제가 발생하는 이유는?
      N+1은 데이터 조회시 부모 데이터 1번과 자식데이터 N번 추가 조회하면서 발생하는 것
    7. MSA의 트랜잭션 전략은 어떻게 수립할 수 있는가?
      MSA 환경에서 SAGA 패턴이나 OutBox패턴 같은 보상 트랜잭션이나 2PC 같은 분산 트랜잭션 관리 방식을 사용
    8. MSA에서 왜? Config Server를 사용해야 할까요?
      MSA 환경에서 각 서비스의 설정을 중앙에서 관리 해 일관성과 유지보수를 높일수 있기때문입니다
    9. MSA 환경에서 Message Bus(Kafka) 서비스가 Down되는 경우, 어떻게 조치를 취할 수 있고, 어떻게 대비해야하는가?
      DLQ를 설정 또는 DLQ를 데이터베이스에 저장 및 클러스터 구성 및 모니터링으로 대비
    10. Bean과 IoC에 대해서 설명해주세요.
      bean은 스프링 컨테이너가 관리하는 객체이고 Ioc는 객체의 생성과 생명주기를 컨테이너가 관리는 개념
    11. Spring Boot의 DispatcherServlet에 대해서 설명해주세요.
      클라이언트 요청을 받고 컨트롤러고 전달해 응답을 처리하는 스프링 핵심 프론트 컨트롤러
    12. filter, interceptor, aop에 대해서 설명해주세요.
      fileter는 요청 전후의 웹 필터링 interceptor는 컨트롤러 호출 전후 처리 AOP는 비지니스 로직 외부의 부가 가능을 처리합니다
    13. 트랜잭션이란 무엇이고 ACID 특징에 대해서 설명해주세요.
      트랜잭션의 작업의 논리적 단위 , ACID는 트랜잭션의 원자성 일관성 고립성 지속성을 의미
    14. JWT란 무엇이고 어떻게 동작하는가?
      JWT는 Json기반의 토큰으로 인정 정보를 저장하며 서명된 토큰을 통해 인증 권한을 검증
    15. VM과 컨테이너의 차이점에 대해서 아는가?
      VM은 하드웨어를 가상화 하고 컨테이너는 OS를 공유해 경량화된 환경에서 애플리케이션을 실행
    16. TCP/UDP에 대해서 설명해주세요.
      TCP는 신뢰성있는 데이터 전송을 보장 UDP는 빠른 전송이 필요한 상황에서 사용
    17. Redis에서 원자적 처리에 대해서 설명해주세요.
      Redis는 단일 싱글 스레드로 동작하며 명령 실행이 순차적이여서 원자성을 보장
    18. ORM이란 무엇이고 왜 태어났는가?
      ORM은 객체와 RDB를 매핑하여 SQL을 자동으로 생성해 개발의 생산성을 높이기 위해 탄생
    19. 스프링 배치에서 멱등성이란 무엇을 의미하는가?
      멱등성은 동일 데ㅐ이터를 여러번 처리를 해도 결과가 변하지 않음을 의미
    20. Spring Batch에서 트랜잭션 관리를 왜 청크 단위로 하는가?
      청크 단위 처리는 메모리 효율성을 높이고 트랜잭션 롤백 범위를 제한해 성능 과 신뢰성을 높이기 위함
  • 면접 예상 질문

    기술 관련 질문

    • Redis Lua Script를 활용한 원자적 처리를 적용했던 경험을 설명해주세요

      대규모 쿠폰 발급 이벤트에서 수만건의 동시요청 테스트를 진행 햇을때 데드락과 중복발급 문제가 발생
      처음에는 redis 분산락으로 동시성 제어를 했으나 락을 얻고 해제하는데 시간이 소요됨에 따라

      대규모 쿠폰 발급시 그 시간이 증가하게 되어 최적화 하고자 lua script를 사용을 했고

      lua script는 redis 서버에서 단일 트랜잭션으로 실행 대기때문에 race condition을 방지하고
      redis 서버 내에서 실행 되기때문에 락을 얻고 해제하는 시간이 없기때문에
      응답시간이 약 80프로 개선되었습니다

    • kafka를 도입하여 비동기 처리를 구현 했던 프로젝트에서 발생한 주요 장애와 이를 해결한 방법

      쿠폰 발급 및 결제 완료 시에 이메일 알림을 실시간으로 발송 하면서 지연이 발생

      kafka Topic을 생성 하여 발급 이벤트 했고 이메일 알림서비스가 비동기 메세지를 처리하고도록 구현을 했지만
      메세지 소비 속도가 느려지는 문제가 발생

      파티션을 늘리고 컨슈머 스레드를 확장하여 처리 속도를 개선

      발송 지연이 단축되었고 대량 발급 상황에서 안정적인 처리가 가능했습니다.

    • Spring Batch를 사용하여 대용량 데이터 처리 문제를 해결했던 사례를 설명 해주세요

      만료된 쿠폰과 유효기간이 지난 데이터를 정리하면서 데이터 베이스 부하가 증가

      Spring Batch 를 도입하며 chunk 기반으로 데이터를 처리했고

      처음에는 Pageable 를 사용하여 읽어왔지만 데이터를 절반 밖에 읽어 오지못하여

      항상 페이지를 첫번째 즉 0번째부터 읽어오도록 설정을 하여 적은 리소스로 데이터 처리

      그후 zero offset방식으로 맨뒤의 아이디를 읽어와 처리하는 방식으로 처리하여 처리 속도
      데이터 삭제 속도 50% 향상된 경험이 있습니다.

    • API 응답 속도 개선을 위해 Redis를 활용했던 방식을 구체적으로 설명

      자주 조회 되는 데이터를 Redis 캐시에 저장

      데이터 갱신 시 캐시를 동기화 하도록 TTL 설정

      • 평균 API 응답 시간이 40% 단축되었습니다.
      • 캐시 히트율이 높아져 데이터베이스 부하가 크게 감소했습니다.
    • Docker 와 Jenkins를 사용한 CI/CD 구축 경험을 설명

      각 서비스 폴더에 JenkinsFile을 만들어 푸시시 각 서비스 폴더에 변경이 있을때만 
      Docker 이미지를 빌드를 했으며 모노 레포에서도 각각 유연한 배포가 이루어 지도록 설정 
      그후 AWS ECR 에 이미지를 저장하고 각 서비스의 태스크를 정의하고 fargate로 
      Rolling 업데이트를 진행을 했습니다 
      
      ### 

      프로젝트 관련질문

    • "Jari-Otte" 프로젝트에서 가장 도전적이었던 문제는 무엇이었고, 이를 어떻게 해결했나요?

      선착순 쿠폰 발급시 대규모 동시 요청으로 인해 서버 부하가 급격히 증가 했고
      쿠폰 재고 데이터가 충돌
      redis lua 스크립트를 활용하여 쿠폰 재고상태를 원자적으로 제어
      쿠폰 발급시 실시간 이메일 알림을 kafka를 도입하여 예약 이벤트를 비동기적으로 처리
      DB와 분리된 메세징 시스템으로 부하를 분산

    • "Deep-I" 프로젝트에서 데이터를 수집하고 처리하는 로직에서 가장 중요한 부분은 무엇이었나요?

      라즈베리파이로 수집한 데이터를 실시간으로 파싱하고, 데이터 일관성을 보장하는 로직이며
      데이터 수집시 타임스탬프 기반 정렬을 적용해 시간대 간 일관성 유지
      Redis를 사용해 자주 조회되는 데이터를 캐싱하여 데이터 처리속도 향상

    • "Jari-Otte"에서 MSA 아키텍처를 적용하며 배운 점은 무엇인가요?

      서비스 분리의 중요성 동기 비동기 통신 활용 데이터 일관성

    • 쿠폰 발급에서 Redis와 Kafka를 동시에 활용한 이유와 그 결과를 설명해주세요.

      redis 는 쿠폰의 재고 즉 수량을 관리 하기 위해 원자적 연산에 사용을 하였고
      fafka는 쿠폰 발급 이벤트를 메시징 시스템으로 관리를 하여 비동기 알림 및 로그 저장 을 했습니다

    • 사용자 API 설계 및 보안을 강화했던 경험이 있다면 알려주세요.

      JWT 인증 및 redis를 활용해 리프래쉬 토큰을 관리 함으로서 보안을 강화
      사용자 요청 데이터의 유효성을 검증하는 필터를 추가

    • "창 헬스케어"에서 혈압 정보 API 설계 시 고려했던 보안 및 성능 요소는 무엇이었나요?

      인증 권한 관리를 위해 JWT를 사용 
      
      MySQL 인덱스를 최적화 하여 조회 성능 개선 

      CS 관련 질문

  • CS 관련 질문

    1. 자료구조

    배열(Array)와 연결 리스트(Linked List)의 차이점은 무엇인가요?

    "배열은 메모리에 연속적으로 저장되며, 인덱스를 사용하여 O(1) 시간에 접근할 수 있습니다. 하지만 크기가 고정되어 있어 삽입이나 삭제 시 O(n) 시간이 걸리는 단점이 있습니다. 반면, 연결 리스트는 노드와 포인터로 이루어져 있어 메모리가 비연속적이고 삽입/삭제가 빠릅니다. 하지만 순차적으로 접근해야 하므로 O(n) 시간이 걸립니다."

    해시 테이블(Hash Table)의 작동 원리를 설명해주세요. 충돌이 발생하면 어떻게 처리하나요?

    "해시 테이블은 키를 해시 함수로 변환해 특정 인덱스에 값을 저장합니다. 충돌이 발생하면 체이닝 방식으로 같은 인덱스에 연결 리스트로 연결하거나, 오픈 어드레싱 방식으로 비어 있는 공간을 탐색해 저장합니다."

    스택(Stack)과 큐(Queue)의 차이점과 활용 사례를 설명해주세요.

    "스택은 LIFO 구조로, 마지막에 추가된 데이터가 먼저 제거됩니다. 함수 호출 스택이나 뒤로가기 기능에 주로 사용됩니다. 큐는 FIFO 구조로, 먼저 들어온 데이터가 먼저 처리됩니다. 작업 대기열이나 BFS 탐색에서 활용됩니다."

    트리(Tree)와 그래프(Graph)의 차이점은 무엇인가요?

    "트리는 계층적 구조로 루트 노드에서 시작하며, 사이클이 없습니다. 반면, 그래프는 모든 노드가 자유롭게 연결될 수 있으며, 방향성과 사이클이 허용됩니다."

    이진 탐색 트리(Binary Search Tree)의 특징과 삽입, 삭제 과정에 대해 설명해주세요.

    "이진 탐색 트리는 왼쪽 자식 노드는 부모보다 작고, 오른쪽 자식 노드는 부모보다 큰 구조를 가집니다. 삽입 시에는 루트부터 비교하며 적절한 위치에 추가합니다. 삭제 시에는 자식 노드의 개수에 따라 처리 방식이 다릅니다. 자식이 없는 경우 바로 삭제하고, 하나인 경우 부모와 자식을 연결하며, 두 개인 경우 오른쪽 서브트리의 최소값으로 대체합니다."

    2. 알고리즘

    정렬 알고리즘의 시간 복잡도를 비교해주세요. 예를 들어, Quick Sort와 Merge Sort의 차이점은 무엇인가요?

    "Quick Sort는 평균적으로 O(n log n)의 시간 복잡도를 가지며, 메모리를 추가로 사용하지 않는 제자리 정렬입니다. 하지만 최악의 경우 O(n²)까지 느려질 수 있습니다. 반면, Merge Sort는 항상 O(n log n) 시간 복잡도를 가지며 안정적인 정렬입니다. 다만, 추가 메모리가 필요하다는 단점이 있습니다."

    DFS(깊이 우선 탐색)와 BFS(너비 우선 탐색)의 차이점과 활용 사례를 설명해주세요.

    "DFS는 스택을 사용하며, 깊이를 우선으로 탐색합니다. 퍼즐 해결이나 백트래킹에 적합합니다. BFS는 큐를 사용하며, 너비를 우선으로 탐색합니다. 최단 경로를 찾거나 레벨별 탐색이 필요한 경우 유용합니다."

    동적 프로그래밍(Dynamic Programming)이란 무엇인가요? 어떤 문제를 해결할 때 유용한가요?

    "동적 프로그래밍은 중복되는 문제를 해결한 결과를 저장하여 다시 계산하지 않도록 하는 방법입니다. 피보나치 수열, 배낭 문제처럼 하위 문제의 결과를 재활용할 수 있는 문제에서 유용합니다."

    이진 탐색(Binary Search)이 가능한 조건과 시간 복잡도를 설명해주세요.

    "이진 탐색은 데이터가 정렬되어 있어야 사용 가능합니다. 탐색 범위를 절반씩 줄여나가기 때문에 O(log n)의 시간 복잡도를 가집니다."

    캐시(Cache)의 작동 원리와 LRU(Least Recently Used) 알고리즘에 대해 설명해주세요.

    "캐시는 자주 사용하는 데이터를 저장하여 빠르게 접근할 수 있게 해주는 메모리입니다. LRU 알고리즘은 최근에 사용되지 않은 데이터를 먼저 제거하는 방식으로, 해시맵과 이중 연결 리스트를 활용해 구현합니다."

    3. 네트워크

    HTTP와 HTTPS의 차이점은 무엇인가요?

    "HTTP는 평문으로 데이터를 전송하기 때문에 보안에 취약합니다. HTTPS는 TLS/SSL을 사용하여 데이터를 암호화하며, 인증서를 통해 데이터의 신뢰성을 보장합니다."

    RESTful API란 무엇이고, REST의 주요 설계 원칙을 설명해주세요.

    "RESTful API는 자원을 URL로 표현하고, HTTP 메서드(GET, POST, PUT, DELETE)를 사용해 데이터를 처리합니다. REST의 주요 설계 원칙은 클라이언트-서버 구조, 무상태성, 캐시 가능성 등이 있습니다."

    TCP와 UDP의 차이점은 무엇인가요? 각각의 활용 사례를 들어주세요.

    "TCP는 연결 지향적 프로토콜로 데이터의 신뢰성을 보장합니다. 예를 들어, HTTP와 파일 전송에 사용됩니다. UDP는 비연결형으로 빠르지만 신뢰성이 낮습니다. 주로 스트리밍이나 온라인 게임에서 사용됩니다."

    DNS(Domain Name System)의 작동 원리를 설명해주세요.

    "DNS는 도메인 이름을 IP 주소로 변환합니다. 클라이언트는 로컬 캐시를 먼저 확인하고, 없을 경우 루트 DNS → TLD DNS → 권한 DNS 순으로 요청해 IP를 반환받습니다."

    CORS(Cross-Origin Resource Sharing)가 발생하는 이유와 이를 해결하는 방법은 무엇인가요?

    "CORS는 다른 도메인 간 요청을 할 때 발생합니다. 이를 해결하려면 서버에서 Access-Control-Allow-Origin 헤더를 설정해야 합니다."

    4. 운영체제

    프로세스(Process)와 스레드(Thread)의 차이점은 무엇인가요?

    "프로세스는 독립적인 실행 단위로, 각자 메모리 공간을 가집니다. 반면, 스레드는 프로세스 내에서 실행되는 작업 단위로, 메모리를 공유합니다."

    멀티스레딩에서 발생할 수 있는 문제와 이를 해결하기 위한 방법은 무엇인가요?

    "멀티스레딩에서는 데드락이나 레이스 컨디션이 발생할 수 있습니다. 이를 해결하기 위해 뮤텍스나 세마포어 같은 동기화 기법을 사용합니다."

    컨텍스트 스위칭(Context Switching)이란 무엇이며, 왜 필요한가요?

    "컨텍스트 스위칭은 CPU가 현재 작업 상태를 저장하고 다른 작업으로 전환하는 과정입니다. 여러 프로세스나 스레드를 효율적으로 실행하기 위해 필요합니다."

    5. 데이터베이스

    SQL과 NoSQL의 차이점은 무엇인가요?

    "SQL은 관계형 데이터베이스로, 정해진 스키마를 따릅니다. NoSQL은 비관계형으로, 유연한 스키마를 제공합니다. SQL은 복잡한 쿼리에 강하고, NoSQL은 대규모 데이터와 분산 처리에 적합합니다."

    트랜잭션(Transaction)이란 무엇이며, ACID 특성을 설명해주세요.

    "트랜잭션은 데이터베이스에서 하나의 논리적 작업 단위입니다. ACID는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)을 의미합니다."

    인덱스(Index)의 원리와 장단점에 대해 설명해주세요.

    "인덱스는 데이터를 효율적으로 검색하기 위한 구조입니다. 검색 속도를 향상시키지만, 삽입과 삭제 시 추가적인 비용이 발생합니다."
profile
꾸준히 성장하는 개발자

0개의 댓글