[내배캠 AI코스] TIL

내일배움캠프 40일차 TIL - 모의면접 회고록

띵제 2024. 4. 25. 21:28

[파이썬]

1. Python의 장점과 단점은 무엇이라고 생각하시나요?

https://velog.io/@jnine/%ED%8C%8C%EC%9D%B4%EC%8D%ACPython-%ED%8A%B9%EC%A7%95-%EB%B0%8F-%EC%9E%A5%EB%8B%A8%EC%A0%90-%EC%A0%95%EB%A6%AC

https://m.blog.naver.com/djusti/223239608485

파이썬의 장점은 문법이 쉽고 간결하다는 것입니다. 그래서 비전공자도 쉽게 배울 수 있고 개발속도도 빠르고, 생태계가 활발합니다. 또, 다른 언어나 라이브러리에 쉽게 접근해 연동이 가능합니다.

단점은 다른 언어에 비해 느리다는 것입니다. 멀티스레딩을 제대로 활용할 수 없기 때문입니다. 따라서 빠른 속도를 요구하거나 하드웨어를 직접 컨트롤하는 프로그램에는 적합하지 않습니다.

 

2. ‘파이썬은 느리다’라는 문장에 대해 본인의 생각을 기술적 근거를 기반으로 말해주세요.

https://velog.io/@jimin_lee/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9D%98-%EC%86%8D%EB%8F%84%EA%B0%80-%EB%8A%90%EB%A6%AC%EB%8B%A4%EB%8A%94-%EB%A7%90%EC%9D%98-%EC%9D%98%EB%AF%B8

https://hitzi.tistory.com/31

(1) 동적 타입의 언어이기 때문입니다. 동적 타입의 언어란 변수를 정의할 때 그 자료형을 굳이 명시하지 않아도 되는 언어를 뜻합니다. 그러다보니 정적 타입의 언어와 달리 자료형을 판단하는 처리 과정이 추가적으로 필요합니다. 

(해당 데이터의 타입을 몰라서 적절한 타입을 찾고, 그 타입들의 연산을 지원하는 함수롤 또 찾아야 하는 등의 부차적인 비용이 발생하기 때문에 시간이 더 걸립니다.)

 

(2) 인터프리터 언어이기 때문입니다. 인터프리터 언어는 명령어 한 줄 한 줄을 기계어로 번역하고 실행하는 과정을 거치는 반면, 컴파일러 언어는 통으로 번역한 다음 통으로 실행합니다. 

 

3. 가상환경이란 무엇인지에 대해서 설명해주세요.

https://velog.io/@hyunji015/Python-%EA%B0%80%EC%83%81%ED%99%98%EA%B2%BD%EC%9D%B4%EB%9E%80

독립적인 파이썬 실행환경을 의미합니다. 여러개의 프로젝트를 진행할 경우, 각 프로젝트마다 필요한 패키지나 배경이 다르기 때문에 호환성 문제로 서로 충돌하게 됩니다. 그때 각 프로젝트에 맞는 파이썬 환경을 구축하기위해 필요한 모듈들만 담아 놓는 것을 가상환경이라고 합니다.

 

[파이썬에서는 pip라는 패키지 인스톨러를 사용해 피키지들을 설치하고 관리합니다. 기본적으로 pip를 사용해 설치하는 피키지들을 특정 프로젝트에 관계없이 파이썬을 실행하는 모든 환경에 설치되게 됩니다. 만약 한 개의 프로젝트만 다룬다면 크게 문제되진 않지만, 2개 이상의 프로젝트를 개발하게 될 경우 버전 등의 호환성 문제가 발생할 수 있습니다. 이때 파이썬 가상환경을 활용하면 각 프로젝트마다 독립적인 환경을 구성하여 호환성 문제를 최소화 시킬 수 있습니다.]

 

4. 환경변수란 무엇인지 설명해주세요.

https://gliver.tistory.com/43

프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는, 동적인 값들의 모임입니다. 

예를 들어 똑같은 변수라도 A에서의 값과 B에서의 값이 다를 수 있는데 환경변수가 필요한 이유는 프로세스가 어떠한 작업을 할 때 필요로 하는 정보를 손쉽게 접근하고 처리할 수 있도록 해주기 때문입니다. 

 

5. 파이썬에서 매개변수와 인자의 차이를 설명해주세요.

https://m.blog.naver.com/choi_s_h/222131920703

둘은 거의 같은 용어이지만,

매개변수는 함수를 정의하는 경우에 필요한 변수를 의미하고

인자는 정의된 함수를 부를 때 매개변수의 값으로 넘겨주는 실제의 값을 뜻합니다.

 

6. 인터프리터와 컴파일러에 대해서 설명해주세요. (장단점을 비교해주세요.)

https://velog.io/@jhur98/%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%ACcompiler%EC%99%80-%EC%9D%B8%ED%84%B0%ED%94%84%EB%A6%AC%ED%84%B0interpreter%EC%9D%98-%EC%B0%A8%EC%9D%B4

인터프리터는 프로그램 실행시 한 번에 한 문장씩 번역하고 실행하기 때문에 느리다는 단점이 있습니다. 

하지만 컴파일러와 같이 오브젝트 코드 생성과정이 없어 메모리효율이 좋다는 장점이 있습니다. 

컴파일러는 프로그램 전체를 스캔해 모두 기계어로 번역한 뒤 실행파일을 만들어 실행합니다. 초기 스캔 시간이 조금 오래걸려도 이후엔 전에 만든 실행파일을 실행하기 때문에 빠르다는 장점이 있습니다.

하지만 기계어 번역과정에서 더 많은 메모리를 사용해 인터프리터보다 메모리 효율이 낮다는 단점이 있습니다.(번역하는 과정에서 링킹 작업을 하기 때문)

 

7. 정적 타입과 동적 타입의 차이에 대해서 설명해주세요. (장단점을 비교해주세요.)

https://devuna.tistory.com/82

정적타입 언어는 컴파일 시 변수의 타입이 결정되고 동적타입 언어는 런타임시에 결정됩니다.

정적타입은 미리 타입을 결정하기 때문에 타입 에러를 초기에 발견할 수 있어 안정성이 높다는 장점이 있고, 대신 매번 코드를 작성할 때마다 변수형을 결정해줘야 한다는 단점이 있습니다.

반대로 동적 타입은 타입에 대한 결정을 런타임 전까지만 하면 되기 때문에 유연성이 높고 빠르게 코드를 작성할 수 있다는 장점이 있고, 예상치 못한 타입 에러가 날 수 있다는 단점이 있습니다.

 

8. 클로저(closure)란 무엇이며 어디에 유용한가요?

https://velog.io/@wngud4950/%ED%81%B4%EB%A1%9C%EC%A0%80Closure%EB%9E%80

https://poiemaweb.com/js-closure

클로저는 함수와 함수가 선언된 어휘적 환경의 조합입니다. 클로저는 자신이 선언됐을 때의 환경을 기억하는 함수이기 때문에 자신이 선언됐던 환경밖에서 호출되어도 그 환경에 접근할 수 있습니다.

그렇기 때문에 현재 상태를 기억하고 변경된 최신 상태를 유지하는 상황에 가장 유용하게 사용됩니다.

 

9. Generator란 무엇이고 어떻게 사용하나요?

https://seo-tory.tistory.com/77

제너레이터란 파이썬에서 사용되는 함수로, yield를 사용해 중간에 원하는 부분에서 멈추었다가 그 부분부터 다시 실행할 수 있는 능력을 가진 함수입니다. 따라서 필요할 때마다 원하는 값들을 만들어내는 방식으로 사용합니다.

 

10. 데코레이터란 무엇인가요?

https://ctkim.tistory.com/entry/%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0decorator

https://kevinitcoding.tistory.com/entry/%ED%8C%8C%EC%9D%B4%EC%8D%ACPython-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%89%AC%EC%9A%B4-%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0-%EC%9B%90%EB%A6%AC

데코레이터는 함수나 메서드에 적용되어 해당 함수나 메서드의 기능을 확장하거나 변경하는 역할을 합니다. @를 붙여서 사용하며, 기본적으로 함수를 인자로 받고 또 다른 함수를 반환하는 고차함수입니다.

장점은 코드의 길이를 단출할 수 있고 가독성을 높여준다는 것입니다. 함수의 핵심 기능에 집중하게 도와주기도 합니다.

[데코레이터란 이름 그대로 파이썬의 함수를 장식해주는 역할을 합니다. 선언되는 함수 위에 @를 사용한 형태로 작성하며 해당 함수가 실행될 때 데코레이터에서 선언된 코드가 같이 실행됩니다.]

 

11. 파이썬의 메모리 관리 방식에 대해 알려주세요.

https://thecho7.tistory.com/entry/%EB%A9%B4%EC%A0%91-%EA%BF%80%ED%8C%81-Python%EC%97%90%EC%84%9C-%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%A5%BC-%EC%96%B4%EB%96%BB%EA%B2%8C-%EA%B4%80%EB%A6%AC%ED%95%98%EB%8A%94%EA%B0%80

파이썬은 자동으로 메모리를 관리하는데 이것은 객체가 생성될때마다 그 객체를 참조하는 변수의 개수를 추적하는 방식이기 때문입니다. 객체를 참조하는 변수의 개수가 0이 되면 해당 객체의 메모리는 자동으로 해제되어 개발자가 직접 관리하지 않고도 효율적으로 메모리가 관리됩니다.

 

12. 파이썬에서 일급객체가 무엇인지 설명해주세요.

https://tibetsandfox.tistory.com/8

https://amazelimi.tistory.com/entry/Python-%EC%9D%BC%EA%B8%89%EA%B0%9D%EC%B2%B4First-Class-Object%EB%9E%80-LIM#google_vignette

세 가지 조건을 만족하는 객체를 의미합니다. 세 가지 조건이란 ①변수나 데이터구조에 넣을 수 있어야 한다는 것, ② 매개변수에 전달할 수 있어야 한다는 것, ③ 반환값으로 사용할 수 있어야 한다는 것, 입니다.

 

13. 객체지향이란 무엇인지? 주요 원칙이 무엇인지 설명해주세요.

https://xangmin.tistory.com/152

https://namu.wiki/w/%EA%B0%9D%EC%B2%B4%20%EC%A7%80%ED%96%A5%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EC%9B%90%EC%B9%99#s-2.1

객체지향은 프로그래밍 방법론 중 하나로 필요한 데이터를 통해 객체를 만들고 그들 간의 유기적인 상호작용을 통해 로직을 구성하는 것입니다.

주요 원칙에는 5가지가 있는데, ①객체는 오직 하나의 책임을 진다는 것, ② 확장에 대해선 개방적이고 수정에 대해선 폐쇄적이라는 것, ③ 자식 클래스는 부모 클래스를 대체할 수 있다는 것, ④ 클라이언트에서 사용하지 않는 메서드를 사용하지 않는다는 것, ⑤고수준의 클래스는 저수준의 클래스에 의존하면 안된다는 것 입니다.

 

14. 절차지향 프로그래밍, 함수형 프로그래밍, 객체지향 프로그래밍의 차이점이 무엇인가요?

https://velog.io/@majaeh43/%EC%A0%88%EC%B0%A8%EC%A7%80%ED%96%A5-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

절차지향 프로그래밍은 일이 진행되는 순서대로 프로그래밍합니다. 코드에 가독성이 좋고 실행속도가 빠르다는 장점이 있지만 유지보수 및 분석이 어렵습니다.

함수형 프로그래밍은 순수 함수를 사용해 빠르게 처리하는 방법입니다. 순수 함수라는 것 자체가 동일한 입력값을 넣었을 때 항상 동일한 리턴값을 반환하기 때문에 외부 영향을 받지 않는다는 특징이 있습니다. 객체지향에 비해 가독성이 좋지만 데이터 상태를 조작하기 어렵습니다.

객체지향 프로그래밍은 모든 데이터를 객체로 취급해 요청시 해당 객체 내부에 있는 기능으로 처리하는 방법입니다. 코드의 재사용이 가능하며 확장, 유지보수가 잘 된다는 장점이 있고 다른 프로그래밍 방법에 비해 상대적으로 느리다는 단점이 있습니다.

 

15. list comprehension이란? 사용시 장단점을 본인 사용경험에 근거하여 설명해주세요.

https://rfriend.tistory.com/799

기존에 존재하는 List에서 새로운 List를 간결하게 생성하는 방법입니다.

예를 들면 다양한 정수가 담긴 리스트에서 짝수인 숫자들로만 새로운 리스트를 만들고 싶을때 for문과 if절을 이용해 간단하게 새로운 리스트를 생성할 수 있습니다.

 

16. PEP8에 대해 읽어보신 내용 또는 아는 내용에 대해 설명해주세요. 아울러 팀프로젝트 코드 작성시 컨벤션을 맞추기 위한 어떤 노력을 하셨는지 말해주세요.

https://ctkim.tistory.com/entry/%EA%B0%80%EB%8F%85%EC%84%B1-%ED%96%A5%EC%83%81%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%8A%A4%ED%83%80%EC%9D%BC-%EA%B0%80%EC%9D%B4%EB%93%9C-PEP8

https://peterica.tistory.com/309

PEP8은 파이썬 코드를 작성할 때 지켜야 하는 스타일 가이드입니다. 가독성과 일관성을 높이기 위해 권장되며 코드의 품질을 향상시키기 위한 기준으로 사용됩니다.

 

17. Python의 GIL(Global Interpreter Lock)이란 무엇이고, 어떤 문제를 발생시키나요?

https://bloofer.net/114

하나의 스레드에 모든 자원을 허락하고 나머지 스레드에 락을 걸어 다른 스레드가 실행되지 않도록 막아버리는 기능입니다. 메모리 안전성을 보장하기 위한 제약이지만 이로인해 성능병목 현상이 일어나게 된다는 문제가 발생하게 됩니다.

 

18. mutable 자료형과 immutable 자료형에는 어떤 것들이 있고 각각 어떤 특징을 가지고 있나요?

https://devloper-dreaming.tistory.com/21

mutable 자료형은 변경 가능한 객체로 리스트와 딕셔너리가 있습니다.

immutable 자료형은 변경 불가능한 객체로 일반적인 자료형과 튜플 등이 있습니다.

 

19. *args와 **kwargs의 용도와 사용 예제를 설명해주세요.

https://legitcode267.tistory.com/13

https://yunwoong.tistory.com/141

args는 키워드 되지 않은 가변적인 갯수의 인자들을 함수에서 필요로 할 때 사용합니다. 

좀 더 간단히 말하자면 함수의 인자를 몇 개 받을 지 모르는 경우에 사용하면 매우 유용합니다. args는 인자를 tuple로 전달합니다. 만약 정해지지 않은 n개의 인자를 받고 싶을 때, 다음과 같이 args를 사용할 수 있습니다.

kwargs는 키워드된 가변적인 갯수의 인자들을 함수에서 필요로할 때 사용합니다. 

함수에서 여러개의 인자 n개를, key-value 형태로 받을 때 사용하며 인자를 dictionary로 전달합니다.

 

 

20. 멀티스레딩과 멀티프로세싱의 차이점과 각각의 장단점을 설명해주세요.

멀티 스레딩은 하나의 프로세스 내에서 여러 개의 스레드를 생성하지만 

멀티프로세싱은 여러 개의 독립적인 프로세스를 생성합니다. 

멀티스레딩에서 스레드들은 같은 공간을 공유해 데이터 공유가 쉽고 오버헤드가 적다는 장점이 있지만 하나의 스레드에서 예외가 발생했을 때 전체 프로세스가 영향을 받을 수 있다는 단점이 있습니다.

반대로 멀티프로세싱은 각 프로세스가 독립적이기 때문에 하나가 실패하더라도 다른 프로세스에 영향을 주지 않지만 메모리 공간을 독립적으로 가지기 때문에 데이터 공유가 복잡하다는 단점이 있습니다.

 

[장고]

1. 장고 외 타 프레임워크가 무엇이 있고 차이점은 무엇이 있나요?

장고 이외의 프레임워크는 여러가지가 있습니다. 그 중 Flask와의 차이점을 얘기할 수 있을 것 같습니다. Flask는 장고에 비해 더 유연하고 간단한 구조를 가지고 있으며 개발자가 필요한 기능을 직접 선택할 수 있다는 장점이 있는 반면, 더 많은 설정이 필요하다는 점이 차이점입니다.

 

2. 다른 웹 프레임워크와 비교했을 때 Django의 장점과 단점은 무엇이라고 생각하시나요?

장고는 다른 웹 프레임웨크와 비교했을 때 빠른 개발과 보안성, 그리고 풍부한 기능을 제공할 수 있다는 장점이 있지만 그로 인해 학습 곡선이 높고 유연성이 부족하다는 단점이 있습니다. 

 

3. Django와 Flask는 같은 파이썬 언어로 되어있지만 차이가 있습니다. 어떤 차이가 있는지 설명해주세요.

장고는 MVT 아키텍처를 사용하며 개발자가 가능한 빨리 웹 애플리케이션을 구축할 수 있도록 다양한 요소가 내장되어있습니다. 

반면 Flask는 MVC나 MVT와 같은 아키텍처를 강요하지 않고 개발자가 자유롭게 필요한 기능들이나 확장패키지를 선택하여 사용할 수 있습니다. 

 

4. 장고의 ORM과 SQL 쿼리 간에 어떤 장단점이 있나요? 어떤 상황에서 각각을 사용하시나요?

ORM은 SQL쿼리를 직접 작성할 필요가 없으므로 개발자가 쉽게 작업할 수 있고, 데이터베이스 종류에 관계없이 동일한 코드를 사용할 수 있습니다.

하지만 대량의 데이터를 다룰 때 성능이 저하될 수 있고 특정 데이터베이스 엔진에 특화된 기능을 사용하는데 제한이 있습니다. 따라서 ORM은 일반적인 CRUD 작업 및 간단한 쿼리를 수행할 때 특히 빠른 개발을 필요로할 때 사용합니다. 

반대로 SQL쿼리는 대량의 데이터를 다루거나 복잡한 연산을 수행할 때 성능을 높일 수 있고 데이터베이스 엔진에 특화된 기능을 활용할 수 있기 때문에 복잡한 쿼리를 작성해야할 때나 대량의 데이터를 처리해야 할때 활용됩니다. 다만 이 경우엔 코드의 유연성이 감소할 수 있다는 단점이 있습니다.

 

 

5. MVT 구조에 대해서 설명해주세요.

MVT는 모델-뷰-템플릿 구조를 의미합니다. 

모델은 데이터베이스와 관련된 로직을 처리하며 데이터의 생성, 읽기, 업데이트, 삭제 작업인 CRUD 작업을 수행합니다.

뷰는 함수기반 뷰 또는 클래스 기반 뷰로 작성될 수 있으며, 모델로부터 데이터를 가져와 템플릿에 전달하고 클라이언트에게 보여지는 페이지를 렌더링합니다.

템플릿은 뷰로부터 전달받은 데이터를 동적으로 렌더링하여 최종 HTML을 생성하며 사용자에게 보여지는 HTML 페이지의 디자인과 내용을 담당합니다.

 

6. Django에서 프로젝트를 생성했을 때 어떤 파일들이 생성되며, 각 파일들의 역할이 뭔지 설명해주세요.

1) manage.py : 프로젝트 생성, 앱 관리, 데이터베이스 마이그레이션 등 다양한 작업을 수행합니다.

2) 프로젝트 폴더 : 프로젝트 루트 폴더로 프로젝트의 설정파일 및 여러 애플리케이션을 포함합니다.

3) settings.py : 데이터베이스 설정, 애플리케이션 설정, 인증 및 보안 설정 등 프로젝트 설정을 포함합니다.

4) urls.py : 프로젝트의 전반적인 URL 설정을 담당해 URL 패턴을 정의하고 요청을 해당하는 뷰로 라우팅하는 역할을 합니다.

5) wsgi.py : wsgi(웹 서버 게이트웨이 인터페이스) 프로토콜을 위한 진입점 역할을 하는 파일로 웹 서버와 장고 애플리케이션 간의 통신을 담당합니다.

6) asgi.py : asgi(비동기 서버 게이트웨이 인터페이스) 프로토콜을 위한 진입점 역할을 하는 파일로 비동기 웹 서버와 장고 애플리케이션 간의 통신을 담당합니다.

7) init.py : 해당 폴더가 파이썬 패키지임을 나타내는 빈 파일입니다.

8) settings 폴더 : 설정 파일을 분할하여 관리하기 위한 폴더로, 개발, 테스트, 프로덕션 등 각 환경에 따른 설정을 별도의 파일로 분리하여 관리할 수 있습니다.

9) static 폴더 : 이미지, CSS, JavaScript 등 웹 페이지에서 서빙되는 정적 파일을 저장하는 폴더입니다.

10) templates 폴더 : HTML 템플릿 파일을 저장하는 폴더로, 뷰에서 전달받은 데이터를 동적으로 렌더링하여 HTML 페이지를 생성하는 데 사용됩니다.

 

7. 장고에서 app을 나누는 기준에 대해 본인 생각을 말씀해주세요.

장고에서 앱을 나누는 기준은 크게 도메인 별로 나누는 기준과 기능 별로 나누는 기준 2가지가 있는 것으로 알고 있습니다. 

저의 경우에는 도메인 별로 기준을 나누는 것이 더 편리하다고 느꼈습니다. 그 이유는, 아직 제가 초보 개발자이기 때문에 사용자 입장에서 익숙하게 봐오던 도메인을 먼저 생각하고 그 안에 들어가는 기능들을 살펴보는 것이 더 직관적으로 다가왔기 때문입니다. 실제로 도메인별로 앱을 나누면 도메인 간의 의존성을 낮춰 유지보수가 용이하다는 장점이 있습니다. 하지만 다른 팀원들과의 협업을 위해서 기능별로 앱을 나누는 것에도 익숙해지도록 노력하겠습니다.

 

8. 장고에서 app 생성시 urls.py는 생성되나요? 생성이 안된다면 왜 안되는지 본인의 생각을 말해주세요.

장고에서 새로운 앱을 생성할때 urls.py 파일은 생성되지 않습니다. 그 이유에 대해서는 다양한 의견이 있을 수 있지만 저는 그 이유를 코드의 중복을 피하고 유지보수를 편하게 만들기 때문이라고 생각합니다. 앱마다 urls.py 파일을 생성한다면 코드의 중복을 유발하고, 이는 코드의 가독성을 현저히 낮추기 때문입니다. 

 

9. 장고에서 미들웨어가 무엇인지 설명해주세요.

장고에서 미들웨어는 HTTP요청과 응답을 처리하는 과정에서 요청과 응답 사이에 실행되는 일련의 코드 블록입니다. 장고에서는 다양한 내장 미들웨어가 제공되며, 각각의 미들웨어는 인증, 캐싱, 압축, 로깅 등의 특정한 기능을 수행합니다. 그렇기 때문에 개발자가 직접 커스텀 미들웨어를 작성하여 프로젝트에 특화된 기능을 구현할 수도 있습니다.

 

10. 장고에서 트랜젝션을 처리하기 위한 방법이 어떤 것이 있는지, 본인 사용 경험 근거하여 설명해주세요.

(트랜젝션은 하나 이상의 데이터베이스 작업을 묶어서 일관적으로 처리하도록 보장하는 것을 의미합니다. 디에터베이스의 상태를 일관되게 유지하고 오류 발생시 이전상태로 되돌릴 수 있기에 무결성을 보호할 수 있습니다.)

트랜젝션을 처리하는 방법에는 여러가지가 있는데 그 중에서도 ORM을 이용한 방법에 대해 말씀드릴 수 있을 것 같습니다. ORM을 사용한 트랜젝션 처리는 @transaction.atomic 데코레이터를 사용해 함수 내에서 실행되는 모든 데이터베이스 작업이 이 트랜잭션 범위 내에서 처리되도록 할 수 있습니다.

(제가 아직 개발 경험이 적어 실사용해본 적은 없습니다. 죄송합니다.)

 

11. FBV, CBV에 대해 각각 장단점 위주로 설명해주세요.

함수기반 뷰인 FBV는 일반적인 파이썬 함수로 뷰를 정의하기 때문에 복잡한 로직을 다룰 수 있으며 함수의 시작과 끝이 명확하게 구분되어 개발자들이 직관적으로 이해하기 쉽습니다.

하지만 CRUD와 같이 유사한 기능을 하는 뷰를 작성할때마다 코드를 반복하기 때문에 코드의 재사용성이 감소한다는 단점이 있습니다.

클래스기반 뷰인 CBV는 믹스인 클래스를 사용해 코드 재사용이 용이하며 장고에서 제공하는 다양한 기능을 쉽게 활용할 수 있습니다. 하지만 초기 학습곡선이 FBV에 비해 높고 코드 읽기가 어렵다는 단점이 있습니다.

 

12. 장고로 어떤 프로젝트를 하셨고 어떤 에로사항이 있었는지 그리고 어떻게 해결하셨나요?

 

13. AWS 서비스를 어떻게 사용하셨나요? (예:S3, EC2)

제 경험에서 AWS를 사용해본 적은 없지만, 일반적으로 AWS다양한 서비스를 제공해 웹 애플리케이션 및 웹서비스를 호스팅하고 관리하는 데 사용되는 걸로 알고 있습니다. 

 

14. docker 이미지와 도커 컨테이너의 차이는 무엇인가요?

도커 이미지는 애플리케이션과 그 실행 환경을 정의하는 템플릿입니다.

도커 컨테이너는 해당 탬플릿을 기반으로 실행되는 인스턴스입니다.

 

15. 웹어플리케이션서버와 웹서버의 차이에 대해서 설명해주세요.

웹 어플리케이션 서버는 동적인 웹 어플리케이션을 실행하고 관리하는데, 반면 웹 서버는 정적인 파일을 제공하는 역할을 합니다.

웹 어플리케이션 서브는 주로 비즈니스 로직의 실행, 데이터베이스 연동, 트랜잭션 관리 등과 같은 기능을 수행하고, 웹 서버는 주로 정적 파일의 호스팅과 HTTP요청을 처리합니다.

 

16. Django rest framework를 사용하는 이유가 뭔가요?

DRF를 사용하는 이유는 여러가지가 있는데, 

무엇보다도 API를 빠르고 효율적으로 구축할 수 있고 자동으로 API문서를 생성할 수 있기 때문입니다.

또, 다양한 기능을 가진 내장된 뷰 클래스를 제공해 CRUD 기능을 빠르게 구현할 수 있습니다. 

 

17. DRF의 시리얼라이저의 역할에 대해서 설명해주세요.

 

18. wsgi가 뭔지 설명해주세요.

wsgi는 파이썬 웹 애플리케이션과 웹 서버간의 표준화된 통신 프로토콜입니다. wsgi를 사용하면 다양한 웹 서버와 웹 애플리케이션이 호환되고 서로 통신하는 것이 가능합니다. 

** asgi는 웹 서버와 비동기 웹 애플리케이션 간의 통신을 위해 표준화된 인터페이스입니다. wsgi의 확장으로 비동기 및 실시간 웹 애플리케이션을 위한 표준화된 인터페이스를 제공합니다.

 

19. ForeignKey, OneToOneField, ManyToManyField의 차이점을 설명해주세요.

 

20. Django에서 쿼리셋(QuerySet)의 eager loading, lazy loading에 대해 설명해주세요.

 

 

::오늘의 회고::

오늘 본 모의면접.. 굉장히 당황스러운 시작으로 처음부터 긴장한 상태였다.미리 주어졌던 질문들도 전부 준비하지 못했었고 면접 전 말하는 연습을 해도생각보다 용어들이 입에 붙지 않아서 애를 먹었다.그래도 준비했던 답변은 어찌저찌 대답을 했는데, 문제는 질문지 외에 다른 걸 물어볼 줄은 몰랐다는 거다.아직 배웠던 내용들이 머릿속에 제대로 정리가 되어있지 않아서인지분명히 아는 내용인데도 말로 어떻게 설명을 해야할지 몰라 굉장히 우왕좌왕했다.

강의를 우선적으로 듣지만서도 다른 사람들과 소통하기 위해서는 입밖으로 말해보는 연습이 꼭 필요하다는 걸 많이 느꼈다.