<오늘 한 일/>
- 데일리 과제[Django 50문 50답]
- FBV와 CBV는 각각 무엇이며, 어떤 차이가 있습니까?
- FBV와 CBV는 Django에서 사용하는 두 가지 다른 뷰(view) 작성 방식입니다. 뷰는 사용자의 HTTP 요청(request)에 응답(response)하는 핵심 컴포넌트로, 웹 애플리케이션의 동작을 결정합니다.
- 먼저, FBV는 Function-Based Views의 약자로, 함수를 사용하여 뷰를 작성하는 방식입니다. 요청(request)을 처리하는 로직을 각각의 함수에 직접 작성합니다. 함수는 특정 URL 경로와 연결되어 사용자 요청에 응답합니다. 일반적으로 작은 프로젝트에서 사용되며, 코드가 간결하고 이해하기 쉽습니다.
- CBV는 Class-Based Views의 약자로, 클래스를 사용하여 뷰를 작성하는 방식입니다. 요청(request)을 처리하는 로직을 클래스의 메서드로 구현합니다. 코드의 재사용성이 높아 큰 프로젝트에서 주로 사용됩니다.
- FBV와 CBV의 주요 차이점은 구현 방식, 확장성, 코드 가독성 등을 얘기할 수 있습니다.
- 구현 방식: FBV에서는 함수에 로직을 작성하는 반면, CBV에서는 클래스와 메서드를 사용하여 동일한 코드를 구현합니다.
- 확장성: CBV는 클래스간의 상속을 통해 기능과 코드를 재사용하고 확장할 수 있습니다. 반면에, FBV에서 코드를 재사용하려면 별도의 함수로 분리하고 호출해야 합니다.
- 코드 가독성: 작은 프로젝트에서는 FBV가 읽기 쉽고 이해하기 쉽습니다. 그러나 프로젝트가 커지면 CBV의 구조가 코드 가독성을 높이는데 도움이 됩니다.
- 테스트코드를 작성하는 이유는 무엇이며 어떤 장점이 있습니까?
- 테스트 코드를 작성하는 이유는 애플리케이션의 기능이 정상적으로 작동하는지 확인하고 버그를 찾아 개선하는 데 있습니다. 테스트 코드는 개발자가 작성한 코드가 요구 사항을 충족하는지 검증하는 자동화된 방법입니다. 테스트 코드의 장점은 안정성, 수정 용이성, 유지보수성, 품질 향상, 개발 시간 단축 등이 있습니다.
- 안정성: 테스트 코드를 활용하면 애플리케이션 기능의 정상 작동 여부를 확인할 수 있습니다. 이를 통해 회귀 테스트에 따른 문제를 찾아내고 이를 개선하여 전체 시스템의 안정성을 높일 수 있습니다.
- 수정 용이성: 코드를 수정할 때 테스트 코드가 없다면 이전에 작성된 코드의 기능이 변경사항에 영향을 받아 동작하지 않을 수 있습니다. 이때 테스트 코드를 작성해두면, 변경사항이 기존 코드의 작동에 영향을 주지 않는지 빠르게 확인하고 수정할 수 있습니다.
- 유지보수성: 테스트 코드를 활용하면 시간이 지난 후에도 용이하게 기능 확인 및 코드 유지보수가 가능합니다. 또한 테스트 코드를 작성하면 프로젝트 구조에 대한 이해도가 높아지기 때문에 새로운 멤버가 프로젝트에 참여하거나 기능을 추가할 때 더 빠르게 작업을 시작할 수 있습니다.
- 품질 향상: 테스트 코드를 작성하면 기능의 정확성 및 성능을 측정하고, 이를 바탕으로 소프트웨어의 전반적인 품질을 개선할 수 있습니다. 이를 통해 향후 사용자들이 만나게 될 문제를 최소화할 수 있습니다.
- 개발 시간 단축: 초기에는 시간이 소요된다고 느낄 수 있지만, 테스트 코드를 작성함으로써 기능 검증 및 문제 해결 과정이 자동화되어 개발 시간이 단축됩니다.
- 테스트 코드를 작성하는 이유는 애플리케이션의 기능이 정상적으로 작동하는지 확인하고 버그를 찾아 개선하는 데 있습니다. 테스트 코드는 개발자가 작성한 코드가 요구 사항을 충족하는지 검증하는 자동화된 방법입니다. 테스트 코드의 장점은 안정성, 수정 용이성, 유지보수성, 품질 향상, 개발 시간 단축 등이 있습니다.
- 과제 외 Django 50문 50답
- Django에서 테이블을 설계하고 데이터베이스에 반영하는 방법에 대해서 설명하시오.
- 앱 생성 후 장고 프로젝트에 앱이 생성되었음을 알리기 위해 프로젝트 폴더 내 settings.py 파일에서 INSTALLED_APPS 리스트에 생성한 앱 이름을 추가합니다.
- 그 다음 models.py 파일에서 models.Model 을 상속받은 class에 필드를 정의하면 정의한 필드들을 가진 하나의 모델, 즉 테이블이 생성됩니다.
- 터미널에 python manage.py makemigrations 명령어를 입력해서 장고에게 방금 생성한 모델을 알려주고, python manage.py migrate 명령어를 입력하면 데이터베이스에 해당 모델이 반영됩니다.
- 회원가입을 할 때 비밀번호를 암호화하여 저장하는 이유는 무엇입니까?
- 데이터베이스가 해커에 의해 노출되었을 때 비밀번호가 암호화되어 있지 않으면 로그인 해야만 알 수 있는 정보들까지 모두 노출되어 더 큰 피해를 야기합니다.
- 그러나 비밀번호가 암호화되어 있으면 적어도 해커들이 회원들의 계정에 함부로 로그인 할 수 없습니다.
- 또한, 데이터베이스에 접근 가능한 내부 직원이 회원의 정보를 악용할 가능성을 차단할 수 있습니다.
- JWT에 대해서 설명하시오.
- JWT은 JSON Web Token의 약자로, 웹 애플리케이션에서 사용하는 인증 및 데이터 교환 표준입니다. 주로 클라이언트와 서버 간 인증, 권한 정보 전달에 사용되며, 클라이언트와 서버가 암호화된 토큰 형태로 데이터를 주고받습니다. JWT는 크게 Header, Payload, Signature 이 세 부분으로 구성되어 있습니다
- Header: 토큰의 종류(typ)와 사용되는 해시 알고리즘(alg) 정보를 담는 JSON 객체입니다. 이 정보는 JWT 토큰을 구분하고 처리하는 데 필요한 메타데이터를 제공합니다.
- Payload: 토큰에 실제로 담길 데이터, 즉 "Claims"를 포함하고 있습니다. Claims는 토큰의 발행자, 수신자, 만료 시간 등의 정보를 담는 JSON 객체입니다. 이 데이터는 사용자 인증에 필요한 데이터를 포함하며, 필요에 따라 여러 가지 Claims를 사용할 수 있습니다.
- Signature: Header와 Payload를 암호화하여 만들어진 문자열입니다. 서버는 이 서명을 통해 토큰의 무결성을 검증하며, 토큰이 변경되거나 변조되었는지를 확인할 수 있습니다. 서명은 저장된 비밀 키 또는 공개 키를 이용해 생성됩니다.
- JWT는 클라이언트와 서버 상호 간에 효율적으로 정보를 교환하고자 하는 애플리케이션에서 광범위하게 활용되며, 특히 웹 API 인증에서 많이 사용됩니다. 클라이언트가 서버에 요청을 보낼 때 HTTP 헤더(Authorization Bearer 토큰)에 JWT 토큰을 포함시킬 수 있으며, 이 토큰은 서버가 클라이언트를 인증하고 클라이언트의 권한을 확인하는 데 사용됩니다.
- JWT은 JSON Web Token의 약자로, 웹 애플리케이션에서 사용하는 인증 및 데이터 교환 표준입니다. 주로 클라이언트와 서버 간 인증, 권한 정보 전달에 사용되며, 클라이언트와 서버가 암호화된 토큰 형태로 데이터를 주고받습니다. JWT는 크게 Header, Payload, Signature 이 세 부분으로 구성되어 있습니다
- JWT의 Access Token과 Refresh Token은 왜 필요한가요?
- 보안을 강화하고, 사용자 경험을 향상시키기 위해 필요합니다.
- Access Token의 주기를 짧게 했을 때 Access Token의 유효기간이 만료되면 Refresh Token을 이용하여 사용자가 다시 로그인 할 필요없이 계속해서 사이트를 이용할 수 있습니다.
- Access Token의 주기가 짧으면 해커에 의해 Access Token이 탈취당하더라도 토큰이 만료되면 더이상 공격을 할 수 없기 때문에 보안상의 이점이 있습니다.
- Django의 기본 기능을 사용하는 것과 JWT를 사용하여 로그인 기능을 구현하는 것에는 어떤 차이점이 있습니까?
- Django 기본 인증 기능:
- 인증 방식: 서버 기반 인증으로 웹 브라우저와 서버 간에 세션을 통해 인증 상태를 관리합니다. 서버에서는 세션 ID로 사용자를 식별하며, 클라이언트의 브라우저는 쿠키에 세션 ID를 저장합니다.
- 쿠키 및 세션: 사용자의 인증 상태는 서버의 세션 저장소와 클라이언트의 쿠키를 활용하여 저장됩니다. 이로 인해 서버에 부가적인 세션 관리를 위한 리소스가 소모될 수 있습니다.
- 주로 전통적인 웹 애플리케이션에서 사용되며, 클라이언트-서버 간 인증 상태의 관리에서 유용합니다.
- JWT 기반 인증:
- 인증 방식: 토큰 기반 인증으로 사용자의 인증 정보와 권한을 암호화된 토큰에 저장합니다. 서버는 클라이언트로부터 전달된 토큰을 확인하여 사용자를 인증합니다.
- 토큰 저장: 클라이언트는 로컬 저장소, 세션 저장소 또는 쿠키에 토큰을 저장할 수 있습니다. 이로 인해 서버는 인증 상태를 별도로 관리할 필요가 없으며, 서버의 부하를 줄일 수 있습니다.
- 주로 SPA(Single Page Application)나 모바일 애플리케이션, 분산되어 있는 여러 서버가 제공하는 API에서 사용되며, 클라이언트-서버 간 인증 상태의 유지 필요성을 줄입니다.
- Django 기본 인증 기능:
- 멘토링&이력서 피드백
- 면접
- 기술 면접 시 파이썬 언어 관련에 대한 답변 준비
- 트러블 슈팅에 관련 질문에 대한 답변 준비
- 이력서
- 줄글로 인한 가독성 해결해야 함 -> 키워드 중심으로
- 이력서에 신문방송학과-손해평가사-개발자 과정을 잘 풀어 쓰기(관련 질문에 대한 답변 준비하기/ 왜 전향했는지 등)
- 왜 내가 편하게 물어볼 수 있는 사람인지 구체적으로 적을 것(지금은 너무 추상적임)
- 적절한 곳에 볼드처리할 것(지금은 볼드를 너무 남발함)
- 핵심 경험 부족함 -> 더 채워넣을 것
- 프로젝트 팀노션, SA 내 노션에 정리해서 이력서에 링크 걸기
<느낀 점/>
- 멘토링 하면서 느낀 건 면접 연습을 진짜 빡시게 해야겠구나 하는 것...
- 내 머릿속에는 내용이 있는데 내 언어로 정리되어 있지 않으니 자꾸 버벅이고 핵심 내용을 빙빙 둘러말한다
- 연습연습연습!!!
<내일 목표/>
- 피드백에 따라 이력서 수정하기
- 이력서로 받을 수 있는 예상 질문에 대한 답변 준비하기
- 알고리즘 문제...쫌 풀어보자!