정보
정보
취소

정보

Projects

(주) 크림하우스

크림웨어 (CreamWare)

  • 수행 기간 : 2024.01 ~ 진행 중
  • 기술 스택 : Java, Spring Boot, JPA, QueryDSL, MyBatis, MariaDB, JavaScript
  • 수행 업무
    • 회의실 예약 기능 개발
      • 조건에 맞는 예약 정보를 조회하는 쿼리를 실행하되,
        하나의 쿼리를 @Lock 어노테이션의 PESSIMISTIC_WRITE 모드를 적용한 메소드와
        적용하지 않은 메소드에서 모두 호출하여
        사용자가 예약을 시도하는 도중 다른 사용자가 도중에 예약하였을 때 중복 데이터를 저장되는 상황을 방지
      • 예약 시작시간, 예약 종료시간, 회의실 ID의 3가지 컬럼에 대하여 유니크 키를 생성하여
        만약에 너무 근소한 차이로 인해 중복 데이터 저장 시 예외를 발생시키도록 유도
    • 회의실 지각 및 노쇼 방지를 위한 회의 참석 여부 및 알람 메시지 전송 기능 개발
      • 슬랙 API 연동
      • Firebase의 FCM API 연동
  • 특이사항
    • 사내 R&D 프로젝트

2024년도 어르신 건강관리사업 모바일보건소시스템 UI/UX 기능 개선

  • 수행 기간 : 2024.08 - 2025.01
  • 기술 스택 : Java, Spring Framework, MyBatis, Oracle, JavaScript
  • 수행 업무
    • 대상자 정보 관리 서비스 기능 개선
      • 실행 계획 확인을 통해 사용되지 않는 인덱스를 제거하고 신규 인덱스를 추가하여 대상자 목록 조회 API의 실행 속도를 개선함
      • 개선 결과 : 3.5s => 263ms
    • 중복 소스코드 모듈화를 통한 속도 개선 및 유지보수 간편화
      • 도메인 별로 공통되는 로직을 별도의 유틸리티로 분리하여 중복 코드를 제거함
      • 현재 사용되지 않으며 서비스 개편을 통해 사용되지 않는 로직들을 제거함

2023년 제주유나이티드FC 홈페이지/앱 개발

  • 수행 기간 : 2023.04 - 2023.06
  • 기술 스택 : Java, Spring Boot, MyBatis, MySQL, Thymeleaf, JavaScript, Jquery
  • 수행 업무
    • 개발자가 공통적으로 사용하는 업무 규칙 정의
      • Enum을 통해 고정된 파라미터 값을 사용하는 방식
      • 오타나 개발자 성향 차이로 인해서 같은 데이터를 처리하는 데 결과가 다른 현상 발생
      • 도중에 properties 파일로 관리하려고 하였으나 실제로 빌드하기 전까지는
        오류를 확인하기 어려운 케이스가 있어서 Enum 방식을 유지함
      • 컨트롤러나 서비스 등에서 사용하는 공통 기능 개발
      • 접근 로그 저장, 세션 관리 등의 이유로 AOP 기능을 관리
      • 배치 서비스 관리 방식 정의
      • 명명 규칙, 내부 로직 실행 순서 등에 대한 방식을 정의함
      • API가 반환하는 응답의 유형
      • 정상, 쿼리 오류, 불일치 오류, 잘못된 접근 방식 등에 대한 응답 데이터를 정의함
    • 경기 기록 데이터를 주기적으로 갱신하는 스케쥴러 개발
      • JSOUP 라이브러리를 통해 KLeague에서 제공하는 XML 파일을 파싱하여 경기 기록을 저장하는 스케쥴러 개발
      • 작업이 필요한 HTML 노드를 탐색하여 브라우저가 아닌 HTTP 통신을 통해 로그인을 진행한 뒤 XML을 파일을 다운로드
      • 다운로드한 XML에 대해 파싱을 진행하여 데이터 추출 후 데이터베이스에 저장
    • 복수의 서버 인스턴스에서 스케쥴러를 동시에 호출하는 현상 수정
      • Shedlock 라이브러리 도입을 통해 스케쥴러 중복 호출 방지
      • 다양한 락 방식이 존재하지만 데이터베이스 자체의 락 방식을 수정하게 되면 서비스 전반에 영향이 발생
      • synchronized 키워드는 동일한 서버 인스턴스에서만 동작하기 때문에
        2대의 서버 인스턴스를 사용하는 해당 프로젝트에서는 사용할 수 없음
      • @Transactional 애노테이션이 존재하면 트랜잭션이 종료되기 전에 다른 스레드에서 메서드에 접근할 수 있음
      • 배치 로직 앞뒤로 락을 획득하고 반환하는 쿼리를 실행하게 해도 되긴하지만 그렇게 될 경우 오히려 관리할 코드가 늘어남
      • 관리할 코드의 양을 최소화하기 위해 간단한 설정만으로도 락을 구현하는 외부 라이브러리를 도입함

22년 데보션 모바일 앱/웹 기능 개선

  • 수행 기간 : 2022.10 - 2022.12
  • 기술 스택 : Java, Spring Framework, MyBatis, MySQL, Dart, Flutter, Firebase
  • 수행 업무
    • FCM 메시지 발송 서비스 개선
      • FCM 메시지 발송 데이터 보존 방식 변경
        • AS-IS : 단일 테이블에 FCM 메시지를 저장 후 발송 여부만 변경
        • TO-BE : 발송 완료된 데이터는 별도의 로그 용도의 테이블로 복사 후 기존 테이블에서는 삭제
      • 1분에 1번씩 발송하는 스케쥴러를 분리
      • 메시지 데이터는 실시간 발송과 추후 발송 2가지 성격이 존재하기 때문에 성격 기준으로 분리
      • DM, 이벤트 당첨 등 실시간으로 발송되어야 하는 메시지는 미리 발송 후 로그 테이블에 저장
      • 댓글 등록, 좋아요 등 실시간으로 발송되지 않아도 되는 데이터는 메시지 큐 테이블에 저장 후 추후 발송
      • 개선 결과 : 스케쥴러 실행 시간이 평균적으로 약 60% 이상 감소함 (평균값)
    • 커뮤니티 게시글 조회 API 개선
      • STRAIGHT_JOIN을 통한 조인 순서 변경
      • 메인이 되는 게시글 테이블보다 보유한 데이터 양이 많은 다른 테이블과 조인하면서
        옵티마이저가 효율적인 조인 순서를 정상적으로 정의하지 못 함
      • STRAIGHT_JOIN을 통해 조인 순서를 직접 정의하면서
        반복적인 실행 계획 확인을 통해 효율적인 조인 순서를 찾아서 데이터 조회 속도를 개선함
      • 실행 계획 확인을 통한 신규 인덱스 추가
      • 실행 계획을 확인하여 서비스 개편을 통해 추가된 신규 컬럼이 사용도는 높으나 인덱스가 없는 것을 확인
      • 사용되지 않으나 차지하는 용량이 큰 복합 키 인덱스를 삭제 후 신규 인덱스 추가
      • 관련 파일 목록을 조회하는 로직 개선
        • AS-IS : 게시글 데이터 N건 조회 시 게시글 갯수만큼 관련 파일 목록을 조회
        • TO-BE : 게시글 목록 조회 후 PK 값만 취합하여 IN절을 통해 파일 목록을 일괄 조회함
      • 개선 결과 : 6.7s => 350ms (평균 값, 조회한 모든 게시글에 이미지 파일이 존재하는 경우)

(주) 퀀텀에듀솔루션

국가민방위재난안전교육원 운영 및 유지보수

  • 수행 기간 : 2021.02.26 ~ 2021.05.25
  • 기술 스택 : Java, SpringFramework, eGovFramework, JavaScript, Jquery, MyBatis, Cubrid
  • 수행 업무
    • EXPLAIN을 통해 인덱스를 타지 못 하거나, I/O 비용이 비싼 곳을 찾아서 인덱스를 추가하거나 기존 인덱스를 수정
    • 개선 결과 : 1.3s ~ 2.0s => 500ms



Favorite

  • IT 관련 유튜브 영상 보기
  • IT 관련 피드 확인
  • 내가 모르는 새로운 기술 공부하기
    • 현재 사용 중인 기술의 신규 기능
    • 새로운 언어나 프레임워크
  • 웹툰
  • 게임



Education

  • 2021 유한대학교 졸업
  • 2018 육군 병장 만기전역
  • 2017 육군 입대
  • 2016 유한대학교 IT소프트웨어공학과 입학