ssafy 공통 PJT 회고

SeonKyu KIM·2023년 2월 22일
0

웹기술(webRTC)을 도메인으로 한 프로젝트를 진행했다.
화상회의를 적용한 플랫폼을 만들어야했고 주제를 정했다.
처음에는 온라인 스터디 공간을 만들고자 했으나 색다른 주제를 더 탐색했고
노래대결이 가능한 노래방을 기획하였다. (프로젝트 명 : SingSingTime)

먼저 DB를 설계했다. (하지만 나중에 많은 변동이 있었다...)
백엔드를 Spring F/W를 사용했고 처음으로 JPA를 맛만보았다.
기존엔 MySQL에서 일일히 테이블을 만들고 쿼리문을 짰지만 JPA를 활용하니 DB도 객체지향적으로 설계가 되었고, 쿼리문을 따로 짤 필요도 없었다.
JPA와 ORM에 대한 추가적인 공부가 더 필요하다고 느꼈고, 특화 프로젝트에서 더 공부해봐야겠다.

DB설계 이후 회원가입쪽을 보았다. Jwt토큰(인증에 필요한 정보들을 암호화시킨 JSON 토큰)을 활용하여 회원가입/로그인 기능이 구현되어있었다.(스켈레톤 코드).

원래는 Spring Security를 사용해보고 싶었지만 시간적 여유가 되지 않아서 못했었다. 이번에는 JPA와 Security만큼은 꼭 적용해보고싶다.

...

다음으로 해야할 과제는 Openvidu라는 것이었다.

Openvidu란?
: Kurento 기반의 웹과 모바일 환경에서 영상 통화 기능을 쉽게 추가할 수 있도록 하는 오픈소스 플랫폼

오픈소스를 통해 Local에서 화상화면을 띄우기에 성공했다. 도커허브에 있는 컨테이너를 cmd에서 실행시키고 back과 front에 예제 코드를 넣으니 화상기능이 작동했다.
하지만 예제 코드는 maven기반의 코드였고 우리는 Gradle 빌드 도구를 이용했기 때문에 변환이 필요했다. Convert사이트에서 변환한 코드를 적용했더니 성공적으로 적용되었다.

...

배포를 위해 aws계정을 만들고 ec2를 사용했다. (지역 선택 후 인스턴스 생성) 구글링해서 잘 나온 글 따라하니깐 됐다.
ec2환경에 도커 설치, mysql설치 등 필요한 요소들을 새로운 컴퓨터(?)에 설치 해줬다.
싸피에서 준 ssh인증키(.pem파일)를 이용해 ssh에 접속했다.
SSH 기술은 원격 접속 보안을 위한 필수적인 요소이다.
ubuntu 환경이어서 어색했다. 리눅스 명령어에 대한 공부가 필요했다.
리눅스/도커 사용법에 대해 공부했다.

우리는 Docker와 Jenkins를 활용한 자동배포를 계획했다. 하지만 관련 지식, 경험이 전무했다. 팀원들과 같이 공부하고 고민하며 진행했다.
도커를 통해 프론트, 백, mysql을 이미지화 하여 AWS에 배포했고, Jenkins로 자동배포환경을 구축하였다. 처음 사용해보았지만 굉장히 편리하다고 생각했다. develop / master 브랜치에 merge하면 자동으로 배포된 서버에 반영이 되었다.

Amazon S3를 활용했다. Simple Storage Service의 약자로 쉽게 말해 온라인 DB인 셈이다. 우리는 노래관련 프로젝트를 했기때문에 사진이나 동영상 같은 파일들을 저장할 곳이 필요했고, 적합한곳이 아마존 s3였다. 프리티어계정을 만들었고, 버킷이라는 곳에 필요한 이미지 및 영상을 저장합니다. 인증키 및 비밀키가 누출되지 않게 관리도 해주어야 했다.

HTTPS 적용을 위한 SSL 발급과정을 거쳤다. 관련해서 nginx에 대해 알게 되었다. 우리가 방문하는 모든 사이트들에 https가 적용되어있다는 걸 새삼 느꼈다.

nginx란?
: 비동기식 이벤트 기반에 가벼움과 높은 성능(로드밸런서, 리버스 프록시 등)의 웹 서버
: niginx는 http에 SSL, TLS프로토콜 기반 인증서를 적용하여 https프로토콜을 지원한다. (cerbot라이브러리를 통해 무료 ssl 인증서를 발급받을 수 있음)

프로젝트 중 겪은 가장 큰 기술적 어려움은 포트 관련 문제였다.
openvidu가 기본적으로 사용하는 포트가 있다. 22, 80, 443 등.. 오픈비두 컨테이너를 실행하게 되면 자동적으로 위 포트를 사용하게 된다. 하지만 이미 할당되어 있다면? 에러가 발생한다. 방화벽 또한 열어놔야 한다.

우리 같은 경우는 nginx포트와 충돌이 났었다. 처음에 포트문제인지 모르고 자꾸 설정파일만 바꾸다보니 설정도 꼬여서 결국 nginx를 삭제하고 다시 설치했다. 그 과정에서 nginx포트를 openvidu와 충돌이 나지 않게끔 바꿔주었다. 결국 에러도 사라지고 정상적으로 화면이 출력되었다.

추가적으로 내가 다루진 않았지만 openvidu 관련하여 꽤나 어려운 점이 많았다. 팀원들이 처음하는 것임에도 불구하고 열심히 찾고 공부해서 구현해 내었다. publisher와 subscriber에 대한 개념, stream과 session에 대한 개념 등 당장 여기서만 쓰이는 개념이 아니기 때문에 추가적으로 잘 정리하고 마무리해야겠다고 생각했다.

0개의 댓글