728x90

6주차 Workbook

REST/RESTful

HTTP URI를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.

자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고 받는 것.일반적으로 REST API를 제공하는 웹서비스를 Restful 하다고 나타낸다.

(JSON혹은 XML을 통해 데이터를 주고받는것.)

 

HTTP Method

GET

GET메소드는 주로 데이터를 읽어올때 사용된다. Read할 때 주로 사용된다.

POST

POST메소드는 데이터를 생성할때 사용된다. Create 할때 주로 사용된다. POST메소드를 통해 데이터를 삽입하여 DB에 insert하여 새로운 데이터를 생성해준다.

PATCH

리소스 중 일부를 업데이트 할 때 사용한다. 특정 정보만 수정할 때 사용한다. Update

PUT

리소스의 모든 것을 업데이트 할 때 사용한다. 유저 정보를 모두 수정할 때 사용한다.

DELETE

특정 리소스 삭제를 요청할 때 사용한다.

이외의 다른 메소드

CONNECT, OPTION, TRACE 등의 메소드가 존재한다.

 

HTTP Response Code 의미

1xx : 요청을 받았으며 프로세스를 계속 진행한다.(조건부 응답)

→ 서버가 요청을 받았으며, 서버에 연결된 클라이언트는 계속 진행하라

2xx : 요청을 성공적으로 받아들였습니다.(성공)

→ 요청이 성공적으로 처리되었습니다.

3xx : 요청 완료를 위해 추가 작업이 필요합니다.(리다이렉션 완료)

→ 클라이언트에서 요청을 마치기 위해 추가 동작을 해주어야 합니다.

4xx : 요청 문법이 잘못됐거나 처리할 수 없는 요청입니다.(클라이언트 오류)

→클라이언트에 오류가 있습니다.

5xx : 서버가 유효한 요청에 대한 충족을 실패했습니다.(서버오류)

→서버에 오류가 있습니다.

 

Reverse Proxy

클라이언트로부터 요청을 받아 Rever Proxy에서 웹서버로 요청을 전송한다.

웹서버에서 요청을 처리한다. 서버에서 처리한 응답을 클라이언트로 보내는 것이 아니라 Reverse Proxy로 반환 하는 것이다. 이후 Reverse Proxy에서 응답을 클라이언트로 반환한다.

서버와 클라이언트 사이에 통신을 중계해주는 서버가 하나 생기는 것이다.

보안성이 높아진다.

728x90

'study > UMC(University MakeUs Challenge)' 카테고리의 다른 글

API  (0) 2021.11.04
데이터베이스  (0) 2021.11.04
OS와 서버  (0) 2021.11.04
네트워크와 프로토콜  (0) 2021.11.04
728x90

5주차 WorkBook

실습

Spring boot를 통해 Create, Read만 구현해 보는 실습과제였다.

DB는 4주차에 실습한 BaeMin디비의 User Table을 사용했다.

 

Model

GET, POST시 보낼 데이터 형식이다.

GetUserRes의 객체를 생성하여 받아오는 데이터를 저장한다.

PostUserReq를 통해 새로운 유저 레코드를 형성해준다.

PostUserRes는 PostUserReq를 통해 생성된 UserIdx를 반환한다.

 

UserController

getUser 메소드는 User테이블의 모든 데이터를 가져오는 메소드이다.

postUser는 데이터를 전송하여 User테이블에 user를 추가하는 메서드이다.

각각 localhost의 /users에 GET메서드로하냐 POST메서드로 하냐 차이이다.

GET 메서드 데이터 전송시 getUser 실행, POST메서드 전송시 postUser실행

 

Controller를 통해 쿼리가 들어오면 이후 데이터 처리를 Provider에서 하는것같다.

 

Provider에서 userDao의 각 메서드들을 호출한다. getUser는 userRes()를 호출하고 postUser는 addUser를 호출한다.

userRes에서 Select query문을 통해 데이터를 가져오는것같다. 받은 데이터를 GetUserRes의 각 getInt, getString을 통해 각각 데이터를 넣어준다. BaeMin.user 테이블의 모든 데이터를 가져와서 GetUserRes 오브젝트에 저장하고 해당 결과를 return해준다.

 

Post를 통해 테이블에 유저를 추가해주는 addUser이다. Insert into 를 통해 각각 데이터들을 createUserParams 오브젝트에 담아 디비에 삽입한다. 이후 리턴값으로는 addUser된 User의 idx가 반환된다.

실제 User Table

 

Get메서드로 users에 데이터를 보낸후 반환결과이다.(GET    localhost:8080/users)

User 테이블의 데이터들을 모두 가져온다.

Post메소드로 데이터를 전송했을  때 이다. Body에 필요한 값들을 채워주고 데이터를 전송한경우 return으로 해당 User의 userIdx를 가져오는것을 볼 수 있다.

이후 UserTable이다.

Post메소드로 해당 값들을 전송한경우 테이블에 값이 추가된것을 볼 수 있다.

 

어노테이션이나 데이터의 플로우를 아직 정확하게 모르는 상황이다. 이후 추가적인 학습을 통해 어노테이션과 Spring boot에서의 데이터 플로우 등을 더 학습할 예정이다.

 

키워드정리

API

API(Application Programming Interface) : 응용 프로그램에서 사용가능하도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할수 있게 만든 인터페이스

API를 사용하면 개발자들이 어플리케이션 코드를 작성하는 방법을 표준화 함으로써, 개발자간의 협업을 용이하게 만들어주고 간소화를 통해 빠른 프로세스 처리를 가능하게 해준다.

 

Http 패킷

웹의 어플리케이션 계층 프로토콜이며 웹 상(웹서버 ↔ 웹 클라이언트) 에서의 통신에 사용되는 프로토콜이다.

 

Http 메소드

GET

서버의 정보를 조회 하기 위해 설계된 메서드이다.

데이터를 Body에 담지않고 URL에 쿼리스트링을 붙여 전송합니다.

대량 데이터전송이 불가능하다.

 

POST

데이터 생성/변경 등을 위해 설계된 메서드이다.

GET 메소드와 다르게 Body에 정보를 담아서 서버에 전송합니다.

GET과 달리 대용량 데이터전송이 가능하며 Body에 데이터가 전송되기 때문에 url에서 확인되지않는다.

 

데이터 포맷

Header와 Body로 구성된다.

Header

1.요청 메소드 : GET, POST, PUT, OPTIONS 등이 명시된다.

2.요청 URL : 요청하는 서버의 URL

3.HTTP 프로토콜 버전 : 웹 브라우저가 사용하는 프로토콜 버전

4.상태코드 : 응답 헤더에 존재하는 요청의 성공 여부 (200, 400, 402)전송할 데이터

Body

전송할 데이터를 입력한다.

 

API Sheet

구현할 기능, HTTP메소드, URL, 개발여부 등을 정리하여 표로 만든것이다.

 

path variable

경로를 변수로서 사용하는 것이다. 

게시물의 경우 각각의 유저가 본인들의 게시글을 확인해야한다.

/post/6 이라고 설정해주면 userIdx가 6인 user의 게시물들을 볼수 있게 처리하는것이다.

 

728x90

'study > UMC(University MakeUs Challenge)' 카테고리의 다른 글

REST API / HTTP  (0) 2021.11.15
데이터베이스  (0) 2021.11.04
OS와 서버  (0) 2021.11.04
네트워크와 프로토콜  (0) 2021.11.04
728x90

4주차 WorkBook

실습

QuickDBD를 통해 데이터베이스의 테이블들의 구조와 속성간의 관계를 정립하였다.

AWS에 RDS 를 구축하여 해당 디비에 값을 연결하고 값을 저장하고 어플리케이션(배달의민족)의 이미지대로 데이터를 추출하는 쿼리문을 짜보았다.

키워드 정리

RDBMS

관계형 데이터 베이스 관리 시스템이다.

SQL

DDL : Data Definition Language (데이터 정의 언어)

CREATE - 데이터베이스, 테이블등을 생성한다.

ALTER - 테이블을 수정한다.

TRUNCATE - 테이블을 초기화한다.

DROP - 데이터베이스, 테이블을 삭제한다.

 

DML : Data Manipulation Language(데이터 조작어)

SELECT : 데이터를 조회한다.

UPDATE : 데이터를 수정한다.

DELETE : 데이터를 삭제한다.

INSERT : 데이터를 삽입한다.

 

DCL : Data Control Language (데이터 제어어)

GRANT : 데이터베이스 사용자에게 특정 작업에 대한 권한을 부여한다.

COMMIT : 트랜 잭션의 작업이 정상적으로 완료되었음을 알려준다.

ROLLBACK : 트랜잭션의 작업이 비정상적으로 종료 되었을 때 원래의 상태로 복구한다.

REVOKE : 데이터베이스 사용자에게 특정 작업에 대한 권한을 박탈, 회수한다.

 

DataBase 용어

테이블(Table)

행과 열로 구성된 데이터 모음

서로 연관된 데이터 집합

 

행(Row)

테이블을 구성하는 데이터들 중 가로로 묶은 데이터 셋. 일반적으로 하나의 행이 한 객체에 대한 정보를 담고있다.

튜플, 레코드 라고도 부른다.

 

열(Colum)

테이블에서 세로로 묶은 데이터 셋이다. 일반적으로 열은 그 테이블의 속성을 의미한다.Name필드, id 필드 등등

관계형 데이터 베이스에서 속성(Attribute)라고도 부른다.

 

스키마(Schema) (외부 스키마 / 개념 스키마 / 내부 스키마)

스키마

데이터베이스의 골격 구조를 나타내는 일종의 도면. 데이터베이스의 각 레코드의 크기, 키의 정의, 레코드 간의 관계 등을 정의한다.

 

외부 스키마

사용자의 입장에서 정의한 데이터베이스의 구조, 데이터들의 형식 등을 화면을 통해 사용자에게 어떻게 보여줄 것인가에 대한 명세.

하나의 데이터베이스에 여러개의 외부 스키마가 있을 수 있다.

 

내부 스키마

데이터베이스가 어떻게 저장장치에 저장될지에 대한 명세. 물리적인 저장장치와 데이터베이스간의 관계를 정의하므로 시스템 프로그래머나 시스템 설계자가 보는 관점의 스키마.\

 

개념 스키마

조직체 전체를 관장하는 입장에서 DB를 정의한 스키마. DB에 하나만 존재한다.

데이터 베이스의 구조와 제약조건에 대한 전반적인 명세

 

 

유일성과 최소성

최소성

키를 구성하는 속성들 중 꼭 필요한 최소한의 속성들로만 키를 구성하는 성질

굳이 없어도될 속성은 X

 

유일성

하나의 키값으로 튜플을 유일하게 식별할 수 있는 성질

ex) 주민등록번호

 

슈퍼키

유일성을 만족하는 속성 또는 속성들의 집합. 키값이 같은 튜플은 존재할 수 없다.

유일성은 만족하지만 최소성은 만족하지 않는다.

 

대체키

기본 키로 선택되지 못한 후보키들 기본키를 대신할 자격이 있으나 null값을 가질 수 있는 속성, 값이 자주 변경될 수 있는 속성 등의 이유로 기본키로 선택받지 못한 나머지 키들

 

후보키

슈퍼 키 중에서 최소성을 만족하는 키. 유일성과 최소성 모두를 만족하는 속성 또는 속성들의 집합이다.

 

기본키

여러 후보키 중에서 하나를 선택한 키가 기본키가된다. 하나의

null값을 가질 수 없다. 기본키로 정의된 속성에는 동일한 값이 중복될 수 없다. 값이 자주 변경되는 값은 기본키가 될 수 없다.

 

외래키

관련이 있는 여러 테이블 사이에서 데이터의 일관성을 보장해주는 수단이자, 두개의 테이블을 연결해 관계를 맺어주는 기준이 되는 키이다.

 

 

1:1 관계 / 1:N관계 / N:M관계

1:N관계 : 하나의 레코드가 다른 여러개의 레코드와 관계될 때 1:N관계를 가진다.

N: M 관계 : 여러 레코드가 여러 레코드와 관계될 때 N:M을 가진다.

1:1관계 : 서로다른 두개의 레코드가 1대1로 관계될때 1:1관계를 가진다.

728x90

'study > UMC(University MakeUs Challenge)' 카테고리의 다른 글

REST API / HTTP  (0) 2021.11.15
API  (0) 2021.11.04
OS와 서버  (0) 2021.11.04
네트워크와 프로토콜  (0) 2021.11.04
728x90

3주차 WorkBook

실습

AWS에 EC2 인스턴스를 생성하고 해당 서버에 Nginx, mysql, php 등을 설치하여 연동하고 Workbench 를 통해 해당 서버의 mysql을 조작해보았다.

가비아를 통해 AWS 서버의 도메인을 받았다.

 

OS

Operating System의 약칭으로 시스템 하드웨어를 관리하고 응용 프로그램을 실행시킬 수 있는 시스템 소프트웨어이다.

Linux

Linux는 오픈소스 운영체제이며 무료로 사용가능하다.

WINDOW보다 가벼운 특징이 있어 웹서버, 클라우드, 안드로이드, 임베디드 등등 다양한곳에 사용된다.

OS 커널의 일종인 리눅스 커널을 사용하는 운영체제를 가리키는 말이다.

IP

Internet Protocol의 약자로 인터넷 프로토콜에서 각 장치를 나타내는 IP주소를 가리키는 말로 쓰인다. 인터넷상에서 사용되는 각장치의 주소이다.

URL

URL은 프로토콜, 호스트, 경로 매개변수 등으로 구성된다.

URL은 웹을 뒷받침하는 주소체계이다. 웹에 존재하는 파일을 다른 파일과 구별하는 효과적인 식별자이다.

Domain

직역하면 분야 영역, 범위 등을 뜻하는 단어이다. 인터넷 상에서 어떤 사이트(영역)을 지칭하기 위해 사용된다.

Name Server

www.naver.com을 입력하면 해당하는 IP주소로 변환해주는 역할을 하는 서버이다.

도메인 이름을 IP로 변환해주는 역할을 한다.

Sub Domain

ex) example.com 의 웹사이트의 서브도메인으로 shop.exampe.com이 있을 수 있다.

도메인네임 서버 계층에서 서브도메인(sub domain)또는 하위 도메인은 도메인의 일부인 도메인이다.

Redirection

출력방향을 다른곳으로 바꾸는것을 의미한다.

ex) example.com/page1 URL을 웹서버에 요청했을 때 서버에서 example.com/page2 로 다시 요청하라고 지시하여 example.com/page2 가 출력되게한다.

Redirection : 다시 지시.

AWS원격 컴퓨터를 사용할 수 있는 서비스이다.

아마존 웹서비스는 아마존 닷컴의 클라우드 컴퓨팅 사업이다.

AWS EC2

Amazon EC2를 사용하면 하드웨어에 선투자할 필요가 없어 더 빠르게 애플리케이션을 개발하고 배포할 수 있습니다.

Elastic Compute Cloud로 클라우드에서 확장 가능한 컴퓨팅 용량을 제공하는 서비스 입ㄴ다.

728x90

'study > UMC(University MakeUs Challenge)' 카테고리의 다른 글

REST API / HTTP  (0) 2021.11.15
API  (0) 2021.11.04
데이터베이스  (0) 2021.11.04
네트워크와 프로토콜  (0) 2021.11.04
728x90

2주차 Work Book

  • 클라이언트-서버 통신
    • 프로토콜
      • HTTP
      • HTTP(Hypertext Protocol) : 웹상에서 사용하는 프로토콜 일반적으로 80포트 사용
      • HTTPS보안기술이 적용되어 통신의 안전성이 확보되었다. 보통 443포트사용Secure Sockets Layer라는 암호규약
      • 전달되는 내용이 다른사람에게 노출되거나 전달되는 내용이 악의적으로 변경되는것을 막을 수 있다.
        • SSL
      • Secure Sockets Layer라는 암호규약
      • 전달되는 내용이 다른사람에게 노출되거나 전달되는 내용이 악의적으로 변경되는것을 막을 수 있다.
        • FTP
      • TCP/IP기반에서 서버와 클라이언트 사이의 파일전송을 위한 프로토콜이다. 보통 20, 21번포트를 사용한다.
      • File Transfer Protocol
        • SFTP
      • 보안 파일 전송 프로토콜로 불리며 22번 포트를 사용한다. ssh와 같은 방식을 사용한다고 한다. ssh는 secure shell이다.
        • MYSQL
      • SQL을 사용하는 공개소스의 관계형 데이터베이스 관리 시스템(RDBMS)를 사용하기 위한 포트로 일반적으로 3306번을 사용한다.
        • SSH
      • 시큐어 쉘(Secure Shell)은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 포트입니다.
    • OSI 7 계층
    • 네트워크 계층
      • 1Layer - Physical Layer : 하드웨어 전송 기술로 이루어진 계층이다. 전기적인, 기계적인 신호를 주고받는 역할을 한다. 비트 0,1의 통신단위로 통신한다.
      • 2Layer - Data Link Layer : 데이터 링크 계층은 Point to Point간의 전송을 보장하기 위한 계층이다. DataLink 계층의 대표적인 장비로는 스위치와 브릿지가 있다. MAC주소가 Data Link계층에 해당한다. 전송단위는 Frame이다.
      • 3Layer - Network Layer : IP주소를 제공하는 계층이다. 네트워크 계층에서는 대표적으로 노드들을 거칠 때 마다 라우팅 해주는 역할을 담당한다. 대표적인 라우팅 장비로는 공유기가 있다. 전송단위는 Packet이다.
      • 2Layer - Data Link Layer : 데이터 링크 계층은 Point to Point간의 전송을 보장하기 위한 계층이다. DataLink 계층의 대표적인 장비로는 스위치와 브릿지가 있다. MAC주소가 Data Link계층에 해당한다. 전송단위는 Frame이다.
      • 5Layer - Session Layer : 데이터를 만들어내는 계층이다. 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다. 해당 계층에서 TCP/IP 세션을 만들고 없애는 책임을 진다.
      • 6Layer - Presentation Layer : 표현 계층은 코드간의 번역을 담당하여 사용자 시스템에서 데이터 형식상 차이를 다루는 부담을 덜어준다. MIME 인코딩이나 암호화 등의 동작이 이 계층에서 이루어진다. 데이터의 압축 인코딩 등이 이 계층에서 다루어진다.
      • 7Layer-Application Layer : 응용 계층은 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다. 우리가 사용하는 사용자 인터페이스를 제공하는 프로그램등을 말한다. HTTP, FTP등의 프로토콜이 응용 계층에 속한다. 
        • TCP/IP
          • TCP
          • TCP(Transmission Control Protocol)은 IP 네트워크의 두 컴퓨터 간의 연결 지향 통신을 위한 전송 계층 호스트 간 프로토콜 입니다.
          • TCP의 경우 신뢰성있는 통신을 보장한다. 데이터가 전달되는 과정에서 여러 스위치 라우터 등등을 거치면서 데이터가 잘못 전달되는 현상이나 전달이 안되는 경우 오류제어, 흐름제어를 통해 신뢰성있는 데이터가 전달될 수 있도록 한다.
          • TCP는 4Layer인 TransPort 계층에 위치한다. 웹 브라우저들이 서버에 연결할 때도 사용한다.
            • IP
          • IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서가 다를 수 있다.
          • Internet Protocol의 패킷 전송과 정확한 순서를 보장하기 위해 TCP를 사용한다.
          • 패킷 통신방식의 인터넷 프로토콜IP(인터넷 프로토콜)이다.
  • IP
    • Packet
      • Header
      • HTTP 메시지를 생성한 일시, 클라이언트와 서버간 연결에 대한 옵션 설정 등이 포함되어있다.
      • HTTP Method, Request target, HTTP Version 등이 명시되어있다.
      • Host : 요청이 전송되는 target의 host url
      • User-Agent : 요청을 보내는 클라이언트에 대한 정보(웹브라우저 정보)
      • Accept : 해당 요청이 받을 수 있는 응답(response) 타입.
      • Connection : 해당 요청이 끝난후 클라이언트와 서버가 계속해서 네트워크 커넥션을 유지할 것인지, 끊을 것인지에 대해 지시하는 부분Content-Length : 메세지 body의 길이
      • 또한 Body에 대한 정보들이나 Cookie등도 가지고 있다.
      • Content-Type : 해당 요청이 보내는 메시지 Body의 타입(JSON, application/json)
      • Content-Length : 메세지 body의 길이
      • Body
      • Body가 없는 request도 많다.
      • Request의 실제 메세지/내용
    • IPv4
    • IP주소의 종류중 하나로 32비트 길이의 식별자로 0.0.0.0 ~ 255.255.255.255까지의 숫자의 조합으로 이루어진다. 총 네구간으로 나누어져 있으며 최대 12자리 번호로 이루어져 있다. 전세계 공용으로 사용되어왔으며 인터넷 사용자 수가 급증하면서 IPv4주소가 고갈될 문제에 쳐해있다. 이러한 고갈문제를 해결하기 위해 IPv6가 등장했다.
    • IPv6
    • IPv4주소체계를 128비트 크기로 확장한 차세대 인터넷 프로토콜 주소이다. 16비트씩 8부분으로 16진수로 표기
    •  
    • Domain
    • ip에 이름을 부여한 것이다.
    • ex) www.naver.com , google.com
  • Port
    • 서버에서 포트란?
    • IP를 집주소라고 한다면 Port는 해당 집의 문이다.웹서버의 경우 80번포트를 이용하며 IP주소와 80번포트를 통해 웹서버의 웹사이트로 접속이 가능하다.
    • 프로세스별로 할당된 번호이며 해당 번호를 통해 다른 컴퓨터와 데이터를 주고받을 수 있다.
    • 서버의 컴퓨터로 들어오는 문.
    • 프로토콜별 포트 번호 정리
    • 22 : 원격 로그인 SSH 포트
    • 25 : SMTP 메일 메세지 전송 프로토콜
    • 80 : HTTP 웹페이지 포트
    • 443 : HTTPS HTTP over SSL 프로토콜
    • 123 : NTP Network Time Protocol
    • 53 : DNS 포트
    • 23 : Telent 포트
    • 20,21 : FTP 포트
  • 포트리스닝 : 접속요청을 기다리는 상태이다.
  • 포트의 LISTEN 상태
  • 인바운드 / 아웃바운드
  • 아웃바운드 : 서버외부로 나가는것. 서버→클라이언트
  • 인바운드 : 클라이언트가 서버에 접속하는 것. 서버내부로 접속하는것
  • 데몬(Daemon)
  • 컴퓨터가 원활하게 운영되도록 도와준다.
  • 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램
  • Port forwarding공유기 내부망의 컴퓨터들을 가리키도록 설정하는것
    • 공유기
      • WAN광범위한 지역단위로 구성하는 네트워크를 의미한다. WAN이 LAN과 LAN을 연결하는 역할을 한다.
      • Wide Area Network로 넓은 지리적 거리/장소를 넘나드는 통신 네트워크 또는 컴퓨터 네트워크이다.
      • LAN
      • 근거리 통신망, Local Area Network를 의미하며 집, 사무실 학교 등 가까운 지역을 한데 묶는 컴퓨터 네트워크이다.
    • 외부 IP (공인 IP)
    • 공인IP라고 이름붙은 이유는 외부에서 내 컴퓨터로 접속하기위해 해당 IP를 사용해야하기 떄문이다.
    • 집(공유기내부)이 아닌 외부와 통신할 때 사용하는 IP
    • 내부 IP (사설 IP)내부네트워크 내에서는 내부 IP로 통신이 가능하다.
    • 집(공유기)에 형성되어있는 내부 네트워크에 접속된 기기들에 할당되는 IP주소이다. 내부 IP로는 외부와 통신할 수 없다.
    • 외부 포트
    • 외부에서의 접속을 위한 포트
    • 내부 포트
    • 포트포워딩을 위한 포트
    • 외부에서 연결했을때, 지정된 내부 PC에서 어떤포트를 사용할 것인가.
    • 게이트웨어
    • 네트워크통신을 할때 반드시 통과해야하는 곳이다.
    • 네트워크에서 다른 네트워크 간단히 말하면 LAN에서 다른 LAN 으로 이동할 때 거쳐야하는 지점을 말한다.
    • 방화벽
    • 네트워크 패킷들을 모니터링하며 외부 패킷들중 감엽될수 있거나 정상패킷과 다른패킷들을 못들어오게 막아준다.

추가 개념 키워드

  • TCP vs UDP
    • UDP
    • 통신을 할때 데이터를 받았다는 신호 또는 보낸다는 신호를 거치지않는다.
    • 신뢰성이 낮다. TCP보다 빠르다.
    • 비연결형 통신규약
  • DNS(Domain Name Server)이름과 IP를 1대1로 매핑하여 관리한다.
  • IP주소를 www.google.com과 같이 사람이 읽을 수 있는 이름으로 변환해주는 서버.
  • Proxy
    • Forward proxy
    • 클라이언트에서의 요청을 Proxy에서 server로 요청하고 해당 결과를 Proxy에서 client에게 전달해주는것
    • Reverse proxy
    • 클라이언트에서 서버로 요청할때 서버가아닌 Proxy를 거치는 것이다. Proxy에서 데이터를 받은후 내부 Server로 해당 요청을 전달한다.
  • 네트워크 장비
    • 라우터
    • 서로 다른 네트워크 간의 중계역할을 해준다.
    • 패킷의 목적지 IP 에대해 최적의 경로를 제공하며 데이터패킷을 목적지까지가는 다음 장치로 전향시킨다.
    • 허브
    • 충돌영역을 분할할때 사용한다고 한다.
    • 신호를 증폭 시켜 LAN의 전송 거리를 연장 시킨다.
    • 스위치
    • MAC주소 테이브르을 가지고 있어 목적지 MAC 주소를 가진 장비가 연결된 포트로 프레임을 전송한다.
    • 공유기
    • 하나의 IP로 여러 PC나 장비에서 공유하여 동시에 인터넷을 사용할 수 있게 한다.
  • 이더넷(Ethernet)
  • 이더넷은 LAN, MAN, WAN에서 많이 사용되는 네트워크 규격이다.
  • 물리계층에서 신호와 배선, 데이터 링크 계층에서 MAC패킷과 프로토콜을 정의하였다.
  • MAC 주소
  • 데이터 링크ㅡ 계층에서 통신을 위한 인터페이스에 할당된 고유 식별자이다.
728x90

'study > UMC(University MakeUs Challenge)' 카테고리의 다른 글

REST API / HTTP  (0) 2021.11.15
API  (0) 2021.11.04
데이터베이스  (0) 2021.11.04
OS와 서버  (0) 2021.11.04
728x90

Quick DBD에 대해 알기전에 ERD에 대한 개념이 필요하다.

 

ERD(Entity Reationship Diagram)

ERD는 Entity Relationship Diagram의 약자로 

Entity들의 관계를 도표로 테이블간의 관계를 시각화하여 한눈에 디비구조를 파악할 수 있도록 한것이다.

 

Quick DBD는 대표적인 ERD툴이다.  DB의 각 테이블들의 관계도를 보여준다. 관계가 있는 요소들끼리 선으로 이어 관계를 보여주며 각 테이블들의 관계구조를 보기싶게 나타내준다. 또한 원하는 위치에 배치할 수 있으며 매우 편한 툴이다.

 

Quick DBD의 용도

1. 데이터 베이스 설계할때 편하게 설계가 가능하다.

2.데이터 베이스 사용중 쿼리문 작성이 편해진다.

3.데이터 베이스를 수정하거나 생성할때 외부로 가져와 Workbench등의 툴을 이용해서도 수정이 가능하다.

4. 한눈에 확인할 수 있기 때문에 협업에서 사용하면 좋다.

 

좌측의 코드를 수정하여 우측의 데이터들을 제어할 수 있으며, Entity들의 경우 마우스 드래그를 통해 원하는 위치에 지정시킬 수 있다.

테이블의 내부 정보중 열쇠모양이 있는데 저것은 Primary key를 표시한것이다. 이처럼 한눈에 데이터베이스의 구조와 내부 데이터들 정보까지 확인할 수 있는 편한 툴 인것 같다.

 

상단의 EXPORT를 통해 sql 데이터를 추출하여 다른 프로그램에서 사용하능하다. 또한 추출을 이미지 파일이나 pdf파일로도 추출이 가능하여 편리하게 다양한곳에 사용가능하다.

또한 IMPORT를 통해 다른곳에서 사용한 sql데이터를 가져와 시각화 및 데이터 수정 구조 이해 등이 가능하다.

QuickDBD를 통해 훨신 쉽고 편하게 DB설계가 가능하고 개발중 수정이나 데이터 삭제 또한 매우 쉽게 가능할것으로 보인다.

 

DB설계는 해본적이 없으며 이론만 가볍게 접해본 입장에서도 이러한 프로그램은 디비 구조를 이해하는데 정말 많은 도움이 될것으로 보인다. 또한 프론트, 디자이너와의 협업에 있어서도 DB구조 이해에 많은 도움이 될것으로 보인다.

졸업 프로젝트 혹은 그외의 많은 프로젝트를 수행하는데 있어 Quick DBD는 많이 활용할 예정이다.

 

UMC 프로젝트 기간에 협업 툴로 사용하면 좋을것으로 보이며 앞으로 백엔드 개발할때 DB를 관리하고 이해하는데 사용하면 매우 좋을것 같다. 프로젝트의 전반적인 계획과 구상할 때에도 해당 툴을 활용할 예정이며 개발 중간 보고 최종보고 시에도 QuickDBD를 사용하여 정리된 데이터베이스를 보여줄 예정이다.

728x90
728x90

바이트기반 보조스트림

FilterInputStream, FilterOutputStream

FilterInputStream과 FilterOutputStream은 InputStream/OutputStream의 자손이면서 모든 보조스트림의 조상이다.

보조스트림은 자체적으로 입출력을 수행할 수 없기 때문에 기반 스트림을 필요로한다.

protected(FilterInputStream(InputStream in)

public FilterOutputStream(OutputStream out)

 

FilterI/OStream의 모든 메서드는 기반스트림의 메서드를 그대로 호출하고 Filter보조스트림은 아무런 일을 하지않는다. FilterInputStream, FilterOutputStream은 상속을 통해 원하는 작업을 수행하도록 읽고쓰는 메서드를 오버라이딩 해야한다.

 

FilterInputStream의 자손 BufferedInputStream, DataInputStream, PushbackInputStream 등

FilterOutputStream의 자손 BufferedOutputStream, DataOutputStream, PrintStream 등

 

BufferedInputStream, BufferedOutputStream

버퍼 보조스트림은 입출력의 효율을 높이기 위해 사용된다. 버퍼를 이용해서 한번에 여러 바이트를 입출력하는것이 빨라지기 떄문이다.

BufferedInputStream(InputStream in, int size) : InputStream인스턴스와 버퍼 사이즈를 지정하여 버퍼 InputStream을 생성한다.

BufferedInputStream(InputStream in) : InputStream인스턴스만을 인자로 넣어주며 버퍼의 사이즈를 지정해주지 않는경우 8192byte크기의 버퍼를 갖게된다.

 

BufferedInputStream은 입력소스로부터 데이터를 buffer크기만큼 데이터를 읽어 내부 버퍼에 저장해놓는다. 프로그램에서는 외부가 아닌 내부 버퍼에 저장된 데이터를 읽어들이기 때문에 효율적인 데이터 처리가 가능하다.

내부 버퍼에 저장된 모든 데이터를 읽어들인 이후 read메서드가 호출되면 BufferedInputStream은 입력 소스로부터 다시 버퍼크기만큼의 데이터를 읽어다 버퍼에 저장해 놓는다.

 

BufferedOutputStream(OutputStream out, int size) : OutputStream인스턴스와 버퍼 사이즈를 인자로 던져 내부버퍼를 갖는 BufferedOutputStream 인스턴스를 생성한다.

BufferedOutputStream(OutputStream out) : OutputStream인스턴스를 인자로 주며 사이즈를 지정해주지 않을 경우 기본 버퍼사이즈는 8192byte크기가 된다.

flush() : 버퍼의 모든 내용을 출력하여 버퍼를 비운다.

close() : flush()를 호출해서 버퍼의 모든 내용을 출력하고 BufferedOutputStream인스턴스가 사용하던 모든 자원을 반환한다.

 

BufferedOutputStream 도 버퍼를 이용하여 출력작업을 하게 된다. write()메소드를 이용하여 BufferedOutputStream의 데이터를 내부 버퍼에 복사하고 버퍼로부터 출력한다. 버퍼의 모든내용을 출력한 후 write()호출 시 버퍼를 비우고 추가적인 데이터들을 내부 버퍼에 복사한다. 

출력소스가 버퍼에 남아있는 채로 프로그램이 종료될 수 있기 때문에, BufferedOutputStream을 사용완료한 후에는 반드시 BufferedOutputStream의 close()메소드나 flush() 메소드를 호출해 버퍼의 모든내용이 출력되도록 해야한다.

버퍼의 사이즈가 5기때문에 처음 write호출시 1부터 5까지만 write되고 6,7,8,9는 버퍼에 존재한다.

버퍼를 비우기위해 bos.close()를 호출하여 버퍼에 존재하는 6,7,8,9가 출력되고 버퍼를 비운다.

 

DataInputStream, DataOutputStream

DataInputStream은 FilterInputStream의 자손이며 DataInput인터페이스를 구현한 클래스이다.

DataOutputStream은 FilterOutputStream의 자손이며 DataOutput인터페이스를 구현한 클래스이다.

DataStream을 사용하면 byte뿐만아니라 8가지 기본 자료형의 값들도 읽기,쓰기가 가능하다. DataStream을 이용하여 기본 자료형 값을 출력한경우 이값을 읽기위해서는 똑같이 DataStream의 기본자료형을 이용해야한다.

sample.dat파일을 HxD로 열었을 경우이다. 4바이트중 10의 16진수인 A가 출력되고 20.0f가 4바이트로 41A00000이 저장되어있다. 마지막으로 ture값인 1이 저장된것을 알 수 있다.

 

 

sample.dat파일을 각각 기본자료형으로 읽어 출력하는 프로그램이다.

DataOutputStream으로 저장한 데이터 기본자료형에 맞추어 read를 해주면 정상적으로 파일을 읽을 수 있다.

데이터를 변환없이 저장하고 읽을때 사용하면 편하다.

 

try내부에서 파일을 while(true)로 계속해서 읽는다. 파일의 끝에 도달하여 read를 하면 EOFException이 발생하여 sum을 출력하고 try-catch부분이 끝나는경우 finally의 close()가 실행되어 스트림을 모두 비워준다. 

 

JDK1.7이후부터 try-with-resource문을 이용하여 close()를 호출하지 않아도 자동호출되도록 할 수 있다.

위처럼 try의 내부()에 자원을 적어주는것이 try-with-resources문이다. 위처럼 처리해줄경우 close()를 직접 호출하지않아도 ()내부의 자원이 자동으로 close()된다.

 

SequenceInputStream

입력스트림을 연속적으로 연결해서 하나의 스트림으로부터 데이터를 읽을 수 있는것

SequenceInputStream(Enumeration e) : 저장된 입력스트림을 하나의 스트림으료 연결한다.

SequenceInputStream(InputStream s1, InputStream s2) : 두개의 입력스트림을 하나로 연결한다.

 

위처럼 사용할 수 있다.

 

728x90

'Programming > JAVA' 카테고리의 다른 글

바이트 기반 스트림  (0) 2021.09.10
자바의 입출력  (0) 2021.09.10
그룹화와 분할 - groupingBy(), partitioningBy()  (0) 2021.09.02
collect()  (0) 2021.09.02
스트림의 최종연산  (0) 2021.09.01
728x90

바이트 기반 스트림

InputStream과 OutputStream

InputStream의 메서드

int available() : 스트림으로부터 읽어 올 수 있는 데이터의 크기를 반환한다.

void close() : 스트림을 닫음으로써 사용하고 있던 자원을 반환한다.

void mark(int readlimit) : 현재위치를 표시해 놓는다. 후에 reset()에 의해서 표시해 놓은 위치로 다시 돌아갈 수 있다. readlimit은 되돌아갈 수 있는 byte의 수이다.

boolean markSupported() : mark()와 reset()을 지원하는지 알려준다.

abstract int read() : 1byte를 읽어온다. 더이상 읽어올 데이터가 없으면 -1을 반환한다.

int read(byte[] b) : 배열 b의 크기만큼 읽어서 배열을 채우고 읽어온 데이터 수를 반환한다.

int read(byte[] b, int off, int len) : len개의 byte를 읽어서, 배열 b의 지정된 위치(off)부터 저장한다. 실제로 읽어오는 데이터의 수는 len보다 작을 수 있다.

void reset() : 스트림에서의 위치(offset)를 마지막으로 mark()이 호출되었던 위치로 되돌린다.

long skip(long n) : 스트림에서 주어진 길이(n)만큼을 건너뛴다.

 

OutputStream 메서드

void close() : 입력소스를 닫음으로써 사용하고 있던 자원을 반환한다.

void flush() : 스트림의 버퍼에있는 모든 내용을 출력소스에 쓴다.

abstract void write(int b) : 주어진 값을 출력소스에 쓴다.

void write(byte[ ] b) : 주어진 배열 b에 저장된 모든 내용을 출력소스에 쓴다.

void write(byte[ ] b, int off, int len) : 주어진 배열 b에 저장된 내용 중에서 off번째부터 len개 만큼만을 읽어서 출력소스에 쓴다.

 

flush()는 버퍼가 있는 출력스트림에서만 의미가 있다. 

프로그램이 종료될 때, 사용하고 close하지 않은 스트림을 JVM이 자동적으로 닫아주기는 하지만 스트림을 사용 완료한 이후에는 close()를 호출하여 반드시 닫아주는 것이 좋다. 

ByteArrayInputStream처럼 메모리를 사용하는 스트림, System.in, System.out과 같은 표준 입출력 스트림은 닫아주지 않아도 된다.

 

ByteArrayInputStream과 ByteArrayOutput

바이트배열에 데이터를 입출력하는데 사용되는 스트림이다. 입출력하기 전에 데이터를 임시로 바이트배열에 담아서 변환 등의 작업을 하는데 사용된다.

스트림의 종류가 달라도 읽고 쓰는 방법은 동일하다.

 

ByteArrayInputStream()에 읽을 데이터를 매개변수로 주어 읽기 스트림을 주고 ByteArrayOutputStream을 생성해주어 각InputStream에 저장된 데이터를 하나씩 입력받아 출력 스트림에 쓴다. 이후 스트림에 적은내용을 배열에 옮긴다.

배열을 스트림을 통해 복사하는 방법이다.

 

배열 크기 복사

InputStream의 offset 0부터 temp.length만큼 데이터를 읽어 temp에 저장한다.

이후 temp에 저장된 내용을 temp의 offset 5부터 길이 5만큼 outputStream에 쓴다.

available()을 통해 스트림에 읽을 데이터가 남아있는경우 반복문이 계속 실행되게하고 내부에서는 데이터를 temp의 크기(4byte)만큼씩 temp에 저장하고 output.write를 통해 temp 에 저장된 데이터를 outputStream에 temp크기만큼씩 쓴다.

tmep의 마지막 저장결과를 보면 4바이트씩 읽다가 마지막에 입력스트림에 2바이트밖에 남지않아 2바이트를 읽은 경우이다. 기존의 데이터를 가지고있는상태에서 2바이만 새로읽어 뒷내용이 유지된다. 이후 OutputStream의 결과처럼 temp의 모든내용이 저장된다.

 

위의 예제에서의 temp에서 저장된 데이터가 변하지 않는 문제점을 해결한 예제이다. 읽은 크기만큼만 write하기 때문에 마지막에 2byte를 읽은경우 2byte만 write하여 배열이 그대로 복사된다.

728x90

'Programming > JAVA' 카테고리의 다른 글

바이트기반 보조스트림  (0) 2021.09.11
자바의 입출력  (0) 2021.09.10
그룹화와 분할 - groupingBy(), partitioningBy()  (0) 2021.09.02
collect()  (0) 2021.09.02
스트림의 최종연산  (0) 2021.09.01

+ Recent posts