전체 글 260

[HTTP] HTTP 기본

목차 모든 것이 HTTP - 어디까지 할 수 있는가 Client Server 구조 Stateful, Stateless Connectionless (비연결성) HTTP Message HTTP (HyperText Transfer Protocol) HyperText(문서 간의 링크를 통해 연결할 수 있는 HTML)를 전송하는 규약으로 시작되었다. 현재는 모든 형태의 데이터를 HTTP를 통해서 전송한다. (서버간의 통신도 TCP를 사용하지 않고 HTTP를 사용하며, 간혹 게임 서버 같은 경우에는 TCP 계층으로 통신하기도 한다.) 기능은 HTTP/1.1 에 다 들어있고 가장 많이 사용해서 가장 중요한 버전이다. HTTP/2 와 HTTP/3 는 성능 개선만 추가되어 한 것이기에 많이 사용하지는 않는다. RFC26..

Server/HTTP 2022.08.10

[HTTP] URI와 웹 브라우저 요청 흐름

목차 URI 웹 브라우저 요청 흐름 URI (Uniform Resource Identifier) 리소스를 식별하는 통합된 방법 "URI는 Locator, Name 또는 둘 다 추가로 분류될 수 있다." https://www.ietf.org/rfc/rfc3986.txt Resource를 식별한다. 주민번호 같이 자원을 식별하는 것이다. URL은 리소스 위치를 식별하는 것이다. URN은 리소스 이름을 식별한다. URI는 리소스 위치과 이름을 식별한다. Resource는 html 파일 뿐 아니라 실시간 교통정보 같은 식별 가능한 모든 것을 말한다. URN을 정한다고 해서 실제 리소스를 찾는 방법이 없다. 시도 되었지만 잘 마무리 되지 않아서 잘 사용하지 않는다. URL 전체 문법과 각 요소들에 대해 살펴보자 ..

Server/HTTP 2022.08.10

[HTTP] 인터넷 네트워크

HTTP 또한 인터넷 망 위에서 동작하기에 네트워크 지식이 필요하다. 내 PC에서 Server와 Client가 동시에 있으면 Table 연결해서 사용하면 된다. 하지만 Server와 Client가 물리적으로 먼 거리에 존재하면 우리는 인터넷을 사용해야 한다. 그리고 복잡한 인터넷 망을 이해해야 데이터를 인터넷 망을 통해 전달할 수 있다. 노드는 중간에 존재하는 각각의 서버이며 인공위성, 미국에 있는 아마존 서버 등등 여러 서버를 거쳐서 클라이언트에게 전달될까? 도대체 어떤 규칙으로 어떻게 넘어갈까? IP(Internet Protocol) 복잡한 인터넷 망에서 내가 원하는 곳까지 도달하는게 가능할까? 우리는 영어를 못하는데, 미국에서 스마트폰 없이 가장 가까운 이마트를 찾아가는 것이 가능할까? 그것이 가능..

Server/HTTP 2022.08.10

[HTTP] 기본 지식

기존 HTTP 동작 방식을 이해하고 있었고, 백엔드 개발자와 소통 과정에서 만들어진 API를 문서를 통해 잘 사용할 수는 있었다. 그런데 서버 개발을 시작하면서 API를 구현할 때, GET으로 구현 후 header로 받을지 POST를 통해 body로 받을지 어떤 것이 더 효율적이며 좋은지를 구분할 수 없었기에 배움이 필요하다고 생각했다. 그래서 배달의 민족 기술이사인 김영한 님의 "모든 개발자를 위한 HTTP 웹 기본 지식"을 수강하기로 했다. 총 강의는 340분(6시간 40분)이며, 8월 10일~11일 중으로 강의를 끝내고 만들던 API 구현을 마무리할 생각이다. 참고로 저자는 Java+SpringBoot가 아닌 Python+Django를 사용해서 백엔드를 구현하고 있다. 강의를 시작하며 해당 강의는 ..

Server/HTTP 2022.08.09

[Django] simple-jwt

https://naon.me/posts/til57 Django Rest Framework 활용하기 2 - @api_view - out.log Udemy 강의를 들으면서, DRF 공식문서를 보면서, 그리고 구글링하면서 정리한 내용입니다. Django REST Framework - Level One The @api_view Decorator - Part One DRF에서는 API 뷰에 쓸 수 있는 두 가지 wrapper를 제공한 naon.me https://blaize.tistory.com/80?category=935057 DRF 함수형 뷰 (@api_view) users/urls.py from django.urls import path from . import views app_name = 'users' ..

카테고리 없음 2022.08.08

[Django] 인증 인가 참고자료

User Token Authentication https://www.youtube.com/watch?v=s3jTweZiqfI&t=288s https://velog.io/@killi8n/Dnote-5-1.-Django-권한-설정-및-로그인-회원가입-구현-tmjmep5tcm Dnote 5 - 1. Django - 권한 설정 및 로그인 / 회원가입 구현 일단 권한을 설정 해야 하니까, Django로 돌아옵시다. django-rest-knox 라는 패키지를 다운로드 해야합니다. settings.py 이제 기본 권한을 설정했으니, notes 모델에서 owner 필드를 추가해주겠습니다. notes/ velog.io https://devkor.tistory.com/entry/03-Django-Rest-Framewor..

Server/Django issue 2022.08.08

[Django] Custom User

Reference https://dev-yakuza.posstree.com/ko/django/custom-user-model/ 장고(django)의 커스텀 유저 모델(Custom User Model) 장고(django) 프로젝트에서 사용되는 유저 모델(User Model)을 입맛에 맞게(Customization) 수정하여 사용해 봅시다. dev-yakuza.posstree.com https://blaize.tistory.com/89 Django User model Custom AbstractUser (사용자 정의 사용자 모델 대체) 일부 프로젝트에는 Django의 내장 사용자 모델이 항상 적절하지 않은 인증 요구 사항이 있을 수 있다. 예를 들어 일부 사이트에서는 사용자 이름 대신 이 blaize.tis..

Server/Django issue 2022.08.05

[Django] MySQL 테이블 전체 삭제

$ mysql -uroot -p mysql> SET @tables = NULL; SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables FROM information_schema.tables WHERE table_schema = 'DB명'; -- specify DB name here. SET @tables = CONCAT('DROP TABLE ', @tables); PREPARE stmt FROM @tables; EXECUTE stmt; DEALLOCATE PREPARE stmt; Reference https://bizmark.co.kr/setup-and-tips/mysql/mysql-테이블만-전체-삭제-하는법/ Mysql 테이블만 전체 삭제 하..

Server/Django issue 2022.08.05

[Django] User model 확장

Reference https://yonghyunlee.gitlab.io/python/user-extend/ django login 유저 확장 방법 - 김땡땡's blog 장고의 auth 기능은 User 객체를 제공한다. 우리는 기본 default로 이 User 객체로 여러 인증을 구현할 수 있다. User model User model의 기본적으로 있는 여러 필드들이 있다. username 필수사항이다. 150자 이 yonghyunlee.gitlab.io https://github.com/dev-yakuza/django_custom_user_model GitHub - dev-yakuza/django_custom_user_model Contribute to dev-yakuza/django_custom_us..

Server/Django issue 2022.08.04

[Django] mysql 로그인 오류 해결방법

https://2vup.com/mysql-password/ [mySQL8] 로그인 오류 해결방법 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) / ERR 🔒 mysql 비밀번호 재설정 ❌ 오류 mysql에서 옳은 비밀번호를 입력했음에도 불구하고 (28000): Access denied for user ‘root’@‘localhost’ (using password: YES) 오류를 마주했다. mysql> UPDATE user set password=passwor 2vup.com

Server/Django issue 2022.08.04

[Django] mysqlclient 설치 에러 해결

macOS 환경에서 pip install mysqlclient를 실행할 경우 설치에러가 발생하는 경우가 존재한다. 해결 방법은 간단하다. brew install mysql 을 진행하고 pip install mysqlclient 를 실행하면 정상적으로 설치된다. $ brew install mysql $ pip install mysqlclient + 추가 우분투 linux 에서 pip mysqlclient 설치 해결 https://hongjuzzang.github.io/howto/install_mysql_ubuntu/ [Ubuntu 18.04] mysqlclient install Ubuntu 18.04에서 mysqlclient 설치 오류 해결하기 hongjuzzang.github.io

Server/Django issue 2022.08.04

[Django] Pycharm으로 프로젝트 셋팅

Pycharm으로 가상환경 및 셋팅 원격서버 SSH 연결하는 방법 Run을 통해 서버 실행하는 방법 - 내가 원하는 서버를 실행할 수 있게 셋팅 Reference https://meongj-devlog.tistory.com/33 Pycharm - Django 프로젝트 생성 및 가상환경 구축하기 파이참(PyCharm) IDE 을 사용하여 장고(Django) 프로젝트를 생성하고 python 가상환경을 구성해보도록 하겠습니다. 파이참(PyCharm) 설치 https://www.jetbrains.com/ko-kr/pycharm/download/#section=windows 다.. meongj-devlog.tistory.com https://epicarts.tistory.com/99 Pycharm으로 원격 서버 ..

[Django] Git 초기화 & Github 연결

Git 초기화 git을 이용하여 관리할 수 있도록 초기화 한다. manage.py가 있는 디렉토리에서, git init으로 git을 초기화 시킨 다음에 .gitignore 파일을 먼저 작성한다. .gitignore 앞서 생성하였던 my_settings.py와 같이 공유하면 안되는 것들을 구분하기 위해 .gitignore파일을 만들어 관리하는 것이다 먼저, gitignore사이트 에 접속하여 아래와 같은 키워드들을 추가하고 Create 를 한다. || python, pycharm, VisualStudioCode, vim, macOS, Linux, zsh... || 그리고 그 내용들을 .gitignore 파일을 열어서 내용를 추가하고 my_setting.py 파일도 추가한다. #################..

Server/Django issue 2022.08.03

[Django] Project 초기 세팅

프로젝트 셋팅에 대한 자료가 방대해서 싹다 모아보여 한다. 가상 환경 추가 및 적용 (Mac 적용: source venv/bin/activate, Mac 해제: venv/bin/deactivate) Django 설치 다음과 같이 업데이트가 가능하다면 pip와 setuptools를 업데이트 한다. # pip를 최신 버전으로 업데이트 $ python -m pip install --upgrade pip # setuptools를 최신 버전으로 업데이트 $ pip install --upgrade setuptools # 해당 가상 환경에 장고 설치 $ pip install django $ pip install django=원하는버전 폴더 하나 생성: DjangoProject 그 안에, django-admin sta..

Server/Django issue 2022.08.03

[Django] migration 파일은 커밋 되어야 하는가?

마이그레이션 파일을 다루는 절대 원칙 이미 커밋된 마이그레이션 파일은 지우면 안 됩니다. 위와 같은 이유로 .gitignore에 포함시키지 않고 코드 저장소(Github)에 업로드하여 관리합니다. 코드 저장소에 올리기 전에 혹은 프로덕션에 반영하기 전에 문제가 없는지 확인합니다. 왜 지우면 안 되나요? 디비를 모두 날렸어도 처음부터 끝까지 마이그레이션 파일을 실행했을때 날리기 전의 디비의 스키마를 그대로 복구할 수 있어야만 완전한 마이그레이션 파일입니다. 그런 상태일때만 여러분 각자의 로컬 디비가 서로 같은 상태를 유지하며 개발되고 있음을 보장할 수 있기 때문입니다. 그래서 마이그레이션 파일은 디비에 변경점을 가하기 위한 도구라기보단 디비의 변경점을 기록해두는 커밋 로그처럼 다뤄야 합니다. 가끔 심각하게..

Server/Django issue 2022.08.02

[Django] Reverse relations과 Related_name

1:N 이나 N:M 관계가 성립할 때, 우리는 역참조를 할 수 없다. 하려면 classname_set을 이용해서 접근할 수 있는데 이때 이름을 지정하는 것이 related_name이다. related_name가 필수인 경우가 존재하고, 그것은 정확히 어떤 field를 갖고 와야하는지 명확하지 않을때이다. 앞으로 프로젝트가 커지면 1:N이나 N:M 관계를 갖는 테이블이 많이 생긴다. 이때, related_name는 이를 해결해 줄 대표적인 방법이다. https://velog.io/@gillog/DB-11-1N-NM-관계 [DB] 1:1, 1:N, N:M 관계 관계형 데이터베이스(Oracle, MySQL, MS-SQL, SQLite 등등)는 엔티티끼리 관계를 맺을 수 있어서 관계형 DB라는 이름이 붙었다.엔..

[Django] DRF Pagination

실제 서비스의 경우에는 레코드의 개수가 많을 것이고 이 경우 하나의 API 요청으로 모든 레코드를 받는 것은 오랜 시간이 걸리게 됩니다. 따라서 이런 경우 페이지를 나눠서 요청을 해야합니다. 다행히도 DRF 에서는 이러한 pagination 기능을 제공하고 있습니다. PageNumberPagination 과 LimitOffsetPagination pagination 을 하는데는 크게 두 가지 방법이 있습니다. 두 방법 모두 url 의 get parameter 를 이용하여 이를 지원해줍니다. 각각에 대해 알아보도록 하겠습니다. PageNumberPagination page : 몇 번째 페이지인지 표시해줍니다. 페이지는 1부터 시작합니다. page_size : 한 페이지에 몇 개의 레코드를 보여줄지 표시해줍..

[Django] django-rest-knox 란?

django-rest-knox django-rest-knox는 장고(django)의 rest 인증 모듈입니다. Knox는 Django REST Framework의 인증을 보다 쉽게 사용할 수 있도록 도와줍니다. 작은 노력으로 REST 기반의 애플레이션에서 공통적으로 사용하는 패턴을 따르며 안전한 연결을 구성할 수 있는 것이죠. Knox의 인증은 DRF에 내장된 TokenAuthentication과 흡사하게 토큰 기반으로 작동하면서, 기본 DRF이 가지고 있는 몇 가지 문제들을 보완해 줍니다. DRF 토큰은 단일 사용자로 제한되어 있습니다. 이런 제약사항은 토큰이 공유되거나, 여러 기기에서 안전한 연결을 어렵게 만듭니다. 또 서버 측에서 로그아웃될 경우 모든 기기에서 로그아웃되어 버리기도 합니다. Knox..

[Swift] SwiftLint 적용해보기 (저자의 방법은 계속 업데이트 됩니다)

SwiftLint는 무엇이고, 왜 사용할까요? SwiftLint의 정의는 Linter, Formatter Library 입니다. 'Linter'란 커뮤니티나 팀에서 정한 스타일 규칙을 따르지 않는 코드 부분을 식별하고 표시하는 것을 돕습니다. 코딩 표준이라고도 불리는 코딩 컨벤션은 코드를 작성할 때 추천하는 코딩 스타일, 괜찮은 사례등을 모아놓은 가이드 라인 입니다. 우리가 프로젝트를 진행할 때 같이 협업을 하게 됩니다. 만드는 과정에서 협업하는 다른 iOS 개발자의 코드를 리뷰를 하게 될 것입니다. 그런데, 상대방의 코드 작성하는 방법이 나와 많이 다르다면 효율은 당연히 떨어지겠죠. 여백을 주는 방법, 중괄호를 열고 닫는 방법, if-else문에서 else의 위치 등 각 개발자가 다른 습관을 갖는 다면..