-
커뮤니케이션 서버 신규 기능 개발
- 채널, 공지사항, 일반 게시글 및 댓글, 민원, 마이페이지, 북마크, 좋아요, 숨김, 신고 등 커뮤니케이션 서버에 필요한 전반적인 CRUD 기능을 개발하였습니다.
- 단순 CRUD부터 정렬이나 필터가 중요한 기능, 여러 페이지네이션 기능 (오프셋 기반 페이지네이션, 커서 기반 페이지네이션), 엑셀 다운로드 기능 등을 개발했습니다.
- 그리고 개발과정에서 수차례 기획 및 정책이 변경되는 사항에 대해 빠르게 변경사항을 반영하고, 변경된 기능의 장애 요소를 파악하고 테스트를 해야만 했습니다.
-
커뮤니케이션 서버 컨트롤러에 도달하기 전에 필요한 레이어 추가
- 해당 API가 사용자 앱, 운영자 툴, 어드민 툴 중에 어디에 해당되는 것인지에 따라 각각에 해당되는 ArgumentResolver를 구현하여, 유효성 검증 및 데이터 파싱, 토큰 파싱 등을 분리하였습니다.
- 추가적으로 필요한 검증 중에 중복되는 코드를 최소화 하기 위해서 Controller 레이어에 AOP를 도입하기도 했습니다.
-
커뮤니케이션 서버 내에서 타 서버의 이벤트 처리 기능 개발
- 가령 회원이 가입되면, 회원서버에서 발행하는 Member_Created 이벤트를 받아서 커뮤니케이션 서버에도 자주 사용하게될 데이터를 생성해줘야 했습니다. 마찬가지로 수정, 삭제 이벤트가 발생할 시에도 이를 수신하여 처리함으로써 데이터 정합성을 유지할 수 있도록 기능을 개발하였습니다.
- 사용한 메세지큐는 ActiveMQ. 기존에 ActiveMQ를 AWS에서 띄우고 사용 중이었어서 이를 활용하였습니다.
-
커뮤니케이션 서버 신규 기능 쿼리 개선
- 혼자서 커뮤니케이션 서버의 신규 프로젝트를 진행한 것은 아니고, 함께 진행한 부분들이 많았는데 중간 중간 쿼리 최적화 작업도 진행하였습니다.
- 가령 @EntitGraph을 활용하여 join을 하는 경우 default가 eager다 보니 불필요한 N+1 쿼리가 발생할 수 있는데 이를 직접적으로 필요한 join만 하도록 수정, join 조건도 더 디테일하게 추가해서 연산을 최소화하는 작업이 해당되겠습다.
- 또한 인덱스가 제대로 걸려있지 않다거나, 잘못된 인덱스를 사용한다거나 하는 문제로 인해 조회 기능이 초단위로 느려지는 문제도 Query Plan을 통해 발견하여 개선했습니다.
-
파일 업로드, 전화번호부 엑셀 업로드 기능 개발
- 현장 운영자가 필요한 파일을 아파트 자료실에 업로드할 수 있도록, AWS S3에 파일을 업로드하는 기능과 전화번호부를 한번에 읽어서 편하게 업로드 가능하도록 엑셀 파일 읽어서 DB에 생성 및 업데이트 하는 기능도 개발하였습니다.
-
설문 및 투표 서버 이전 및 데이터 마이그레이션, 불필요한 코드 제거 및 리팩토링
- 설문과 투표 기능의 경우 기존 기능과 새로운 2.0 프로젝트 기능에서 동일하게 사용하기로 결정되었고, 기존에 설문 애플리케이션, 투표 애플리케이션 서버가 따로 있었던 구조가 불필요하다 판단되어 커뮤니케이션 서버에 전부 통합하는 작업을 추진했습니다.
- API를 옮기고, DB도 변경되어야하는 만큼 데이터 마이그레이션을 진행하였습니다. 그리고 이 과정에서 불필요한 컬럼을 제거하고, 사용되지 않는 코드를 제거하였고, 명확하지 않은 클래스 네이밍 및 패키지 구조를 변경하였습니다.
- 그 외 설문이나 투표 기간이 도래하거나 만료했을 때 자동으로 상태를 변경하도록 하는 스케쥴러를 각 추가했습니다.
-
소방시설세대점검 신규 기능 개발
- 단지별 소방시설세대점검의 편의성을 위해 개발한 기능입니다. 해당 기능이 개발된 이후 사업적으로 단지 영업에 성공하는 비율이 늘어나는데 기여했습니다.
- 소방시설세대점검은 하나부터 열까지 데이터베이스 설계, API 개발 등 전적으로 백엔드에 필요한 모든 것을 처음부터 설계하고 구현하였습니다.
- 클라이언트 기준으로는 어드민툴, 운영툴, 사용자앱 3가지에 필요한 CRUD API를 개발하였으며, 자동화되서 관리되어야할 부분에 스케쥴링 적용하였습니다.