본문 바로가기

전체 글66

[Git] Github에서 협업하기 좋은 것들 Issue 작업이 되는 단위를 의미하며 새로운 기능을 구현(FEAT)하거나 리팩토링(REFACTOR)하거나 수정(FIX)할 때 남기는 내용이다. 이슈를 등록하면 대응하는 feature 브랜치를 생성한다. 💡main and feature/hangman are entirely different commit histories 만약, feature branch에서 github에 수정 내역을 올릴 때, 아래와 같은 화면이 나타나 merge가 되지 않는 문제가 발생한다면 생성된 브랜치와 이전에 작업했었던 브랜치가 히스토리가 달라 발생한 문제이다. 이러한 경우 겁내할 필요없이 시점을 맞춰주면 해결이 가능하다. 우선, main 브랜치를 `clone`하고 `git pull origin main`으로 시점을 맞춰준다. 그.. 2023. 12. 7.
JWT(Json Web Token)에 대한 이론적 이해 인증과 인가 인증에 대해서는 알겠지만 인가에 대해서는 잘 이해가 안될 것이다. 인증(Authentication)은 사용자가 이 서비스의 대한 권한을 부여받은 사용자라는 것을 인증하는 절차이고 인가(Authorization)은 이미 인증이 끝난 사용자가 해당 기능을 사용하기 위한 권한을 허가받는 절차라고 한다. 오늘은 지난 세션인증 방식에 이어 토큰 인증에 대해 중심적으로 다루고 대표적인 JWT(Json Web Token)에 대해서도 알아보려고 한다. 인증 방식 먼저, Client가 회원가입을 하게되면 해당 ID와 비밀번호가 서버 테이블에 저장되게 된다. 이때 테이블에 PW 그대로 저장되는게 아니라 한번 Salting + Hashing을 거쳐 저장되기 때문에 보안을 어느정도는 유지할 수 있다. 이렇게 해시.. 2023. 12. 6.
[프리온보딩] Docker 이미지와 네트워크 Docker 이미지 Docker 이미지를 다운받게되면 다음과 같은 화면을 볼 수 있다. 이미지를 다운받게되면 하나하나 데이터를 받게 되는데 이걸 레이어(layer) 라고 한다. 레이어는 도커 이미지를 `build`할 때 Dockefile의 정의된 명령문의 순서대로 실행이 된다. 즉, 이미지는 레이어 구조로 이루어져 있다. 우리는 Docker 이미지를 생성하기 전 Dockerfile을 빌드하게 되는데 로그를 확인해보면, Dockerfile에 명령한 순서대로 이미지가 빌드되는 것을 확인할 수 있다. Docker 네트워크 Docker 네트워크는 격리된 컨테이너들을 서로 통신할 수 있게 도와준다. `docker network ls` 커맨드를 사용하면 Docker 네트워크 목록을 확인할 수 있다. 네트워크 드라이.. 2023. 12. 5.
쿠키(Cookie)와 세션(Session) 다음 포스팅으로 로그인과 회원가입에 대해 접하기 전 쿠키와 세션에 대한 내용을 다룰 예정이다. 쿠키와 세션은 서버와 클라이언트 간의 연결을 유지하는 역할을 한다. 우리가 보통 폼을 작성해서 POST 요청하면 응답을 받고 끝나는 HTTP와 다르게 연결이 지속된다라는 특징이 있다. 그렇다면 이 쿠키와 세션에 대해 자세히 알아보자. 💡 HTTP 프로토콜의 특징 웹에서 리소스를 교환할 수 있는 통신 규약 1. 비연결성(Connectionless) : 서버가 클라이언트의 요청을 응답하면 연결이 종료된다. 2. 무상태(stateless) : 연결이 종료되면 상태 정보는 유지 되지 않는다. 더보기 쿠키 세션 저장 위치 Client Local Server 보안 클라이언트에 저장하므로 보안 취약 Session ID만 저.. 2023. 12. 5.
Django에서의 CSRF, XSS 금일 포스팅에서는 웹 개발에서 알아두어야할 XSS, CSRF 보안 문제에 대해서 포스팅할 예정이다. XSS(Cross Site Scripting) XSS 공격은 웹 사이트에 스크립트를 삽입하여 쿠키나 개인정보를 빼돌리는 해킹 기법이다. 주로 사용자의 입력 데이터를 검증하지 않을 때 발생하며 게시판 앱을 제작할 때 발생하는 보안 문제점이다. 이외에도 유저를 삭제하는 API를 호출한다거나 특정 웹사이트로 이동시키는 등 공격을 한다. 그렇다면 위 문제를 어떻게하면 해결할 수 있을까? 이스케이프(Escape)를 활용한다. 만약 공격자가 악의적인 목적으로 스크립트를 작성했을 때, 렌더링 시 자동으로 이스케이프를 하게 만들 수 있다. 즉, 게시물을 렌더링 할 때, `` 태그를 문자 형태로 만들어버리는 방법이다. f.. 2023. 12. 3.
[Git] Git Merge 두가지 방식(Fast-Forward, 3-way) 지난 포스팅에서는 해당 브랜치를 앞서 커밋한 브랜치와 병합하기 위해 `git merge 대상 브랜치` 명령어에 대해 알아보았다. 이번 포스팅에는 Merge와 연관된 두가지 방식과 Rebase에 대해 알아보려고 한다. Merge와 연관된 두가지 방식 Fast-Forward Fast-Forward(⏩) 방식은 과거 커밋한 내역을 수정을 하여 포인터만 최신 커밋을 이동하는 방식을 말한다. 어차피 브랜치끼리는 시작점이 동일하기 때문에 단순하게 병합할 수 있는 방식이다. 다음 예시를 보자. main 브랜치에서 ex.py라는 파일을 만들고 Feature/job#1이라는 브랜치를 생성하여 b.py 라는 파일을 생성했다. 그리고 나서, main 브랜치에서 Merge를 시도했다. 이처럼 단순히 최신 커밋으로 포인터를 이.. 2023. 12. 3.
[Git] 기본적인 Git 정리 Git? Git은 리누스 토르발즈가 BitKeeper의 문제점을 해결하고자 만든 VCS(버전관리시스템)이다. Git을 사용하는 이유는 협업 또는 백업 관리등을 위해 사용한다. Git Settings Homebrew를 설치 후, `brew install git` 명령어로 Git을 설치한다. Git과 Github 계정 전역(global) 연결하기 `git config -global user.name "깃허브_계정_이름"` `git config -global user.email "깃허브 가입 이메일"` `git config --list` `git config --global init.defaultbranch main` Master 브랜치에서 Main 브랜치로 이름 변경(의무는 아님) 프로젝트 디렉토리에 `gi.. 2023. 12. 3.
Django - 객체 참조 관계 🚩 문제 발생 우선, 제가 부딪혔었던 이슈는 다음과 같습니다. 유저가 게시글을 생성하는 요청을 할 때, 카테고리를 설정하지 않으면 기본 값으로 '기타'라는 값으로 저장하려고 했습니다. 문제는 '기타'라는 값은 애초에 DB 저장된 값이 아니기 때문에 NOT NULL 문제가 발생하게 된 것이죠. models.py class Article(CommonModel): author = models.ForeignKey("users.User", on_delete = models.CASCADE, related_name="articles",) title = models.CharField(max_length=100, blank=False, null=False) context = models.TextField() catego.. 2023. 11. 29.
[Django] CRUD 구현 오늘은 Django에서 모델을 만들어 보고, 실제로 CRUD 처리를 구현하는 연습을 포스팅하려고 한다. 모델 생성 먼저, 데이터를 처리하기 위해 모델을 생성해야 한다. SQL를 통해 이전 하는 방법도 직접 Model을 작성하는 방법도 있다. 여기서, 특별한 건, `ForeignKey`(외래키)를 사용했다는 것이다. 외래키 작성의 파라미터로 참조할 테이블, 개체 관계 이름, 개체시 동작을 넣는다. 참조할 테이블 : 연결할 모델 클래스를 가리키며 해당 외래키에서 어떤 테이블을 참조할지를 의미한다. 관계상 이름(related_name) : 개체 관계에 사용할 이름을 나타내는데 역방향에서 참조할 때 사용하는 이름이다. Categoty 테이블에서 category 속성을 통해 Memo의 category를 역참조한다.. 2023. 11. 29.