TIL

모의 면접 질문 & 예상 꼬리 질문

jinny8 2024. 9. 4. 22:02

. RESTful한 API를 설계하는 장점

모의 면접 답변: RESTful API는 웹 애플리케이션 간의 통신을 쉽게 하기 위해 설계된 아키텍처 스타일입니다. RESTful API의 주요 장점은 일관된 인터페이스와 확장성을 제공합니다. REST는 HTTP 프로토콜을 기반으로 하며, 자원(resource)을 URI로 식별하고, HTTP 메서드(GET, POST, PUT, DELETE 등)를 활용하여 자원에 대한 CRUD 작업을 수행할 수 있습니다. 이로 인해 클라이언트와 서버 간의 결합도가 낮아지고, 시스템의 유연성이 향상됩니다. 또한, RESTful API는 캐싱을 통해 성능을 최적화할 수 있으며, 표준화된 구조를 통해 개발팀 간의 협업이 용이합니다.

 

예상 꼬리 질문 및 답변:

  • Q: RESTful API와 SOAP의 차이점은 무엇인가요?
    • A: RESTful API는 경량의 HTTP를 사용하는 반면, SOAP는 더 복잡한 XML 메시징 프로토콜을 사용합니다. REST는 더 유연하고 간단한 반면, SOAP는 보안, 트랜잭션, 신뢰성 등에서 더 많은 기능을 제공합니다.
  • Q: RESTful API의 단점은 무엇인가요?
    • A: REST는 상태 비저장(stateless) 특성 때문에 클라이언트가 매 요청마다 모든 정보를 제공해야 합니다. 이로 인해 복잡한 트랜잭션 처리에는 부적합할 수 있습니다.

2. 적절한 관심사 분리가 필요한 이유

모의 면접 답변: 관심사 분리(Separation of Concerns, SoC)는 소프트웨어 설계의 중요한 원칙으로, 코드의 유지보수성과 확장성을 높이기 위해 서로 다른 기능이나 책임을 가진 코드들을 분리하는 것을 의미합니다. 각 모듈이나 클래스가 하나의 명확한 책임만을 가지도록 설계함으로써, 코드 수정 시 다른 부분에 미치는 영향을 최소화할 수 있습니다. 이는 코드의 가독성을 높이고, 테스트가 용이하게 하며, 버그를 줄이는 데 도움이 됩니다.

 

예상 꼬리 질문 및 답변:

  • Q: MVC 패턴에서 관심사 분리는 어떻게 구현되나요?
    • A: MVC(Model-View-Controller) 패턴에서 모델은 데이터와 비즈니스 로직을 관리하고, 뷰는 사용자 인터페이스를 담당하며, 컨트롤러는 사용자 입력을 처리하여 모델과 뷰를 연결합니다. 이를 통해 각 컴포넌트는 자신의 역할에 집중할 수 있습니다.
  • Q: 관심사 분리가 잘 안 되었을 때 발생할 수 있는 문제는 무엇인가요?
    • A: 코드가 복잡해지고 의존성이 높아져, 작은 변경이 시스템 전체에 영향을 미칠 수 있습니다. 또한, 테스트가 어려워지고, 버그가 발생하기 쉬워집니다.

3. Setter를 무분별하게 사용하면 안되는 이유

모의 면접 답변: Setter 메서드를 무분별하게 사용하면 객체의 상태가 외부에서 쉽게 변경될 수 있어, 객체의 일관성이 깨질 위험이 있습니다. 이는 코드의 예측 가능성을 낮추고, 디버깅을 어렵게 만들며, 특히 멀티스레드 환경에서는 동시성 문제를 일으킬 수 있습니다. 객체의 불변성을 유지하고, 필요한 경우에만 상태를 변경할 수 있도록 제한하는 것이 중요합니다. 대신, 필요한 경우 생성자 또는 Builder 패턴을 통해 초기값을 설정하고, 상태 변경이 필요하다면 명확한 메서드를 통해 수행하는 것이 좋습니다.

 

예상 꼬리 질문 및 답변:

  • Q: Setter를 사용해야 하는 상황이 있다면 어떤 경우가 있을까요?
    • A: 객체의 상태를 변경해야 하는 상황에서, 그 상태 변경이 논리적으로 필요한 경우에만 Setter를 사용하는 것이 적절합니다. 예를 들어, 특정 비즈니스 로직을 통해 값이 변경되어야 하는 경우입니다.
  • Q: Setter를 대신하여 사용할 수 있는 대안은 무엇인가요?
    • A: 불변 객체를 만들거나, 상태 변경을 위해서는 명확한 메서드를 통해 특정 로직이 수행된 후 상태가 변경되도록 설계할 수 있습니다. 또한, Builder 패턴을 활용하여 객체의 상태를 초기화할 수 있습니다.

4. NoSQL과 RDBMS에 대해 아는대로 설명해주세요.

모의 면접 답변: RDBMS(Relational Database Management System)는 데이터가 테이블 형태로 저장되며, 스키마(schema)에 따라 데이터가 구조화됩니다. SQL(Structured Query Language)을 사용하여 데이터를 조회, 삽입, 업데이트할 수 있으며, 데이터 간의 관계를 정의하여 정규화된 데이터 모델을 제공합니다. 대표적인 RDBMS로는 MySQL, PostgreSQL, Oracle 등이 있습니다.

반면, NoSQL은 비정형 데이터나 스키마가 자주 변하는 데이터를 처리하는 데 적합합니다. NoSQL 데이터베이스는 키-값 저장소, 도큐먼트 데이터베이스, 컬럼 패밀리 저장소, 그래프 데이터베이스 등 여러 유형으로 나뉩니다. NoSQL은 수평적 확장에 강하며, 대용량 데이터 처리에 유리합니다. 대표적인 NoSQL 데이터베이스로는 MongoDB, Cassandra, Redis 등이 있습니다.

 

예상 꼬리 질문 및 답변:

  • Q: 언제 RDBMS를 사용하고, 언제 NoSQL을 사용하는 것이 적절할까요?
    • A: RDBMS는 데이터 간의 관계를 중시하고, 트랜잭션이 중요한 경우 사용합니다. NoSQL은 대규모 분산 데이터 저장이 필요하거나, 데이터 구조가 자주 변할 때, 또는 높은 읽기/쓰기 성능이 요구될 때 적합합니다.
  • Q: NoSQL 데이터베이스의 단점은 무엇인가요?
    • A: 스키마가 없어 유연하지만, 데이터 일관성 유지가 어려울 수 있고, 복잡한 쿼리나 조인이 필요할 때는 RDBMS에 비해 불리합니다.

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

모의 면접 답변: 객체지향 프로그래밍(Object-Oriented Programming, OOP)은 데이터와 그 데이터를 처리하는 메서드를 하나의 객체로 묶어 프로그램을 설계하는 패러다임입니다. 객체는 클래스라는 청사진을 통해 생성되며, 캡슐화, 상속, 다형성, 추상화와 같은 핵심 개념을 활용합니다. OOP의 주요 장점은 코드의 재사용성을 높이고, 유지보수를 쉽게 하며, 현실 세계의 문제를 자연스럽게 모델링할 수 있다는 것입니다. 이를 통해 복잡한 시스템을 모듈화하고, 협력하는 객체들 간의 상호작용을 통해 문제를 해결할 수 있습니다.

 

예상 꼬리 질문 및 답변:

  • Q: OOP의 4대 특징에 대해 설명해보세요.
    • A: OOP의 4대 특징은 캡슐화, 상속, 다형성, 추상화입니다. 캡슐화는 데이터를 보호하고, 외부에 대한 접근을 제한하며, 상속은 기존 클래스를 재사용하여 새로운 클래스를 만들 수 있게 합니다. 다형성은 동일한 인터페이스를 통해 서로 다른 구현을 사용할 수 있게 하며, 추상화는 객체의 복잡성을 줄이고, 필요한 부분만 노출시킵니다.
  • Q: 객체지향 설계 원칙(SOLID)에 대해 설명해주세요.
    • A: SOLID는 객체지향 설계에서 지켜야 할 5가지 원칙으로, 단일 책임 원칙, 개방-폐쇄 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존성 역전 원칙을 포함합니다. 이 원칙들은 코드의 유연성, 유지보수성, 확장성을 높이기 위해 중요합니다.