1. MVP 발표 준비
중간 평가, MVP 발표가 거의 근접하여 우리 조는 기능 구현에 박차를 가했다. 우리 조는 기본적인 CRUD는 끝냈지만 화상채팅과 메세지 구현이 완벽하지 않아 끝까지 집중했다. 캠과 카메라를 허용하기 위해 SSL 인증서를 발급받아 https로 사이트의 보안을 올려야했고 트래픽 걱정에 화상채팅 기능에서 중요한 open vidu 서버를 따로 띄워 만들기로 하였다. 이외에도 레디스를 도커에 깔아 실시간 채팅 기능을 구현하기 위해 STOMP를 사용하면서 채팅 내역들을 레디스에 전달해야했다. 이외에도 많은 작지만 필요했던 기능들을 추가시켰다. MVP 발표는 팀장님이 맡아주셨고 발표자료를 위해 필자는 백엔드의 관점에서 기능이 어떻게 돌아가는 컨트롤러, 서비스, 레포지토리, 엔티티, 쿼리 등을 피피티 자료에 시퀀스 별로 만들었다. 또한 중간 발표 전에 구현하는 기능들에 대하여 일어났던 문제들에 대해 트러블 슈팅을 진행했다.
2. 도커
필자의 조는 인프라 구축을 어느 정도 실행하기 위해 백엔드 서버를 각각 스프링부트 서버, 오픈바이두 서버 이렇게 두 개로 나누어 진행했다. 이 두서버에서 공통적으로 필요했던 인프라는 도커였다. 도커로 파일들을 컨테이너에 담아 서버를 띄우는 형식이었다.
도커란
도커는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼으로서 소프트웨어를 컨테이너라는 표준화된 유닛을 패키징한다. 도커를 통해 애플리케이션을 실행하면 독립된 환경에서 일관된 결과를 보장한다.
컨테이너란
컨테이너란 격리된 공간에서 프로세서가 동작하는 기술로 기존의 가상화 방식인 OS 가상화가 아닌 프로세스를 격리하는 방식이다. 도커는 리눅스 환경에서 실행되기 때문에 리눅스 설치가 필요하고 컨테이너를 사용할 때 가상머신을 사용하는 느낌을 준다. 또한 각 컨테이너 마다 CPU나 메모리 사용량을 제한이 가능하고 호스트의 특정 포트와 연결하거나 호스트의 특정 디렉토리를 내부 디렉토리로 사용이 가능하다.
이미지란
이미지는 컨테이너 실행에 필요한 파일과 설정을 포함하고 있는 것으로 상태값을 가지지 않고 변하지 않는다. 컨테이너는 이미지를 실행한 상태이고 같은 이미지로 여러 개의 컨테이너를 실행이 가능하며 컨테이너를 지운다해도 사라지지 않는다. 이미지들은 도커허브를 통해 관리와 배포가 가능하며 Dockerfile이라는 파일로 이미지를 만든다.
출처:
https://tecoble.techcourse.co.kr/post/2021-08-14-docker/
docker 이해하기
…
tecoble.techcourse.co.kr
3. NGINX
필자의 조는 클라이언트의 마이크와 카메라에 접근해야했기에 HTTPS로 서버 보안을 고도화할 필요가 있었다. 이에 따라 NGINX와 letsencrypt를 통해 로드밸런싱과 HTTPS화를 진행하기로 했다. NGINX가 아파치에 비해 상대적으로 성능이 좋기도 하고 리버스 프록시 서버로도 활용이 가능하기 때문에 NGINX를 사용하기로 하였다.
NGINX란
NGINX(엔진 엑스)란 WS 즉 경량 웹서버로 클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP web server로 활용되기도 하고, 리버스 프록시 서버로 활용하여 WAS 서버(스프링 부트)의 부하를 줄일 수 있는 로드 밸런서로 활용되기도 한다.
NGINX 흐름
NGINX는 이벤트 드리븐 구조로 동작하기 떄문에 하나의 프로세스만 생성하여 사용하고 여러 브라우저를 비동기 방식으로 핸들링 할 수 있다. 이는 아파치 서버의 멀티 쓰레딩으로 인한 많은 부하 현상을 해결하며 효율적으로 설계가 되었습니다. 적은 자원으로도 효율적인 운용이 가능하기 때문이다.
NGINX 구조
NGINX는 하나의 마스터 프로세스와 다수의 워커 프로세스로 구성되어 마스터 프로세스는 설정 파일을 읽고, 유효성 검사 및 워커 프로세스를 관리한다. 워커 프로세스는 모든 요청을 처리 하고 CPU 코어 숫자에 맞게 자동으로 조정된다.
출처:
https://velog.io/@wijihoon123/Nginx%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
Nginx란 무엇인가?
Nginx는 경량 웹 서버입니다.클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고, Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는
velog.io
4. Redis
실시간 채팅을 구현하는 필자의 조는 특성상 스톰프를 통해 채팅을 진행하고 그것들을 레디스에 담아 방송이 끝나면 디비로 전달하는 로직이 필요하다 판단하여 정하게 되었다. 물론 방송임으로 방송을 나갔다 들어오면 채팅은 초기화가 되어도 상관 없지만 1차 캐시 디비인 레디스에 저장하여 방송이 끝날 시에 채팅방을 통째로 스트링 객체로 디비에 저장하는 방향을 정했다.
Redis란
레디스는 시스템 메모리를 사용하는 키-벨류 데이터 스토어이다. 인메모리 상태에서 데이터를 처리함으로서 흔히 사용하는 RDB와 NoSqlDB보다도 빠르고 가볍게 동작한다. 레디스와 백엔드와의 궁합은 전반적으로 좋고 적절한 모듈을 사용해 적절한 형태로 구현할 수 있어 개발 난이도가 낮다.
출처
https://brunch.co.kr/@skykamja24/575
레디스(Redis)는 언제 어떻게 사용하는 게 좋을까
레디스를 사용해 본 적 없는 백엔드, 데이터베이스 개발자를 위해 | 레디스는 시스템 메모리를 사용하는 키-값 데이터 스토어입니다. 인메모리 상태에서 데이터를 처리함으로써 흔히 사용하는
brunch.co.kr
'항해99 7기 활동' 카테고리의 다른 글
항해99 12주차 WIL (0) | 2022.07.31 |
---|---|
항해99 11주차 WIL (0) | 2022.07.24 |
항해 99 9주차 WIL (0) | 2022.07.10 |
항해99 8주차 WIL (0) | 2022.07.03 |
항해99 7주차 WIL (0) | 2022.06.26 |