목록WHAT I LEARN (83)
Nonamed Develog
문제 상황회원 등급을 3단계로 나누는 과정에서, is_authenticated 값을 false로 설정하여 특정 등급을 처리하려 했다. 그러나, 이 설정 때문에 모든 사용자가 로그인을 할 수 없게 되어 문제가 발생했다.원인 분석is_authenticated는 Django에서 인증된 사용자인지를 판단하는 매우 중요한 필드다. is_authenticated 값이 False로 설정되면 Django는 사용자가 인증되지 않은 것으로 간주하고, 로그인을 할 수 없게 된다. 따라서, 해당 필드를 임의로 수정하는 것은 적절하지 않았다.해결 방법is_authenticated 대신, 회원 등급을 처리할 수 있는 별도의 필드 is_master를 새로 추가했다. 이를 통해 사용자의 로그인 여부와 상관없이 회원 등급을 판단할 수..
1. GitHub 리포지토리에 이미지를 업로드하여 사용이 방법은 GitHub 리포지토리 내에 이미지를 포함하고, 이를 README 파일에 표시하는 방식이다.절차:이미지 파일 저장: 먼저 로컬에서 리포지토리의 특정 폴더(예: images/)를 생성한 후, 여기에 이미지 파일을 저장한다. GitHub에 푸시하면 이 이미지 파일이 리포지토리에 포함된다.Markdown 문법 사용: README 파일에서 해당 이미지 파일의 상대 경로를 이용해 이미지를 불러온다. 이때 Markdown 문법을 사용하여 이미지를 표시하는데, ![이미지 설명](이미지 경로) 형식을 사용한다.상대 경로의 중요성: 이미지 경로를 절대 경로로 지정하지 않고 상대 경로로 지정하면, 리포지토리 내 파일 구조와 일치하는 경로로 이미지를 불러온다...
오늘은 Django REST Framework(DRF)에서 사용되는 Permission Class에 대해 학습했다. DRF에서 API 요청에 대한 권한을 설정할 때 request.user를 통해 간단히 접근할 수 있지만, 그럼에도 불구하고 Permission Class를 사용하는 이유가 무엇인지에 대해 고민했다.1. request.user로 권한 설정Django는 기본적으로 request.user를 통해 현재 요청을 보낸 사용자의 정보를 제공한다. 이 정보를 활용하면, 간단한 권한 체크가 가능하다. 예를 들어, 로그인된 사용자만 접근 가능하게 하려면 뷰에서 다음과 같은 방식으로 처리할 수 있다.def get(self, request): if not request.user.is_authenticate..
오늘은 Git에서 Pull Request와 Local Merge에 대해 배웠다. 기존에는 항상 remote에서만 pull request를 통해 merge를 했었지만, 이번에 새로운 방법을 익혔다.Pull Request 방식:기능 개발: 내 로컬에서 새로운 기능 브랜치를 생성하고 개발을 완료한 후, remote로 브랜치를 push한다.Pull Request 생성: GitHub (또는 다른 플랫폼)에서 pull request를 생성하고, 팀원들에게 코드 리뷰를 요청한다.Remote에서 Merge: 팀원들이 코드를 검토한 후, merge를 승인하면 remote에서 기능이 dev 브랜치에 합쳐진다.Local Merge 방식:Remote 브랜치 Pull: dev 브랜치를 최신 상태로 로컬로 가져오기 위해 git ..
오늘부터 프로젝트를 시작해서 SA 문서를 작성하고, 튜터님의 피드백을 받은 내용을 정리하고자 한다. SA 문서: https://www.notion.so/S-A-18b0371e1833439883a0be87d77840ca?pvs=44. 데이터 아키텍처 (ERD)주요 테이블:튜터님 피드백user의 권한을 구분하여 Articles를 사용할 수 있는 user가 있고, NBCNs 을 사용할 수 있는 user을 구분하기 위해Articles와 NBCNs 테이블을 구분하였지만, 비슷한 필드를 가지고 있는 테이블일 경우, 나누지 않고 같은 테이블을 사용하는 것이 좋다고 하셨다. 같은 테이블을 사용할 경우, API 작업이나 메소드 작업하기 용이하기 때문에 같은 필드의 테이블은 하나로 묶는 것이 좋다.그러나 작업 상황에 따..
웹 크롤링이란?웹 크롤링은 프로그램을 통해 웹사이트를 자동으로 탐색하고, 그 안에서 데이터를 추출하는 과정을 의미한다. 이 작업은 "크롤러" 또는 "스파이더"라 불리는 스크립트에 의해 수행되며, 크롤러는 웹 페이지의 링크를 따라가며 데이터를 수집한다. 주로 분석, 모니터링, 데이터베이스에 정보를 저장하는 등의 목적으로 사용된다.웹 크롤링의 주요 개념요청(Requests): 크롤러는 HTTP 요청을 통해 웹 페이지의 내용을 가져온다. Python에서는 주로 requests 라이브러리를 사용해 웹 페이지에 요청을 보낸다.파싱(Parsing): HTML을 가져온 후, 이를 분석하고 필요한 데이터를 추출한다. BeautifulSoup(bs4) 또는 lxml과 같은 라이브러리를 사용해 HTML 구조를 파싱한다.탐..
문제 상황products 앱에서 CategoryViewSet으로 요청을 보낼 때, Postman에서 {"detail": "Not found."} 응답을 받는 문제가 발생했다. ProductViewSet은 정상적으로 작동했지만, categories/ 경로에 요청이 처리되지 않았다.문제 원인라우팅 설정에서, 빈 경로로 등록한 ProductViewSet이 /categories/ 경로를 포함한 모든 요청을 가로채면서, CategoryViewSet으로의 요청이 제대로 전달되지 않았다.초기 코드from django.urls import path, includefrom rest_framework.routers import DefaultRouterfrom .views import ProductViewSet, Categ..
1. 문제 인식: 중복된 코드의 냄새처음에는 각각의 기능(회원가입, 로그인, 프로필 조회, 프로필 수정)에 맞춰 별도의 시리얼라이저를 만들었다. 아래는 그 첫 번째 코드이다.class SignUpSerializer(serializers.ModelSerializer): password = serializers.CharField(write_only=True) class Meta: model = User fields = ['username', 'password', 'email', 'first_name', 'last_name', 'nickname', 'date_of_birth', 'gender', 'bio']class SignInSerializer(serializers..