Django 50문답 (1~15)

김하진·2022년 9월 1일
0

1. Django가 다른 Python 웹 프레임워크와 비교되는 특징이 있다면 무엇입니까?

Djano란 보안이 우수하고 유지보수가 편리한 웹사이트를 신속하게 개발하는 하도록 도움을 주는
파이썬 웹 프레임워크입니다. 훌륭한 개발자에 의해 만들어진 이 프레임워크는,
웹 개발을 하는데 많은 도움을 주기 때문에 새롭게 웹 개발을 시작할 필요없이
그저 프레임워크를 활용하여 앱 개발에만 집중할 수 있게되죠. 무료 오픈소스인데다가,
활발한 커뮤니티들이 있고, 좋은 참고자료와 무료 및 유료 지원을 하는 옵션들이 제공됩니다.

2. Django를 백엔드 스택으로 선정한 이유는 무엇입니까?

스크립트 언어로 비교적 간결하고 쉽다
강력하고 많은 라이브러리 보유
백엔드 부트캠프 과정에서 프론트엔드 작업자 없이 풀스텍 프레임워크에 필요로 하는 것들을 장고가 가지고 있음

3. Django에는 어떤 장점이 있습니까?

유지 보수가 쉽습니다.
이미 구현되어있는 기능들이 있어 개발 속도가 빠릅니다
강력한 ORM 을 가지고 있습니다.

4. Django가 다른 Python 웹 프레임워크와 비교되는 특징이 있다면 무엇입니까?

장고는 MVT 패턴, 플라스크는 MVC 의 패턴을 따른다
플라스크에 비해 장고는 어드민 기능, ORM 을 내장하여 생산성이 뛰어나다
풀스텍으로 개발 할 수 있다.

5. Django의 프로세스는 어떤 순서로 동작합니까?

클라이언트로 부터 요청(Request)를 받으면 URLconf 모듈을 이용하여 URL을 분석한다.
URL 분석 결과를 통해 해당 URL에 매칭되는 View를 실행한다.
View는 자신의 로직을 실행하고, 데이터베이스 처리가 필요하면 Model을 통해 처리하고 그결과를 반환 받는다.
View는 자신의 로직 처리가 끝나면 Template을 사용하여 클라이언트에 전송할 HTML 파일을 생성한다.
View는 최종 결과로 HTML 파일을 클라이언트에게 보내 응답(Response)한다.

6. Django의 MTV 패턴 시스템은 무엇입니까?

MTV(Model-Template-View)는 Model(모델), Template(템플릿), View(뷰)
로 장고의 디자인 패턴입니다

model은 데이터 모델을 의미합니다.

Django의 model 모듈을 이용해 models.py 파일에 class를 만들고 그 속성을 기입하면 하나의 테이블 형태와 동일하게 됩니다.

Template은 사용자가 직접 접근하는 html등과 같은 페이지입니다. 후술하겠지만, urls.py라는 url 패턴에 따라 특정 함수를 불러오는 동작에서 Template을 설정하여 사용자에게 보여줄 수 있습니다.

View는 이름 때문에 Template과 혼선이 올 수 있지만, 실제 역할은 Template에서 받아지는 request(요청)에 대해 처리하고 response(응답) 해주는 역할을 합니다

7. ORM 대해서 설명하시오

ORM이란 Object-Relational Mapping의 약자로 객체(Object)와 관계형 데이터베이스(Relational Database)의 데이터를 매핑(Mapping)해주는 것을 의미한다. 객체 간의 관계를 바탕으로 SQL을 자동 생성하여 sql쿼리문 없이도 데이터베이스의 데이터를 다룰 수 있게 해준다.

데이터베이스의 테이블을 객체지향 프로그래밍에서 흔히 사용하는 객체(Class)처럼 사용할 수 있도록 해주는 기술이다.

기존 쿼리문을 작성하여 데이터베이스를 조작하는 것을 넘어서서 더 효율적이고 가독성 및 유지 보수에 적합한 코드를 만들기 위해 나온 기술이다.

8. django orm 의 장단점

1. 장점

완벽한 객체지향적인 코드 -> 직관적인 이해가 쉬움

재사용, 유지보수, 리팩토링의 용이성

DBMS(DataBase Management System) 종속성 하락

b. 단점

1) ORM이 모든 걸 해결해줄 수 없다. -> 적절하게 SQL문을 사용할 수 있어야한다.

2) 복잡한 쿼리문의 경우 오히려 SQL문으로 사용이 직관적이면서 효율적일 수 있다.

9. django 어드민이란

Django의 admin은 우리가 설계한 모델에 맞추어서 자동으로 생성되는 관리자 페이지입니다.

슈퍼유저를 생성하고, 슈퍼유저 로그인을 통해 데이터를 직접 넣고 수정, 삭제가 가능

10. Django Template Engine은 무엇이고 어떤 기능을 제공합니까?

jango Template Engine 은 jinja2 이다

동적 웹페이지를 구성할 때 ajax가 아닌, 서버에서 곧바로 웹페이지 로딩과 동시에 변수값을 html 이나 js 할당하고 싶을 때 템플릿 변수를 통해 할당 할 수 있습니다. 또한

템플릿 언어로써 html 문서상에서 반복문,조건문 등을 사용할 수 있습니다.

11.Django를 통해 CRUD를 구현하는 방법에 대해서 HTTP Method와 함께 설명하시오

  1. HPPT GET 메소드 통해 Read 한다. request 로 get 요청이 오면 여러가지 조건에 맞는 데이터를 가지고오기 위해서 여러가지 쿼리셋 함수를 실행할 수 있다

  2. HPPT POST 메소드를 통해 Create를 한다. request로 post 요청이 오면 reqeust body 에 있는 데이터를 받아와 데이터를 검증하고 객체의 필드에 해당하는 데이터를 전달하면 데이터가 table 에 추가 된다.

  3. HTTP PUT 메소드를 통해 Update 를 한다. request 로 put 요청이 오면 reqeust body 에 있는 데이터를 받아와 데이터를 검증하고 update 또는 save 함수를 실행 해서 데이터를 수정 할 수 있다.

  4. HTTP Delete 메소드를 통해 Delete를 한다. reqeust 로 delete 요청이 오면 객체의 id값으로 데이터를 조회, 검증하고 delete함수로 데이터를 삭제 할 수 있다.

  5. Django에서 테이블을 설계하고 데이터베이스에 반영하는 방법에 대해서 설명하시오

    1.models.py 에서 어떤 종류의 데이터를 처리하고 싶은지 class로 정의한다

    2.테이블 간의 관계가 필요하다면 관계를 맺어준다

    3.python manage.py makemigrations 을 통해 python code 를 db가 알아들을 수 있게 번역하고 python manage.py migrate 을 통해 migrate를 실행 한다.

12. 회원가입을 할 때 비밀번호를 암호화하여 저장하는 이유는 무엇입니까?

1.사용자가 고유 개인정보는 유출시 서비스에 심각한 타격을 입힐 수 있음

2.데이터 베이스가 무조건적으로 안전한 것 은 아니다

3.내부자에 의해 개인정보가 유출되면 행정처분을 받을 수 있다.

13. JWT 에 대하여 설명하시오

1.JWT(Json Web Token)이란 Json포멧을 이용하여 사용자에 대한 속성을 저장하는 claim 기반의 web Token 이다. jwt는 토큰 자체를 정보로 사용하는 self-Contained 방식으로 정보를 안전하게 전달한다.

2.jwt는 Header,Payload,Sinatur 의 3부분으로 이루어지며 Json 형태인 각 부분은 Base64Url로 인코딩되어 표현한다.

토큰의 헤더는 typ와 alg 두가지 정보로 구성된다. alg 는 헤더를 암호화 하는 것이 아니고, signature를 해싱하기 위한 알고리즘을 지정하는 것이다.

typ → 토큰의 타입을 지정

alg → 알고리즘 방식을 지정, 서명 및 토큰 검증에 사용

payload

토큰의 페이로드에는 토큰에서 사용할 정보의 조각들인 Claim 이 담겨있다.

클레임은 총 3가지로 나누어지며, Json형태로 다수의 정보를 넣을 수 있다.

Signature

서명은 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드이다. 서명은 위에서 만든 헤더와 페이로드의 값을 각각 BASE64URL로 인코딩하고, 인코딩한 값을 비밀 키를 이용해 헤더에서 정의한 알고리즘으로 해싱을하고, 이 값을 다시 BASE64Url 로 인코딩 하여 생성한다.

15. JWT의 Access Token과 Refresh Token은 왜 필요한가요?

Access Token 만을 통한 인증 방식의 문제는 만일 제 3자에게 탈취당할 경우 보안에 취약하다는 점이다.Access Token은 발급된 이후, 서버에 저장되지 않고 토큰 자체로 검증을 하며 사용자 권한을 인증하기 떄문에, Access Token이 탈취되면 토큰이 만료되기 전 까지, 토큰을 획득한 사람은 누구나 권한 접근이 가능해 지기 때문이다.

JWT는 발급한 후 삭제가 불가능하기 때문에, 접근에 관여하는 토큰에 유효시간을 부여하는 식으로 탈취 문제에 대해 대응을 하여야 한다.

이처럼 토큰 유효기간을 짧게하면 토큰 남용을 방지하는 것이 해결책이 될 수 있지만, 유효기간이 짧은 Token의 경우 그만큼 사용자는 로그인을 자주 해서 새롭게 Token을 발급받아야 하므로 불편하다는 단점이 있다. 그렇다고 무턱대고 유효기간을 늘리자면, 토큰을 탈취당했을 때 보안에 더 취약해지게 된다.

그리하여 Access Token 의 유효기간은 짧게, RefreshToken 의 유효기간은 길게 설정한다.

profile
진킴

0개의 댓글