본문 바로가기

아키텍처

[네트워크] MQTT 이번에는 MQTT에 대해 간단히 개념을 공부하고 데이터를 주고받는 실습을 해봤다. 개념의 경우 https://medium.com/@jspark141515/mqtt%EB%9E%80-314472c246ee 문서를 참고해서 정리했다. 학습 내용 MQTT란 M2M, IOT를 위한 프로토콜이다. 최소한의 전력과 패킷량으로 통신하는 프로토콜이다. 그래서 IOT, 모바일 앱 등의 통신에 많이 사용된다. MQTT는 Broker, Publisher, Subscriber 구조로 데이터를 주고받는다. 이는 HTTP와 같은 클라이언트-서버 구조로 데이터를 주고받는 것과 차이를 보인다. Publisher는 Topic을 발행(publish)한다. Subscriber는 Topic에 구독(subscribe) 한다. Broker는 이.. 더보기
[아키텍처] MSA 나는 지금 구직 중이라 많은 이력서를 내고 있고 종종 면접을 보는 중에 있다. 그중 한 면접에서 여러 가지 질문을 받았다. 그런데, 사실 거의 대부분의 질문에 대답하지 못하는 참사가 벌어졌다. 내가 느낀 참담함과 아쉬움을 글로 다 표현하기 힘들 것이다. 물론 면접관께서는 아직 나의 레벨에서 대답하기 어려운 질문이고, 알면 좋은 거라는 말씀을 해주셨지만 그 말이 별로 위로가 되지 못했다. 아직 갈길이 멀구나라는 생각이 머리를 차지했다. 오늘은 그 여러 질문 중 하나인 MSA에 대해 알아보고자 한다. 막상 학습을 해보니 사실 조금이라도 아키텍처에 관심이 있다면 충분히 대답할 수 있는 내용이라 아직 갈 길이 멀다는 생각을 한다. 학습 내용 MSA란 하나의 큰 앱을 여러 개의 작은 앱으로 쪼개어 변경과 조합이 .. 더보기
[배포] Docker 학습 내용 컨테이너라는 게 생긴 뒤로 물류에는 혁신이 일어났다. 물자를 싣고 내릴 때에 선박이 입행해 있는 시간을 획기적으로 단축시켜주고 물자를 싣고 내릴 때 필요한 인력(분류하는 사람, 짐 옮기는 사람, 감독하는 사람)을 대폭 감소시키기 때문이다. 개발자들은 이와 같이 물자의 수송에 획기적인 단축을 가져다준 컨테이너 기술을 '소프트웨어 수송, 즉 배포에 사용할 수는 없을까?' 하는 생각을 했다. 그 결과가 리눅스 컨테이너(Ixc)이다. 그런데 리눅스 컨테이너 기술은 그 자체로 훌륭하고 완성된 기술이었지만 앱을 쉽게 컨테이너화할 수 있는 생태계 혹은 커뮤니티가 없었다. 그런데 2013년에 등장한 도커(Docker)가 등장했다. Docker Hub라는 소프트웨어 저장소와 함께 빠르게 성장한 Docker는 .. 더보기
[배포] Amazon Web Service 학습 내용 작성한 코드를 로컬 환경에서만이 아닌 도메인과 같은 주소를 통해서 다른 사람이 서비스를 이용하게 하기 위해선 배포가 필요하다. 내가 진행한 두 번의 프로젝트에서는 aws를 이용하여 프리티어 ec2와 rds 그리고 s3를 빌려 배포를 했다. 첫 번째 프로젝트에서는 http까지 배포를 성공했고, 두 번째 프로젝트에서는 https까지 진행했다. 하면서 느낀 점은 생각보다 엄청 까다롭고 다루기가 어렵다는 것이다. 특히 보안에 관련된 문제들이 머리를 많이 아프게 했다. 그리고 지금 다시 이 레퍼런스를 정리하면서 느낀 것은 이 문서를 좀 더 꼼꼼히 보았다면 좀 더 빨리 해결할 수 있지 않았을까란 생각이 든다. 돌아와서 배포에 관한 기본적인 개념과 원리를 정리해보고자 한다. Cloud Computing 컴.. 더보기
네트워크 심화 학습 내용 이번 네트워크 심화 시간에는 HTTP 기반 네트워크 흐름과 TCP/IP 기반 데이터 흐름에 대해서 그리고 HTTP 기본 동작과 특징에 대해 학습한다. 그리고 HTTP 헤더의 역할과 마지막으로 캐시에 대해 학습하고자 한다. IP와 IP Packet 인터넷 망 속 수많은 노드들 속에서 클라이언트와 서버가 통신할 수 있는 이유는 IP(인터넷 프로토콜) 즉, 규약이 있기 때문이다. IP는 지정한 주(IP Address)에 패킷(Packet)이라는 통신 단위로 데이터를 전달한다. 여기서 패킷이란 pack과 bucket이 합쳐진 단어로 소포로 비유할 수 있다. IP 패킷은 데이터 통신에 적용한 것이라고 보면 된다. 그래서 IP 패킷에 우체국 송장처럼 전송 데이터를 무사히 전송하기 위해 출발지 IP, 목적.. 더보기
클라이언트 빌드와 배포 학습 내용 로컬 환경에서 개발한 코드를 실제 서비로 만들기 위해서는 빌드 과정과 이를 웹에 노출시키는 배포 과정을 필요로 한다. 그래서 이번 시간에는 빌드의 개념과 배포의 개념 그리고 개발 방식의 차이인 정적 웹사이트와 동적 웹사이트에 대해 학습하고자 한다. 정적 웹사이트와 동적 웹사이트 정적 웹사이트란 HTML 파일(코드) 자체로 배포되는 사이트(CSR)를 말하고, 동적 웹사이트란 서버에 의해 HTML 파일이 동적으로 생성되는 사이트 (SSR)을 말한다. AJAX 이전에는 요청에 따라 결과가 변하는 동적인 웹페이지를 만들기 위해서 서버가 매번 동적으로 생성해야만 했다. 그래서 그 동적 웹사이트를 받아오기 위해서 서버가 HTML의 형태로 브라우저에 제공해주어야 했기 때문에, 헤더나 푸터 등의 페이지 구성.. 더보기
[Web Server] Express 학습 내용 express는 웹 모바일 앱을 위한 Node.js 웹 애플리케이션 프레임워크이다. express는 HTTP 유틸리티 메소드 및 미들웨어를 통해 쉽고 빠르게 API를 작성할 수 있다. 즉, express를 활용하면 서버 구축의 측면에서 훨씬 단순하고 직관적으로 할 수 있는 것이다. 설치 npm init 명령을 사용하여 먼저 package.json 파일을 작성한 뒤, 이 것을 실행하면 앱 이름 및 버전과 같은 몇 가지 정보에 대해 프롬프트 한다. 이후 npm install express를 통해 해당 디렉토리에 express를 설치할 수 있다. --save 옵션을 사용하면 종속 항목 목록에 저장할 수도 있다. Hello world 예제 해당 js파일에 다음과 같은 코드를 작성한다. const ex.. 더보기
[Web Server] 기초 학습 내용 이번 파트에서는 본격적으로 node.js를 통해 서버를 만들어보고 만든 서버를 통해 데이터를 요청하고 응답해본다. 그 과정 중에 API Server를 직접 구현해보고 Express, 라우팅, Server-side를 디버깅하는 방법을 학습한다. CORS 예전에는 서버에서 클라이언트라는 파일을 가지고 있고 유저의 요청에 의해 서버에 있던 클라이언트를 유저가 가져가서 그 클라이언트에서 서버와 통신을 하거나 그 클라이언트에 담겨있던 데이터를 보는 방식으로 작동했다. 그러다 보니 서버에서 보낸 클라이언트는 서버에 어떠한 위해도 주지 않을 것이라는 명제가 당연시됐다. origin이라는 것이 서버에서 나와서 그 서버의 것으로 요청하는 것이 당연히 same origin이었던 것이다. 그러나 최근에는 sing.. 더보기