컨테이너가 등장하기 이전에는 가상화를 통해 운영체제와 독립적으로 동작하는 가상머신에 하드웨어 자원을 할당해 여러 앱들이 각각 다른 환경에서 실행될 수 있었다.하지만 이러한 방식은 각각의 가상머신에 운영체제가 포함되어 지나치게 무거워지는 문제가 있었기 때문에 리눅스에서
일반적으로 웹에서 클라이언트의 요청을 받아 응답을 할 수 있는 컴퓨터를 웹 서버라고 한다. 하지만 이것은 클라이언트의 관점이고, 실제 웹 서버 내부를 들여다보면 웹 서버와 WAS가 분리되어 있다는 것을 알 수 있다. 이제 서버 관점에서 웹 서버에 대해 알아보자. 웹 서
먼저, 특정 유형에 할당된 멘토가 m명일 때 최소 대기시간을 구하는 함수를 작성해 보자. 상담가능 멘토가 없으면 상담 종료시각이 빠른 멘토부터 종료시키는 로직을 작성했다. 상담요청의 길이를 n이라 한다면 시간복잡도는 O(nlogn)이 된다.이제 멘토를 할당할 방식을 생
Web Server는 클라이언트의 요청을 받아 정적인 리소스를 처리할 수 있다. 가령, html, css, js나 이미지 등 이미 작성되어 있는 파일을 보내줄 수 있다. Apache나 Nginx가 대표적인 웹 서버 프로그램 중 하나이다.하지만, 프로그래밍 로직을 실행하
EC2는 가상 서버를 클라우드로 제공하는 서비스이다. 여기서 가상 서버란 가상화된 하드웨어를 의미한다. 물리적 서버 하드웨어를 부분적으로 가상화하고, 이 환경을 제공한다고 생각하면 된다. 이것을 인스턴스라고 부르고 다른 인스턴스와 완전히 독립적인 하나의 컴퓨터로 간주할
원-핫 인코딩은 독립적인 범주형 클래스를 표현하기 위한 형식이다. 예를 들어서 사과, 바나나, 포도를 분류하는 모델의 경우를 보자.이렇게 라벨의 개수 n이 있다면 각 라벨을 해당 인덱스의 값이 1이고 나머지가 0인 n차원 벡터로 표현할 수 있다.문자열을 모델 학습에 그
활성화 함수는 딥 러닝을 위해서 반드시 필요한 요소이다. 이름 그대로 심층 신경망(Deep Neural Network, DNN)을 구성할 때, 은닉층과 출력층에서 나온 출력값을 받아 비선형적으로 변환해 준다.그렇다면 왜 심층 신경망에서는 출력이 비선형적이어야 할까?만약
경사하강법은 모델과 실제 데이터가 일치하도록 매개변수를 조정하기 위해 사용된다. 그렇다면, 실제 데이터가 모델과 일치하는지 판단하는 기준은 무엇인가? 그것은 비용 함수(Cost Function) 또는 손실 함수(Loss function)로 표현된다. 이 비용 함수를
웹을 탐색하며 페이지 정보를 수집하는 것을 크롤링이라 하고, 가져온 페이지를 파싱해서 데이터를 긁어내는 것을 스크래핑이라 한다. python에서는 BeautifulSoup를 사용해서 웹 페이지를 파싱하고 원하는 요소를 셀렉터로 뽑아낼 수 있다.먼저, 다음과 같이 필요한
장고에서 특정 사용자에게 권한을 주고 싶은 경우가 있다. 가령, 커뮤니티에서 모든 글을 삭제하거나 수정할 권한을 가진 관리자 유저가 필요한 경우가 있을 수 있다.이런 경우, 다음과 같은 방법을 사용해서 권한을 부여할 수 있다.커스텀 유저 모델에서 PermissionsM
토큰에 대해 공부하다 보면 refresh토큰과 access토큰이 등장한다. access토큰은 실제 인증에 사용되는 토큰, refresh토큰은 access토큰을 재발급하기 위한 토큰이다. 토큰을 사용해서 인증을 하는 것은 알겠는데, 왜 두 가지의 토큰을 사용하는 방식이
웹에서 토큰이 뭘 의미하는 거야? >토큰이란 사용자 인증 및 권한 부여를 위해 인증된 사용자에게 서버가 발급하는 일련의 암호화된 데이터를 의미합니다. 토큰은 클라이언트 측에 저장되며 인증이나 권한을 요구하는 요청과 함께 전달됩니다. 쿠키-세션 방식 대신 토큰을 사용
모델 시리얼라이저를 사용하면 모델 객체를 JSON으로 직렬화할 수 있다. 그런데, 시리얼라이저 객체를 생성할 때 many=True 옵션을 주어야 하는 경우가 있다.직관적으로 생각하면 여러 모델 객체를 직렬화하기 위해 사용하는 옵션으로 보인다. 하지만 주의해야 할 점이
자바스크립트 객체나 파이썬 딕셔너리는 다음과 같은 형식을 사용한다.마지막 요소 뒤에도 컴마가 따라오는 것을 볼 수 있다.이를 트레일링 콤마라고 하며 작성 및 유지보수의 일관성 및 편의성을 제공하기 때문에 자바스크립트나 파이썬처럼 동적인 스크립트 언어에서는 이를 허용한다
웹에서 쿠키가 뭘 의미하는 거야? >쿠키란 서버에서 생성해 클라이언트에게 제공하는 작은 데이터를 의미합니다. 전달된 쿠키는 클라이언트의 웹 브라우저에 저장되며 HTTP 요청 헤더에 포함되어 서버로 전달됩니다. 쿠키를 왜 사용하는데? >사용자 인증을 유지하거나, 사
프론트엔드와 API 서버를 다른 포트에서 실행 후 API 요청을 했는데 오류가 발생했어요. 뭐가 문제일까요? >해당 API 서버에서 요청에 대한 응답 헤더에 CORS 규칙을 포함하지 않았기 때문입니다. CORS는 무엇인가요? >CORS는 Cross-Origin R
시리얼라이저가 무엇이고 왜 사용해야 하는지 알아본 후, DRF에서 어떻게 사용할 수 있는지 확인해보자.시리얼라이저는 객체나 데이터를 저장하거나 통신하기 위해 다른 형식으로 변환, 즉 직렬화하거나 역직렬화하는 프로세스이다.다양한 환경에서 데이터를 일관성 있게 처리하려면
RESTful API란 Representational State Transfer (REST) 아키텍처 스타일을 따르는 API를 의미한다.API는 애플리케이션 사이에서 통신을 위해 약속된 규칙의 집합이다. 웹 서버와 클라이언트의 통신에서 서버가 정의한 URL로 클라이언트
장고에서 pagination을 구현해보자. 하나의 페이지에 지나치게 많은 콘텐츠가 존재할 때 여러 문제가 생길 수 있다. 데이터베이스에서 지나치게 많은 데이터를 가져와야 하고, 프론트에서 많은 요소를 렌더링하다 보면 페이지 로드 속도가 저하되고 스크롤이 지나치게 길어진
쿼리셋은 정말 편리하게 데이터베이스를 다룰 수 있게 해주지만 비효율적으로 많은 쿼리를 날릴 가능성이 있다. 예를 들어서, 다음과 같은 모델이 있다고 생각해보자. 한 명의 작가가 많은 책을 집필할 수 있으므로 책과 작가는 다대일 관계이다. 따라서 책이 작가를 FK로 갖