- System Architecture System Architecture - 마이크로서비스와 모놀리식(Microservice and Monolithic) 마이크로서비스 마이크로서비스는 소프트웨어가 잘 정의된 API를 통해 통신하는 소규모의 독립적인 서비스로 구성되어 있는 경우의 소프트웨어 개발을 위한 아키텍처 및 조직적 접근 방식이다. 이러한 서비스는 독립적인 소규모 팀에서 보유한다. 마이크로서비스 아키텍처는 애플리케이션의 확장을 용이하게 하고 개발 속도를 앞당겨 혁신을 실현하고 새로운 기능의 출시 시간을 단축할 수 있게 해준다. 1. 마이크로서비스는 주변 서비스에 대한 인식 없이 독립적으로 개발, 배포 및 관리된다. 2. Publish-Subscribe Patter 혹은 HTTP 기반 RESTful 방식으로 서로 통신한다. 3. 단일 책임이 있다. 4. 느슨하게 결합되어있다. 모놀리식 아키텍처 반면 모놀리식 아키텍처의 경우 모든 프로세스가 긴밀하게 결합..
- Web | Network Web - REST, REST API, RESTful REST (Representational State Transfer) REST는 Representational State Transfer의 약자로써, 한국어로 직역하면 대표적인 상태 전달이라는 뜻이다. 이는 월드 와이드 웹 (WWW) 과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식으로써, 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한으로 활용할 수 있는 아키텍처 스타일이다. REST는 기본적으로 네트워크 상에서의 Client 와 Server 사이의 통신 방식 중 하나이며, 이를 차용하는 회사 또는 서비스가 많기 때문에 꼭 알아두어야 할 개념이다. 가장 간단하게 이야기하면, 자원의 표현에 따라서 상태를 전달한다는 뜻이다. 이 또한 어..
- Web | Network Web - 웹 소켓 (Web Socket) 과 Socket.io 웹 소켓 (Web Socket) 웹 소켓은 HTML 5에 추가된 스펙으로, 실시간 양방향 데이터 전송을 위한 기술이다. HTTP와는 다르게, WS라는 프로토콜을 사용한다. 따라서 브라우저와 서버가 WS 프로토콜을 지원한다면 사용할 수 있다. 최신 브라우저의 대부분은 웹 소켓을 지원하고, 노드에서는 ws나 Societ.IO 같은 패키지를 통해서 웹 소켓을 사용할 수 있다. 웹 소켓이 나오기 이전에는 HTTP 기술을 사용하여 실시간 데이터 전송을 구현했었다. 그 중 한가지가 폴링 (polling) 이라는 방식인데, HTTP가 클라이언트에서 서버로 향하는 단방향 통신이므로, 주기적으로 서버에 새로운 업데이트가 있는지 확인하는 요청을 보낸 후, 있다면 새로운 내용을 가져오는 단순 무식한 방법이었다. 그러나 HT..
- Web | Network Web - CORS (Cross Origin Resource Sharing) CORS (Cross Origin Resource Sharing) 란? CORS (Cross Origin Resource Sharing) 는 추가 HTTP 헤더를 사용하여 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제이다. 즉 웹 애플리케이션은 리소스가 자신의 출처 (도메인, 프로토콜, 포트 등) 와 다를 때, 교차 출처 HTTP 요청을 실행한다. 쉽게 말하자면, 흥부네가 놀부네에 가서 밥을 얻을 수 있는 권한을 얻는 것이다. 예) https://domain-a.com 의 프론트 엔드 자바스크립트 코드가 XMLHttpRequest를 사용하여 https://domain-b.com/data.json 을 요청하는 경우. 보안 상의..
- Web | Network Web - 쿠키와 세션 (Cookie and Session) 클라이언트에서 보내는 요청에는 큰 단점이 존재한다. 바로 누가 요청을 보내는지 모른다는 것이다. 물론 요청을 보내는 IP 주소나 브라우저의 정보를 받아올 수는 있다. 그러나 여러 컴퓨터가 공통으로 IP 주소를 가지거나 한 컴퓨터를 여러 사람이 사용할 수도 있기 때문에, 이는 정답이 되지 못할 수도 있다. 그렇다면 로그인을 구현하면 되지 않느냐? 맞는 말이다. 그러나 로그인을 구현하기 위해선 쿠키와 세션에 대해 알고 있어야 한다. 가령 로그인한 후에는 새로고침을 해도 로그아웃이 되지 않는다. 이는 클라이언트가 서버에 유저에 대한 정보를 지속적으로 알려주기 때문이다. 쿠키 (cookie) HTTP 프로토콜의 특징은 비연결 (Connectionless) 을 지향하며 상태정보를 유지하지 않는 다는 것 (Stat..
- Web | Network Network - TCP와 UDP TCP (Transmission Control Protocol) 와 UDP (User Datagram Protocol) 모두 OSI 7 계층 중 전송 계층에서 사용하는 프로토콜로써, 데이터의 교환을 위한 프로토콜인데, 쓰임새와 작동방식이 다르다. OSI 7 계층에 관련된 것은 아래를 참고. https://lgphone.tistory.com/157 Network - OSI 7 계층 (OSI 7 Layers) OSI 7 계층 OSI 7 계층은 국제표준화기구 (ISO) 에서 개발한 모델로, 네트워크 프로토콜 디자인과 통신을 계층으로 나눠 설명한 것이다. 쉽게 말하여, 국제표준화기구에서 만든 네트워크 통신의 7단 lgphone.tistory.com TCP (Transmission Control Protocol)..
- Web | Network Web - HTTP 그리고 HTTPS (HTTP and HTTPS) HTTP HTTP는 HyperText Transfer Protocol의 약자로, 80번 포트를 사용하는, 웹 상에서 정보를 주고 받을 수 있는 통신 규약 (Protocol) 이다. 주로 HTML (HyperText Markup Language) 문서를 주고 받을 때 사용된다. TCP와 UDP를 사용한다. 특징 1. 비연결 (Connectionless) - 클라이언트가 요청을 서버에 보내고 서버가 응답을 클라이언트에 보내면 바로 연결이 끊긴다. 2. 무상태 (Stateless) - 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며, 상태 정보를 유지하지 않는다. 동작과정 1. 사용자가 웹 브라우저에 URL 주소를 입력한다. 2. DNS 서버에 웹 서버의 호스트 이름을 IP 주소로 변경 요청한다. 3. 웹..
- Web | Network Network - TCP/IP TCP/IP 위키백과에 따르면 TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP와 전송 조절 프로토콜인 TCP로 이루어져 있으며, IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다. TCP는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다. HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP로 부르기도 한다. 따라서, TCP/IP는 하나의 프로토콜이 아닌 TCP와 IP를 합쳐서 부르는 말이다. 또한, TCP/IP를 사용하겠다는 것은 IP 주소 체계를 따르고 IP Rouing을 이용해 목적지에 도달하며, TCP의 특성을 활용해 송신자와 수신..
- Web | Network Network - OSI 7 계층 (OSI 7 Layers) OSI 7 계층 OSI 7 계층은 국제표준화기구 (ISO) 에서 개발한 모델로, 네트워크 프로토콜 디자인과 통신을 계층으로 나눠 설명한 것이다. 쉽게 말하여, 국제표준화기구에서 만든 네트워크 통신의 7단계 과정을 말하는 것이다. Layer 7 응용 계층 (Application Layer) Layer 6 표현 계층 (Presentation Layer) Layer 5 세션 계층 (Session Layer) Layer 4 전송 계층 (Transport Layer) Layer 3 네트워크 계층 (Network Layer) Layer 2 데이터 링크 계층 (Data Link Layer) Layer 1 물리 계층 (Physical Layer) Layer 5 - Layer 7을 Upper Layer라고 하고, Lay..
- 카테고리 없음 테스트 주도 개발 방법론 (TDD, Test-Driven Development) 테스트 주도 개발 방법론은 제품의 기능 구현을 위한 코드와 별개로, 해당 기능이 정상적으로 움직이는 지 검증하기 위한 테스트 코드를 작성하고, 이를 통해 실패할 경우, 테스트를 통과하기 위한 최소한으로 코드를 개선한다. 최종적으로 테스트에 성공한 코드를 리팩토링하는 과정을 거치고 나서야 실제 코드로써 동작된다. 단위 테스트 단위테스트를 작성해야 하는 이유는 정말 많다. 그 중 몇 가지 핵심적인 이유들은: 1. 코드를 수정하거나 기능을 추가할 때 수시로 빠르게 검증할 수 있다. 2. 리팩토링 시에 안정성을 확보할 수 있다. 3. 개발 및 테스팅에 대한 시간과 비용을 절감할 수 있다. 단위 테스트를 작성하지 않은 코드들은 테스트를 작성하지 않은 코드들보다 버그가 있을 확률이 높은데, 문제는 통합 테스트 (수..