티스토리 뷰

728x90

 

✝️ Python

  1. Python의 장점과 단점은 무엇이라고 생각하시나요?
    • 단점은 모바일 애플리케이션개발에는 적합하지 않을 수 있으며 일부 언어들에 비해 CPU의 집약적인 작업에서는 성능이 떨어질 수 있다.
    • 장점은 쉽게 학습이 가능하고 다양한 플랫폼에 실행할 수 있다. Windows, macOS, Linux 등 다양한 운영 체제에서 작동할 수 있다.
  2. '파이썬은 느리다'라는 문장에 대해 본인의 생각을 기술적 근거를 기반으로 말해주세요.
    • 데이터의 양과 작업의 복잡성이 증가하면 실행속도가 느려질 수 있다. 특히 반복문 같은 CPU 집약적인 작업이 많은 알고리즘은 다른 언어에 비해 파이썬을 사용하면 느릴 수 있다. 반복적으로 해석하고 실행하기 때문이다.
    • 실행기간이 사이썬은 인터프리터 언어(소스코드를 한줄씩 읽고 해석하여 느릴 수 있다.)로 동적 타입을 지원하기 때문에 컴파일 언어(소스코드를 기계 코드로 변환하여 실행)보다 실행시간이 느려 대규모 인프라 서버에 맞지않다. 기본적으로 GIL"Global Interpreter Lock” 로 인해 하나의 스레드에서만 실행할 수 있어 멀티 프로세스의 병렬 처리에 제한적이다.
    • https://www.winterjung.dev/python-gc/
  3. 가상환경이란 무엇인지에 대해서 설명해주세요.
    • venv의 가상환경을 사용하는 가장 대표적인 이유는 1. 독립적인 환경에서 프로젝트 간 버전 및 의존성 충돌을 방지합니다. 버전들간의 업그레이드, 관리가 기존 시스템 환경에 영향을 주지 않고 독립적으로 관리할 수 있다. 2. 다양한 환경이나 테스트를 할 때 일관된 환경(버전)에서 프로젝트를 실행해 시스템 환경을 손상시키지 않고 안전하게 확인해볼 수 있다.
  4. 환경변수란 무엇인지 설명해주세요.
    • 환경변수 (PATH) 는 시스템에서 파일을 찾는 기본 경로입니다. 시스템 내에 필요한 파일을 실행하기 위해서는 항상 파일이 있는 경로에 들어가서 직접 실행해야 하는데 파일이 있는 경로를 환경변수로 설정해두면, 어느 위치에서든 파일명 만으로 실행할 수 있게 됩니다. 따라서 파이썬 코드를 실행하려면 항상 파이썬을 설치한 폴더로 가서 파이썬을 실행시키고 그 코드를 실행시켜야 하는데 환경변수를 등록함으로써 그 번거로움을 줄여줄 수 있습니다.
  5. 파이썬에서 매개변수와 인자의 차이를 설명해주세요.
    • 예를 들어 매개변수(Parameter), 인자(Argument)를 설명하겠습니다.
    • def greet(name): #’name’ 이 매개변수 
      	print(’Hello’+name)
          
      greet(’tia’) # ‘tia’ 가 인자
    • 위같은 함수 선언과 함수를 호출할때 함수가 필요로하는 값을 받을 수 있는 변수를 매개변수라고 하고 "greet"함수를 호출할때 전달되는 ‘tia’는 인자 입니다.
  6. 인터프리터와 컴파일러에 대해서 설명해주세요. (장단점을 비교해주세요)
    • 인터프리터와 컴파일러는 프로그래밍 언어를 실행 가능한 코드로 변환하는데 사용되는 두가지 방법론입니다.
    • 인터프리터는 소스 코드를 한 줄씩 읽고 해석하여 즉시 실행하는 프로그램으로 소스코드를 실행하는 동안 인터프리터가 실행중에 발생하는 오류를 즉시 보고합니다. 빠른 개발과 코드를 수정한 후 즉시 실행해 결과를 확인 할 수 있으나 실행 속도가 컴파일러에 비해 상대적으로 느릴 수 있다. 소스코드를 실행할 때 마다 한줄씩 번역하기 때문
    • 컴파일러는 소스코드를 한번에 기계 코드로 변환하는 프로그램이다. 대표적으로 c언어가 있다. 실행속도가 빠르고 한번 컴파일 되면 기계 코드로 저장되어 실행 시간이 짧다. 그러나 수정된 코드를 실행하려면 다시 컴파일을 해야하므로 개봘과 테스트가 상대적으로 느리다.
  7. 정적 타입과 동적 타입의 차이에 대해서 설명해주세요. (장단점을 비교해주세요)
    • 정적타입과 동적타입은 프로그래밍 언어에서 변수의 타입을 어떻게 처리하느냐에 따라 구분한다. 정적타입의 언어는 타입 오류를 미리 검출하여 안정성을 높이지만, 개발 시간이 더 오래걸리고 유연성이 낮다. 반면 동적타입의 언어는 개발 시간을 단출하고 유연성을 높이지만 타임오류를 런타임 시에 발견하기 어려울 수 있고 코드의 의도를 파악하기 어려울 수 있다.
  8. 클로저(closure)란 무엇이며 어디에 유용한가요?
    • https://blog.naver.com/ikarte666/222108455764
    • 클로저랑 함수 내부에서 정의된 함수로, 그 함수가 정의된 위치에 따라 외부 변수에 접근할 수 있는 특별한 함수이다. 클로저는 주로 콜백함수로 사용되며, 이를 통해 비동기 작업이나 이벤트 처리 등에서 유용하게 활용됩니다. 클로저를 사용하면 함수 간의 데이터 공유 및 상태 유지가 용이해지므로, 프로그램의 유연성을 높이고 코드의 가독성을 개선할 수 있다.
  9. Generator란 무엇이고 어떻게 사용하나요?
    • https://blog.naver.com/nkj2001/222706736306
    • Generator는 중간에 원하는 부분에서 멈추었다가, 그 부분부터 다시 실행할 수 있는 능력을 가진 함수이다.제너레이터 함수는 함수 호출자에게 함수 실행의 제어권을 양도(yield)할 수 있다. 따라서 yield라는 코드를 사용하고, yield는 제너레이터 함수를 멈추거나 다시 시작하는데 사용하는 키워드이다. 멈출 때까지 명시된 기능을 끝날때 까지 계속 돌려주는것이다.(계속 생산한다는의미에서 제네레이터)
  10. 데코레이터란 무엇인가요?
    • 데코레이터란 함수나 메서드에 적용되어 해당 함나 메서드의 기능을 확장하거나 변경하는 역할을 하는 고차함수입니다.함수를 받아 명령을 추가한 뒤 이를 다시 함수의 형태로 반환하는 함수이며, 함수의 내부를 수정하지 않고 기능에 변화를 주고 싶을 때 주로 사용합니다.또한, 일반적으로 함수의 전처리나 후처리에 대한 필요가 있을 때 사용하여 반복을 줄이고, 메소드나   함수의 책임을 확장하기도 합니다.
  11. 파이썬의 메모리 관리 방식에 대해 알려주세요
    • https://blog.naver.com/negte801/223335078517
    • 파이썬은 자동으로 메모리를 관리하는 가비지 컬렉션(Garbage Collection) 기능을 제공하여 개발자가 명시적으로 메모리를 할당하거나 해제할 필요가 없습니다. 이것은 파이썬이 동적으로 메모리를 할당하고 해제하며, 더 이상 필요하지 않은 객체를 자동으로 삭제하여 메모리 누수를 방지합니다.
  12. 파이썬에서 일급객체가 무엇인지 설명해주세요.
      • 파이썬에서 일급 객체(first-class object)란 1. 변수에 할당할 수 있고, 2. 다른 함수의 인자로 전달할 수 있고, 3. 함수의 반환 값으로 사용될 수 있다. 의 조건을 만족하는 객체.
      • 변수에 할당 가능:
      • def greet(name): 
        	return "Hello, " + name 
            
        my_greet = greet
      • 다른 함수의 인자로 전달 가능:
      • def say_hello(func, name): 
        	print(func(name)) 
            
        say_hello(greet, "Alice")
      • 함수의 반환 값으로 사용 가능:
      • def get_greet_func(): 
        	return greet 
            
        hello_func = get_greet_func() 
        print(hello_func("Bob"))
      https://blog.naver.com/qkdqkd1122/222880930740
  13. 객체지향이란 무엇인지? 주요 원칙이 무엇인지 설명해주세요

    •   주요 객체지향 프로그래밍의 원칙은 다음과 같습니다:
        
        - 객체지향 프로그래밍은 프로그램을 객체들의 모음으로 생각하고, 객체들 간의 상호 작용을 통해 프로그램을 구성합니다. 이는 프로그램의 설계와 구현을 보다 모듈화되고 유지보수 가능한 방식으로 처리할 수 있게 합니다.
        1. **캡슐화(Encapsulation)**:
            - 캡슐화는 데이터와 해당 데이터를 조작하는 메서드(함수)를 하나의 단위로 묶는 것입니다.
            - 객체는 자신의 내부 상태를 캡슐화하여 외부로부터 보호하고, 오직 정해진 메서드를 통해서만 상태에 접근할 수 있습니다.
            - 이를 통해 객체 간의 결합도를 낮추고 정보 은닉을 통한 안정성을 제공합니다.
        2. **상속(Inheritance)**:
            - 상속은 이미 존재하는 클래스의 속성과 메서드를 다른 클래스가 재사용하는 것을 말합니다.
            - 상속을 통해 코드의 재사용성을 높이고, 계층적인 구조를 통해 코드를 보다 쉽게 관리할 수 있습니다.
            - 부모 클래스(슈퍼 클래스)의 모든 속성과 메서드를 자식 클래스(서브 클래스)가 상속받습니다.
        3. **다형성(Polymorphism)**:
            - 다형성은 같은 이름의 메서드가 다른 클래스에서 다르게 구현될 수 있는 기능을 말합니다.
            - 다형성을 통해 여러 클래스들이 동일한 인터페이스를 공유하면서도 각자의 특징에 맞게 메서드를 재정의할 수 있습니다.
            - 다형성을 통해 코드의 유연성을 높이고, 코드의 가독성을 향상시킬 수 있습니다.
        4. **추상화(Abstraction)**:
            - 추상화는 객체의 공통적인 특성을 추출하여 일반화하는 과정을 말합니다.
            - 추상화를 통해 객체들 간의 공통점을 파악하여 클래스를 설계하고, 인터페이스를 정의할 수 있습니다.
            - 추상화를 통해 복잡한 시스템을 단순화하고 핵심적인 부분에 집중할 수 있습니다.
        
        이러한 객체지향 프로그래밍의 원칙을 통해 소프트웨어의 설계를 모듈화하고 유연하게 구성함으로써 코드의 재사용성, 확장성, 유지보수성을 향상시킬 수 있습니다.
      
    • 객체지향 프로그래밍(Object-Oriented Programming, OOP)은 소프트웨어를 설계하고 구현하는 방법론 중 하나로, 현실 세계의 객체(Object)를 모델링하여 소프트웨어를 개발하는 개념
  14. 절차지향 프로그래밍, 함수형 프로그래밍, 객체지향프로그래밍의 차이점이 무엇인가요?
    • 함수형 프로그래밍은 함수를 일급 객체로 취급하고 함수를 조합하여 프로그램을 구성하는 방식으로 함수가 동일한 입력에 대해 항상 동일한 출력을 생성하며 재귀와 고차 함수를 많이 사용한다. 상태변이를 피하고 불변성을 강조합니다.
      •  
    • 객체지향 프로그래밍은 프로그램을 객체들의 모음으로 보고 객체들 간의 상호작용을 통해 프로그램을 구현하는 방식입니다. 데이터와 해당 데이터를 조작하는 매서드를 함께 묶어 캡슐화합니다. 상속, 다향성, 캡슐화 등의 개념을 중심으로 프로그래밍합니다.
    • 절차지향 프로그래밍은 각 단계릀 순차적으로 분해하고 함수 또는 프로시저고 구성하는 방식으로 데이터와 프로시저를 분리하여 프로그램의 유지보수성을 향상시키고 코드 재사용성을 높인다.
      • 프로시저프로시저는 일반적으로 함수와 비슷한 형태를 가지지만, 반환 값이 없거나 단순히 부수적인 효과(side effect)만을 갖는 경우가 많습니다. 따라서 프로시저는 함수와 달리 값을 반환하는 것이 주 목적이 아니라 특정 작업을 수행하는 데 주로 사용됩니다.
      • 프로시저(Procedure)는 일련의 연산이나 작업을 수행하는 코드 블록 또는 서브루틴을 가리킵니다. 주로 명령형 프로그래밍에서 사용되며, 일정한 작업을 수행하기 위해 사용됩니다.
  15. list comprehension이란? 사용시 장단점을 본인 사용경험에 근거하여 설명해주세요.
    • 리스트 컴프리헨션은 ‘리스트를 쉽게, 짧게 한 줄로 만들 수 있는 파이썬의 문법’이라고 할 수 있다. 리스트 컴프리헨션은 코드가 짧고 간결해지면서 효율적이지만 이에 익숙하지 않거나 복잡한 표현이나 조건등이 추가될 경우 가독성이 떨어질 수 있습니다.
  16. PEP8에 대해 읽어보신 내용 또는 아는 내용에 대해 설명해주세요. 아울러 팀프로젝트 코드 작성시 컨벤션을 맞추기 위한 어떤 노력을 하셨는지 말해주세요.
    • PEP8에서 주요한 규칙은 다음과 같습니다:
      1. 들여쓰기(Indentation): 공백 4칸으로 들여쓰기를 하며, 탭(tab) 대신 공백(space)을 사용합니다.
      2. 줄의 최대 길이(Line Length): 코드 한 줄의 최대 길이는 79자로 제한되며, 주석이나 문서 문자열의 경우에는 72자로 제한됩니다.
      3. 공백(Spacing): 함수와 클래스 정의 사이, 함수의 매개변수와 인자 사이, 연산자 주변 등 적절한 공백을 유지합니다.
      4. 명명 규칙(Naming Conventions): 변수명은 소문자로, 여러 단어의 경우에는 밑줄(_)로 구분하여 사용하며, 상수는 대문자로 작성합니다.
      5. 주석(Comments): 코드에는 적절한 주석을 달아 가독성을 높이고, 주석은 코드와 일관된 스타일을 유지해야 합니다.
    • 팀원들과 주석들 달거나 들여쓰기, 탭 등을 점검하고 같이 일관된 코딩 스타일을 유지하려고 코드리뷰를 하였습니다.
  17. Python의 GIL(Global Interpreter Lock)이란 무엇이고, 어떤 문제를 발생시키나요?
    • 파이썬의 GIL(Global Interpreter Lock)은 파이썬 인터프리터가 한 번에 하나의 스레드만 파이썬 바이트코드를 실행할 수 있도록 하는 락입니다. 멀티스레딩 환경에서 동시에 여러 개의 CPU 코어를 활용할 수 없음을 의미한다. GIL은 성능저하, 병목현상과 같은 문제를 발생시킬 수 있다.
  18. mutable(가변) 자료형과 immutable(불변) 자료형에는 어떤 것들이 있고 각각 어떤 특징을 가지고 있나요?
    • 가변 자료형은 값을 변경할 수 있는 list, dict, set 의 자료형이 있고, 불변 자료형은 한번 생성되면 그 값을 변경할 수 없는 int, str, tuple, float(부동소수점수) 이 있다.
  19. *args와 **kwargs의 용도와 사용 예제를 설명해주세요.
    • *args와 **kwargs 는 함수 정의 시에 사용되는 매개변수이다. 함수의 임의의 개수의 인자를 전달하는데 사용된다.
    • *args (Positional Arguments): 함수 정의 시 ***args**를 사용하면 함수 호출 시 전달되는 모든 위치 인자를 튜플로 묶어서 받을 수있고 처리된다.
    • def my_function(*args): 
      	for arg in args: 
          print(arg) 
          
      my_function(1, 2, 3, 4, 5) 
      # Output: 
      # 1 
      # 2 
      # 3 
      # 4 
      # 5
    • **kwargs (Keyword Arguments): 함수 정의 시 ****kwargs**를 사용하면 함수 호출 시 전달되는 모든 키워드 인자를 딕셔너리로 묶어서 처리된다.
    • def my_function(**kwargs): 
      	for key, value in kwargs.items(): 
          print(f"{key}: {value}") 
          
      my_function(name="John", age=30, city="New York") 
      # Output: 
      # name: John 
      # age: 30 
      # city: New York
  20. 멀티스레딩과 멀티프로세싱의 차이점과 각각의 장단점을 설명해주세요.
    • 멀티스레딩은 하나의 프로세스 내에서 여러 개의 스레드를 동시에 실행하는 것으로 자원 공유가 쉽고 메모리 사용량이 적지만, GIL 때문에 CPU 바운드 작업에서는 성능 향상이 제한될 수 있습니다.
    • 반면 멀티프로세싱은 각각의 프로세스가 독립적인 메모리 공간을 가지며, 서로 다른 주소 공간에서 실행되어 CPU 바운드 작업에서 병렬 처리의 성능 향상이 가능하지만, 메모리 사용량이 증가하고 프로세스 간 통신에 오버헤드가 발생할 수 있습니다.
    • 선택은 작업의 종류와 성격에 따라 다르며, 이러한 요인들을 고려하여 적절한 병렬 처리 방법을 선택해야 합니다.

❇️ Django

  1. 장고 외 타 프레임워크가 무엇이 있고 차이점은 무엇이 있나요?
    • 표적으로 Flask가 있습니다. 장고보다는 가볍고, 마이크로 프레임워크라고 불리기도 합니다.간단하고 유연하게 확장 가능하며, 필요한 컴포넌트만 추가하여 사용할 수 있습니다. FastAPI는 최신 웹 프레임워크로 빠른 속도와 간편한 사용법을 제공합니다. 자동으로 API 문서를 생성하는 기능이 내장되어 있고, ASGI(Asynchronous Server Gateway Interface) 기반으로 비동기 처리를 지원하며, 성능이 우수하다.
  2. 다른 웹 프레임워크와 비교했을 때 Django의 장점과 단점은 무엇이라고 생각하시나요?
    • 다른 프레임워크와 비교했을 때 장고는 기본적으로 많은 기능을 포함하고 있어 프로젝트 초기 설정은 간단하지만 규모가 커질 수록 복잡해진다. 장고는 동기적인 방식으로 요청을 처리하기 때문에 비동기 처리에 취약하지만 내장된 ORM, 관리자 패널, 인증 및 권한 관리등 다양한 기능을 제공해 다른 프레임워크처럼 외부 라이브러리를 사용하지 않아도 된다.
  3. Django와 Flask는 같은 파이썬 언어로 되어있지만 차이가 있습니다. 어떤 차이가 있는지 설명해주세요.
    • 장고는 프로젝트의 구조와 기능을 미리 정해놓고 개발 생산성을 높이고 유지보수를 용이하게 하였고 Flask는 최소한의 도구만 제공해 개발자가 원하는 대로 프로젝트를 설계하고 확장할 수 있도록 한다. 해서 장고는 복잡성이 증가할 수 있지만 웹 애플리케이션을 빠르게 개발 할 수 있고, Flask는 경량화되어 프로젝트의 규모나 복잡성에 따라 유연하게 조정가능한 개발에 용이하다.
  4. 장고의 ORM과 SQL 쿼리 간에 어떤 장단점이 있나요? 어떤 상황에서 각각을 사용하시나요?
    • 장고의 ORM 은 사용자가 보다 편하게 데이터베이스 쿼리문을 사용할 수 있도록 돕습니다. ORM 을 사용하면 SQL 문을 사용하지 않아도 데이터베이스를 수정하거나 객체를 가져오는 작업 등을 수행할 수 있습니다. 다만 ORM 을 통해 모든 SQL 문을 수행할 수 있는 것은 아니며, 락을 걸거나 이중 쿼리문을 쓰는 등 복잡한 작업을 수행할 때에는 오히려 SQL 쿼리를 직접 작성하는 것이 좋다.
  5. MVT 구조에 대해서 설명해주세요.
    • 각각의 구성 요소가 서로 독립적으로 관리되기 때문에 코드의 가독성과 재사용성이 높아지며, 협업에도 용이합니다.
    • MVT 패턴은 Model-View-Template 의 약자로 model은 데이터를, view 는 프로그램이 동작하여 데이터를 처리한 결과를 템플릿에 렌더링하여 클라이언트에게 반환, Template은 사용자에게 보이는 Html 코드와 프론트앤드 디자인을 말한다.
  6. django에서 프로젝트를 생성했을 때 어떤 파일들이 생성되며, 각 파일들의 역할이 뭔지 설명해주세요
    • 장고에서 처음 프로젝트를 시작하면 migrate, runserver 같이 프로젝트와 상호작용하는 커맨드라인을 담고 있는 manage.py가 루트 폴더에 생성되며, 해당 프로젝트 이름을 갖는 폴더 아래에 __init__.py, settings.py, urls.py, asgi.py, wsgi.py 가 생성됩니다. __init__.py 는 해당 디렉토리를 패키지처럼 다루기 위한 빈 파일이고, settings.py 는 해당 장고 프로젝트의 환경 및 구성들, 예컨데 유저모델은 무엇을 사용할 것인지, 미들웨어나 앱에 무엇을 포함할 것인지 등을 담고 있는 파일입니다. urls.py 는 프로젝트의 root url 역할을 하 파일이며 특정한 뷰와 연결된다, asgi.py 와 wsgi.py 는 서비스 시 각각의 호환 웹 서버가 진입하는 진입점입니다.
  7. 장고에서 app을 나누는 기준에 대해 본인 생각을 말씀해주세요.
    • 앱을 나누는 기준은 주로 각 기능들의 독립성에 기반합니다. 예를 들어 사용자 관리, 게시글 관리, 상품 관리 등 각각의 기능을 별도의 앱으로 분리하여 개발하고 관리하면 각 기능의 독립성을 보장하고 앱 간의 의존성을 최소화할 수 있습니다.
  8. 장고에서 app 생성시 urls.py는 생성되나요? 생성이 안된다면 왜 안되는지 본인의 생각을 말해주세요.
    • 기본적으로 app을 생성할 때 urls.py 파일은 자동으로 생성되지 않습니다. 이는 django에서는 기본적으로 프로젝트 폴더의 urls.py 파일에서 전체 URL 구조를 관리하고, 필요에 따라 각 app에서 별도의 urls.py를 만들어 포함시킬 수 있기 때문입니다.
  9. 장고에서 미들웨어가 무엇인지 설명해주세요.
    • 미들웨어는 요청, 응답, 예외 처리과정을 조작하고 확장되는데 사용되며, 보안 기능, 요청 로깅, 사용자 인증, 세션 관리, 등 다양한 기능을 수행합니다
    • 미들웨어는 요청과 응답 사이에서 다양한 처리를 수행하는 일련의 함수나 클래스입니다. django의 모든 request는 미들웨어를 거치며, 이를 통해 request를 처리하고 response를 반환합니다.
  10. 장고에서 트랜잭션을 처리하기 위한 방법이 어떤 것이 있는지, 본인 사용 경험 근거하여 설명해주세요.
    • 장고에서 트랜잭션을 처리하기 위해 ORM을 사용하거나 장고의 기본 트랜잭션 관리를 하여 settings.py의 AUTOCOMMIT 옵션을 False로 설정하여 모든 데이터베이스 작업을 트랜잭션으로 감싸고, 개발자가 명시적으로 커밋하거나 롤백하거나, 데이터베이스 트랜잭션을 직접 사용하여 세밀한 제어가 필요할 경우에 사용한다
    • 장고(Django)에서 트랜잭션(Transaction)은 데이터베이스 상의 일련의 작업들을 하나의 논리적인 단위로 묶어서 처리하는 개념입니다. 트랜잭션은 ACID 원칙을 준수하여 데이터베이스의 일관성과 무결성을 보장합니다
    • ORM을 사용하여 트랜잭션을 사용하여 트랜잭션의 범위를 명시적으로 설정하여 어떤 작업이 트랜잭션 범위 내에서 수행되는지 알 수 있고 예상치 못한 데이터베이스 상태를 방지할 수 있다.
    • from django.db import transaction 
      
      @transaction.atomic 
      def my_view(request): 
      	# 트랜잭션 처리할 코드
  11. FBV, CBV에 대해 각각 장단점 위주로 설명해주세요.
    • Class-Based Views (CBV): 코드의 재사용성과 모듈화를 통해 유지보수성을 높일 수 있지만 학습 곡선과 복잡성이 있을 수 있다.
    • Function-Based Views (FBV): 간단하고 직관적이지만 코드의 중복과 재사용성의 문제가 있다.
  12. 장고로 어떤 프로젝트를 하셨고 어떤 에로사항이 었었는지 그리고 어떻게 해결 하셨나요?
    • 프로젝트 개발 및 트러블슈팅 경험에 대해 설명합니다.
    • 기본 CRUD 만들기
  13. AWS 서비스를 어떻게 사용하셨나요? (예: S3, EC2)
    • 배포 시 어떤 서비스들을 어떻게 활용했는지 설명합니다.
  14. docker 이미지와 도커 컨테이너의 차이는 무엇인가요?
    • docker 컨테이너는 docker 이미지를 사용해 생성되며 읽기, 쓰기가 가능한 파일 시스템 레이어를 가지, 각 컨테이너는 독립된 공간에서 구동됩니다.
    • docker 이미지는 서비스 구동에 필요한 패키지, 라이브러리, 소스 코드 등을 포함하는 읽기전용 파일입니다. 이는 컨테이너를 생성 할 때 사용됩니다.
  15. 웹어플리케이션서버와 웹서버의 차이에 대해서 설명해주세요
    •  서버는 HTTP를 통해 웹 페이지를 사용자의 브라우저에 제공하는 서버입니다. 주로 정적 파(HTML, CSS, JS, 이미지 파일 등)를 제공하는 데 사용되며, 대표적으로 Microsoft IIS, nginx 등이 있습니다 웹 어플리케이션 서버는 클라이언트의 요청에 따라 애플리케이션 코드를 실행하여 동적으로 컨텐츠를 생성하고, 이를 웹 서버를 통해 사용자에게 전달합니다. 대표적으로 Java의 Tomcat, Python의 Django, Flask 등이 있습니다.
  16. django rest framework를 사용하는 이유가 뭔가요?
    • django rest framework(DRF)는 RESTful API를 쉽고 빠르게 구축할 수 있도록 해주는 강력한 툴킷입니다. DRF는 직관적인 API 뷰, 시리얼라이저, 인증 및 권한 관리 기능 등을 제공하며, JSON 등의 데이터 형식을 쉽게 처리할 수 있어 API 개발의 효율성을 높여줍니다
  17. DRF의 시리얼라이저의 역할에 대해서 설명해주세요
    • 시리얼라이저는 Django 모델과 클라이언트 간의 데이터 흐름을 관리하고 중개하는 역할을 합니다. 이를 통해 데이터의 변환, 유효성 검사, 관계형 데이터 다루기 등을 효과적으로 처리할 수 있으며, API의 개발 및 유지보수를 간소화하고 안정성을 높일 수 있습니다.
  18. wsgi가 뭔지 설명해주세요
    • wsgi는 python에서 웹 서버와 웹 애플리케이션 간의 표준 인터페이스를 제공해 호환성을 보장하는 역할을 한다. 이를 통해 다양한 웹 서버와 애플리케이션이 다양한 웹 서버 환경에서 실행될 수 있다.
  19. ForeignKey, OneToOneField, ManyToManyField의 차이점을 설명해주세요.
    • ForeignKey: 다른 모델에 대한 데이터베이스 레벨의 관계를 나타냅니다. 일대다 관계를 구현할 때 사용됩니다.
    • OneToOneField: 다른 모델과 일대일 관계를 나타냅니다. 이는 ForeignKey와 유사하지만, 각 레코드가 상대 테이블에 하나의 레코드와만 연결됨을 보장합니다. ForeignKey에서 unique=True 옵션을 사용하는 것과 동일합니다.
    • ManyToManyField: 다대다 관계를 나타냅니다. 두 모델 간에 많은 수의 관계를 가질 수 있으며, 중간 테이블을 통해 관리됩니다.
  20. Django에서 쿼리셋(QuerySet)의 eager loading, lazy loading에 대해 설명해주세요.
    • Lazy Loading (지연 로딩): 데이터가 필요할 때만 로드하는 방식으로 필터링, 슬라이싱, 반복 등의 작업을 수행할 때 평가된다. 필요하지 않은 데이터를 불필요하게 로드하는 것을 방지해 메모리 사용량을 줄일 수 있으나 여러번의 데이터베이스 쿼리가 발생하여 성능에 영향을 줄 수 있다.
    • Eager Loading (즉시 로딩): 데이터를 한꺼번에 로드하는 방식으로 관련된 데이터를 미리 가져와서 후속 작업에서의 성능을 향상시킬 수 있지만, 데이터의 양이 많은 경우에는 성능 저하를 가져올 수 있습니다.
반응형
반응형
TAG
more
최근에 올라온 글