CS 공부 11

[Network] HTTP status code

최근에 유튜브 클론코딩 프로젝트를 리팩토링하면서 HTTP status code에 대해서 한 번 살펴볼 필요성을 느꼈다. HTTP status code는 통신의 결과를 요약해주며 API 문서를 작성할 때 꼭 명시해줘야 하는 중요한 개념이기 때문에 목적에 맞는 HTTP status code를 활용할 수 있는 것이 필요하다. HTTP status code의 종류 - 10X : 통신에 대한 정보를 제공해준다. (ex. 이상 없음, 프로토콜 변경, 처리중 등) - 20X : 통신 성공 - 30X : 리다이렉트 (클라이언트 측에서는 request를 끝내기 위해 추가적인 동작을 수행해야 한다.) - 40X : 클라이언트 오류 - 50X : 서버 오류 대표적인 HTTP Status Code의 종류 종류 상태 코드 이름..

CS 공부 2022.04.16

[Network] 프록시 서버 (Proxy Server)

프록시 서버 (Proxy Server) 프록시 서버는 여러 네트워크 서비스 사이에서 그 통신을 중계해주는 역할을 수행한다. 프록시는 리퀘스트를 가로채고 그에 대한 리스폰스를 전달해준다. 따라서 클라이언트와 서버 입장에서는 해당 통신이 프록시를 거쳐서 이루어진다는 사실을 인지하지 못한다. 프록시는 사용자의 로컬 컴퓨터에 위치할 수도, 인터넷 상에서 두 포인트 사이의 어딘가에 위치할 수도 있다. 프록시 서버를 사용하는 이유 (1) 보안 프록시 서버를 사용하는 첫 번째 이유는 보안적인 문제이다. 방화벽 등으로 인해 직접 통신할 수 없는 두 네트워크 포인트가 존재할 때 프록시 서버를 사용하면 방화벽 내부의 시스템을 보호하면서 제한된 외부와의 통신을 허용할 수 있다. (그를 위해 프록시 서버가 가로챈 리퀘스트의 ..

CS 공부 2022.04.16

[Network] HTTP (HyperText Transfer Protocol)

HTTP (HyperText Transfer Protocol) HTTP는 HTML 문서 등의 데이터를 주고받기 위한 프로토콜(통신 규약)이다. HTTP에서의 통신은 클라이언트 측에서 데이터를 요청하는 request와 그에 대한 서버 측의 응답인 response로 이루어진다. 그렇기 때문에 HTTP는 클라이언트-서버 프로토콜이다. 여기서 클라이언트는 사용자를 대신하는 개체인 사용자 에이전트를 의미하는데 대부분의 경우에는 브라우저이지만 API 테스트용 개발자 도구인 Postman과 같이 그 외의 경우도 존재한다. 참고로 HTTP는 OSI 7 계층 중 어플리케이션 레벨에 속하는 프로토콜로 기본 포트 번호는 80번이다. (HTTPS의 기본 포트는 443) HTTP의 특징 중 하나는 확장성이 뛰어나다는 것이다. ..

CS 공부 2022.04.16

[CS] 프로세스와 스레드

프로세스 (Process) 운영체제로부터 자원을 할당받은 작업의 단위이다. 프로그램이 실행되면 해당 프로그램 파일이 컴퓨터 메모리로 올라가게 되는데 이 동적인 상태의 프로그램을 프로세스라고 부른다. 스레드 (Thread) 프로세스 내에서 실행되는 흐름의 단위이자 프로세스를 구성하는 더 작은 실행 단위의 개념이다. 프로세스는 실행될 때 운영체제로부터 할당받은 독자적인 메모리 공간을 사용하지만 스레드는 같은 프로세스 내 다른 스레드와 메모리 공간을 공유한다. (Code, Data, Heap 등. 대신 Stack은 각 스레드 별로 따로 할당받는다.) 싱글 스레드 한 프로세스에서 하나의 스레드를 실행하는 것을 말한다. 장점 - 스레드가 하나밖에 존재하지 않기 때문에 공유 자원 접근에 대해 신경쓰지 않아도 된다...

CS 공부 2022.04.16

[CS] 스레드 안전 (Thread-safe)

스레드 안전 (Thread-safe) 함수, 변수, 객체 등이 여러 스레드로부터 동시에 접근이 이루어져도 프로그램이 정상적으로 실행됨을 의미한다. 스레드 안전은 한 프로세스 내에서 두 개 이상의 스레드가 동시에 작동하는 멀티 스레드 프로그래밍의 조건이다. 그 대표적인 예시로 최근 몇 년동안 핫한 프로그래밍 패러다임인 함수형 프로그래밍은 side effect를 유발하지 않고 thread safe한 순수 함수를 조합하여 멀티 스레드의 동시성 프로그래밍에서 강점을 보인다. 스레드 안전 보장하기 (1) 전역 변수, 힙, 파일 등 여러 스레드가 동시 접근 가능한 공유 자원을 최대한 사용해서는 안 된다. (공유 자원에 접근할 경우 리소스에 lock을 건다.) (2) 핸들, 포인터 등을 활용해 데이터를 간접 접근해서..

CS 공부 2022.02.27

[Infra] Scale up & Scale out

서비스가 성장하여 사용자의 수, 트래픽이 증가하면 어느덧 기존의 서버는 한계에 다다르고 인프라를 확장해야 할 순간이 다가온다. 이럴 때 서버를 업그레이드하는 방법으로 Scale up과 Scale out 두 가지 방법이 존재한다. 스케일 업 (Scale up) 스케일 업은 기존 서버의 사양을 업그레이드하는 것을 말한다. 서버에 디스크를 추가하거나 CPU 혹은 메모리 등을 업그레이드하는 방법을 예시로 들 수 있다. 기존 서버의 성능을 향상시키기 때문에 수직 스케일링이라고 부르기도 한다. 스케일 업의 장점 (1) 하나의 서버만을 관리하면 되므로 편리하다. (2) 추가적인 네트워크 연결이 필요하지 않다. (3) 성능을 업그레이드하는 과정이 상대적으로 수월하다. 스케일 업의 단점 (1) 성능 향상에 한계가 존재한..

CS 공부 2022.02.23

MSA (MicroService Architecture) vs Monolithic Architecture

Monolithic Architecture MSA에 대해 이해하기 위해서는 우선적으로 모놀리틱 아키텍쳐에 대한 이해가 필요하다. 모놀리틱 아키텍쳐는 MSA가 도입되기 이전에 활용하던 전통적인 개발 방식으로 전체 어플리케이션을 하나의 덩어리로 개발하는 것을 말한다. 모놀리틱 아키텍쳐가 지니는 장점들은 다음과 같다. 1. 시스템 전체의 개발 환경이 동일하다는 점에서 개발이 편리하다. 2. 배포, 테스트 등 모든 과정이 하나의 어플리케이션에 대해 이루어지기 때문에 운영 관리가 편리하다. (특히 E2E 테스트에서 강점을 가진다.) 그러나 시스템의 규모가 일정 수준 이상이 되면 모놀리틱 아키텍쳐는 수많은 한계를 맞닥뜨린다. 1. 부분 장애가 전체 서비스 장애로 이어질 수 있다. 2. 빌드 및 테스트 소요 비용이 ..

CS 공부 2022.02.23

[OOP] 객체지향프로그래밍의 특성

1. 상속 (Inheritance) - 자식 클래스가 부모 클래스의 변수·메소드 등을 사용할 수 있다. - 자식 클래스는 부모 클래스에 속하기 때문에 is a 관계에 속한다. - 하위 클래스로 갈수록 객체는 구체화된다. 장점 (1) 재사용성 향상 : 필요한 속성 및 메소드를 모두 다시 정의하는 것이 아니라 일부 상속받아서 사용 가능 (2) 확장성 및 유지보수성 향상 : 객체에서 어느 정도 일관성 확보 가능 2. 다형성(Polymorphism) - 같은 메소드가 객체에 따라 다른 기능을 수행할 수 있음 - 오버라이딩 : 부모클래스의 메소드와 같은 이름에 같은 매개변수 사용하면서 내부 소스 재정의 - 오버로딩 : 같은 이름 함수를 여러 개 정의 후 매개변수를 다르게 설정한 뒤 경우에 따라서 원하는 메소드를 ..

CS 공부 2022.01.31

2021-09-22 실시간 네트워킹 (HTTP vs Websocket)

1. HTTP의 한계 HTTP는 connectionless : 클라이언트가 요청을 하고 서버가 응답을 하면 연결이 끊긴다. 이는 서버가 다수 클라이언트와 연결을 유지하면서 발생하는 리소스 낭비를 막기 위해서이다. → 하지만 다음과 같은 문제 발생 (1) 요청 보낼 때마다 페이지 리로딩됨 (2) 동일한 요청에 중복된 헤더 파일을 전송한다. (3) 실시간 상호작용성이 떨어진다. (오늘의 주제!) 2. Polling 방식 - 클라이언트가 HTTP request를 서버에 계속 날리는 방법 - 가장 간단하지만 서버의 부담이 크다. - 실시간 정도의 빠른 응답을 기대하기도 힘들다. 3. Long Polling 방식 - 클라이언트가 서버로 HTTP request를 전송한 후 서버가 해당 클라이언트에 응답할 내용이 생..

CS 공부 2021.09.23

2021-09-08 CS 공부 2일차

컴퓨터구조 (Computer Architecture) 3. 캐시 메모리 - 속도가 빠른 장치와 느린 장치 사이 병목 현상을 줄이기 위한 메모리 ex) CPU-메인메모리 사이 병목현상 (CPU 클럭 속도 상승으로 인해 둘 간의 속도 차이 커짐) ex) 웹브라우저에서 캐시 파일은 HDD-웹페이지 사이 병목현상 완화 - CPU가 메인메모리에 저장된 데이터 읽어올 때 자주 사용되는 데이터를 캐시 메모리에 저장하여 사용하면 속도 향상됨 - 속도는 빠르지만 용량 작고 비쌈 - 일반적으로 캐시 메모리는 2~3개 사용 (L1, L2, L3 캐시라고 부르며 왼쪽일수록 용량이 작고 빠르다. 이전 캐시에서 못 찾으면 다음 캐시에 접근하는 방식) - 캐시메모리는 CPU 내부(L1), CPU-RAM 사이(L2), 메인보드(L3..

CS 공부 2021.09.08