You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
JAVA 를 통해 다양한 API 서버를 개발하고 있습니다.
CI-CD 에도 관심이 많은 DevOps + 백엔드 개발자입니다.
🍓 기술
1) 프로그래밍 언어
- Java (8, 11, 17)
> Spring boot + Data JPA (+querydsl), MyBatis
- Shell script
2) 배포 환경
- Linux
- Centos7
- Redhat7
- Ubuntu
3) 데이터베이스
- RDBMS
- MySQL
- MariaDB
- SQLITE
- NO-SQL
- REDIS
4) 메세지 미들웨어
- Apache kafka
- RabbitMQ
5) CI/CD
- Jenkins
- GIT
- Docker(+compose)
6) Cloud
- AWS
- Azure
- NCP
7) IDE
- Intellij IDEA
- VIM
📍 프로젝트
1) SKB 녹취 서버 개발
1. 개요
- 이동 통신 통화 서비스 중에 서비스 사용자(발신, 착신)의 음성을 녹취하는 서비스를 제공하는 프로젝트
- 통화 개시 서비스 제공 서버(SIP stack), 즉 시그널 처리 서버와 음성 트렁크(RTP trunk) 릴레이 서비스 제공 서버, 즉 미디어 처리 서버로 구분하는 통화 서비스 개발 프로젝트
2. 기간
- 2020.08~2021.10(1년 3개월)
3. 기술 및 담당 파트
- 개발 언어 : JAVA (JDK 8)
- 패키지 배포 환경 : Linux (Centos7)
- 개발 인원 : 시그널 서버 - 2명 / 미디어 서버 – 1명
- 담당 파트 및 개발 내용
> 미디어 서버 : 서버와 연동하기 위한 API 규격과 음성 트렁크를 릴레이하기 위한 UDP(L4) 단 프로그래밍까지 진행
> 오픈소스 API : 메세지 미들웨어로는 RabbitMQ 를 사용하여 json 포맷으로 연동
> 네트워크 프레임워크로는 Netty 를 사용하였고, 기본적인 파일 처리(쓰기, 읽기) 비즈니스 로직을 개발
4. 성과 및 성장 포인트
- 시그널 서버 개발 인원들과 같이 의논함으로써 성능 최적화와, 보다 유연한 유지 보수를 위한 API 를 제공 및 고객(SKB) 요구사항 처리하게 되어 팀워크의 중요성과 유연하고 개방된 자세로 개발에 임하게 되는 계기가 됨.
- 메세징 미들웨어(RabbitMQ)를 통한 API 연동 및 실제 미디어 데이터 처리 기법 개발 역량 습득
- 자바의 Netty 네트워크 프레임워크를 통한 효율적인 네트워크 개발 역량 습득
- JAVA API 개발 역량 강화
(서비스명 : SKB 심플레코딩
https://biz.skbroadband.com/page.do?menu_id=P01030300)
2) SKT 보이스뷰 누구콜 미디어 서버 개발
1. 개요
- 고객과 AI, AI 중계를 통한 고객과 상담사 간의 미디어 릴레이 서비스를 제공하는 프로젝트
2. 기간
- 2021.03~2022.03(1년 1개월)
3. 기술 및 담당 파트
- 개발 언어 : JAVA (JDK 8)
- 패키지 배포 환경 : Linux (Centos7)
- 개발 인원 : 시그널 서버 - 2명 / 미디어 서버 – 1명
- 담당 파트 및 개발 내용
> 미디어 서버 : 음성 데이터를 처리하는 미디어 엔진(외부 업체 사용)과 API 연동을 통해 미디어 서비스를 제공하도록 개발
> 시그널 서버를 통해 통화가 시작되면 미디어 서버로 세션 정보를 내려주게 되어 발신자와 착신자의 음성이 미디어 서버를 통해 AI 서버로 연동되어서 STT, TTS 서비스를 제공하는 기능(API) 개발
> 오픈소스 API : 메세징 미들웨어로는 RabbitMQ 를 사용하여 json 포맷으로 연동
4. 성과 및 성장 포인트
- 처음 개발한 미디어 서버 개발 때는 내부 팀끼리만 협의하여 개발하였지만, 이 프로젝트에서는 외부 업체와도 직접 컨택하여 회의하는 API 개발
- 첫 외부 업체 컨택이라 의견 조율이 많이 어려웠지만 오랜 기간 동안의 협업을 통해 보다 익숙한 커뮤니케이션 역량 강화
- JAVA API 개발 역량 강화
(프로젝트 관련 기사
URL: https://www.hankyung.com/society/article/202207184325Y)
3) 가상 공연 플랫폼 미디어 서버 개발
1. 개요
- 메타버스(metaverse)를 통한 공연자의 가상 공연을 스트리밍하는 서비스를 개발하는 프로젝트
- 공연자가 자신의 공연장을 가상 공간을 통해 꾸며서 원하는 스트림과 함께 공연 서버로 스트리밍을 등록하면 참여자가 해당 공연자의 공연장에 참여하는 미디어 서비스
2. 기간
- 2021.10~2022.12(1년 2개월)
3. 기술 및 담당 파트
- 개발 언어 : JAVA (JDK 11)
- 패키지 배포 환경 : Linux (Centos7)
- 개발 인원 : 세션 관리 서버(웹 API 와 연동) - 2명 / 미디어 서버 – 1명
- 담당 파트 및 개발 내용
> 미디어 서버 : 웹 API 를 통한 세션 관리 정보들을 세션 서버에서 전달 받게 되면 공연자의 스트림을 저장하여 참여자가 참여하자마자 최대한 적은 latency 를 통해 미디어 스트리밍을 제공하도록 개발
> 공연자의 스트림은 RTMP 스트림으로 오기 때문에 해당 스트림을 받을 RTMP 서버, 참여자가 웹 API 요청을 통해 곧바로 스트림을 수신할 수 있도록 하는 MPEG-DASH 서버를 개발
> 오픈소스 API : 실시간 미디어 스트리밍을 적은 지연율을 통해 대용량 트래픽을 처리하는 서비스를 제공해야 하기 때문에 메세지 미들웨어는 Kafka 를 사용, RabbitMQ 와 병행하여 사용
4. 성과 및 성장 포인트
- 이전에 수행한 두 개의 JAVA 프로젝트에서는 API 연동과 음성 데이터 처리만 개발하였지만, 이 프로젝트에서는 해당 사항을 포함할 뿐만 아니라 영상 데이터도 처리해야했기 때문에 보다 높은 수준의 미디어 서버 개발 역량 강화
- 외부 웹 브라우저 API 연동 뿐만 아니라 내부 세션 서버와의 API 연동 개발도 필요하였고, RTMP handshake, DASH 에서 수행하는 HTTP API 연동 개발을 진행하여 JAVA 백엔드 API 개발 역량 강화
- 세션과 미디어 데이터 싱크가 아주 중요하기 때문에 상태(state)를 가지도록 개발하여 FSM(Finite State Machine) 개발 역량 강화
- 실시간 서비스를 위해 낮은 지연율 확보를 위한 서버 성능과 JVM 성능 튜닝 기술 및 JProfiler 도구를 통해서 시스템 리소스(힙 메모리 사용량 및 cpu 점유율 등)을 모니터링하는 역량 강화
4) WebRtc to RTSP Gateway 서버 개발 (감성 인지 미디어 릴레이 서버)
1. 개요
- 학생과 교사가 원격으로 수업하기 위한 플랫폼에서 교사가 송출하는 소스 미디어 서버로 부터 중간에서 미디어를 학생들에게 릴레이하는 서버
2. 기간
- 2022.09~2022.11(3개월)
3. 기술 및 담당 파트
- 개발 언어 : JAVA (JDK 11)
- 패키지 배포 환경 : Linux (Centos7)
- 담당 파트 및 개발 내용 : 소스 미디어를 생성하기 위한 앞단 서비스는 다른 팀원들이 제작하고, 미디어를 멀티캐스팅으로 전달해주는 백엔드 서비스를 개발
> 소스 미디어 서버는 WebRTC 프로토콜을 통하여 미디어를 저장하고 있고 학생이 RTSP 프로토콜로 미디어를 요청하면 미디어 릴레이 서버는 RTSP 서버로서 학생의 RTSP client 와 RTSP handshake 를 수행하고, WebRTC client 로서 소스 미디어 서버와 WebRTC 및 stun 그리고 dtls handshake 까지 수행
> 개발한 미디어 백엔드 서비스는 AWS EC2 를 통하여 서버를 구동 및 운영
4. 성과 및 성장 포인트
- 이 프로젝트을 수행하기 이전에 쌓았던 클라우드 시스템 운영 및 리눅스 경험과 네트워크에 대한 지식들을 바탕으로 더 많은 네트워크 프로토콜과 서비스 개발 역량 강화
- 대용량 트래픽 서비스에 대응하기 위해 시스템 자원의 효율적인 사용 및 성능 최적화 역량 강화
5) AEIT 서비스 개발
1. 서비스 개요
- 마이데이터 중개 플랫폼
https://aeit.io
2. 기술 및 담당 파트
- 개발
- 개발 언어 : JAVA (JDK 17)
- 패키지 배포 환경 : Linux (ubuntu 20.04 LTS)
- 담당 파트 및 개발 내용
> Kafka 를 활용한 P2P 통신 데이터 교환 프로토콜 개발 (웹 <> 모바일)
> RabbitMQ 를 통한 MSA 간 통신 프로토콜 개발
> Spring boot 및 QueryDSL 를 활용한 서비스 개발
- 인프라
- AWS 를 활용한 서비스 라이플 사이클 및 트래픽 관리
> CodePipeline 을 활용한 EC2 자동 배포
> ALB 와 WAF 를 활용한 불필요한 트래픽 제어 및 서비스 딜레이 최소화 작업 진행
> 타임리프를 활용한 인프라 시각화 웹 서버 별도로 개발하여 신속한 장애 대응 진행
2. 성과 및 성장 포인트
- 이전에 경험한 미디어 프로토콜 개발을 통하여 카프카와 함께 직접 데이터 교환 프로토콜을 개발함으로써 원활한 P2P 통신 개발에 기여
- 서비스 개발 뿐만 아니라 직접 클라우드를 활용한 인프라 시스템을 구성하여 프로젝트 라이프 사이클에 기여
- 다양한 플랫폼(웹, 모바일 등) 간 통신을 위한 API 개발을 위해 플랫폼에 독립적인 알고리즘 및 인터페이스 개발 경험
6) MONGLE 서비스 개발
1. 서비스 개요
- 숏폼 동영상 공유 및 쇼핑몰 플랫폼
https://mongle.com
2. 기술 및 담당 파트
- 개발
- 개발 언어 : JAVA (JDK 11)
- 패키지 배포 환경 : Linux (ubuntu 20.04 LTS)
- 담당 파트 및 개발 내용
> AWS S3 를 활용한 미디어 리소스 저장 및 조회 > 바이트 플러스 CDN 을 사용하여 웹사이트에 미디어 리소스를 안정적으로 전달
> 쇼핑몰 서비스에 필요한 모든 REST API 개발 (소셜 로그인, 상품 관리, 회원 및 업체 관리, 어드민 기능, 미디어 리소스 관리 등)
> Spring boot 및 MyBatis 를 활용한 서비스 개발
- 인프라
- AWS 를 활용한 서비스 라이플 사이클 및 트래픽 관리
> CodePipeline 을 활용한 EC2, ECS 자동 배포
> ALB 와 WAF 를 활용한 불필요한 트래픽 제어 및 서비스 딜레이 최소화 작업 진행
> 타임리프를 활용한 인프라 시각화 웹 서버 별도로 개발하여 신속한 장애 대응 진행
3. 성과 및 성장 포인트
- 쇼핑몰 + 동영상 숏폼 플랫폼 직접 개발 경험을 쌓아 다양한 웹 API 및 알고리즘 개발
- 서비스 개발 뿐만 아니라 직접 클라우드를 활용한 인프라 시스템을 구성하여 프로젝트 라이프 사이클에 기여
- NICE(계좌 1원 인증, OTP 기능), 소셜 로그인(kakao, naver, google, apple), CMS(계좌 출금, 입금 기능) 연동 등과 같은 다양한 써드 파티 연동 개발
📍 혼자 만들어본 라이브러리
1) TDD
- 목적 : C 프로그램 개발 시 TDD 적용하여 개발하기 위해 제작
- 기간 : 2020.06 ~ 2020.09
- 결과물 : https://github.com/Samuel-Jeong/ttlib
- 기술 스택
- Language : C
2) Network framework
- 목적 : Posix network 코드와 Netty Framework 를 참고하여 체계적인 네트워크 코딩하기 위해 제작
- 결과물 : https://github.com/Samuel-Jeong/java_network_base_framework
- 기술 스택
- Language : Java
3) FSM
- 목적 : State 기반의 비즈니스 로직이 필요할 때 사용하기 위해 제작
- 결과물 : https://github.com/Samuel-Jeong/JFSM
- 기술 스택
- Language : Java
4) Scheduler
- 목적 : 효율적인 멀티 쓰레딩 작업을 수행하기 위해 제작
- 결과물 : https://github.com/Samuel-Jeong/jscheduler
- 기술 스택
- Language : Java
5) FileManager
- 목적 : 파일 IO 공통 기능 모듈 제작
- 결과물 : https://github.com/Samuel-Jeong/jFileManager
- 기술 스택
- Language : C
6) RTSP
- 목적 : RTSP 기능 개발 및 테스트를 위한 서버 제작
- 결과물
- RTP : https://github.com/Samuel-Jeong/JRTSP_RTP
- HLS : https://github.com/Samuel-Jeong/JRTSP_HLS
- 기술 스택
- Language : Java
7) DTLS
- 목적 : DTLS 기능 개발 및 테스트
- 결과물 : https://github.com/Samuel-Jeong/JDTLS
- 기술 스택
- Language : Java