1. 장고 외 타 프레임 워크가 무엇이고 차이점은 무엇이 있나요?
장고 외 타 프레임워크로는 Flask, Pyramid, FastAPI등이 있습니다. 각 프레임 워크마다 설계철학과 목적이 다르며 사용하는 방법과 기능에 차이가있습니다.
가장 익숙한 Flask는 미니멀한 설계로 유연성이 높고 확장이 가능하며 작은규모의 어플리케이션에 적합합니다.
Pramid는 유연한 구조와 확장성을 제공하여 대규모 어플리케이션에 적합합니다.
FastAPI는 빠른 개발과 성능에 중점을 둔 API서버를 구축하기 위한 프레임워크로 비동기 처리를 지원 하여 고성능 서비스를 제공할 수 있습니다.
2. 다른 웹 프레임 워크와 비교했을때 Django의 장점과 단점은 무엇이라고 생각하시나요?
- 장점
- 완성도 높은 기능 : 관리자 패널, ORM(객체 관계 매핑)등 다양한 기능을 제공하여 빠르고 쉬운 웹 어플리케이션 개발이 가능합니다.
- 강력한 보안 기능 : 보안 취약점을 줄이고 사용자 데이터를 안전하게 보호할수 있는 다양한 보안기능을 내장하고 있습니다.
- 커뮤니티및 생태계 : 다양한 확장모듈 , 패키지, 플러그인 이 존재하며 뛰어난 문서화와 지원을 받을수 있는 활발한 커뮤니티가 존재합니다.
- 단점
- 과도한기능 : 작은 규모의 프로젝트에는 부담이 될수 있는 과도한 기능과 복잡성이 있습니다.
- ORM성능 : 복잡한 쿼리를 처리할때 성능이 저하될수 있으며, 대규모 데이터 처리에는 부적합 할수 있습니다.
- 학습곡선 : 다른 플임 워크에 비해 학습곡선이 다소 높을수 있으며, 초기 설정과 구성이 복잡할 수 있습니다.
(ORM은 객체와 데이터베이스 간의 변환을 자동으로 처리해주는 도구 Object-Relational Mapping)
3. Django와 Flask는 같은 파이썬 언어로 되어있지만 차이가 있습니다. 어떤 차이가 있는지 설명해주세요.
Django 와 Flask 는 둘다 파이썬으로 웹 어플리케이션을 만드는 도구입니다
- Django : 웹 어플리케이션을 만들때 거의 모든것을 제공하는 "완전한 패키지"라고 할수 있습니다. 데이터베이스 관리, 사용자 인증 ,URL 라우팅, 관리자 패널등의 기능이 내장되어 있습니다 - 큰프로젝트나 복잡한 어플리케이션을 개발할때 유용합니다.
- Flask : 더 작고 가벼운 "미니멀리스트"프레임 워크 입니다. 원하는 기능을 선택적으로 추가할수 있습니다. - 작은프로젝트나 빠른 프로토 타입, 간단한 웹서비스 개발시 용이 합니다.
==>> 장고는 크고 복잡한것을 만들때 편리하고 플라스크는 작고 간단한것을 만들때 편리합니다.
4. 장고의 ORM과 SQL쿼리간에 어떤 장단점이 있나요? 어떤 상황에서 각각 사용하시나요?
- Orm(객체 관계 매핑)은 가독성이 좋으며 보안에 강점을 가지고 있지만 성능과 특정한 데이터베이스 기능사용에 제한이 있을수 있습니다 - 따라서 간단한 작업(CRUD)이나 보안이 중요한 경우에는 장고ORM을 사용합니다.
- 반면 직접 SQL을 사용하면 성능이 향상되고 데이터베이스 기능을 자유롭게 사용할수 있지만 코드가 복잡해지고, 보안 문제에 노출될수 있습니다. - 따라서 대규모 데이터 처리나 특정 데이터베이스 기능을 활용해야할때 사용합니다.
5.MVT구조에 대해서 설명해주세요
Model, View, Template 세가지 구성요소로 이루어져있습니다.
- 모델 : 데이터를 정의 하고 데이터베이스와의 상호작용을 처리하는 부분입니다. -DB테이블 구조를 정의, 데이터를 저장, 조회하며 데이터의 유효성을 검사합니다.
- 뷰: 컨트롤러 역할을 수행하며, 요청처리와 데이터 처리를 담당하며, 결과를 템플릿에 전달합니다.
- 템플릿 : 사용자에게 보여지는 부분을 정의하고 동적으로 데이터를 출력합니다.
==>>이 MVT구조는 웹어플리케이션을 개발하고 유지보수 하는데 있어서 코드의 구조화와 분리가 용이하며 재사용성과 확장성을 높이는데 도움을 줍니다.
6.Django에서 프로젝트 생성을 했을 때 어떤 파일들이 생성되며, 각 파일들의 역할이 뭔지 설명해주세요
장고 프로젝트를 생성하면 제일먼저
- manage.py: DB 마이그레이션,어플리케이션 관리, 서버 실행등을 할수 있는 커메드 유틸리티파일입니다.
- settings.py : 장고의 설정을 정의 하는 파일로 디비 연결, 정적파일 경로, 어플리케이션 설정등을 포함합니다.
- urls.py : url패턴과 뷰 함수를 매핑하는 url설정파일로 클라이언트의 요청이 들어왔을때 어떤뷰를 실행할지결정합니다.
그리고 선택적으로 채워넣을수 있는 파일로
- wsgi.py : Web Server Gateway Interface프로토콜을 따르는 웹서버와 Django어플리케이션을 연결하는 파일로 보통 서버를 배포할때 사용합니다.
- asgi.py : Asynchronous Server Gateway Interface 프로토콜을 따르는 웹서버와 장고를 연결하는 파일입니다. -보통 비동기 웹서버와의 연동에 사용됩니다.
- init.py : 해당 디렉토리가 파이썬 패키지임을 정의하는 파일입니다.-보통은 비워둡니다.
- app.py : 각 어플리케이션의 설정을 정의하는 파일로 어플리케이션 이름이나 레이블을 설정할수 있습니다.
==>이 파일들은 장고 프로젝트의 기본구조를 형성하고, 프로젝트의 설정, URL매핑, 어플리케이션 관리등을 담당합니다.
7.장고에서 APP을 나누는 기준에 대해 본인생각을 말씀해주세요.
장고에서 앱을 나누는 기준은 프로젝트 규모나 구조에따라 다르겠지만 주요기능 단위로 나누는것이 일반적이라 생각합니다. 각 어플리케이션은 특정한기능을 담당하기때문입니다.
예를 들어서 중고마켓 웹에서 어카운트앱과 프로덕트 앱으로 나눌수 있습니다.
8. 장고에서 app 생성시 urls.py는 생성되나요? 생성이 안된다면 왜 안되는지 본인의 생각을 말해주세요.
장고에서는 해당 앱의 urls.py는 자동으로생성되지는 않습니다. 이는 각 앱이 자체적인 url설정이 아닌 프로젝트 전체의 url설정파일에 통합되어야 하기 때문입니다
따라서 필요에 따라 해당앱의 url매핑은 수동으로 추가 할수 있습니다.
이러한 설계설정은 앱의 독립성과 유지보수를 용이하게 합니다.
9.장고에서 미들웨어가 무엇인지 설명해주세요
- 장고에서 미들웨어는 클라이언트 요청과 응답처리 사이에 중간에 실행되는 코드로 , 요청및 응답처리 전후에 추가적인 작업을 수행합니다.
- 미들웨어를 사용하여 요청인증, 로깅, 응답에 헤더추가, 에러처리, http요청 및 응답변조등 다양한 기능을 구현할수 있습니다.
10.장고에서 트랜젝션을 처리하기 위한 방법이 어떤것이 있는지, 본인 사용경험에 근거하여 설명해주세요
장고에서는 트랜젝션 처리를 위해 사용할수 있는 방법은 크게 두가지가 있습니다
함수 기반 뷰와 클래스 기반 뷰를 사용하는 방법입니다.
- 함수기반뷰(Function-based views)에서 트랜젝션을 처리할때는 @transaction.atomic 데코레이터를 사용합니다.
- 이 데코레이터를 함수기반 뷰위에 추가하면 해당뷰가 실행되는 동안 트랜젝션을 자동으로 열고 뷰가 성공적으로 완료되면 트랜젝션을 커밋라고 에러가 발생하면 롤백 합니다.
- 클래스기반뷰(Class- based views)에서는 TransactionMixin 을 사용하려 트랜젝션을 처리할수 있습니다.
- 이 믹스인 클래스 기반뷰에 트랜젝션 관리 기능을 추가 합니다.
저는 주로 함수 기반 뷰에서 @transaction.atomic 데코레이터를 사용하는 방법을 선호했습니다. 이 방법은 간편하고 직관적이며, 트랜잭션 범위가 명확하게 드러나기 때문에 코드의 가독성을 높일 수 있습니다.
11.FBV, CBV에 대해 각각 장단점 위주로 설명해주세요.
- 함수기반뷰 : 간편하고 직관적이지만, 코드의 재사용성이 낮고 중복이 발생할수 있습니다.-복잡한뷰에서 관리 어려움
- 클래스 기반뷰 : 코드의 재사용성을 높이고 구조를 보다 체계적으로 유지할수 있지만 초기 학습 곡선이 높고 자유도가 일부 제한될수 있습니다.-난이도가 보다 높은편입니다
12.장고로 어떤 프로젝트를 하셨고 어떤 에로 사항이 있었는지 그리고 어떻게 해결하셨나요?
저는 부트캠프에서 중고마켓 웹 어플리케이션을 개발하는 프로젝트를 수행하였습니다,
- 프로젝트의 기능으로는 - 사용자인증,CRUD, 좋아요와 팔로우 기능 , 프로필관리 기능이 있었습니다.
- 에러사항및 해결방법으로는
- 모듈임포트 에러 - 일부 파이썬 파일에서 장고모듈을 임포트 하지 않아 발생하였기에 해당 모듈을 바르게 임포트하여 해결하였습니다.
- RelatedObjectDoesNotExist오류 -사용자 프로필이 자동으로 생성되지 않아 발생한 문제 였습니다.-post_save 시그널을 사용하여 사용자가 생성될때 자동으로 프로필이 생성되도록 로직을 추가하여 해결하였습니다.
- 좋아요 기능의 버그 - 좋아요 버튼을 누른 게시물이 사용자 프로필에 제대로 표시되지 않는 문제가 있었습니다.이는 Like모델을 사용하여 관계를 잘못설정하고 조회하는 쿼리가 부적절했기 때문입니다. - 적절한모델 연산관계설정과 쿼리 수정을 통해 해결하였습니다.
- 이러한 수정과 개선을 통해 원활하게 작동하는중고 마켓 웹 어플리케이션을 완성할수 있었습니다.
13. AWS 서비스를 어떻게 사용하셨나요? (예: S3, EC2)
아직 aws서비스를 사용해본적은 없지만 제가했던 중고마켓 프로젝트에서 aws를 활용할수 있는 방법으로는
Amazon EC2(Elastic Compute Cloud) 가 될것 같습니다.
- 사용이유로는 이름처럼 사용자의 필요에 따라 컴퓨팅 파워를 유연하게 조절할수 있게 해주는데, 이는 서버의 스펙을 필요에 따라 유연하게 선택하고, 스케일 업다운이 용이합니다.
- 적용방법으로는 장고 서버를 EC2인스턴스에 배포하여 운영합니다.
14.도커 이미지와 도커 컨테이너의 차이는 무엇인가요?
도커에서 이미지와 컨테이너는 서로 다른개념입니다.
- 도커 이미지는 어플리케이션 실행에 필요한 모든것을 포함한 파일 시스템 스냅샷이며, 읽기 전용 입니다.
- 반면에 도커 컨테이너는 이미지의 실행중인 인스턴스로, 실행중에 변경될수 있고 , 사용자와 상호작용을 할 수 있는 환경을 제공합니다.
15.웹어플리케이션 서버와 웹서버의 차이에 대해서 설명해주세요
둘은 웹어플리케이션을 실행하기 위한 서버 소프트웨어입니다. 그러나 각각의 역할과 기능이 다릅니다.
- 웹서버:
- 클라이언트로 HTTP요청을 받아들이고 주로 html이나 css같은 정적인 웹페이지를 제공하는 서버입니다.
- 예시로는 apache, nginx가 있습니다
- 웹어플리케이션 서버 :
- 동적인 웹어플리케이션을 실행하고, 데이터 베이스와 상호작용하여 사용자 요청에 동적으로 응답하는 서버입니다.
- 주로 웹프레임워크와 함께 사용되며, 어플리케이션의 로직을 실행하고 HTTP요청을 처리합니다.
- 예시로는 Django, tomcat이 있습니다.
==>>웹서버는 정적 파일을 제공하고 요청하는 역할을하며 ,, 웹 어플리케이션 서버는 동적인 웹 어플리케이션을 실행하고 데이터베이스와 상호작용하여 동적으로 콘텐츠 생성하는 역할을 합니다.
16.장고 rest framework를 사용하는 이유가 뭔가요?
장고 rest framwork 는 장고의 프레임워크를 보완하여 RESTful API를 쉽게 작성할 수 있도록 도와주는 도구 입니다.
간편한 API개발, 직관적인 시리얼라이저, 인증과 권한관리 , API문서화, 그리고 Django 와의 높은 호환성 등의 이유로 사용됩니다.
이를 통해 개발자는 간단하고 빠르게 안전하며 효율적인 API 를 구축할 수 있습니다.
17.DRF의 시리얼라이저의 역할에 대해서 설명해 주세요
Django REST Framework의 시리얼라이저는 데이터 모델을 JSON 또는 XML과 같은 직렬화된 형식으로 변환하거나, 그 반대로 직렬화된 데이터 모델로 역직렬화 , 유효성검사등의 역할을 합니다.
이는 API개발에 있어서 매우 중요한 기능이며 , DRF를 사용하지 않는다면 직접 구현해야하는 번거로움이 있습니다.
18. wsgi가 뭔지 설명해주세요
Web Server Gateway Interface는 파이썬 웹 어플리케이션과 웹서버간의 표준 인터페이스 입니다.
HTTP요청을 받아 어플리케이션에 전달하고, 생성된 응답을 다시 웹서버로 전송하는 역할을 합니다.
이를 통해 서로 다른 웹 서버와 웹 어플리케이션을 결합하고, 플랫폼간 호환성을 보장할 수 있습니다.
19.ForeignKey, OneToOneField, ManyToManyField의 차이점을 설명해주세요
- Foreignkey 는 일대 다 관계를 정의 합니다. -즉 한 모델의 인스턴스가 다른 모델의 여러 인스턴스를 참조할 수 있습니다.
- OneToOneField 는 일대일 관계를 정의 합니다. - 즉 한 모델의 인스턴스가 다른모델의 인스턴스와 일대일로 대응됩니다.
- ManyToManyField 는 다대다 관계를 정의 합니다. - 두 모델 간에 수 많은 관계를 가질수 있습니다.
20.장고에서 QuerySet의 eager loading 과 lazy loading에 대해 설명해주세요
장고의 쿼리셋은 데이터베이스로 부터 데이터를 가져오는데 사용되는 객체 입니다.
- lazy loading은 필요할때만 데이터를 가져오는 방식으로 메모리를 절약합니다.
- 반면에 eager loading 은 관련된 객체나 필드를 미리 가져와 성능을 향상시킵니다.
'Til' 카테고리의 다른 글
내일은 2차 면접보는날~~ (0) | 2024.05.22 |
---|---|
Til 장고 심화 과제 (0) | 2024.04.29 |
Til 24.04.25 모의면접 준비 -파이썬 (1) | 2024.04.25 |
til 24.04.24 (0) | 2024.04.24 |
장고에서 css연결 안되는듯한문제// 좋아요기능 메인화면연결//뒤늦은 .gitignore 파일 업로드시 이미올라간것 삭제하기 -퍼옴// (1) | 2024.04.19 |