SW개발/IT 용어

    [JWT]JWT 사용시 주의할 점 & 문제점

    안녕하세요, 오늘은 지난번 포스팅에 이어 JWT를 무턱대고 사용할 때 생기는 문제점과 주의해야할 점들에 대해서 이야기 해보겠습니다. JWT 사용시 주의할 점 시크릿 키의 설정 JWT의 가장 핵심적인 부분은 시크릿키에 대한 설정입니다. 해당 값을 알아낸다면 토큰을 생성하고 변조하여 악의적인 행동이 모두 가능해집니다. 따라서 시크릿 키만큼은 안전하게 설정할 필요가 있습니다. 시크릿 키의 경우 최소 512 bits 이상의 값을 설정하는 것을 권장합니다. 문자의 길이가 짧고 쉬울수록 브루트포스 어택에 굉장히 취약합니다. 특히, password / secret-key / my-secret 과 같이 유추하기 쉬운 문자의 경우에는 더욱 취약합니다. 따라서, Auto0 에서는 브루트포스 어택에 대비해 512 bits(..

    [JWT]JWT란? (JSON Web Token)

    요즘에는 웹개발을 하다보면 필수적으로 등장하는 단어가 있습니다. 바로 JWT 인데요, 오늘은 이것에 대해 파헤쳐보려고 합니다. 굉장히 많이 언급이 되는만큼 JWT에 대한 중요성은 높다고 할 수 있습니다. JWT는 무엇이고 탄생 배경과 어떤 구조를 가지고 있는지 알아보도록 하겠습니다. JWT 란? JSON Web Token의 약어이며, 사전적 정의는 다음과 같습니다. JWT는 선택적 서명 및 선택적 암호화를 사용하여 데이터를 만들기위한 인터넷 표준으로, 페이로드는 몇몇 claim을 assert 처리하는 JSON을 보관하고 있다. - 위키백과 조금 더 풀어서 설명하자면, 여러가지 정보를 담고 있는 JSON 형태의 토큰이라고 할 수 있습니다. 일반적으로는 웹서비스의 인증 시스템에서 주로 사용됩니다. JWT의 ..

    CORS란? (Cross-origin resource sharing)

    CORS란? 교차 출처 리소스 공유(이하 CORS)는 웹 페이지 상의 제한된 리소스를 최초 자원이 서비스된 도메인 밖의 다른 도메인으로부터 요청할 수 있게 허용하는 구조이다. - 위키백과 CORS 풀어서 설명하기 위키백과의 설명을 예시와 함께 자세히 풀어보겠습니다. 프론트의 도메인은 example.com:8080, 백엔드의 도메인은 example.com:8000 라고 가정하고 설명을 진행하겠습니다. 프론트엔드에서 백엔드 API로 요청을 진행합니다. 백엔드 서버에서는 다른 도메인임을 감지합니다. (포트번호가 상이하기에 다른 도메인으로 취급함) CORS 허용 여부에 따라 프론트엔드의 요청을 허용하거나 거부합니다. 우리는 종종, 개발을 하면서 다음과 같은 메시지를 많이 본 경험이 있습니다. 🚨 Access t..

    [Storage]Cookie vs Local Storage vs Session Storage 차이점

    웹 개발을 하다보면 자연스레 접하게 되는 Cookie, Local Storage, Session Storage의 차이점에 대해서 포스팅해보려고 합니다. 각각 다르다는 것은 알겠지만, 무엇이 어떻게 다를까요? Cookie 란? 쿠키란 인터넷 사용자가 웹 사이트를 방문할 경우 해당 웹 사이트의 서버를 통해 사용자의 컴퓨터에 설치되는 작은 기록 정보 파일입니다. 주로 팝업창과 같은 경우에 이용될 수 있습니다. Cookie 의 특징 웹 사이트에서 쿠키가 설정되면 이후에 일어나는 모든 웹 요청에 쿠키 정보를 포함시켜 웹 사이트의 서버로 전송합니다. 하나의 사이트에서 저장할 수 있는 최대 쿠키 수는 20개이고, 총 크기는 4KB로 제한되어 있습니다. 쿠키는 만료일자를 지정할 수 있어, 지정된 날짜에 자동으로 제거됩..

    [WAS]WAS 와 Web Server의 차이점

    WAS 란? Web Application Server로, 쉽게 말하자면 WSGI + Application Server의 조합을 의미합니다. 클라이언트로 동적인 컨텐츠를 전달해주는 역할을 수행합니다. (주로 데이터베이스 서버와 같이 수행됩니다) 위의 예시와 같은 프로덕션 환경일 경우, Gunicorn + Django의 조합이 WAS가 됩니다. Web Server 란? Web Server는 클라이언트가 요청을 하면 웹 페이지를 클라이언트로 전달하는 역할을 수행합니다. 클라이언트로 정적인 컨텐츠를 전달해주는 역할을 수행합니다. (Static(CSS, JS, Image)파일을 포함한 HTML 문서) 동적인 컨텐츠에 대한 요청이 들어올 경우 WAS에게 요청합니다. (NGINX -> WSGI -> Django ->..

    [SoC]관심사 분리란?

    관심사 분리란? (Separation of concerns) 컴퓨터 프로그램을 구별된 부분으로 분리시키는 디자인 원칙으로, 각 부문은 개개의 관심사를 해결한다 - 위키피디아 https://ko.wikipedia.org/wiki/%EA%B4%80%EC%8B%AC%EC%82%AC_%EB%B6%84%EB%A6%AC 관심사 분리 - 위키백과, 우리 모두의 백과사전 컴퓨터 과학에서 관심사 분리(separation of concerns, SoC)는 컴퓨터 프로그램을 구별된 부분으로 분리시키는 디자인 원칙으로, 각 부문은 개개의 관심사를 해결한다. 관심사란 컴퓨터 프로그램 코드 ko.wikipedia.org 현업에서 개발을 하다보면 처음에는 단순한 기능에 불과했던 것들이 요구사항과 기능들이 추가됨에 따라서 점점 복잡..

    [테스트]단위 테스트(Unit test)란?

    단위 테스트(Unit Test) 단위 테스트는 하나의 모듈을 기준으로 독릭적으로 진행되는 가장 작은 단위의 테스트이다. 여기서 모듈이란 하나의 기능 혹은 .py와 같은 파일을 일컫는 말이다. 예를 들어 회원가입 메소드가 있고 이를 위한 독립적인 테스트를 1개의 단위테스트라고 부를 수 있다. 테스트 작성의 필요성 테스트 종류에는 단위 테스트, 통합 테스트 등 여러가지 종류의 테스트가 존재한다. 각각 종류는 다르지만 테스트 코드를 작성하는 이유는 전부 동일하다. 사람이 하는 테스트는 완벽하지 않다 -> 사람은 기계가 아니기에 항상 모든 조건을 동일하게 테스트 할 수 없다. 테스트에 드는 비용을 절감할 수 있다 -> 직접 기능을 수행하며 테스트를 하는 것 보다 테스트 코드를 돌려보는 것이 시간 절감에 도움 된..

    [Gunicorn]Gunicorn 란? 쓰는 이유는?

    Django 개발을 진행하고 배포를 결정하는 순간부터는 gunicorn이나 uWSGI라는 기술들을 항상 접하게 된다. gunicorn은 WSGI기술의 일종으로서 무슨 역할을 하고 왜 쓰는지에 대해서 알아보자. WSGI 란? 파이썬 애플리케이션이(파이썬 스크립트) 웹 서버와 통신하기 위한 인터페이스이다. 웹서버에서의 요청을 해석하여 파이썬 애플리케이션 쪽으로 던지는 역할을 수행한다. Gunicorn 란? 쓰는 이유는? Gunicorn은 Python WSGI로 WEB Server(Nginx)로부터 서버사이드 요청을 받으면 WSGI를 통해 서버 애플리케이션(Django)로 전달해주는 역할을 수행한다. Django의 runserver 역시도 똑같은 역할을 수행하지만 보안적으로나 성능적으로 검증이 되지 않았기 때..

    [Webhook]웹훅이란?

    Webhook 이란? "A webhook in web development is a method of augmenting or altering the behavior of a web page or web application with custom callbacks." (위키피디아 발췌) 위키피디아의 설명에 따르면 웹훅은 웹페이지 또는 웹앱애서 발생하는 특정 행동(이벤트)들을 커스텀 Callback으로 변환해주는 방법이다. 조금 더 풀어서 설명하자면, 일반적인 API(Polling)는 클라이언트가 서버를 호출하는 방식이다. 하지만 웹훅의 경우 서버에서 특정 이벤트가 발생했을 때 클라이언트를 호출하는 방식이며 "역방향 API"라고도 부른다. callback URL은 서버측에서 이벤트가 발생했을 때 클라이언트..

    [Kubernetes]쿠버네티스란?

    Kubernetes 란? K8s라고도 알려진 쿠버네티스는 컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈소스 시스템이다. 쿠버네티스는 다양한 애플리케이션과 서비스들을 컨테이너화 시킨 다음, 서버에 가져올 경우 적절하게 배치를 해주며 관리를 해주는 Container Orchestration 시스템이라고 생각하면 된다. Container Orchestration 시스템에는 Kubernetes 이외에도 Docker Swarm, Apache Mesos 등이 존재한다. 쿠버네티스의 여정 전통적인 배포 시대 초기에는 애플리케이션을 물리 서버에서 실행하는 방식이었다. 한 물리 서버에서 여러 애플리케이션의 리소스 한계를 정의할 방법이 없었기에, 리소스 할당에 문제가 발생했다. 예를 들어 물리 서..