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. 개요
- 이동 통신 통화 서비스 중에 서비스 사용자(발신, 착신)의 음성을 녹취하는 서비스를 제공하는 프로젝트
- 통화 개시 서비스 제공 서버(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)
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)
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 점유율 등)을 모니터링하는 역량 강화
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. 성과 및 성장 포인트
- 이 프로젝트을 수행하기 이전에 쌓았던 클라우드 시스템 운영 및 리눅스 경험과 네트워크에 대한 지식들을 바탕으로 더 많은 네트워크 프로토콜과 서비스 개발 역량 강화
- 대용량 트래픽 서비스에 대응하기 위해 시스템 자원의 효율적인 사용 및 성능 최적화 역량 강화
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 개발을 위해 플랫폼에 독립적인 알고리즘 및 인터페이스 개발 경험
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(계좌 출금, 입금 기능) 연동 등과 같은 다양한 써드 파티 연동 개발
- 목적 : C 프로그램 개발 시 TDD 적용하여 개발하기 위해 제작
- 기간 : 2020.06 ~ 2020.09
- 결과물 : https://github.com/Samuel-Jeong/ttlib
- 기술 스택
- Language : C
- 목적 : Posix network 코드와 Netty Framework 를 참고하여 체계적인 네트워크 코딩하기 위해 제작
- 결과물 : https://github.com/Samuel-Jeong/java_network_base_framework
- 기술 스택
- Language : Java
- 목적 : State 기반의 비즈니스 로직이 필요할 때 사용하기 위해 제작
- 결과물 : https://github.com/Samuel-Jeong/JFSM
- 기술 스택
- Language : Java
- 목적 : 효율적인 멀티 쓰레딩 작업을 수행하기 위해 제작
- 결과물 : https://github.com/Samuel-Jeong/jscheduler
- 기술 스택
- Language : Java
- 목적 : 파일 IO 공통 기능 모듈 제작
- 결과물 : https://github.com/Samuel-Jeong/jFileManager
- 기술 스택
- Language : C
- 목적 : RTSP 기능 개발 및 테스트를 위한 서버 제작
- 결과물
- RTP : https://github.com/Samuel-Jeong/JRTSP_RTP
- HLS : https://github.com/Samuel-Jeong/JRTSP_HLS
- 기술 스택
- Language : Java
- 목적 : DTLS 기능 개발 및 테스트
- 결과물 : https://github.com/Samuel-Jeong/JDTLS
- 기술 스택
- Language : Java