면접 질문 리스트

yun·2024년 11월 18일

면접 질문 리스트에 답을 적어보려고 한다.

1. RESTful API란 무엇이고 설계 시 유의해야 할 점은?

RESTful API는 REST 아키텍처 스타일을 따르는 API로, 자원을 URI로 표현하고 HTTP 메서드를 사용하여 자원을 조작하는 방식으로 설계한다.

설계 시 유의할 점:

  • 자원은 URI로 명확하게 표현하며, 동사 대신 명사를 사용한다.
  • HTTP 상태 코드를 적절히 반환한다(예: 200, 404, 500).
  • 데이터는 JSON 또는 XML 등 일관된 형식으로 반환한다.
  • Stateless 원칙을 준수하며, 클라이언트 요청에 필요한 모든 정보를 포함한다.

2. Django Channel이란 무엇이고 구조와 프로세스에 대해서 설명

Django Channel은 Django에서 비동기 기능(WebSocket, HTTP2 등)을 지원하기 위해 설계된 라이브러리이다.

구조와 프로세스:

  1. ASGI 서버: Channels는 WSGI 대신 ASGI를 사용하여 비동기 작업을 처리한다.
  2. 라우팅: URL 패턴과 소비자(Consumer)를 매핑한다.
  3. 컨슈머(Consumer): WebSocket, HTTP 등 비동기 프로토콜 요청을 처리하는 클래스 기반 뷰이다.
  4. 채널 레이어: Redis 등을 사용하여 다중 프로세스 간 메시지를 전달한다.

3. Django ORM에서 정참조와 역참조에 대해서 설명

정참조는 ForeignKey를 이용하여 다른 모델의 데이터를 참조하는 방식이다.
예: book.author
역참조는 참조된 객체가 자신의 관계를 통해 데이터를 조회하는 방식이다.
예: author.book_set.all()

4. 파이썬의 리스트와 튜플의 차이점

  • 리스트는 가변적이며 데이터를 추가, 수정, 삭제할 수 있다.
  • 튜플은 불변적이며 생성 후 데이터를 변경할 수 없다.
  • 리스트는 데이터 크기에 따라 더 많은 메모리를 소비하며, 튜플은 메모리 효율성이 더 높다.

5. 파이썬의 데코레이터란?

데코레이터는 함수나 메서드를 수정하지 않고 추가 기능을 부여할 때 사용하는 함수이다.
주로 함수 위에 @decorator 형식으로 사용하며, 로깅, 접근 제어, 캐싱 등에 활용한다.

6. Django의 Request 처리 흐름 (WSGI)

  1. 사용자가 요청을 보내면 WSGI 서버가 요청을 Django로 전달한다.
  2. Django는 URLconf를 사용해 URL을 매핑한다.
  3. 매핑된 View 함수가 요청을 처리하고, 필요한 경우 데이터베이스와 상호작용한다.
  4. View 함수는 HTTPResponse 객체를 생성하여 클라이언트에 응답한다.

7. 가비지 컬렉터란?

가비지 컬렉터(GC) 는 더 이상 참조되지 않는 객체를 자동으로 메모리에서 해제하여 메모리 누수를 방지하는 역할을 한다.
파이썬은 참조 카운팅 방식과 사이클 탐지 알고리즘을 사용한다.

8. Call by Value, Call by Reference란 무엇이고 파이썬에서는 어떤 값을 사용하는가?

  • Call by Value: 값을 복사하여 전달하며, 원본 데이터는 변경되지 않는다.
  • Call by Reference: 참조를 전달하여 원본 데이터가 변경될 수 있다.
  • 파이썬은 객체의 참조를 전달하지만, 변경 가능 여부는 객체의 가변성에 따라 달라진다.

9. 동기와 비동기 통신 방식의 차이점과 Django에서 비동기 처리 구현 방법

  • 동기: 작업이 순차적으로 실행되며, 이전 작업이 완료되어야 다음 작업이 실행된다.
  • 비동기: 작업이 병렬로 실행되며, 이전 작업과 상관없이 실행된다.
  • Django 비동기 구현: Django Channels를 사용하거나 Python의 async/await를 활용한다.

10. Django에서 Inner Join / Outer Join을 사용하는 경우

  • Inner Join: 모델 간 ForeignKey 관계를 사용해 데이터를 연결할 때 기본적으로 사용된다.
  • Outer Join: QuerySet의 annotate나 prefetch_related로 관련 데이터를 포함하는 경우 사용된다.

11. Serializer에서 객체를 validate하는 법

Serializer 클래스의 validate_<field_name> 메서드를 오버라이드하거나 validate 메서드를 구현하여 검증을 수행한다.

12. 파이썬의 메모리 최적화 방법

  • 제너레이터를 사용하여 메모리 소비를 줄인다.
  • 필요하지 않은 변수는 del로 삭제한다.
  • 데이터 구조를 효율적으로 선택한다(예: 리스트 대신 튜플 사용).

13. 트랜잭션이란?

트랜잭션은 데이터베이스에서 작업 단위를 의미하며, 작업이 모두 성공하거나 모두 실패하도록 보장한다.

14. 트랜잭션의 ACID 특징

  • Atomicity: 작업이 모두 수행되거나 모두 취소된다.
  • Consistency: 트랜잭션 이후 데이터는 일관된 상태를 유지한다.
  • Isolation: 각 트랜잭션은 독립적으로 실행된다.
  • Durability: 트랜잭션 완료 후 데이터는 영구적으로 저장된다.

15. N+1 문제 해결 방법

  • select_relatedprefetch_related를 사용하여 관련 데이터를 미리 조회한다.

16. Dict에 데이터 삽입 시와 충돌 시 시간 복잡도

  • 데이터 삽입: 평균 O(1)
  • 충돌 시: O(n)

17. TCP/UDP 통신 방식

  • TCP: 연결 지향적이며 신뢰성을 보장한다.
  • UDP: 비연결 지향적이며 빠르지만 신뢰성이 낮다.

18. MVC와 MVT를 비교 설명

  • MVC: Model, View, Controller로 구성된다.
  • MVT: Django에서 Controller를 Template로 대체한 구조이다.

19. Web Server와 WAS의 차이점

  • Web Server: 정적인 콘텐츠를 처리한다.
  • WAS: 동적인 콘텐츠와 애플리케이션 로직을 처리한다.

20. ORM이란?

ORM(Object-Relational Mapping) 은 데이터베이스와 객체 지향 프로그래밍 간의 불일치를 해결하기 위해 사용하며, SQL을 작성하지 않고 데이터베이스 작업을 수행할 수 있게 한다.

0개의 댓글