전체 글 (89) 썸네일형 리스트형 전송 계층 프로토콜 : Selective repeat Selective repeat이란? Selective repeat는 한국말로 번역하면 선택적 반복이라고 한다. Go-Back-N과 달리 말 그대로 손실되거나 timeout이 발생한 패킷만 재전송한다. 따라서 불필요하게 재전송하는 경우를 피할 수 있다. sender는 올바르게 수신된 모든 패킷을 개별적으로 인식하고 필요에 따라 버퍼 패킷을 제공하여 상위 계층에 전달한다. 또한, 중간에 loss된 패킷이 발생하여 잘못된 순서의 패킷을 받았더라도 버퍼에 이를 저장해 둔 후, loss된 패킷만 다시 재전송하도록 하였다. timer는 손실된 패킷을 보호하기 위해 다시 사용하지만 오직 한 패킷만이 time out에 전송되기 때문에 각 패킷은 자신만의 논리 타이머를 가져야 한다. sender에서 보낸 패킷에 대한 a.. 전송 계층 프로토콜 : Go-Back-N Go-Back-N이란? sender는 stop- and- wait처럼 확인 응답을 기다리지 않고 여러 패킷을 전송할 수 있다. 대신, 파이프라인 즉 window size에서 확인 응답이 되지 않은 패킷의 최대 허용 수는 window size = N보다 크지 않아야 한다. rdt_send()가 상위 계층으로부터 호출이 되면 송신자는 첫째로 윈도우가 가득 찼는지, 아직 확인 응답이 되지 않는 패킷이 있는지를 확인한다. 만약 윈도우가 가득 차 있지 않다면 패킷이 생성되고 receiver로 sequence number와 data를 보낸다. receiver가 보낸 sequence number와 data, 즉 packet가 sender에게 도착하면 잘 도착했다는 의미로 패킷 순서에 따른 ack를 보내준다. 이때, .. rdt 3.0 (stop- and- wait) rdt 3.0이란? rdt 3.0 이전의 채널은 중간에 사라지는 문제를 해결하지 못하기 때문에 중간에 사라지지만 끊임없이 기다려야 된다는 문제점이 있다. 따라서 이를 해결하기 위해 rdt 3.0에는 일정시간동안 응답하지 않으면 재전송 하는 기능을 추가하였다. 이때 timer를 사용한다. sender가 receiver로 데이터를 보냈을 때 timer가 실행되고 receiver로부터 ACK를 받게 되면 timer는 종료한다. sender에서 보낸 데이터가 loss 되었을 경우, receiver에서 보낸 ACK에 loss가 발생한 경우 timeout이 발생한다. 그 이유는 loss가 발생할 경우, sender는 아무 응답을 받지 못하므로 긴 지연이 발생할 수 있기 때문이다. 또한, 손실이 일어나지 않은 경우에.. API : 인증 private API : 사용할 수 있는 사용자 혹은클라이언트를 제한해야 함 public API : 공용으로 오픈되어 있으므로 굳이 사용자 혹은 클라이언트를 제한해야 하지는 않지만, 사용 횟수 제한, 남용 방지, 사용자 통계 등의 이유로 인증 엔드 포인트 필요 API를 개발 할 때 인증 엔드포인트 필수! 인증 인증: 사용자의 신원을 확인하는 절차 ==> 로그인 기능을 구현해주는 것이 인증 엔드 포인트 사용자 가입 절차를 진행하여 사용자의 아이디와 비밀번호 생성 가입한 사용자의 아이디와 비밀번호를 데이터베이스에 저장, 이때 사용자의 비밀번호는 암호화해서 저장 사용자가 로그인할 때 본인의 아이디와 비밀번호 입력 사용자가 입력한 비밀번호를 암호화한 후, 그 값을 이미 암호화되어서 DB에 저장된 비밀번호와 비교.. 엔드포인트 데이터베이스 사용하여 구현하기 회원가입 엔드 포인트 먼저 회원가입 엔드포인트를 데이터베이스를 사용해서 구현해 보도록 하자. 기본적인 구조는 5장에서 구현했던 것과 동일하다. 다만 데이터를 하드코드하거나 메모리상에 저장하지 않고 데이터베이스에 저장한다. new_user_id = app.database.execute(text(""" HTTP 요청을 통해 전달받은 회원가입 정보를 데이터베이스에 저장한다. app.database는 SQLAlchemy를 통해 MySQL 데이터베이스에 연결된 Engine 객체다. app.database를 통해 원하는 SQL구문을 해당 데이터베이스에 실행하게 된다. 이 경우에는 새로운 사용자 정보를 저장하는 것이므로 INSERT 구문을 통해 새로운 사용자 정보를 users 테이블에 저장하도록 한다. """), n.. SQLAlchemy SQLAlchemy 파이썬 코드에서 DB와 연결하기 위해서 사용할 수 있는 다양한 라이브러리가 있는 데, 그중 SQLAlchemy라는 라이브러리가 파이썬에서 가장 널리 쓰이는 라이브러리 중 하나다. SQLAlchemy 라이브러리를 사용하여 파이썬 코드에서 데이터베이스에 연결하여 SQL을 실행시킬 수 있다. SQLAlchemy는 ORM(Object Relational Mapper)이다. ORM이란, 간략하게 설명하자면 관계형 데이터베이스의 테이블들을 프로그래밍 언어의 클래스로 표현할 수 있게 해주는 것을 말한다. 즉 클래스를 사용해서 테이블들을 표현하고 데이터를 저장, 읽기, 업데이트 등을 할 수 있게 해 준다. 하지만 이 책에서는 ORM 부분은 사용하지 않고 CORE 부분만을 사용할 것이며, 데이터베이스.. API에 데이터베이스 연결하기 API에 데이터베이스 연결하기 이제 본격적으로 API에 MySQL 데이터베이스 시스템을 연결하여 데이터를 저장하도록 하자. 앞서 이야기했듯이 관계형 데이터베이스 시스템은 데이터를 저장하기 전에 미리 테이블 구조와 관계를 구현해 놓아야 한다. 그러므로 먼저 미니터 API를 위한 테이블 구조와 관계, 즉 스키마(schema)를 구현하도록 하자. 스키마는 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합이다. 스키마는 데이터베이스를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의한다. 미니터 API의 데이터베이스 스키마는 다음과 같을 것이다. user 테이블.. React의 기초 리액트(React)란? 리액트란 자바스크립트 라이브러리의 하나로서 사용자 인터페이스를 만들기 위해 사용된다. 현재 가장 핫한 라이브러리 중 하나로, 싱글 페이지 애플리케이션이나 모바일 애플리케이션의 개발 시 토대로 사용될 수 있다. 즉, 현재 많이 활용되고 있는 웹/앱의 view를 개발할 수 있도록 하는 인기있는 라이브러리! 리액트의 필요성 React를 사용하지 않아도, html과 css, javascript를 이용해서 웹 페이지를 만들 수 있다 그러나 react를 이용해 사용자와 상호작용 할 수 있는 동적인 UI를 쉽게 만들 수 있기 때문에 많이 이용되고 있다. 프로젝트가 사용자와의 인터랙션이 별로 없다면 사실상 프론트엔드 라이브러리는 필요하지 않습다만, 프로젝트 규모가 커지고 정말 다양한 유저 인터페.. 이전 1 2 3 4 5 6 7 8 ··· 12 다음