Http

클라이언트가 서버에 요청을 보내고 응답을 받으면 연결이 끊긴다.

서버-클라이언트의 실시간 상호 작용이 불가능하다.

 

=> 실시간 상호 작용을 위한 기술이 필요

 

1. Polling

클라이언트가 서버로 http request를 계속 보낸다.

서버에 이벤트가 없어도 계속 요청을 보내기 때문에 서버와 클라이언트의 부담 급증 

 

2.  Long Polling

클라이언트가 서버로 http requestf를 일단 보낸다.

서버에서 해당 클라이언트로 전달한 이벤트가 생기면 응답 메시지 전달 후 연결 종료

클라이언트는 다시 새로운 request를 보낸다.

 

3. Streaming

클라이언트가 서버에 requst를 보낸다.

연결이 끊기지 않은 상태로 끊임없이 데이터를 받는다.

하지만 클라이언트가 서버로 요청을 보내기가 힘들다.

 

4. WebSocket

Http기반으로 하면서 Http의 문제 해결이 목표

송신과 수신을 동시에 처리할 수 있으며 socket connection 을 유지하기 때문에 양방향 통신과 데이터 전송이 가능하다.

기존의 TCP socket과 다른 점은 

WebSocket은 최초 접속이 일반 http 요청을 이용한 handshaking으로 이루어진다.

또한 TCP socket은 바이트 스트림을 사용하지만

웹소켓을 통해 전달되는 텍스트는 UTF-8 포맷을 가진다.

 

  • Stateful : 클라이언트와 한번 연결이 되면 계속 같은 라인 사용해 통신하기 때문에 HTTP사용시 필요없이 발생되는 HTTP와 TCP연결 트래픽을 피할 수 있다(웹소켓은 HTTP와 달리 최초 접속을 제외하고 헤더정보를 보내지 않기에 네트워크 비용측면에서 이득)
  • HTTP 요청을 그대로 사용하기에 기존 80(HTTP포트), 443(HTTPS)포트로 접속하므로 추가 방화벽을 열지 않아도 되고 HTTP의 규격인 CORS적용이나 인증등의 과정을 기존과 동일하게 가져갈 수 있다.

기본적으로 웹소켓API(자바크립트)는 간단한 기능만 제공하기에 대부분의 경우 socket.io같은 오픈 소스 라이브러리를 많이 사용한다.

SockJS(http://sockjs.org)

springframework에서 WebSocket을 지원한다. 스프링 메뉴얼에 webSocket 부분을 보면 위와 같은 브라우저 문제를 해결하기 위한 방법으로 SockJS를 솔루션으로 제시한다. 역시 자체 스팩으로 webScoket 미지원 브라우저를 관리한다. 서버개발시 스프링 설정에서 일반 webSocket 으로 통신할지 SockJS 호환으로 통신할지 결정할 수 있다. 클라이언트쪽은SockJS client를 통해 서버와 통신한다.



출처: https://adrenal.tistory.com/20 [시나몬 브레드]

 

WebSocket은 HTTP와 TCP의 특성을 섞어 놓은 프로토콜이며

결국 핵심은 웹 브라우저 환경에서 연결지향 통신하기 위한 기술이라는 점이다.

'Web Programming > SPRINGBOOT' 카테고리의 다른 글

mac에 docker 설치  (0) 2022.11.16
docker redis 설치  (0) 2021.02.17
Http 통신과 Socket 통신  (0) 2021.02.16
P2P  (0) 2021.02.10
@value 어노테이션 사용시 기본값  (0) 2021.01.25

1. Http 통신

Client의 요청(Request)이 있을 때만 서버가 응답(Response)하여 해당 정보를 전송하고 곧바로 연결을 종료하는 방식

 

  • Client가 요청을 보내는 경우에만 Server가 응답하는 단방향 통신이다.

  • Server로부터 응답을 받은 후에는 연결이 바로 종료된다. 

  • 실시간 연결이 아니고, 필요한 경우에만 Server로 요청을 보내는 상황에 유용하다.

 

2. Socket 통신

Server와 Client가 특정 Port를 통해 실시간으로 양방향 통신을 하는 방식

 

  • Server와 Client가 계속 연결을 유지하는 양방향 통신이다.
  • Server와 Client가 실시간으로 데이터를 주고받는 상황이 필요한 경우에 사용된다.

  • 실시간 동영상 Streaming이나 온라인 게임 등과 같은 경우에 자주 사용된다.

 

 

 

'Web Programming > SPRINGBOOT' 카테고리의 다른 글

docker redis 설치  (0) 2021.02.17
Http를 통한 양방향 통신  (0) 2021.02.16
P2P  (0) 2021.02.10
@value 어노테이션 사용시 기본값  (0) 2021.01.25
@Transaction 사용 시 내부 메소드 간의 호출  (0) 2020.12.31

P2P (peer-to-peer network)

동등 계층간 통신망

 

클라이언트나 서버라는 개념 없이, 오로지 동등한 계층 노드들이 서로 클라이언트와 서버 역할을 동시에 하게 된다.

중앙 서버를 통신하는 형태의 클라이언트-서버 모델과는 구별된다.

멀티미디어 파일을 공유하는 용도는 매우 보편적

spring boot

common properties 사용 시

모든 프로젝트에 추가하거나

@value 어노테이션 사용 시 기본값을 적어줘야 합니다.

 

예를 들면

@Value("${mine.test:default value}")
private String test;

'Web Programming > SPRINGBOOT' 카테고리의 다른 글

Http 통신과 Socket 통신  (0) 2021.02.16
P2P  (0) 2021.02.10
@Transaction 사용 시 내부 메소드 간의 호출  (0) 2020.12.31
스케줄 기능 사용하기  (0) 2020.11.30
@Transactional  (0) 2020.06.11

Transactional은 Proxy기반으로 동작하기 때문에 직접호출(자기 호출)은 Transaction이 적용되지 않습니다.

 

즉, txTest2메소드에서 txTest, txTest1을 직접 호출하는 방식으로는 두 메소드의 Transaction이 먹지 않습니다.

 

처음에 하셨던것처럼 Controller를 통해 txTest, txTest1을 호출하시거나

 

txTest, txTest1 메소드를 외부 클래스로 빼서(인터페이스 기반이어야합니다) txTest2에서 호출하는 방식으로 

 

Transaction을 적용하시기 바랍니다.

출처: https://redgura.tistory.com/422 [우썅]

 

 

결론 : 내부 메소드 호출시 Transaction 적용 안됨

'Web Programming > SPRINGBOOT' 카테고리의 다른 글

Http 통신과 Socket 통신  (0) 2021.02.16
P2P  (0) 2021.02.10
@value 어노테이션 사용시 기본값  (0) 2021.01.25
스케줄 기능 사용하기  (0) 2020.11.30
@Transactional  (0) 2020.06.11

서버에서 스케줄로 등록하여 배치 실행을 할 수 있는 @Scheduled annotation

스케줄 설정을 변수화

 

고정 지연시간

@Scheduled(fixedDelayString = "${fixedDelay.in.milliseconds}") 

 

일정 간격

@Scheduled(fixedRateString = "${fixedRate.in.milliseconds}") 


cron expression 이용

@Scheduled(cron = "${cron.expression}")

'Web Programming > SPRINGBOOT' 카테고리의 다른 글

Http 통신과 Socket 통신  (0) 2021.02.16
P2P  (0) 2021.02.10
@value 어노테이션 사용시 기본값  (0) 2021.01.25
@Transaction 사용 시 내부 메소드 간의 호출  (0) 2020.12.31
@Transactional  (0) 2020.06.11

트랜잭션이란

트랜잭션(Transaction 이하 트랜잭션)이란, 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위이다.

쪼개질 수 없는 하나의 작업 단위를 의미한다.

 

Rollback : 작업 도중 문제가 발생할 때, 트랜잭션 실행 전 상태로 되돌리는 것

                 이전 Commit을 한 곳까지 복구된다.

Commit : 하나의 트랙잭션 과정이 종료된 후 변경된 내용을 모두 저장한다. 트랙잰션 작업 내용을 실제 DB에 저장

 

ACID(Atomicity, Consistency, Isolation, Durability) 성질이 보장된다.

원자성(Atomicity) 한 트랜잭션 내에서 실행한 작업들을 하나의 단위로 처리한다. 작업이 모두 DB에 저장되거나 모두 반영되지 않거나
일관성(Consistency) 트랜잭션 작업 처리 결과가 항상 일관성이 있어야한다. 
독립성(Isolation) 트랜잭션 수행 시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장한다.
동시에 수행되는 트랜잭션들이 서로 영향을 미치지 못한다.
영속성(Durability) 성공적으로 수행된 트랜잭션은 영원히 반영되어야 한다. 성공적으로 처리된 결과가 항상 저장된다.

 

 

스프링부트에서 지원하는 선언적 트랜잭션

설정파일이나 어노테이션을 이용하여 트랜잭션의 범위와 롤백 규칙 등을 정의할 수 있다.

선언 방식

  1) <tx:advice> 태그를 이용한 트랜잭션 처리

  2) @Transactional 어노테이션을 이용한 트랜잭션 설정

 

하나의 메소드에 여러 로직을 한 단위로 처리할 때, 하나의 로직에 문제가 발생하면 롤백을 시켜줘야 한다!!

 

AOP(Aspect Oriented Programming) : 관점 지향 프로그래밍

핵심 기능과 공통 기능을 분리시켜 핵심 기능에서 필요시 공통 기능 사용하는 방식.

 

트랜잭션은 AOP를 통해 이루어지므로 즉 다이나믹 프록시를 이용해 AOP가 동작된다는 말이다.

==> 인터페이스를 통해 호출이 되어야 트랜잭션 기능이 동작한다.

 

'Web Programming > SPRINGBOOT' 카테고리의 다른 글

Http 통신과 Socket 통신  (0) 2021.02.16
P2P  (0) 2021.02.10
@value 어노테이션 사용시 기본값  (0) 2021.01.25
@Transaction 사용 시 내부 메소드 간의 호출  (0) 2020.12.31
스케줄 기능 사용하기  (0) 2020.11.30

+ Recent posts