1조 : 연제건, 황단아, 윤준열, 임상빈, 원윤희, 우소라
Table
Table (1)
Search
이력서
[
7/19(수) 데일리 과제 ]
•
Django
◦
Django에는 어떤 장점이 있습니까?
1. 풀스택 프레임워크
- 반복적으로 구현해야 하는 부분(유저모델, 로그인, 회원가입, 인증관련 등)을 라이브러리를 이용해 간단하게 사용이 가능하다.
- 보안공격에대한 대비도 잘 되어있다(SQL injection, XSS, clickjacking 등).
- 프론트 웹프레임워크 없이 페이지를 렌더 할 수 있다 + DTL
2. 확장성
- python의 다양한 라이브러리를 사용 할 수 있다.
3. 공식 문서의 디테일
- 개발하다가 궁금한점이나 문제가 생기면, 대부분은 공식 문서에 해답이 있다.
4. 방대한 생태계
- Django를 사용해 만든 서비스들이 많다 > 검증된 프레임워크
- Python의 프레임워크 중 Github과 Stackoverflow에서 가장 많은 언급.
개선/보완점을 토론 중이다. 특히 배우는 입장에서 너무 든든함.
◦
Django가 다른 Python 웹 프레임워크와 비교되는 특징이 있다면 무엇입니까?
1. ORM 제공
- SQL언어가 익숙하지 않더라도 ORM이 제공되어 간단한 DB조작이 가능하다.
- 대신 NoSQL 사용 불가
2. 무겁다
- 필요한 것들을 대부분 제공하다보니 사이즈가 너무 크고 느리다.
3. 템플릿
- 프론트 웹프레임워크 없이 페이지를 렌더 할 수 있다 + DTL
[
7/20(목) 데일리 과제 ]
•
Django
◦
Django Template Engine은 무엇이고 어떤 기능을 제공합니까?
View로부터 전달된 데이터를 템플릿에 적용해 동적인 웹페이지를 만들 수 있다.
- DTL (Django Template Laguage)를 사용해 view에서 받은 data를 변수로 사용 하거나 내부 함수를 사용할 수 있다.
◦
Django를 통해 CRUD를 구현하는 방법에 대해서 HTTP Method와 함께 설명하시오
1. Model 정의
2. CRUD를 처리하는 로직 구성
- FBV : if문으로 HTTP Method 구별
- CBV : 함수로 HTTP Method구별
3. URL에 연결
[
7/21(금) 데일리 과제 ]
•
AI
◦
데이터 테이블 간의 관계를 나타내는 FK, OneToOne, ManyToMany 필드에 대해서 설명하시오
FK
- 다대일 관계, 한 객체와 여러개의 객체가 연결.
OneToOne
- 일대일 관계, 각 객체가 서로 하나씩만 연결.
ManyToMany
- 다대다 관계, 하나의 객체가 다른 여러 객체와 연결되고 그 여러 객체가 다시 하나의 객체와 연결될 수 있다.
◦
Django에서 ManyToMany필드를 만드는 방법에 대해서 설명하시오
models.ManyToManyField("모델명") 을 사용해서 만들 수 있다.
1. 모델 2개에 각각 테이블이 만들어짐 ex) author, book
2. 모델 2개의 관계를 나타내는 테이블이 만들어짐 ex) author_book
3. 관계를 나타내는 테이블에 pk값으로 관계 저장
[
7/24(월) 데일리 과제 ]
•
AI
◦
FBV와 CBV는 각각 무엇이며, 어떤 차이가 있습니까?
함수형 뷰 (Function Based View), 클래스형 뷰 (Class Based View)
상속/재사용이 많이 필요한 프로젝트의 경우 CBV, 아닌경우 FBV 사용
◦
테스트코드를 작성하는 이유는 무엇이며 어떤 장점이 있습니까?
1. 품질 보장
- 코드가 예상대로 동작하는지 확인 할 수 있다.
2. 회귀 테스트
- 새로운 기능을 추가하거나 코드를 수정할 때, 테스트 코드를 실행하여 이전에 잘 동작하던 기능이 정상적으로 동작하는지 확인 할 수 있다.
3. 문서화
- 테스트트 코드를 통해 어떤 방식으로 코드가 동작해야 하는지를 보여줌.
4. 디버깅
- 코드에 버그가 났을 경우, 테스트 코드를 통해 이를 쉽게 발견하고 수정 가능.
5. 개발 속도 향상
- 초기에는 테스트 코드 작성에 시간이 소요되지만, 장기적으로 보면 테스트 코드로 문제를 빠르게 찾아 수정할 수 있다.
[
7/25(화) 데일리 과제 ] @channel
•
AI
◦
테스트코드에서 setup 함수와 setupclass의 차이는 무엇입니까?
실행 순서와 지속성에서 큰 차이가 있습니다.
1. setUp
- 각 테스트 메소드가 실행되기 전에 호출됨, 1회성
- 각 테스트 메소드가 독립적 환경에서 실행되게 함
2. setUpClass
- 테스트 케이스 클래스가 처음 시작될 때 한번만 호출됨
- 모든 테스트 메소드에 공통적으로 필요한 작업을 수행할때 유용함
◦
Template Engine을 사용할 때, 발생하는 CSRF Error가 무엇이고 어떻게 해결합니까?
CSRF Error는 토큰이 없거나 유효하지 않을 때 발생
# CSRF(Cross-Site Request Forgery) : 웹사이트의 취약성을 이용한 공격 방법 중 하나
1. 토큰 발행
- 웹 애플리케이션은 요청이 서버로 전송될 때마다 유효한 CSRF 토큰을 생성
2. 토큰 추가
- 웹 애플리케이션은 모든 수정(POST, PUT, DELETE 등) 요청에 대해 CSRF 토큰을 포함
- 보통 폼의 hidden 필드나 HTTP 헤더에 추가
3. 토큰 검증
- 서버는 각 요청에 대해 CSRF 토큰을 검증
- 토큰이 없거나 유효하지 않다면, 서버는 요청을 거부
[
7/26(수) 데일리 과제 ]
•
AI
◦
Django ORM에서 queryset과 object의 차이점에 대해서 설명하시오
1. queryset
- SQL 쿼리를 생성하고 실행하는 역할
- 정의되면 쿼리만 생성할 뿐 실제로 DB에서 data를 가져오진 않는다
- data가 필요한 시점에 실행됨 > 코드 순서에 따라 성능 최적화에 영향을 줌
2. object
- queryset이 실행돼 받은 data는 각각 object 형태로 저장됨
- DB와 상호작용 가능
◦
Django ORM에서 정참조와 역참조에 대해서 설명하시오
1. 정참조
- 한 모델에서 다른 모델로의 직접적인 참조
2. 역참조
- 다른 모델에서 해당 모델로의 참조
[
7/27(목) 데일리 과제 ]
•
AI
◦
Response 결과와 함께 status code를 반환하는 이유는 무엇입니까?
HTTP 응답의 status code는 클라이언트에게 요청의 결과나 상태를 간략하게, 그리고 표준화된 방식으로 전달하기 위한 매커니즘입니다. Response 결과 본문만으로는 요청이 어떠한 상태인지를 명확하게 전달하기 어려울 수 있습니다. status code를 통해 클라이언트는 요청의 성공, 실패, 그리고 실패의 원인 등에 대한 정보를 빠르게 파악할 수 있습니다.
1.
명확한 상태 정보 제공
2.
표준화된 통신
3.
효율적인 클라이언트 처리
4.
디버깅과 문제 진단
5.
서버의 추가 정보 제공
◦
회원탈퇴, 게시글 삭제와 같은 기능을 구현할 때 실제 레코드를 삭제합니까? 그렇지 않다면 그 이유는 무엇입니까?
회원 탈퇴나 게시글 삭제와 같은 기능을 구현할 때 실제 레코드를 완전히 삭제하는 것과 삭제하지 않고 다른 방법으로 처리하는 두 가지 접근 방식이 있습니다. 실제 레코드를 완전히 삭제하지 않는 방식을 "논리적 삭제"라고 합니다.
다음은 논리적 삭제를 사용하는 이유입니다
1.
데이터 복구
•
사용자가 실수로 게시글을 삭제했을 경우나, 나중에 회원 탈퇴한 사용자가 다시 가입을 원할 때 데이터를 복구하는 것이 더 쉽다
2.
데이터 무결성 유지
•
다른 테이블과 외래 키(Foreign Key) 관계가 있을 경우, 레코드를 완전히 삭제하면 데이터 무결성 문제가 발생할 수 있음
3.
데이터 분석 및 보고
•
삭제된 데이터도 통꼐나 분석에 포함시키기 원할 수 있음
4.
시스템 로깅
•
데이터의 변경 이력을 추적하거나 누가 언제 어떤 데이터를 삭제했는지에 대한 정보가 필요한 경우
논리적 삭제를 구현하기 위한 방법 중 하나는 해당 레코드에 ‘삭제됨’ 혹은 ‘활성 상태’와 같은 상태를 나타내는 필드를 추가하는 것입니다. 예를 들면, is_deleted라는 불린 타입의 필드를 추가하고, 레코드를 삭제할 때 이 필드의 값을 True로 설정하여 레코드가 삭제된 것처럼 처리할 수 있습니다.
[
7/28(금) 데일리 과제 ]
•
AI
◦
RESTful API는 무엇을 의미합니까?
RESTful API는 "Representational State Transfer"의 약자인 REST 원칙과 관례를 따르는 API를 의미합니다. REST는 웹 서비스의 아키텍처 스타일 중 하나로, 리소스와 리소스의 상태를 기반으로 한 간단하고 표준화된 인터페이스를 제공합니다.
1.
리소스 지향
•
RESTful API는 URL(Uniform Resource Locator)을 통해 리소스를 식별
•
각 URL은 특정 리소스를 나타내며, 리소스에 대한 CRUD작업은 HTTP 메서드를 통해 수행
2.
상태와 표현
•
클라이언트는 서버의 리소스의 상태를 표현 형식(JSON, XML 등)으로 전송받음
3.
무상태성(Stateless)
•
각 요청은 서버에서 어떠한 상태 정보도 유지하지 않는 독립적인 것으로 간주
•
필요한 모든 정보는 각 요청과 함께 전송
4.
클라이언트-서버 아키텍쳐
•
클라이언트와 서버 간의 역할을 분리
•
클라이언트: 사용자 인터페이스와 경험에 집중
•
서버: 데이터 저장 및 처리에 집중
5.
캐시 가능(Cacheable)
•
서버의 응답은 클라이언트에서 캐시될 수 있어야 함
•
적절한 캐싱을 통해 성능을 향상시키고 서버 부하를 줄일 수 있음
6.
계층형 구조
•
로드 밸런서, 캐시 버서, 프록시 서버 등 중간 계층이 클라이언트와 실제 서버 사이에 위치할 수 있음
◦
DRF를 사용해 API를 개발할 경우 어떤 장점이 있습니까?
DRF는 Django 기반의 프로젝트에서 RESTful API를 빠르게, 안정적으로, 그리고 효율적으로 개발할 수 있는 많은 기능과 도구를 제공합니다.
1.
빠른 개발: 제네릭 뷰와 믹스인을 사용하면 기본 CRUD 작업을 매우 빠르게 구현 가능
2.
직관적인 웹 API 브라우저블 인터페이스: 사용자가 API를 직접 탐색하고 테스트할 수 있는 웹 기반 인터페이스를 제공
3.
인증 및 권한 관리: 다양한 인증방식(Token, OAuth, JWT 등)과 권한 설정을 쉽게 통합할 수 있음
4.
직렬화(Serialization): Serializer는 복잡한 데이터 타입(Querysets, JSON, XML)으로 쉽게 변환할 수 있게 해줌
5.
ORM 지원: 복잡한 데이터베이스 쿼리도 간단히 처리할 수 있음
6.
페이징, 필터링, 검색: 페이징, 필터링 및 검색과 같은 API 기능을 쉽게 구현할 수 있게 지원
7.
문서화: 자동화된 API 문서화 도구를 통해 API 엔드포인트에 대한 문서를 쉽게 생성하고 유지할 수 있음
8.
테스트 지원: API 테스트 작성을 위한 도구와 기능을 제공하여, 품질 높은 API를 구축할 수 있도록 지원
[
7/31(월) 데일리 과제 ]
•
AI
◦
JSON 형식으로 데이터를 받고, Serializer를 통해서 JSON형식으로 데이터를 반환하는 이유는 무엇인가요?
1. JSON은 표준화된 데이터 형식이다
- 대부분의 프로그래밍 언어에서 지원함
- 다른 언어를 쓰더라도 클라이언트와 서버 간의 통신이 원활해짐
- 텍스트 기반의 데이터 형식으로 HTTP 프로토콜을 통해 데이터를 송수신하는데 적합
2. Serializer에서 다양한 기능 제공(편의성)
- 복잡한 데이터 타입을 JSON으로 변환하거나 반대의 작업을 수행해줌
- 데이터의 유효성 검사 기능을 제공하고, 커스텀도 가능
◦
Django User 모델과 DRF Custom User 모델의 차이는 무엇입니까?
1. Django User
- username, password, email, first_name, last_name 등의 필드를 제공
- 빠른 개발을 위해 많은 필드와 기능을 제공하지만 내가 필요하지 않을 수 있음
2. DRF Custom User
- 내가 원하는 필드만, 원하는 방식으로 만들 수 있음
[
8/1(화) 데일리 과제 ]
•
AI
◦
Serializer를 통해서 특정 모델에 존재하지 않지만, 관계 있는 테이블의 필드 레코드를 반환하는 방법에 대해서 설명하시오
source, to_representation , SerializerMothodField
1.
source
•
source 는 필드의 속성을 가여오는데 사용되는 속성 이름이나 속성 체인을 지정
•
특히 원본 모델의 필드 이름이 serializer의 필드 이름과 다를 때 유용
2.
to_representation
•
to_representation 메서드는 serializer의 필드를 오버라이드하여 객체를 커스텀한 형태로 직렬화 하는데 사용
•
주로 기존의 필드 데이터를 변환하거나 조작해야 할 때 유용
3.
SerializerMothodField
•
SerializerMothodField 는 특정 메서드를 호출하여 그 결과를 사용하여 필드의 값을 채우는데 사용
•
get_<필드 이름> 의 형식으로 정의
◦
Serializer를 통해서 역참조 하는 방법에 대해서 설명하시오
ForeignKey나 OneToOneField 같은 관계 필드를 사용하면 자동으로 역참조가 생성된다.
Serializer를 사용해 이러한 역참조를 처리하려면 다음 단계를 따라야 한다.
1.
모델 정의
•
ForeignKey 또는 OneToOneField를 사용하여 관계를 정의
•
related_name 을 설정해준다
2.
Serializer 정의: 각 모델에 대한 Serializer를 정의한다.
•
역참조 관계는 serializers.StringRelatedField , serializers.PrimaryKeyRelatedField , serializers.SlugRelatedField 등을 사용
3.
데이터 serialize
•
데이터를 serialize 하려면 Serializer를 인스턴스화하고 data 속성을 사용