[Interview] 면접 준비 8일차

Kim Hyen Su·2024년 5월 30일

면접질문

목록 보기
9/27
post-thumbnail

면접 준비

예상 질문


DI, IoC에 대해 설명해주세요

  • IoC는 제어의 역전을 의미하며 프로그램의 흐름을 개발자가 아닌 프레임워크가 제어하는 설계 원칙을 말합니다. 프레임워크가 실행 흐름을 제어하고 필요한 객체를 주입하거나 호출합니다. 이로 인해 애플리케이션 코드의 결합도를 낮추고 코드의 유연성을 높이는 것에 있습니다.

  • 스프링에서는 DI 방식으로 ioc를 구현하게 되는데 DI란 객체의 생성과 의존성을 외부에서 주입하는 설계 패턴입니다. 의존성 주입을 사용하는 주요 목적은 객체 간의 결합도를 낮추고, 코드의 재사용성과 테스트의 용이성을 높이는 것을 목적으로 합니다. (이를 통해 객체가 다른 객체에 의존하지 않고 독립적으로 동작할 수 있습니다.)

  • 의존성 주입 방법으로는 의존성을 객체의 생성자 매개변수로 주입하는 방식인 생성자 주입, 객체의 세터 메서드를 통해 주입하는 세터 주입 방식, 객체의 필드에 직접 주입하는 필드 주입 방식이 있습니다.

객체 지향 프로그래밍이란 무엇이고 어떻게 활용할 수 있나요?

  • 프로그래밍을 위한 패러다임 중 하나로, 명령어를 바이너리 코드로 변경 및 실행시켜주는 컴퓨터적인 사고에서 벗어나 인간의 사고에 좀 더 가까운 프로그래밍을 위해서 독립적인 하나의 객체를 만들고 객체 간의 상호작용을 통해 프로그램 내 로직을 수행하는 것을 말합니다.

  • 객체지향 프로그래밍을 사용하는 이유로 크게 3가지가 있습니다.

    • 코드의 재사용성
    • 코드의 유지보수성
    • 코드의 중복제거
  • OOP 방식으로 프로그래밍을 하기 위해서는 다음과 같은 특징을 가져야 합니다.

    • 캡슐화
      필드와 메서드를 하나로 묶어 객체로 만든 뒤 내부 구현 내용을 외부에서 알 수 없도록 은닉해주는 것을 말합니다.
      필드와 메서드 간의 연관관계를 하나의 객체의 상태 또는 행위라는 이름으로 추상화가 가능합니다. - 재사용성이 올라갑니다.
    • 상속
      상위 클래스에서 하위 클래스로 클래스 요소를 물려주는 것을 말합니다.
      상위 클래스에서 물려받은 필드 또는 메서드는 상위에서 한번만 수정하면 하위 클래스에서도 수정된 로직을 사용할 수 있으므로 코드의 일관성 유지가 쉽습니다.
    • 다형성
      메서드의 반환 또는 인자값으로 상속/추상-구현 관계로 묶인 객체를 다양한 형태로 사용이 가능한 것을 말합니다. 이를 통해 코드의 유연성 및 유지 보수성을 높일 수 있습니다.
    • 추상화
      객체의 공통된 필드 또는 메서드를 상위 개념으로 선언해주는 것을 말합니다.
      이를 통해, 재사용성 유지보수성, 중복 코드 제거라는 이점들이 있습니다.

대용량 트래픽 발생 시 어떻게 대응해야 하나요?

  • Scale-Out, Scale-Up, 캐시가 있습니다.

    • Scale Up을 통해서 컴퓨터의 하드웨어 적인 성능을 높여 처리량을 높히는 방식입니다.하지만, 이는 기하급수적으로 비용이 늘어날 뿐만아니라, 트레픽에 유연하게 대처하기가 힘듭니다.
    • Scale Out은 동일한 성능의 서버를 수평적으로 확장하는 것을 말합니다. 이에 로드 밸런싱을 추가하여 트레픽을 분산시켜 주는 방식입니다. 이는 트레픽에 유연하게 대처가 쉽습니다.
    • 캐시는 말그대로 동일한 데이터를 조회하는 경우, 네트워크 비용을 줄이고자 서버와 DB 중간에 데이터를 저장하는 캐시 저장소를 두어 조회 성능을 높이는 방법입니다.
  • MSA 프로젝트를 진행하면서,

    • 스케일 아웃 방식과 캐시 방식을 통해서 대용량 트레픽 처리를 위해 구현함.스케일 아웃은 Spring Cloud Gateway와 Spring Cloud Netflix의 유레카 서버를 통해서 구현하였으며, 라운드 로빈 방식으로 서버 인스턴스 2개를 만들어 구현해봤습니다.
    • 캐시 방식은 이벤트 상품 목록 조회 시 변하지 않는 상품명 상품 가격 상품 설명 등의 내용들을 Redis 캐시에 저장하는 방식으로 구현했습니다.
profile
백엔드 서버 엔지니어

0개의 댓글