Projects
(주) 크림하우스
2023년 반려동물 만성질환 관리 APP 및 APP admin 개발 (펫토닥)
- 수행 기간 :
2023.04.28 - 2023.12.31
- 기술 스택 :
Java, Spring Boot, MyBatis, MySQL, Dart, Flutter, Thymeleaf
- 수행 업무
- 식이관리, 커뮤니티, 설정 등의 서비스 개발을 담당하였습니다.
- 자주 사용되는 위젯을 묶어서 컴포넌트화 하였습니다.
- 재사용성을 증대시키기 위해 가이드라인을 작성 및 공유하여 유지보수성을 증대시켰습니다.
- 관리자 페이지에서 등록한 이미지를 앱에서 가져오지 못 하는 오류를 수정하였습니다.
- URL을 통한 이미지 요청 시 해당 요청을 이미지로 인지하지 못 하는 문제가 있어서 헤더 부분에
'Accept': 'image/*'
를 추가함으로써 오류를 해결하였습니다. - 몇몇 이미지의 경우 이미지가 생성된 방식에 따라 플러터에서 이미지를 랜더링하는 엔진에서 해당 부분이 없을 경우 이미지로 인지하지 못 하는 것이 원인이었습니다.
- URL을 통한 이미지 요청 시 해당 요청을 이미지로 인지하지 못 하는 문제가 있어서 헤더 부분에
2023년 제주유나이티드FC 홈페이지/앱 개발
- 수행 기간 :
2023.04.01 - 2023.06.30
- 기술 스택 :
Java, Spring Boot, MyBatis, MySQL, Thymeleaf, JavaScript, Jquery
- 수행 업무
- 사용자 및 관리자 프로젝트에서 선수단 관련 페이지 및 API 개발을 담당하였습니다.
- 다른 개발자들과 협업하여 사용할 때 모두가 공통적으로 사용할 수 있는 규칙을 만들었습니다.
- 정의한 규칙 중 많이 사용된 항목
- Enum을 통한 고정된 파라미터명을 사용하는 방식
- 컨트롤러나 서비스 등에서 필수적으로 처리해야 하는 기능 (대표 예시 : 실행 로그 기록)
- 배치 서비스를 관리하는 방식
- 컨트롤러에서 설정하는 다양한 요소에 대한 규칙을 정의하였습니다.
- 예시 : 다음에 이동할 페이지의 주소를 지정하는 방법, 유효성을 검증하는 방식 등
- API가 반환하는 응답의 유형에 대해서 정의하였습니다.
- 예시 : 정상, 쿼리 오류, 불일치 오류, 질못된 접근 방식 등
- 정의한 규칙 중 많이 사용된 항목
- 관리자 프로젝트에서 자동 로그아웃 기능을 개발하였습니다.
- 브라우저 단에서 타이머 기능을 통해 30분이 지나면
자동으로 로그아웃 후 로그인 페이지로 이동하도록 수정하였습니다. - 기본적으로
setInterval
함수를1000ms
단위로 실행되게 하였습니다. - 다만
setInterval
의 경우에는 지정된 최소 간격으로 실행되도록 설계되었기 때문에
시스템 부하나 콜백 함수 실행 시간 등 다양한 요인에 따라 지정한 시간보다 다소 길어질 수 있습니다. - 그래서
Date.now()
를 통해 실제 시간과 인터벌 시간의 차이를 통해 가중치를 증감하는 방식으로 오차를 최소화하였습니다.
- 브라우저 단에서 타이머 기능을 통해 30분이 지나면
- 배치 서비스 관련 업무를 담당하였습니다.
- 멀티 서버에서 배치가 동시 실행되어 업무가 충돌하는 현상을 방지하였습니다.
net.javacrumbs.shedlock
이라는 외부 라이브러리를 통해 스케쥴러를 관리하였습니다.
- KLeague에서 제공하는 XML 파일을 파싱하여 경기 기록을 저장하는 스케쥴러를 개발하였습니다.
- 로그인 후 XML 제공 페이지에서 CSS 선택자로 파일을 탐색 및 다운로드 후 파싱한 뒤, 파싱한 데이터를 데이터베이스에 저장하는 방식으로 구현하였습니다.
- 멀티 서버에서 배치가 동시 실행되어 업무가 충돌하는 현상을 방지하였습니다.
22년 데보션 모바일 앱/웹 기능 개선 개발
- 수행 기간 :
2022.10.31 - 2022.12.09
- 기술 스택 :
Java, Spring Framework, MyBatis, MySQL, Dart, Flutter, Firebase
- 수행 업무
- 커뮤니티 게시글을 조회하는 API의 속도를 약 6초대에서 0.5초 ~ 1초대가 되도록 개선하였습니다.
- MySQL 옵티마이저가 내부적으로 조인 순서를 변경하는 것을 막기 위해
straight_join
을 통해 조회 속도를 증가시켰습니다. - 복합 인덱스를 추가하거나, 사용도가 낮은 인덱스를 삭제하는 등 전반적인 인덱스 개편을 통해 조회 속도를 증가시켰습니다.
- 각 게시글마다 파일을 조회하느라 조회한 게시글의 개수만큼 데이터베이스 커넥션이 생겨서 느려지는 문제를 해결하였습니다.
- 지정된 페이징 단위만큼의 게시글들을 조회한 뒤, PK만 취합하여 해당하는 파일들만
IN
을 통해서 조회하였습니다.
- 지정된 페이징 단위만큼의 게시글들을 조회한 뒤, PK만 취합하여 해당하는 파일들만
- MySQL 옵티마이저가 내부적으로 조인 순서를 변경하는 것을 막기 위해
- 푸시 스케쥴러의 로직을 실시간용과 단위 시간용으로 분리하였습니다.
- DM같이 실시간으로 발송되어야 하는 데이터는 스케쥴러로 관리하는 것이 오히려 비효율적이기에
푸시 데이터는 외부 서비스를 통해서 바로 발송되도록 수정하였습니다. - 댓글 등록이나 좋아요같은 알림 푸시는 기존의 단위 시간용 스케쥴러에 잔존시키되,
실시간에 가깝게 발송될 필요가 없기 때문에fixedDelay
의 기준을 5분으로 변경하였습니다.
- DM같이 실시간으로 발송되어야 하는 데이터는 스케쥴러로 관리하는 것이 오히려 비효율적이기에
- 발송된 푸시 데이터를 저장하는 테이블을 분리하였습니다.
- 기존의 테이블은 메시지 큐처럼 푸시 발송 후 발송된 데이터를 다른 테이블에 저장하고,
해당 테이블에서는 삭제하는 방식으로 사용되게 하였습니다. - 발송완료된 데이터들을 저장하는 별도의 테이블을 추가하였고,
해당 테이블을 통해서 사용자들이 알림함 페이지에서 발송받은 푸시 목록을 확인할 수 있도록
별도의 조회 기능도 함께 개발하였습니다.
- 기존의 테이블은 메시지 큐처럼 푸시 발송 후 발송된 데이터를 다른 테이블에 저장하고,
- 커뮤니티 게시글을 조회하는 API의 속도를 약 6초대에서 0.5초 ~ 1초대가 되도록 개선하였습니다.
2022년 SKT 데보션 모바일 앱 개발 및 웹 기능 고도화
- 수행 기간 :
2022.03.11 - 2022.10.31
- 기술 스택 :
Java, Spring Framework, MyBatis, MySQL, Dart, Flutter, Firebase
- 수행 업무
- API의 전반적인 설계 및 개발을 담당하였습니다.
- 최초에는 REST 형식으로 설계하였으나 기존 프로젝트에 있는 웹 페이지를 위한 API와의 통일성을 위해 POST 방식으로 통일되었습니다.
- API의 응답에 대한 공통적인 부분을 설계하였습니다 (응답 유형 코드, 응답 객체의 필드 구성 등)
- 푸시 관련 서비스를 개발하였습니다.
fixedDelay
방식을 통해 댓글 등록, 좋아요, DM같은 알림에 대한 푸시가 실시간으로 발송되도록 하였습니다.cron
방식을 통해 예약 발송을 위한 푸시를 미리 만드는 기능과 사전 제작된 푸시가 일정 시간에 일괄적으로 발송되도록 하였습니다.
- 룰렛 이벤트 기능을 라이브러리 없이 순수하게 구현하였습니다.
sin
과cos
이라는 삼각함수 메소드를 통해 특정 각도에 대한 삼각비를 구하여 정확한 위치에 그림이 그려지도록 개발하였습니다.- 사전에 설정한 데이터의 개수에 따라 그려지는 영역이 동적으로 그려지도록 개발하였습니다.
- API의 전반적인 설계 및 개발을 담당하였습니다.
(주) 퀀텀에듀솔루션
국가민방위재난안전교육원 운영 및 유지보수
- 수행 기간 :
2021.02.26 ~ 2021.05.25
- 기술 스택 :
Java, SpringFramework, eGovFramework, JavaScript, Jquery, MyBatis, Cubrid
- 수행 업무
- 쿼리 개선을 통해 평균적으로 약 1.3초에서 2초정도 걸리던 쿼리를 0.5초가 되도록 개선하였습니다.
- EXPLAIN을 통해 인덱스를 타지 못 하거나, I/O 비용이 비싼 곳을 찾아서
인덱스를 추가하거나 기존 인덱스를 수정하는 작업을 하였습니다.
- EXPLAIN을 통해 인덱스를 타지 못 하거나, I/O 비용이 비싼 곳을 찾아서
- 쿼리 개선을 통해 평균적으로 약 1.3초에서 2초정도 걸리던 쿼리를 0.5초가 되도록 개선하였습니다.
사이드 프로젝트
Everyware
- 수행 기간 :
2023.03.11 ~ 2023.04.06
- 기술 스택 :
Java, SpringFramework, Javascript, Jquery, MyBatis, MySQL
- 개요
(주)크림하우스
에서 재직 중에 회사에서 2023년 1분기에 진행한 사내 R&D에서 발표한 프로젝트입니다.- 해당 프로젝트는 사내에서 사용 중인 오래된 그룹웨어 대신에 회사에서 직접 그룹웨어를 개발 및 서비스를 희망하여 진행하게된 프로젝트입니다.
- 해당 프로젝트의 README를 보시면 발표 당시에 사용된 자료의 일부를 확인하실 수 있습니다.
- 스프링 부트를 사용한 지 얼마되지 않은 시기였기에 기존에 사용하던 스프링 프레임워크를 통해서 작업을 진행하였습니다.
- 추후에 실무에서 많이 사용하는 기술들을 배워서 적용해나가며 v2, v3 등을 만들고 마지막엔 실제 배포를 하는 것을 목표로 하고 있습니다.
- 추후 적용 목표 기술 :
Spring Boot, JPA, Redis, Spring Security, Spring Cloud, Docker
- 수행 업무
- 기초적인 CRUD에 기반하되 실제로 업무적으로 사용될만한 기능들을 만드는 것에 집중하였습니다.
- 공통된 화면을 처리하기 위해
tiles framework
로 화면을 구성하였습니다.
- 깃허브
Favorite
- IT 관련 유튜브 영상 보기
- IT 관련 피드 확인
- 내가 모르는 새로운 기술 공부하기
- 현재 사용 중인 기술의 신규 기능
- 새로운 언어나 프레임워크
- 웹툰
- 게임
Education
2021
유한대학교 졸업2018
육군 병장 만기전역2017
육군 입대2016
유한대학교 IT소프트웨어공학과 입학