Computer Science
[OS] System Structure & Program Execution 1
컴퓨터 시스템의 구조는 컴퓨터 내부 장치인 CPU, 메모리와 컴퓨터 외부 장치(입출력 장치)인 디스크, 키보드, 마우스, 모니터, 네트워크 장치 등으로 구분된다. 컴퓨터는 외부 장치에서 내부 장치로 데이터를 읽어와 (input) 각종 연산을 수행한 후, 그 결과를 외부 장치로 내보내는(output) 방식으로 업무를 처리한다. CPU(Central Processing Unit) 저장장치에 있는 코드를 불러와서 수행하거나 외부 장치로부터 입력을 받거나 출력하는 기능을 한다. 인간의 신체 기관으로 비유하면 뇌에 해당한다. 컴퓨터 시스템을 통제하고 프로그램의 연산을 실행하고 처리하는 가장 핵심적인 컴퓨터의 제어 장치, 혹은 그 기능을 내장한 칩을 말한다. 컴퓨터 안의 중앙 처리 장치(CPU)는 외부에서 정보를 ..
Reverse Proxy / Forward Proxy 정의 & 차이
프록시(Proxy) 란? 프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 프록시(Proxy)란 '대리' 라는 의미를 갖고 있으며, 서버와 서버사이의 중계기 역할을 한다고 보면 된다. 프록시를 쓰는 이유는 보안상의 이유로 직접 통신할 수 없는 두 점사이에서 대리로 통신을 수행하여 보안성, 성능, 안정성을 향상 시키기 위해서 이다. 보통 웹은 클라이언트에서 서버로, 서버에서 클라이언트로 통신하며 데이터를 전달한다. 이때 필연적으로 중복되는 데이터를 반복하여 전달하는 상황이 발생하는데, 이렇게 동일한 요청을 매번 처리하는 것은 곧 리소스 낭비 와 서버의 부하 로 이어지게 된다. 때문에 본 서버에 도달하기 전에 새로..
서버리스(ServerLess) 개념
서버리스 아키텍쳐 란? 서버리스(Serverless)는 직역하면 "서버가 없다"라는 뜻이 된다. 하지만 정말로 서버가 없는 것을 뜻하는게 아니다. 서비스를 하는데 있어 저장소는 필요하고 서버는 필요하기 때문이다. 따라서 정확히 말하자면, 서버리스는 서버가 없는 백엔드 라는 뜻이 아닌 우리가 직접 서버를 관리하지 않아 신경 쓸 필요없는 경우를 뜻한다. 즉, 서버리스 아키텍처(Serverless Architecture)란 서버를 직접 관리할 필요가 없는 아키텍처를 칭한다. 서버리스는 특히, 사이드 프로젝트나 빠르게 프로토타입을 출시할 때 빠르고 쉽게 제품을 출시할 수 있고, 비용도 매우 절약할 수 있다. 서버리스 시장은 지금도 무섭게 성장하고 있어서 관심을 갖게 되었고 이에 대해 학습해보고자 한다. 서버리스..
DNS 개념 & 동작
DNS (Domain Name System) 란? 도메인 네임 시스템 (Domain Name System, DNS) 은 호스트의 도메인네임 (www.example.com)을 네트워크주소(192.168.1.0)로 변환하거나, 그 반대의 역할을 수행하는 시스템이다. 예를 들면 우리가 자주 접하는 naver.com , google.com 모두 DNS을 가진 DN(Domain Name)이라고 할 수 있다. 이들은 사실 사람이 파악하기 쉽도록 문자열로 변환된 IP이다. 서비스 도메인 주소 IP 주소 다음(Daum) daum.net 203.133.167.81 네이버(Naver) naver.com 223.130.200.104 구글(Google) google.com 142.250.207.14 cmd에서 naver의 ..
Server Sent Events 정리
SSE - Server Sent Events 란? SSE는 서버의 데이터를 실시간으로, 지속적으로 Streaming 하는 기술 이다. SSE는 웹 표준으로써 IE를 제외한 모든 브라우저에서 지원되며, IE역시 polyfill을 통해 지원이 가능하다. 기존에는 서버의 변경된 데이터를 가져오기 위해서 페이지 새로고침, 지속적으로 request를 보내는 ajax 폴링, 외부 플러그인 이용 등을 사용해야만 했다. 이외에도 websocket을 사용할 수 있지만 HTTP 통신을 이용하는 것이 아닌 웹소켓만을 위한 별도의 서버와 프로토콜로 통신하기 때문에 구현하는 비용이 많이 든다는 단점이 있다. 하지만 SSE는 기존 HTTP 웹 서버에서 HTTP API 만으로 동작되며 구현도 간단하기 때문에 서버와 프론트엔드 양측..
Polling / Long Polling / WebSocket / Server Sent Event정리
서버의 event를 클라이언트로 보내는 4가지 방법 polling 클라이언트가 평범한 http request를 서버로 계속 날려서 이벤트 내용을 전달받는 방식이다. 가장 쉬운 방법이지만 클라이언트가 계속적으로 request를 날리기 때문에 클라이언가 많아지면 서버의 부담이 급증하게 된다. 또한 http request connection을 맺고 끊는것 자체가 부담이 많은 방식이다. 그리고 클라이언트에서 실시간정도의 빠른 응답을 기대하기도 어렵다. polling은 http 오버헤드가 발생한다는 단점이 있다. 하지만 일정하게 갱신되는 서버 데이터의 경우 유용하게 사용할 수 있는 방식이다. (ex. 대시보드 갱신) ※ 참고 Http Overhead 란? 정보의 신뢰성 판단을 위해, 보내지는 헤더 같은 정보 때문..
Cross Origin Resource Sharing, CORS란?
문제의 시작 Access to fetch at 'http://서버IP:8080/signup' from origin 'API호출한IP' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled 프론트와의 협업을 위해 AWS에 Spring boot..
HTTP Overhead 란?
오버헤드 란? 오버헤드(overhead)가 됐다라는 말은, 처리 시간 및 메모리 등이 추가적으로 사용되는 현상을 말한다. 처리 시간이 추가된다는 것을 예로 들면, A라는 처리를 실행한다면 3초 걸린다고 했는데, 안전성을 고려하여 추가로 B라는 처리를 요청한 결과 처리시간이 10초가 걸렸다고 하자. 그러면, 이 때 오버헤드는 7초 이게 된다. 반대로 7초가 걸리는 B를 개선해 A+B 처리를 한 결과 처리시간이 총 5초가 되었다면, 오버헤드가 5초 단축되었다고 말할 수 있다. HTTP(Protocol) 오버헤드 HTTP(프로토콜) 오버헤드란, 네트워크를 통해 대상으로 라우팅되는 데이터와 함께 전송되어야하는 정보를 말하며, 올바른 대상에 도달하기 위해 전송중인 데이터에 추가로 보내지는 정보라 보면 된다. 이게..
Access Token & Refresh Token 원리
Access Token & Refresh Token 이번 포스팅에서는 기본 JWT 방식의 인증(보안) 강화 방식인 Access Token & Refresh Token 인증 방식에 대해 알아보겠다. JWT(Json Web Token)에 대한 내용은 아래 포스팅 참고. JWT 토큰 인증 이란? (쿠키 vs 세션 vs 토큰) Cookie / Session / Token 인증 방식 종류 보통 서버가 클라이언트 인증을 확인하는 방식은 대표적으로 쿠키, 세션, 토큰 3가지 방식이 있다. JWT를 배우기 앞서 우선 쿠키와 세션의 통신 방식을 살펴보 s-y-130.tistory.com Access Token의 문제점과 Refresh token은 왜 필요한가? Access Token 만을 통한 인증 방식의 문제는 만일 ..
Authentication vs Authorization 차이
Authentication / Authorization 차이점 보통 우리가 '권한' 이라고 불리우는 것엔 인증(Authentication)과 인가/승인(Authorization) 두가지 단어가 존재하는데, 인증(Authentication) 과 인가/승인(Authorization)은 비슷해 보이지만 엄연한 차이가 존재한다. 인증(Authentication) : 본인이 누구인지 확인 (로그인) 인가/승인(Authorization) : 특정 리소스에 권한이 있는지 확인 (등급 권한) 인증 (Authentication) 인가 (Authorization) 기능 자격 증명 확인 권한 허가/거부 진행 방식 비밀번호, 생체인식, 일회용 핀 또는 앱 보안 팀에서 관리하는 설정 사용 사용자가 볼 수 있는가? 예 아니오 사..