실무로부터

웹의 특징, 서버종류, 모바일 푸시 발송 방법

솔헬레나 2023. 9. 18. 22:04

Related Issues

: 브라우저로 통신하여 데이터를 주고받을 수 있는 플랫폼

종류 - http, websocket

 

HTTP의 특징

: (req, res가 있는것 )요청이 들어와서 응답을 할 수 있는 것 , socket없음

 

server의 종류 - http, telnet , ssh, ftp

 

socket : server와 client를 연결한다 , (종류 : connection )

 

websocket server

- web서버에서 client에서 온 요청이 없어도 응답을 줄 수 있도록 만들어진 것.

A가 이벤트가 발생했을 때 소켓 서버에 전달하여 B에게 전달한다.

=> 추가 설명은 향후 요청

 

 

* 모바일 푸시 발송 방법

1. Service 에서 google/apple 스펙에 맞춰 데이터를 에 발송하면

- 1.5 > 다른 서비스를 이용하여 서비스의 메시지를 2의 회사 에서 필요로 하는 약식에 맞춰 데이터를 전달한다. (예 : firebase -FCM)

2. google(GCM)/apple에서 기기에 메시지를 발송한다.

3. 기기에서 메시지를 받아 UI를 적용한다

 

1과 2 사이의 firebase -FCM이라는 서비스를 이용하여 스펙에 맞춰 메시지를 보내준다.

 

 

*

MQ (Message Que) 서버

- MQ : 파일을 쌓아주면 먼저 들어온 데이터부터 처리한다.

- 콜라비에서는 RabbitMQ사용 , thumbee처리에 활용

- MQ의 경우 명확히 Q에 처리해야하는 데이터를 쌓아주고 FIFO한다.

- 하나의 항목을 한 명이 가져가 처리한다

-----------------------------------------------------------------------

pub/sub

- publish : 이벤트를 만든다

- subscrab ( 서브스크랩 ) : 이벤트를 받아서 처리한다

- 지원 서비스 : Redis 를 이용해 사용

; redis는 기본적으로 세 대의 서버로 구축된다 ( master, slave1, slave2 ), 장애처리를 위함 , master가 죽으면 slave가 살아난다 , pub/sub를 지원

- 데이터가 쌓이지 않는다.

- publish 하는 시점에 sub가 없으면 데이터가 사라진다. 그래서 항상 redis는 살아있어야 함

- 데이터가 유실될 수도 있다. ()

- redis에 쌓인 데이터는 모든 websocket서버에 데이터를 발송한다. 사용자가 모든 서버에 붙어있다고 판단하고 조건에 적합한 사용자에게 데이터를 보여주어야 하기 때문이다

 

-

 

--------------------------------------------

 

client ---[ ELB ]--> Websocket Server <---[ sub ]---> redis <--[pub]-- api.service

- Websocket서버는 sub 하고 있다가 rdis에서 데이터를 받아간다

- api 에서 정형된 결과를 publish하여 redis에 보낸다

 

* ELB

: 사용자의 요청이 들어오면 각 connection 을 서버에 연결해준다.

:

 

* 트랜잭션

: 하나의 커넥션으로 여러가지 비즈니스 프로세스를 처리한 후 마지막에 저장하는 모든 작업을 트랜젝션.

- auto Commit(false)시작 후 commit 까지

 

* Async

- sync : 하나의 서비스 내의 함수 하나가 모두 수행되고 결과를 보낸 종료되는 상태

- Async : 기존 함수의 내의 함수가 수행중일 때 수행중인 함수가 끝나지 않더라도 기존 함수의 쓰레드를 진행하는 경우, 별도로 계속 수행되는 함수를 의미한다.

- api 서비스의 가장 마지막에 호출한다.

: 실행이 목적인 기능, 왜 필요하냐면?

- 모바일 푸시 발송 시 fcm > 구글 > 기기 까지 발송하는 프로세스가 오래 걸릴 수 있는데, 이 동작의 응답을 기다리다보면 기존 요청한 데이터의 처리가 진행중인 상태로 남는다 .

따라서, 당장 진행할 수 있는 항목은 진행하고, 이외의 시간이 오래걸리는 것은 별도으 async로 처리한다.

 

* CUD 할 떄 어떤 사용자가 해당 데이터에 접근하면, DB에서는 해당 데이터에 lock를 걸어둔다.

commit가 되면 lock가 해제된다.

 

 

 

 

 

* 쓰레드 - 웹의 쓰레드와 다르므로 재요청하기