2.1 네트워크 애플리케이션의 원리

네트워크 애플리케이션 : 다른 위치의 종단 시스템에서 동작하고 네트워크를 통해 서로 통신하는 프로그램 웹 애플리케이션에는 서버와 클라어인트라는 두 가지 프로그램이 있다. 클라이언트 : 사용자의 호스트에서 실행되는 브라우저 프로그램 웹 서버 호스트에서 실행되는 웹 서버 프로그램 새로운 애플리케이션을 개발할 때, 라우터나 링크 계층 스위치처럼 네트워크 코어 장비에서 실행되는 소프트웨어까지 작성할 필요는 없다. 네트워크 코어 장비는 애플리케이션 계층에서 기능하지 않는 대신 네트워크 계층 및 그 하위 계층에서 기능한다. 종단 시스템에서만 애플리케이션 소프,트웨어가 존재한다. 2.1.1 네트워크 애플리케이션 구조 애플리케이션 구조는 네트워크 구조(ex. 1.5장에 나온 프로토콜 스택)와 다르다. 개발자 관점에서 네트워크 구조 : 고정되어 있고 해당 애플리케이션에 특정 서비스 집합을 제공 애플리케이션 구조(application architecture) : 개발자가 설계하며 애플리케이션이 다양한 종단 시스템에서 어떻게 조직되어야 하는지를 알려줌. 최근 가장 많이 사용하는 애플리케이션 구조가 현대 네트워크 애플리케이션에서 사용되는 “클라이언트-서버” 구조와 P2P 구조 클라이언트-서버 구조(client-server architecture) 서버(server) : 항상 동작하고 있는 호스트 클라이언트(client) : 서버에 서비스 요청을 보냄 이 구조에서, 클라이언트는 서로 직접적으로 통신하지 않는다. 서버는 고정 IP 주소를 갖는다. 클라이언트의 요청이 많을 경우 단일 서버 호스트가 모든 요청을 처리하긴 힘들다. 많은 수의 호스트를 갖춘 **데이터 센터(data center)**가 강력한 가상의 서버를 생성하는 역할을 함. P2P 구조 항상 켜져있는 인프라스트럭처 서버에 최소로 의존하거나 의존하지 않음 대신 **피어(peer)**라는 간헐적으로 연결된 호스트 쌍이 서로 직접 통신 피어(peer) : 서비스 제공자(service provider)가 소유하지 않고 사용자들이 제어하는 데스크톱과 랩톱 한 엔드시스템이 서버 역할을 해준다. 토렌트가 대표적인 P2P 구조 P2P구조는 **자가 확장성(self-scalability)**이 있다. 각 피어들이 파일을 요구함으로써 작업 부하를 만들어낸다. 하지만 파일을 다른 피어들에게 분배함으로써 그 시스템에 서비스 능력을 추가함. 토렌트에서 다운로드 받고 업로딩하는 사람이 많을 수록 그 파일은 다운로드 속도가 빨라지는데, 이유가 바로 이것이다. 서버 인프라스트럭처와 서버 대역폭이 필요하지 않아 비용 효율적이다. 보안, 성능, 신뢰성이 단점이다. 2.1.2 프로세스 간 통신 운영체제 용어에서 실제 통신하는 것은 프로그램이 아니라 **프로세스(process)**다. 프로세스(process) 종단 시스템에서 실행되는 프로그램 통신 프로세스가 같은 종단 시스템에서 실행될 때 그들은 서로 프로세스 간에 통신한다. 프로세스 간의 통신을 위한 규칙은 종단 시스템의 운영체제에 의해 좌우된다. 여기서 다룰 통신은 같은 호스트에서 프로세스가 통신하는 방법이 아닌, 다른 호스트에서 실행되어 통신할 때이다. 2개의 종단 시스템에서 프로세스는 컴퓨터 네트워크를 통한 메시지(message) 교환으로 통신한다. 송신 프로세스 : 메시지를 만들어서 네트워크를 보낸다. 수신 프로세스 : 메시지를 받고 역으로 메시지를 보내 응답한다. 클라이언트와 서버 프로세스 네트워크 애플리케이션 : 서로 메시지를 보내는 두 프로세스로 구성 ...

2024년 1월 24일 · 5 분 · 배준수

NestJS 프로젝트 : 기획 및 구성

중고차 판매 프로그램 중고차 판매 API 유저가 email과 Password로 가입 유저가 브랜드, 모델, 연식, 주행거리를 기반으로 예상 가격을 제공받음 유저는 중고차를 판매하고 실제 가격 기입 관리자가 기입된 가격을 검토 후 승인 API 디자인 Method and Route Body or Query String Description POST /auth/signup Body - { email, password } 새로운 유저의 회원 가입 로그인 POST /auth/signin Body - { email, password } 기존 유저의 로그인 GET /reports QS - make, model, year, mileage, longitude, latitude 자동차 가격 추정치 제공 POST /reports Body - { make, model, year, mileage, longitute, latitude, price } 판매 가격 기입 PATCH /reports Body - { approved } 유저가 제출한 가격 심사(가짜 데이터 차단) Module 디자인 Module Controllers Services Repositories Users Module Users Controller Users Service Users Repository Reports Module Reports Controller Reports Controller Reports Repository 처음부터 완벽하게 디자인 할 순 없다. 이를 기반으로 진행하면서 추가하면 된다. ...

2023년 10월 7일 · 1 분 · 배준수

TypeORM으로 데이터 처리하기

데이터베이스 ORM TypeORM SQLite Postgres MySQL MongoDB Mongoose MongoDB 아무거나 사용해도 된다. 여기서는 TypeORM과 SQLite를 사용할 것. 마지막에는 Postegres로 변경할 계획 Entity 우리는 AppModule 내부에[ 두가지 모듈(users, reports)을 만들기로 계획했었다. 이 모듈에는 각각 User Entity와 ReportEntity 파일을 만들 것이다. Entity 파일은 애플리케이션 내부에 저장하려는 한 종류의 리소스나 항목을 정의하고, 갖고 있는 모든 속성을 나열하는 리스트이다. 예를 들어 User 모듈에는 사용자가 입력한 email과 password가 있어야 하는데, User Entitiy에 나와 있어야 한다. ...

2023년 10월 7일 · 7 분 · 배준수