주재현 (Joo JaeHyeon)

주재현이란?

🍷 일상에서의 불편함을 없애고 싶은 개발자 주재현입니다

Introduce.

안녕하세요!
일상, 취미 등에서 불편하고 귀찮은 일들 또는 반복되는 일을 자동화하고 간편하게 개선하는 것을 좋아합니다.
프로젝트를 진행할 때 항상 목표를 명확히 하고 기술, 스택의 사용 이유를 명확히 하는 것을 좋아합니다.
확장성과 유지 보수성이 높은 아키텍쳐와 패턴에 대해 항상 고민하고 있습니다.
각 구성 요소가 명확한 역할과 책임을 갖도록 설계하는 것을 지향합니다.
기술적 완성도 뿐만 아닌 비지니스적인 측면 또한 고려해왔습니다.
또한 적극적인 커뮤니케이션을 위해 노력하고 있습니다.


Contact.

Email. me@joojae.com

Channel.

Blog. https://blog.joojae.synology.me/
GitHub. https://github.com/joojae02


Experience.

2023.08 ~ 2023.12

ASC (AWS Student Club)

2023.05 ~

42 Seoul 9기

2023.02 ~ 2023.12

숭실대학교 소모임 스플럭

2021.02 ~ 2021.12


Education.

숭실대학교 소프트웨어학부

2021.03 ~ (휴학중)

덕소고등학교 (일반고)

2018.03 ~ 2021.02


Project.

지도로 확인하는 여행 기록, SnapPoint

2023.11 ~ 2023.12
팀프로젝트 (안드로이드 3명, 백엔드 2명)
https://github.com/boostcampwm2023/and01-SnapPoint
SnapPoint는 지도 기반 여행 기록 어플입니다.

주요 기능

  1. 내 여행을 게시글 형태로 기록할 수 있다.
  2. 게시글에 추가한 미디어가 촬영된 위치를 핀 형태로 저장할 수 있다.
  3. 미디어들은 경로로 이어져 지도에서 한 눈에 확인할 수 있다.

Untitled

구현

  • API 서버, File 서버, Media Instace
    • TypeScript, NestJS, Prisma를 사용한 API 개발
    • NCloud MySQL → NCloud PostgreSQL로 이전
    • NCloud Object Storage 이용
    • RabbitMQ를 이용한 비동기 미디어 처리 수행

문제사항

  1. 확장성, 유지 보수성이 높은 구조

    문제점

    • 변경될 가능성이 높은 요구사항

    선택지 및 판단

    • 기존 레이어 아키텍처
    • DDD 레이어 아키텍처
    • CQRS 아키텍처

    이유 및 결과

    • 기존 레이어 아키텍처

      • 변경 사항에 대처하기 힘들것이라 판단
      • 한 계층에서 너무 많은 역할과 책임을 가지게 됨
    • CQRS 아키텍처

      • 여러 DB를 사용하지 않음
      • 높은 복잡성, 도메인이 비대해짐
    • DDD 아키텍처 선택으로 각 도메인, 계층이 각자의 역할책임을 가지게 됨

      • 변경이 발생할 때 각 계층이 독립적으로 변화할 수 있게 됨
  2. 응답 속도 개선

    문제점

    • 현재 위치 근처 핀을 가져오는 api의 느린 응답속도
      • 총 4번의 DB 접근 발생

    선택지 및 판단

    • 서버 성능 업그레이드
    • 단일쿼리 → Batch 쿼리
    • 캐싱

    이유 및 결과

    • Batch 쿼리, 캐싱 선택

      • Redis를 이용한 글로벌 캐싱
      • 추후 서버 인스턴스가 늘어날것을 고려
    • 응답 속도 약 50% 이상 감소

  3. 대용량 미디어 파일 업로드

    문제점

    • 큰 미디어 파일의 경우 OOM 발생
      • 저장소는 S3와 같은 api를 이용하는 NCloud Object Storage 사용

    선택지 및 판단

    • 스트림 업로드
    • MultipartFile 업로드
    • S3 Presigned Url, Multipart 업로드

    이유 및 결과

    • 클라이언트에서 업로드 진행도 확인 가능하도록
    • 최대한 서버에 부하가 가지 않는 방식 선택
      • 바로 S3에 파일이 전송되는 방식 선택
  4. 비동기 미디어 처리

    문제점

    • 동영상 작업은 매우 부하가 큰 작업
    • 작업이 실패하는 경우도 많음

    선택지 및 판단

    • 별도의 미디어 서비스 이용
    • 동기적 미디어 처리
    • 비동기 미디어 처리
      • 메시지 브로커인 RabbitMQ를 이용해 요청을 보관, 전달

    이유 및 결과

    • 별도의 미디어 서비스는 추가 과금이 발생

      • 많은 요청이 올 경우 많은 금액이 청구될것이라 판단
    • 동기적 미디어 처리

      • 많은 요청이 올 경우 몇몇 유저 경험이 심각하게 저하될 가능성이 있음
    • 실패 시 재요청 가능

    • 미디어 처리 인스턴스를 유동적으로 늘릴 수 있음

Obsidian 첨부 이미지 업로드 플러그인 개발

2023.10 ~ 2023.11

개인프로젝트

이미지를 붙여넣기를 하게 되면 자동으로 NAS에 저장되는 3rd party 플러그인을 개발하였습니다.

주요 기능

  • 이미지 NAS로 전송
  • 이미지 호스팅을 이용한 URL로 이미지 띄우기

구현

문제사항

  1. 처음 접하는 기술, 도구

    문제점

    • Obsidian의 기능을 사용하기 위한 함수 및 기능들

    선택지 및 판단

    • 공식 문서 확인
    • 기존 존재하는 코드 참고
    • 개인 블로그, 인터넷 글 참고

    이유 및 결과

    • 개인 블로그, 인터넷 글들은 신뢰성이 낮은 정보들
    • Obsidian에서 제공하는 공식 문서를 참고해 개발

익숙하지 않은 기술, 도구임 에도 공식 문서를 참고하면서 개발할 수 있었습니다.

새로운 와인 정보 받기 서비스

2022.08 ~

개인프로젝트

주요 기능

  • 다양한 구매, 정보 사이트 스크래핑
  • 슬랙, 메일을 이용해 이용자에게 정보 전달

구현

  • 다양한 사이트 스크래핑 후 데이터베이스에 저장
    • Lambda, python, Beautifulsoup, Selenium 사용
    • AWS RDS MySQL → 개인 NAS MySQL 로 이전
  • 새로운 상품, 정보 Slack, 이메일을 이용해 알림

문제사항

  1. 잦은 스크래핑, 많은 데이터로 인한 과금

    문제점

    • AWS의 Lambda, RDS를 이용
      • 잦은 스크래핑, 데이터로 인해 과금이 발생

    선택지 및 판단

    • Backup, 스냅샷 삭제
    • 스크래핑 주기 줄이기
    • DB 이전

    이유 및 결과

    • 백업, 스냅샷을 지우는 것은 불가능하다고 판단
      • 혹시 모를 문제를 대비
    • 새로운 글이 올라오는 주기가 길다는 것을 확인
      • 스크래핑하는 주기를 이에 맞춰 조정
    • DB 자체를 AWS → NAS 로 이전해 많은 데이터를 직접 관리할 수 있게 변경

실제 사용자 유치, 모은 데이터를 이용한 이익 실현을 통해 개발에 더욱 큰 관심을 가질 수 있었습니다.


Other Experience.

Ubuntu Korea Community 우분투 한국어 번역 참여

2023.05

우분투에서 제공되는 다양한 패키지의 한국어 지원, 커뮤니티 번역 기여 참여


Skill.

  • Backend: NestJS, JavaScript, TypeScript, SpringBoot, Java, Python
  • Infra: AWS (EC2, RDS, S3, Lambda 등), NCloud (Server, DB, Object Storage)