정보
정보
취소

정보

Projects

(주) 크림하우스


2023년 반려동물 만성질환 관리 APP 및 APP admin 개발 (펫토닥)

  • 수행 기간 : 2023.04.28 - 2023.12.31
  • 기술 스택 : Java, Spring Boot, MyBatis, MySQL, Dart, Flutter, Thymeleaf
  • 수행 업무
    • 식이관리, 커뮤니티, 설정 등의 서비스 개발을 담당하였습니다.
    • 자주 사용되는 위젯을 묶어서 컴포넌트화 하였습니다.
      • 재사용성을 증대시키기 위해 가이드라인을 작성 및 공유하여 유지보수성을 증대시켰습니다.
    • 관리자 페이지에서 등록한 이미지를 앱에서 가져오지 못 하는 오류를 수정하였습니다.
      • URL을 통한 이미지 요청 시 해당 요청을 이미지로 인지하지 못 하는 문제가 있어서 헤더 부분에 'Accept': 'image/*'를 추가함으로써 오류를 해결하였습니다.
      • 몇몇 이미지의 경우 이미지가 생성된 방식에 따라 플러터에서 이미지를 랜더링하는 엔진에서 해당 부분이 없을 경우 이미지로 인지하지 못 하는 것이 원인이었습니다.

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()를 통해 실제 시간과 인터벌 시간의 차이를 통해 가중치를 증감하는 방식으로 오차를 최소화하였습니다.
    • 배치 서비스 관련 업무를 담당하였습니다.
      • 멀티 서버에서 배치가 동시 실행되어 업무가 충돌하는 현상을 방지하였습니다.
        • 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을 통해서 조회하였습니다.
    • 푸시 스케쥴러의 로직을 실시간용과 단위 시간용으로 분리하였습니다.
      • DM같이 실시간으로 발송되어야 하는 데이터는 스케쥴러로 관리하는 것이 오히려 비효율적이기에
        푸시 데이터는 외부 서비스를 통해서 바로 발송되도록 수정하였습니다.
      • 댓글 등록이나 좋아요같은 알림 푸시는 기존의 단위 시간용 스케쥴러에 잔존시키되,
        실시간에 가깝게 발송될 필요가 없기 때문에 fixedDelay의 기준을 5분으로 변경하였습니다.
    • 발송된 푸시 데이터를 저장하는 테이블을 분리하였습니다.
      • 기존의 테이블은 메시지 큐처럼 푸시 발송 후 발송된 데이터를 다른 테이블에 저장하고,
        해당 테이블에서는 삭제하는 방식으로 사용되게 하였습니다.
      • 발송완료된 데이터들을 저장하는 별도의 테이블을 추가하였고,
        해당 테이블을 통해서 사용자들이 알림함 페이지에서 발송받은 푸시 목록을 확인할 수 있도록
        별도의 조회 기능도 함께 개발하였습니다.

2022년 SKT 데보션 모바일 앱 개발 및 웹 기능 고도화

  • 수행 기간 : 2022.03.11 - 2022.10.31
  • 기술 스택 : Java, Spring Framework, MyBatis, MySQL, Dart, Flutter, Firebase
  • 수행 업무
    • API의 전반적인 설계 및 개발을 담당하였습니다.
      • 최초에는 REST 형식으로 설계하였으나 기존 프로젝트에 있는 웹 페이지를 위한 API와의 통일성을 위해 POST 방식으로 통일되었습니다.
      • API의 응답에 대한 공통적인 부분을 설계하였습니다 (응답 유형 코드, 응답 객체의 필드 구성 등)
    • 푸시 관련 서비스를 개발하였습니다.
      • fixedDelay 방식을 통해 댓글 등록, 좋아요, DM같은 알림에 대한 푸시가 실시간으로 발송되도록 하였습니다.
      • cron 방식을 통해 예약 발송을 위한 푸시를 미리 만드는 기능과 사전 제작된 푸시가 일정 시간에 일괄적으로 발송되도록 하였습니다.
    • 룰렛 이벤트 기능을 라이브러리 없이 순수하게 구현하였습니다.
      • sincos이라는 삼각함수 메소드를 통해 특정 각도에 대한 삼각비를 구하여 정확한 위치에 그림이 그려지도록 개발하였습니다.
      • 사전에 설정한 데이터의 개수에 따라 그려지는 영역이 동적으로 그려지도록 개발하였습니다.

(주) 퀀텀에듀솔루션


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

  • 수행 기간 : 2021.02.26 ~ 2021.05.25
  • 기술 스택 : Java, SpringFramework, eGovFramework, JavaScript, Jquery, MyBatis, Cubrid
  • 수행 업무
    • 쿼리 개선을 통해 평균적으로 약 1.3초에서 2초정도 걸리던 쿼리를 0.5초가 되도록 개선하였습니다.
      • EXPLAIN을 통해 인덱스를 타지 못 하거나, I/O 비용이 비싼 곳을 찾아서
        인덱스를 추가하거나 기존 인덱스를 수정하는 작업을 하였습니다.

사이드 프로젝트


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소프트웨어공학과 입학