JPA (Java Persistence API)

JPA(Java Persistence API)란, 자바 ORM 기술에 대한 표준 명세로, JAVA에서 제공하는 API
  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스의 모음
  • JPA는 애플리케이션과 JDBC 사이에서 동작한다. JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신한다.
  • 데이터를 객체지향적으로 관리할 수 있기 때문에 개발자는 비즈니스 로직에 집중할 수 있고 객체지향 개발이 가능하다.
  • 객체를 통해 쿼리를 작성할 수 있는 JPQL (Java Persistence Query Language)를 지원한다.
  • DBMS에 대한 종속성이 줄어든다. DBMS가 변경된다 하더라도, 소스, 쿼리, 구현방법, 자료형 타입 등을 변경할 필요가 없기 때문에 프로그래머는 Object에만 집중하면 되고, DBMS를 교체하는 작업에도 비교적 적은 리스크와 시간이 소요된다.
  • 가장 대중적인 것은 Hibernate

 

cf) ORM (Object-Relational Mapping)

ORM(Object-Relational Mapping)이란, 객체와 관계형 데이터베이스를 매핑하는 것.
  • 객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계하고 ORM이 연결한다.
  • SQL 쿼리가 아니라 메서드로 데이터를 조작할 수 있다.

 

JPA 사용 이유

  • 생산성
    • JPA를 자바 컬렉션에 객체를 저장하듯 JPA에게 저장할 객체를 전달한다.
    • 간단하게 CRUD를 작성할 수 있다.
    • DDL문을 자동으로 생성해주기 때문에 데이터베이스 설계 정심을 객체 설계 중심으로 변경할 수 있다.
  • 유지보수
    • 기존에는 필드 변경 시 모든 SQL을 수정해야 한다.
    • 개발자가 작성해야 할 SQL과 JDBC API 코드를 JPA가 대신 처리해주기 때문에 유지보수 해야 하는 코드 수가 줄어든다.
  • 패러다임의 불일치
    • 연관된 객체를 사용하는 시점에 SQL을 전달할 수 있다.
    • 같은 트랜잭션 내에서 조회할 때 동일성을 보장한다.
    • 상속, 연관관계, 객체 그래프 탐색, 비교하기 등과 같은 패러다임 불일치를 해결한다.
  • 성능
    • 어플리케이션과 데이터베이스 사이의 성능 최적화 기능을 제공한다.
    • 같은 트랜잭션 안에서는 같은 엔티티를 반환하기 때문에 데이터 베이스와의 통신 횟수를 줄일 수 있다.
    • 트랜잭션을 commit 하기 전까지 메모리에 쌓고 한 번에 SQL을 전송한다.
  • 데이터 접근 추상화와 벤더 독립성
    • 데이터베이스 기술에 종속되지 않도록 한다.
    • 데이터베이스를 변경하면 JPA에게 다른 데이터베이스를 사용한다고 알려주면 간단하게 변경이 가능하다.

 

'프로그래밍 > JAVA' 카테고리의 다른 글

Spring Boot (vs Spring)  (0) 2022.02.21
AOP란,  (0) 2022.02.21
Spring Framework란,  (0) 2022.02.20
함수형 프로그래밍이란,  (0) 2022.02.15
JVM란,  (0) 2022.02.07

Spring

Spring Framework란, 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크.

스프링은 앞의 글을 참고하면 좋습니다!

 

Spring Boot

Spring Boot란, 스프링을 더 쉽게 이용하기 위한 도구.
  • Embed Tomcat을 사용하기 때문에, Tomcat과 같은 웹 서버를 설치하지 않아도 된다.
  • starter을 통한 dependency 자동화 기능이 있어, 스프링과 외부 라이브러리를 자동으로 구성한다.
  • XML 설정을 하지 않아도 된다.
  • jar file을 이용해 자바 옵션만으로 손쉽게 배포가 가능하다.
  • 개발자의 편의를 위해 개발된 도구

 

Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run".

'프로그래밍 > JAVA' 카테고리의 다른 글

JPA란,  (0) 2022.02.22
AOP란,  (0) 2022.02.21
Spring Framework란,  (0) 2022.02.20
함수형 프로그래밍이란,  (0) 2022.02.15
JVM란,  (0) 2022.02.07

AOP (Aspect Oriented Programming)

AOP(Aspect Oriented Programming)는 관점 지향 프로그래밍의 약자. 흩어진 Aspect를 모듈화할 수 있는 프로그래밍 기법. Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것.
  • OOP 한계를 극복시키기 위한 기법
  • 인프라/부가기능을 모듈화한다.
  • 기능을 비즈니스 로직과 공통 모듈로 구분하고, 개발자의 코드 밖에서 필요할 때 비즈니스 로직에 삽입하는 형식으로 실행된다.
  • 공통적인 기능을 종단간으로 삽입할 수 있게 한다.
  • Aspect 별로 처리한다.

 

cf) OOP (Object Oriented Programming)

OOP(Object Oriented Programming)는 객체 지향 프로그래밍의 약자. 모든 데이터를 현실에 빗대어 객체로 다루는 프로그래밍 기법.
  • 비즈니스 로직을 모듈화한다.
  • 객체를 상속/위임을 통해 재사용하여 반복되는 코드의 양을 줄여주지만, 없앨 수 없는 상황이 생기고 어플리케이션 전체에서 사용되는 부가기능들을 모듈화하기 어렵다.
  • 공통적인 기능을 각 객체의 횡단으로 입력한다.
  • 객체별로 처리한다.

 

AOP의 주요 개념

  • Aspect: 흩어진 공통부분을 모듈화하는 것
  • Target: Aspect를 적용하는 곳
  • Advice: 실질적으로 어떤 일을 해야할 지에 대한 구현체
  • JointPoint: Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능
  • PointCut: Joint point 의 상세 스펙을 정의한 것

 

특징

  • 프록시 기반의 AOP 구현체
  • 스프링 빈에만 AOP 를 적용할 수 있다.
  • 동적 프록시 빈을 만들어 등록시켜준다.

'프로그래밍 > JAVA' 카테고리의 다른 글

JPA란,  (0) 2022.02.22
Spring Boot (vs Spring)  (0) 2022.02.21
Spring Framework란,  (0) 2022.02.20
함수형 프로그래밍이란,  (0) 2022.02.15
JVM란,  (0) 2022.02.07

Spring Framework

스프링 프레임워크 (Spring Framework)란, 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크. 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션

 

스프링 프레임워크의 특징

  • POJO(Plain Old Java Object) 방식: POJO는 평범한 자바 객체를 의미한다. Java EE의 EJB (Enterprise JavaBeans) 는 한가지 기능을 위해 불필요한 복잡한 로직이 과도하게 들어가는 단점이 있다. 이에 반발하여 나온 용어가 POJO이다. 별도의 프레임워크 없이 Java EE를 사용할 때에 비해 특정 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기가 용이하고, 객체가 가볍다는 특징이 있다. 하지만 여기에도 지켜야하는 것이 있는데, 객체지향 설계에 맞게 코드를 작성해야한다는 것이다.
  • 관점 지향 프로그래밍(Aspect Oriented Programming, AOP): 로깅, 트랜잭션, 보안 등 핵심적인 비즈니스 로직과 관련은 없으나, 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리하고, 실행 시에 서로 조합하여 사용할 수 있다. 이에 따라 효율적인 유지보수와 재활용성이 극대화된다. 기존에 널리 사용되고 있는 강력한 관점 지향 프로그래밍 프레임워크인 AspectJ도 내부적으로 사용할 수 있으며, 스프링 자체적으로 지원하는 실행시(Runtime)에 조합하는 방식도 지원한다.
  • 의존성 주입(Dependency Injection, DI): 프로그래밍에서 구성요소 간의 의존 관계가 소스코드 내부가 아닌 외부에서 설정을 통해 정의되는 방식이다. 코드 재사용을 높여 소스코드를 다양한 곳에 사용할 수 있으며 모듈간의 결합도도 낮출 수 있다. 계층, 서비스 간에 의존성이 존재하는 경우 스프링 프레임워크가 서로 연결시켜준다. 클래스 A와 B가 있다고 할 때, A 클래스의 메소드 내에서 B 클래스의 객체를 생성하여 비즈니스 로직에 사용하면 A는 B에 '의존'하는 관계가 된다. 그리고 A, B 클래스가 아닌 외부에서 A 클래스의 메소드를 호출하고, 파라미터 값으로 B 클래스의 객체를 전달한다면 이것은 '주입'이 된다. 그렇다면 의존성 주입은? 이 두 상황을 합치면 된다. 파라미터 값으로 전달받은 B 객체를 A 클래스의 메소드 내에서 비즈니스 로직에 사용하는 것을 의미한다. 즉 A와 B의 '의존' 관계가 외부에서의 '주입'을 통해 이루어진 것이다.
  • 제어 역전(Inversion of Control, IoC): 제어의 흐름을 사용자가 컨트롤하지 않고 프레임워크(Spring)에게 맡기는 것이다. 전통적인 프로그래밍에서는 개발자가 작성한 프로그램이 외부 라이브러리의 코드를 호출해서 이용했다. 제어 역전은 이와 반대로 외부 라이브러리 코드가 개발자의 코드를 호출하게 된다. 즉, 제어권이 프레임워크에게 있어 필요에 따라 스프링 프레임워크가 사용자의 코드를 호출한다.
  • 생명주기 관리: 스프링 프레임워크는 Java 객체의 생성, 소멸을 직접 관리하며 필요한 객체만 사용할 수 있다.
  • 데이터 엑세스 프레임워크: 데이터베이스에 접속하고 자료를 저장 및 읽어오기 위한 여러 가지 유명한 라이브러리, 즉 JDBC, iBATIS(MyBatis), 하이버네이트 등에 대한 지원 기능을 제공하여 데이터베이스 프로그래밍을 쉽게 사용할 수 있다.
  • 트랜잭션 관리 프레임워크: 추상화된 트랜잭션 관리를 지원하며 XML 설정파일 등을 이용한 선언적인 방식 및 프로그래밍을 통한 방식을 모두 지원한다.
  • 모델-뷰-컨트롤러 패턴: DispatcherServlet이 Controller 역할을 담당하여 각종 요청을 적절한 서비스에 분산시켜주며 이를 각 서비스들이 처리를 하여 결과를 생성하고 그 결과는 다양한 형식의 View 서비스들로 화면에 표시될 수 있다.
  • 배치 프레임워크: 특정 시간대에 실행하거나 대용량의 자료를 처리하는데 쓰이는 일괄 처리(Batch Processing)을 지원하는 배치 프레임워크를 제공한다. 주로 Quartz 기반으로 동작한다.

 

스프링 프레임워크의 구조

  • Core: Spring Container를 의미한다. 여기서 핵심적인 것은 Bean Factory Container로, 제어 역전(IoC)과 의존성 주입(DI) 기능을 제공하여 객체 구성부터 의존성 처리까지 모든 일을 처리하는 역할을 한다.
  • Context: context 정보들을 제공하는 설정 파일이다. JNDI, EJB, Validation, Scheduiling, Internaliztaion 등 엔터프라이즈 서비스들을 포함한다.
  • DAO: JDBC 추상 계층을 제공하여, 코딩이나 예외처리 하는 부분을 간편화 시켜 일관된 방법으로 코드를 짤 수 있게 도와준다. 데이터가 담겨있는 VO(Value Object) 클래스를 이용해 사용한다.
  • ORM: JPA, Hibernate와 같은 ORM이나 MyBatis 같은 데이터베이스 API 등과 통합할 수 있는 기능을 제공한다.
  • AOP: 스프링 프레임워크에서 제공하는 AOP 패키지를 제공한다.
  • Web: Spring Web MVC, Struts, WebWork 등 웹 어플리케이션 구현에 도움되는 기능을 제공한다.
  • MVC: Model2 구조로 application을 만들 수 있게 한다. 전략 인터페이스를 통해 고급 구성 가능하며 JSP, Velocity, Tiles, iText 및 POI를 포함한 수많은 뷰 기술을 지원하고 있다.

'프로그래밍 > JAVA' 카테고리의 다른 글

Spring Boot (vs Spring)  (0) 2022.02.21
AOP란,  (0) 2022.02.21
함수형 프로그래밍이란,  (0) 2022.02.15
JVM란,  (0) 2022.02.07
어노테이션  (0) 2022.01.16

TCP 3-way-handshake

3-way-handshake란, TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정
  • 양쪽 모두 데이터를 전송할 준비가 되었음을 보장
  • ACK를 받을 때까지 데이터 유닛 재전송
  • SYN(Synchronization) : 연결요청, 세션을 설정하는데 사용되며 초기에 시퀀스 번호를 보냄
  • ACK(Acknowledgement) : 보낸 시퀀스 번호에 TCP 계층에서의 길이 또는 양을 더한 것과 같은 값을 ACK에 포함하여 전송

 

  1. A --> B : SYN
    • A 클라이언트는 B 서버에 접속을 요청하는 SYN 패킷을 보냄
    • 송신자가 최초로 데이터를 전송할 때 Sequence Number를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트 전송
    • A 클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태, B 서버는 Listen 상태
  2. B --> A : SYN + ACK
    • B 서버는 요청을 받고, A 클라이언트에게 포트를 열어 달라는 메시지를 보냄
    • 수신자는 Acknowledgement Number 필드를 (Sequence Number + 1)로 지정하고, SYN과 ACK 플래그 비트를 1로 설정한 세그먼트 전송
    • B 서버는 A 클라이언트에게 ACK (요청 받았다는 답변)과 SYN (요청 메시지)를 함께 보내고, B 서버는 SYN_RECEIVED 상태, A 클라이언트는 Close 상태
  3. A --> B : ACK
    • A 클라이언트가 B에게 ACK 패킷을 보내 데이터 송수신 완료
    • 다음 메시지가 있을 경우 이 순서에서 보내면 됨
    • A 클라이언트는 ESTABLISHED 상태, B 서버는 SYN_RECEIVED 상태에서 ACK를 받으면 ESTABLISHED 상태가 됨.

 

TCP 4-way-handshake

4-way-handshake란, 3-way-handshake로 연결된 상태를 해제하는 과정.

 

1. A --> B : FIN

  • A 클라이언트는 연결을 종료하겠다는 FIN 플래그 전송
  • 연결을 종료하고자 하는 클라이언트는 서버에게 tcp header의 flags 필드의 FIN을 1로 세팅하여 전송
  • A 클라이언트는 FIN을 보내고 FIN_WAIT_1 상태, B 서버는 현재 연결 상태

2. B --> A : ACK

  • B 서버는 FIN 플래그를 받고, 일단 확인메시지 ACK를 보내고 자신의 통신이 끝날 때까지 기다림
  • ACK 전송을 받은 A 클라이언트는 FIN_WAIT_2 상태, B 서버는 CLOSE_WAIT 상태

3. B --> A : FIN

  • B 서버가 연결을 종료할 준비가 되면, 연결 해지를 위한 준비가 되었음을 알리기 위해 A 클라이언트에게 FIN 플래그 전송
  • B 서버는 LAST_ACK 상태, FIN을 받은 A 클라이언트는 TIME_WAIT 상태로 변경

4. A --> B : ACK

  • A 클라이언트는 해지 준비가 되었다는 ACK를 확인했다는 메시지 전송
  • A 클라이언트는 시간이 경과 후 CLOSED 상태, B 클라이언트는 ACK를 받으면 CLOSED 상태

'프로그래밍 > 네트워크' 카테고리의 다른 글

TCP vs UDP  (0) 2022.02.14
http vs https  (0) 2022.02.14
HTTP Method  (0) 2022.01.20

함수형 프로그래밍

함수형 프로그래밍이란, 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나. 부수 효과를 없애고 순수 함수를 만들어 모듈화 수준을 높이는 프로그래밍 패러다임.
  • 부수 효과 : 객체의 상태를 변화 시키는 것 (파라미터 포함) 
  • 순수 함수 : 부수효과가 없는 함수. 동일한 인자를 주었을 때 항상 같은 값을 리턴하는 함수, 외부의 상태를 변경하지 않는 함수. 데이터의 값을 변경하거나 객체의 필드값을 설정하는 등의 작업을 하지 않는 함수
  • 모듈화 : 기능을 분할하고 추상화하여 소프트웨어의 성능을 향상시키고 유지보수를 효과적으로 하기 위한 구현 기법

 

함수형 프로그래밍을 배우는 이유

  • 기존 절차적 프로그래밍과 객체 지향형 프로그래밍과는 다른 새로운 방식으로 사고하는 방법을 배우는 것
  • 함수형 프로그래밍은 사고의 전환을 필요로 하여, 이를 통해 다양한 사고방식으로 프로그래밍을 바라봄으로써 유연한 문제해결이 가능

 

함수형 프로그래밍의 특징

  • 순수함수
    • 동일한 입력에는 항상 같은 값을 반환해야 하는 함수
    • 함수의 실행이 프로그램의 실행에 영향을 미치지 않아야 하는 함수
    • 함수 내부에서 인자의 값을 변경하거나 프로그램 상태를 변경하는 Side Effect가 없는 것
    • 프로그램의 변화 없이 입력 값에 대한 결과를 알 수 있어 테스트 용이
  • 비상태, 불변성
    • 데이터의 변경이 필요한 경우, 원본 데이터 구조를 변경하지 않고 그 데이터의 복사본을 만들어서 그 일부를 변경하고, 변경한 복사본을 사용해 작업 진행
  • 선언형 함수
    • 명령형 프로그래밍은 무엇을 어떻게 할 것인가에 주목하고, 선언헌 프로그래밍은 무엇을 할 것인가에 주목
    • for, while과 같은 반복문을 사용하지 않고, map, filter 같은 함수를 매개변수로 받는 메서드 이용
  • 1급 객체
    • 변수나 데이터 구조안에 담을 수 있음
    • 파라미터로 전달 할 수 있음
    • 반환값(return value)으로 사용할 수 있음
    • 할당에 사용된 이름과 관계없이 고유한 구별 가능
    • 동적으로 프로퍼티 할당 가능
  • 고차함수
    • 함수를 인자로 받거나 함수를 반환 값으로 이용할 수 있는 것

 

함수형 프로그래밍을 OOP에서 사용하는 이유

  • 함수적 프로그램은 추상화 레벨이 높아, 코드의 동작을 추론하기 쉽다. 로직의 골격만 남아, 함수를 호출하는 코드를 함수 구현문으로 대체할 수 있기 때문에 개발자는 구현문을 통해 추론이 가능하다.
  • 반환되는 값 예측이 가능하다. 함수형 프로그래밍은 불변성으로 선언한 값을 복사해 변경하기 때문이다.
  • 전역 상태를 허용하지 않는다.
  • 멀티스레드에서 안전성을 지원하여, 스레드 간 객체를 안전하게 공유할 수 있다. 함수형 프로그래밍은 순수함수를 만들기 때문에 객체 전달 시 변이를 막을 수 있다.
  • 개발자는 멀티스레드 환경에서 공유자원에 대한 락, 동기화를 고려하며 코딩할 필요가 없다. 
  • 부수효과를 제거했기 때문에 재사용이 가능하며, 테스트하기 쉽다.
  • 멀티코어를 이용한 병렬 처리하는 것이 비용이나 속도면에서 더 유리하다.

 

함수형 프로그래밍 장점

  • 높은 수준의 추상화를 제공한다
  • 함수 단위의 코드 재사용이 수월하다
  • 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬워진다

 

함수형 프로그래밍 단점

 

  • 순수함수를 구현하기 위해서는 코드의 가독성이 좋지 않을 수 있다
  • 함수형 프로그래밍에서는 반복이 for문이 아닌 재귀를 통해 이루어지는데 (deep copy), 재귀적 코드 스타일은 무한 루프에 빠질 수 있다
  • 순수함수를 사용하는 것은 쉬울 수 있지만 조합하는 것은 쉽지 않다

 

 

추가 공부 자료 : https://jongminfire.dev/함수형-프로그래밍이란

'프로그래밍 > JAVA' 카테고리의 다른 글

AOP란,  (0) 2022.02.21
Spring Framework란,  (0) 2022.02.20
JVM란,  (0) 2022.02.07
어노테이션  (0) 2022.01.16
객체 지향 프로그램이란,  (0) 2022.01.16

TCP (Transmission Control Protocol)

TCP란, 전송 제어 프로토콜. 인터넷 프로토콜 스위트(IP)의 핵심 프로토콜. 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 규약(프로토콜)의 일종. 세계 통신표준으로 개발된 OSI 모형에서 4번째 계층인 전송 계층(Transport Layer)에서 사용하는 규약
  • 연결형 서비스로 가상 회선 방식 제공
  • 3-way handshaking과정을 통해 연결 설정 (목적지와 수신지를 확실히 하여 정확한 전송을 보장하기 위해 세션을 수립하는 과정)
  • 4-way handshaking을 통해 연결 해제
  • 높은 신뢰성 보장
  • 흐름 제어 및 혼잡 제어
  • UDP보다 속도가 느림
  • 전이중(Full-Duplex, 전송이 양방향으로 동시에 일어날 수 있음), 점대점(Point to Point, 각 연결이 정확히 2개의 종단점을 가지고 있음) 방식
  • 서버소켓은 연결만을 담당
  • 연결과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용된다형 서비스로 가상 회선 방식 제공
  • 서버와 클라이언트는 1대1로 연결
  • 스트림 전송으로 전송 데이터의 크기 무제한
  • 패킷에 대한 응답을 해야하기 때문에(시간 지연, CPU 소모) 성능 낮음
  • Streaming 서비스에 불리 (손실된 경우 재전송 요청을 하므로)
  • HTTP, Email, File transfer에서 사용

 

UDP (User Datagram Protocol)

UDP란, 사용자 데이터그램 프로토콜. 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 규약(프로토콜)의 일종. 데이터를 데이터그램 단위로 처리하는 프로토콜. 세계 통신표준으로 개발된 OSI 모형에서 4번째 계층인 전송 계층(Transport Layer)에서 사용하는 규약
  • 비연결형 서비스로 데이터그램 방식 제공
  • 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않음
  • UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출
  • 낮은 신뢰성
  • TCP보다 속도 빠름
  • 네트워크 부하 적음
  • 패킷에 순서 부여나 재조립등의 기능을 처리하지 않음
  • 연속성이 중요한 서비스에 사용 (ex. Streaming 서비스)
  • UDP에는 연결 자체가 없어서(connect 함수 불필요) 서버 소켓과 클라이언트 소켓의 구분이 없다.
  • 소켓 대신 IP를 기반으로 데이터를 전송한다.
  • 서버와 클라이언트는 1대1, 1대N, N대M 등으로 연결될 수 있다.
  • 데이터그램(메세지) 단위로 전송되며 그 크기는 65535바이트로, 크기가 초과하면 잘라서 보낸다.
  • 흐름제어(flow control)가 없어서 패킷이 제대로 전송되었는지, 오류가 없는지 확인할 수 없다.
  • 파일 전송과 같은 신뢰성이 필요한 서비스보다 성능이 중요시 되는 경우에 사용된다.
  • DNS, Broadcasting (도메인, 실시간 동영상 서비스) 에서 사용

 

네트워크 종류 TCP UDP
연결 방식 연결형 서비스 비연결형 서비스
스트림 방식 바이트 스트림 메시지 스트림
패킷 교환 방식 가상 회선 방식 데이터그램 방식
패킷 TCP packet : Segment UDP packet : Datagram
전송 순서 전송 순서 보장 전송 순서가 바뀔 수 있음
수신 여부 확인 수신 여부 확인 수신 여부 확인하지 않음
통신 방식 1:1 통신 1:1 OR 1:N OR N:N 통신
신뢰성 높다 낮다
속도 느리다 빠르다
사용 예시 HTTP, Email, File transfer DNS, Broadcasting, Streaming

'프로그래밍 > 네트워크' 카테고리의 다른 글

TCP handshake  (0) 2022.02.16
http vs https  (0) 2022.02.14
HTTP Method  (0) 2022.01.20

HTTP (Hyper Text Transfer Protocol)

http://yejin013.tistory.com

HTTP란, 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜.
  • 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약
  • 80번 포트 사용
  • 문제점 : 서버에서부터 브라우저로 전송되는 정보가 암호화되지 않음
  • 마케팅 측면에서, HTTPS보다 검색어 우선 순위에서 밀릴 수 있음

 

HTTPS (Hypertext Transfer Protocol Secure)

https://yejin013.tistory.com

HTTPS란, HTTP protocol의 암호화된 버전.
  • SSL (보안 소켓 계층), TLS (전송 계층 보안) 사용
    • SSL(Secure Sockets Layer) : 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 도와주고, 서버 브라우저가 민감한 정보를 주고받을 때 SSL이 도난당하는 것을 막아줌
    • TLS(Transport Layer Security) :  전송계층 종단간 보안과 데이터 무결성을 확보. 데이터가 전송 중에 수정되거나 손상되는 것을 방지하고, 사용자가 자신이 의도하는 웹사이트와 통신하고 있음을 입증하는 인증 기능도 제공
  • 443번 포트 사용
  • HTTP의 문제점 해소 - 서버에서부터 브라우저로 전송되는 정보 암호화
  • 사용자마다 다른 암호 제공
  • HTTP보다 속도 느림
  • 검색엔진 최적화 (SEO) 혜택 있음. 가산점을 받아 검색어 우선 순위에 위치할 수 있음.
  • 가속화된 모바일 페이지(AMP)를 만들고 싶을 때도 HTTPS 프로토콜을 사용해만 함
    • AMP(Accelerated Mobile Pages) : 지연없이 페이지에 바로 액세스 가능하게 하는 프레임워크로 다양한 웹기반의 기술을 사용해 모바일 웹의 성능을 높이기 위한 목적. 구글에서 공개한 오픈소스 라이브러리. 로딩 속도 단축. 일반 모바일 페이지 보다 최대 4배 빠르고 사용하는 데이터의 양 또한 최대 1/8 정도만 사용.
    • https://support.google.com/google-ads/answer/7496737?hl=ko

'프로그래밍 > 네트워크' 카테고리의 다른 글

TCP handshake  (0) 2022.02.16
TCP vs UDP  (0) 2022.02.14
HTTP Method  (0) 2022.01.20

+ Recent posts