쿠키와 세션
·
기타
쿠키와 세선 우리가 자주 사용하는 HTTP 프로토콜의 특징으로 비연결성(Connectionless)과 무상태성(Stateless)이 있다. 비연결성은 한 번의 HTTP통신으로 요청과 응답이 오간 이후에 통신을 끊는다는 것이며, 이로 인해 통신과 관련된 상태는 남지 않는다(Stateless). 예를 들어, 사용자가 로그인 요청을 한 뒤 응답을 받았다고 하더라도, 다음 요청에 이렇게 로그인된 정보는 통신 어디에도 남지 않는다. 따라서 서버 입장에서는 네트워크 요청이 왔을 때 이 요청이 어떤 사용자의 요청인지 알 수 없다. 이렇게 상태 값을 가지지 않는 HTTP 통신 환경의 문제를 세션과 쿠키를 활용해서 해결할 수 있다. 쿠키 쿠키는 웹 서버와 통신 과정에서 특정 정보를 저장하기 위한, key - Value ..
멀티 스레드와 멀티 프로세스
·
기타
멀티 스레드와 멀티 프로세스 멀티스레딩 보통 작성하는 코드를 실행하면 하나의 프로세스는 보통 하나의 스레드만 사용하여 동작한다. import os import threading def run() -> None: print(f"process_id: {os.getpid()}") print(f"thread_id: {threading.get_ident()}") if __name__ == "__main__": run() 위 코드를 실행하면 아래 결과가 나온다. process_id: 25939 thread_id: 4539137536 이렇게 하나의 프로세스에서 하나의 스레드만 사용하는 것을 싱글 스레딩이라고 한다. 우리가 작성하는 대부분의 코드들은 이렇게 싱글 스레딩이다. 그런데 하나의 프로세스에서 여러 개의 스레드..
병렬성과 동시성
·
기타
병렬성과 동시성 동시성 하나의 CPU를 최대한 활용하기 위해 동시성이란 개념이 나오게 되었다. 동시성은 운영체제에서 구현되어, 하나의 CPU를 최대한 활용하여 여러 작업을 빠르게 수행한다. 여전히 CPU는 한 번에 하나의 명령어만 처리하지만, CPU가 맡는 프로세스(스레드)가 Block 상태가 되면 빠르게 다음에 처리해야 할 프로세스가 CPU를 점유하게 된다. CPU가 쉴 틈 없이 한 번에 주어진 태스크들을 빠르게 처리하다 보니 컴퓨터 사용자는 사실상 모든 프로세스의 명령이 동시에 처리된다고 느끼게 된다. 이렇게 진행되는 현상을 동시성(Concurrency)라고 부른다. CPU Bound vs I/O Bound 컴퓨터가 수행하는 하나의 작업은 CPU와 I/O 작업으로 이뤄진다. 이때 컴퓨터 작업을 크게 ..
프로세스와 스레드
·
기타
프로세스와 스레드 기본 프로세스 프로세스는 운영체제에 의해 연속적으로 실행되고 있는 프로그램이다. 유저가 프로그램을 실행했다면 프로세스는 메모리 위에 올라가 있게 되며 운영체제에 의해 CPU, 메모리 자원을 할당받는다. 프로세스는 독립된 메모리 영역으로 Code, Data, Stack, Heap을 할당받는다. Code : 개발자가 작성한 코드 Data : 전역 번수, 정적 변수, 배열, 구조체 등 프로그램이 실행되면서 생기는 정적인 데이터 Stack : 함수 호출과 관련된 정보(실행정보, 지역변수, 파라미터 등) 일반적으로 컴파일 타임에 Stack의 크기가 결정됨. Heap: 런타임에 동적으로 메모리를 처리해야 하는 상황에서 사용되는 공간. Array를 사용하거나 외부 파일을 읽을 때 등을 예로 들 수 ..
SOLID 원칙
·
기타
SOLID 객체지향 설계 5대 원칙이라 부르는 SOLID 원칙은 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), ISP(인터페이스 분리 원칙), DIP(의존 역전 원칙)을 말하고 각 원칙의 앞자를 따서 SOILD 원칙이라고 부른다. Single Responsiblity Single Responsiblity은 객체는 하나의 책임만을 지녀야 한다는 법칙이다. 여러 책임을 동시에 가지는 객체는 처음에 코드를 짤 때는 편하지만 코드가 복잡해질수록 에러가 날 확률도 높아지며 직관적으로 코드를 이해하기 어려워진다. 따라서 객체를 설계하기 전 책임을 확실하게 부여하는 것이 중요하다. AS-IS # 하나의 클래스(객체)가 여러 책임을 가지고 있을때 class Employee: def..
서브모듈
·
기타/깃허브
미리하는 코드정리 git submodule add 원격저장소URL 폴더이름 #서브모듈 추가 및 저장소 연결 대형 프로젝트 깃은 작은 프로젝트부터 대용량 프로젝트까지 관리할 수 있는 버전 관리 도구이다. 깃은 작은 프로젝트뿐만 아니라 큰 규모의 프로젝트도 관리하기 쉽도록 저장소를 여러 개 이용하여 단일 프로젝트를 진행할 수 있다. 저장 용량 깃 저장소는 용량 한게가 없다. 컴퓨터의 하드디스크에서 지원하는 용량만큼 깃 저장소를 생성할 수 있다. 또 깃은 파일을 기반으로 데이터베이스를 관리한다. 하지만 저장소 크기가 너무 크면 컴퓨터에 부담을 준다. 이러한 이유로 깃 호스팅 서비스들은 제공되는 저장소 용량을 보통 1GB 제한한다. 그렇기 때문에 파일 개수가 많은 프로젝트에서는 좀 더 효율적인 관리 방법이 필요..
ariz1623
'기타' 카테고리의 글 목록 (3 Page)