Skip to content
View Jaehwi-So's full-sized avatar
Block or Report

Block or report Jaehwi-So

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Jaehwi-So/README.md

Jaehwi So

Jaehwi-So's github stats Solved.ac Profile

걸음마중인 병아리 개발자👶

  • 안정적이고 신뢰성 있는 서비스를 제작하면서 동시에 도전적인 정신을 바탕으로 어제보다 오늘의 코드가 나아지길 바라는 개발자입니다.
  • 백엔드 엔지니어의 업무에 가장 흥미를 가지고 있으며 주로 프로젝트에서 해당 파트를 맡아 시스템을 개발해 왔습니다.
  • 주로 개발을 담당하지는 않지만 프론트엔드와 머신러닝 영역에도 재미를 느끼고 있어 꾸준하게 관심을 가지고 있습니다.

전공

상명대학교(Sangmyung univ. Seoul)

  • 휴먼지능정보공학과(Human centered AI, 주전공)
  • 컴퓨터과학과 (Computer Science, 부전공)



개발 도구

Top Langs

Experience

지금까지의 프로젝트 과정 중 사용경험이 있는 도구들입니다.

Backend
Database
DevOps & Tools
Cloud
Frontend
Data Science

1. 프레임워크

백엔드 프레임워크를 선택할 때 저는 두 개의 후보군을 우선적으로 고려합니다. 상황 및 요구사항에 따라 유연하게 프레임워크를 결정합니다.

Spring (Java) : 복잡한 비즈니스 로직을 구현해야 하거나 대규모 시스템을 구축할 때 주로 사용합니다. 최근에는 Spring 진영에서 지원하는 강력한 모듈들에 대한 관심이 높아져 Spring Cloud나 Webflux도 개발에 적용해보려고 시도하고 있습니다.

Express (Node.js) : 빠른 개발이 필요한 경우, 혹은 비교적 가벼운 시스템을 구축할 때 주로 사용합니다. JS의 불안정성을 극복하기 위해서 Typescript도 함께 사용합니다. 명확히 구조화된 프레임워크인 NestJS를 공부하였으며 실제 프로젝트에 도입해보려 하고 있습니다.

• 이 외에도 필요 시 ASP.NET, Django 등 타 프레임워크를 사용하여 프로젝트에 참여한 적이 있습니다.

2. 데이터베이스

프로젝트의 핵심 로직에 따라서 다양한 유형의 데이터베이스를 채택합니다.

RDBMS : 가장 많이 사용하며 정형화된 모델링과 복잡한 연관 질의가 필요할 때 가장 적절합니다.
NoSQL : 유연하게 데이터를 모델링 해야 하는 경우 사용합니다.
In-memory DB : 캐싱, 사용자 세션 관리, 락 처리 등 임시적인 저장이지만 빠른 데이터 접근 속도가 필요한 경우 사용합니다.
Elasticsearch : 검색 엔진으로서의 활용합니다. ELK는 데이터 분석에도 유용하다고 들어 해당 기능도 공부해보고 싶습니다.

3. 서버

메시지 브로커 : 분산 시스템에서의 데이터 동기화나 이벤트 큐의 사용 목적으로 Kafka나 RabbitMQ 등을 프로젝트에 적용해 보았습니다.
클라우드 : 운영 및 배포 환경 구축에 필요한 강력한 도구들을 제공하는 클라우드 플랫폼의 다양한 모듈들에 관심이 있습니다.
컨테이너 기술 : 개발 환경을 구축하거나 배포를 할 때 Docker 컨테이너 기술은 필수적으로 사용하는 편입니다.
REST와 GraphQL : 주로 RESTful한 API를 개발하는 편이지만 클라이언트가 원하는 데이터를 질의해서 가져가는 GraphQL의 동향에도 주목하고 있습니다.

4. 기타

프론트엔드 : Angular 혹은 바닐라 JS를 사용해서 개발합니다. 프론트엔드 개발자분들만큼의 기술은 모르지만 관리자 페이지의 구축이나 개발한 API와의 연동을 테스트하기 위한 프로토타입 등을 제작할 수 있습니다.
데이터 사이언스 : 제 주전공은 기계학습과 데이터분석 등의 데이터과학을 중심적으로 다루는 컴퓨터공학입니다. 인공지능 시대에서 데이터 과학자들과 함께 일하기 위해서 학과 공부도 충실히 하고 있습니다. 특히 분산환경에서의 데이터 분석 도구인 Apache spark에 관련한 내용들은 매우 흥미로웠습니다.




Currently focused on this

요즘 흥미를 가지고 집중해서 공부하거나, 개발에 적용시켜보려고 하는 부분들입니다.
특히 안정적인 서비스와 좋은 퍼포먼스를 보이기 위한 마이크로서비스와 같은 분산 시스템 아키텍쳐와, 클라우드 기술에 관심을 가지고 있습니다.






개발 블로그

제가 작업하는 내용과 관련하여 개발 블로그를 운영하고 있습니다. 백엔드 개발에서 필요한 CRUD, 인증과 인가, 파일 처리, API 문서 작성, 클라우드 배포와 컨테이너 기술, 테스트, 시스템 아키텍쳐와 관련된 내용을 주로 작성합니다.
백엔드 개발 뿐 아니라 네트워크, 운영체제, 아키텍쳐 등의 컴퓨터과학 & 머신러닝과 데이터분석과 같은 Data Science 분야의 글도 틈틈이 작성하고 있습니다. 많이 방문해주시면 좋겠습니다.




주요 프로젝트

기간 구분 중심 스택 소속 프로젝트명 설명 상세
2024-06-24~
2024-06-28
개인 대학생 해커톤 이벤트 TRUSTICKET
  • 신뢰성 있는 티켓 발권 시스템 구축. 1주일간의 해커톤 개인 프로젝트 진행
  • 5개의 서비스와 Spring Cloud를 이용한 마이크로서비스 구축
  • 카프카를 사용하여 대기열 큐 구성 및 MSA 통신
  • Elastic을 사용하여 한국어 토큰 기반의 검색 구성
  • Scale-up 및 결함 회복성, 동시성 제어의 오버헤드를 줄이기 위한 리팩토링 추가 개발 진행중
상세 보기
2024-03~
진행중
졸업 프로젝트 DIDACTO
  • IT 기반 교육의 질을 향상시키기 위한 실습환경 모니터링 및 원격제어 솔루션 구축
  • 핵심 API 서버로는 Spring Boot 서버 사용. 필요한 비즈니스 로직을 개발.
  • 원격 시스템을 위한 이벤트 서버로 Express 서버 채택.
  • 실시간 영상 스트리밍을 위한 WebRTC 연동 및 구현
  • 모니터링을 위한 Push & Polling 기능 2차 MVP 개발 진행에 돌입했습니다.
상세 보기
2023-06~
2023-11
SK Lookie WISEFEE
  • "카페에서의 일회용품 소비 줄이기"라는 사회적 문제에 초점을 맞춘 BM 개발
  • SK Lookie 측의 1차 심사 통과
  • 텀블러 대여 및 반납에 초점을 둔 오더 애플리케이션 개발
  • API 개발, 푸시알림 연동, 배포 기여
상세 보기
2023-06 개인 Paas-ta 경진대회 Online-Brainstorming
  • 협업 플랫폼 개발 : 협업 시 때로는 비격식적인 의견교류의 필요성을 체감하여 기존 플랫폼들보다 자유로운 형태의 플랫폼을 개발
  • Django와 Paas 클라우드를 이용하여 적은 시간 및 개발 비용으로 프로젝트를 완료
상세 보기

실무 프로젝트

2020년 11월부터 2022년 12월까지 산업기능요원 사원으로 사용자 요구사항에 특화된 키오스크를 개발하는 일을 하였습니다.
다양한 도메인에서 사용되는 키오스크의 API 개발 및 유지보수, 서버 관리, 관리자 페이지 개발을 주로 맡았으며 필요에 따라서 컨텐츠 개발 및 보안 점검, CS 대응등을 담당하였습니다.

다음 내용은 가장 개발 과정이 기억에 남는 프로젝트들을 회고하면서 작성한 내용들입니다.

기간 중심 스택 프로젝트명 설명
2022-03 ~
2022-10
NSolution Kiosk Manager

키오스크 통합 관리 시스템 구축

키오스크 관리 자동화를 위한 솔루션. 기획부터 개발 과정까지 주도적으로 참여할 수 있어서 회사 생활에서 가장 의미있는 프로젝트입니다.

기여 내용

서버 API 비즈니스 로직 주담당, 키오스크 측 응용 프로그램의 작업도 병행하며 연동 작업에 기여

주요 기능

키오스크 컨텐츠 프로그램의 배포 자동화 및 정해진 시간에 예약 배포, 형상관리와 롤백, 키오스크 CPU 제어 및 컨텐츠 시작 및 종료 시간의 스케줄링 설정

상세 내용 펼쳐보기

문제점

저희 회사는 각각의 클라이언트에 맞추어 전국 각곳에 맞춤형 키오스크를 제공하였습니다. 이 때 별도의 관리자페이지가 없는 솔루션의 경우 새로운 버전의 프로그램을 키오스크에 배포할 시 직접 출장을 가야 하는 경우가 잦았습니다.

해결

키오스크 프로그램 및 사내 프로세스에 특화된 원격 저장소를 구축하고 프로그램의 배포를 자동화해주는 프로그램을 개발하였습니다.

이슈사항

1. 모듈 간 연동

모듈 간 연결을 항상 유지할 수 있으면 좋겠지만 이를 완벽하게 구현하는 것은 불가능합니다.
연결이 끊겼을 시 동일한 유형의 키오스크들에 일괄적으로 배포하게 되면 키오스크들의 버전 불일치가 발생했습니다.
따라서 연결이 끊어지더라도 입력한 명령을 큐에 저장하고 기억하도록 하여 무조건 한 번은 작업을 수행하도록 처리하였습니다.

2. 결함 내성

버전 업데이트 도중 특정 모듈의 결함이 발생하여 배포가 중단되는 경우의 문제가 있었습니다.
해당 시나리오에 대비하기 위해서 실패 시 재시도, 배포 오류 시 이전 버전으로 롤백 등 예외 케이스에 대한 대응에 포커스를 맞춰서 개발하였습니다.

성과

개발팀의 출장 비율이 30% 이상 감소하였으며 주말이나 휴가와 같을 때에 발생한 이슈에도 즉각적인 대응이 가능해졌습니다.
수동으로 전국 각지에 퍼져있는 수개의 키오스크에 직접 배포해야 하는 과정을 자동화하여 비용을 절약하고 개발진들이 더욱 프로그래밍에 집중할 수 있도록 하였습니다.


2021-06 ~
2022-01
카지노 키오스크 시스템

카지노 키오스크 시스템

기여 내용

키오스크 API와 관리자 페이지 개발, 카지노의 시스템 및 인터페이스와 연동

주요 기능

회원카드 인증, 이벤트 및 시설 조회, 선착순 이벤트 참여, 쿠폰 및 토큰 교환

상세 내용 펼쳐보기

이슈사항

1. 무지한 도메인과 효율적인 의사소통

기본적으로 저는 개발을 진행할 때 1차적으로 도메인을 중점으로 "빠른 성능", "높은 신뢰성" 등의 비기능적 요구사항 중 초점을 맞출 사항들을 결정합니다. 그렇지만 카지노의 특성 상 내국인으로서는 접할 일이 없다 보니 오류를 범하기 쉬워 보였습니다.

그렇기 때문에 고객사 측의 담당자 분들과 의사소통이 빈번하게 필요했습니다. 신뢰성 있고 효율적인 방법으로 의사소통하기 위해서 내용의 우선순위를 미팅 사전에 결정하였으며, 문서화를 습관화하고 이를 사전에 공유하여 의사소통의 효율성을 높이려고 노력하였습니다. 이런 노력 때문인지는 모르겠으나 때때로 요구사항에 대한 협의 및 타협의 결정권을 위임받기도 하였습니다.

2. 예민한 데이터들의 처리

카지노는 예민한 공간입니다. 왜냐하면 "금전"이 걸려있기 때문입니다. 따라서 저희 시스템을 이용 시 "금전"과 같은 예민한 정보의 처리는 정말 신중했어야 합니다.

따라서 해당 부분은 어느정도의 성능을 포기하고 신뢰성을 높이는 것에 주목하였습니다. 특히 트랜잭션의 원자성 유지 및 기존 카지노 시스템의 연동이 필요한 API들과의 모듈의 부분 실패에 대한 이력 기록 및 롤백 처리에 많은 노력을 기울였습니다.

3. 선착순 이벤트

선착순 이벤트를 키오스크에서 신청할 수 있도록 개발하였습니다. 내부망을 사용하는 키오스크의 특성 상 트래픽은 고려하지 않아도 되지만 동시성 문제에 대한 고려는 필요했습니다.

처음에는 데이터베이스의 비관적 락으로 문제를 처리했으나, 해당 데이터는 다른 곳에서도 빈번하게 이용되기 때문에 Redis를 사용한 락을 도입하여 성능 최적화를 하였습니다.


2021-03 ~
2021-09
호텔 키오스크 시스템

호텔 키오스크 시스템

기여 내용

키오스크 API, 관리자 페이지 개발

주요 기능

호텔에서의 체크인 및 체크아웃, 이벤트 및 시설 조회

상세 내용 펼쳐보기

이슈사항

1. 스크린세이버 업데이트

저희의 노트북은 일정 시간동안 사용 중지되면 잔잔한 화면이 나옵니다. 이와 같이 고객사의 요구사항 중 키오스크를 사용하지 않을 때 광고 화면이 나오도록 하는 스크린세이버 기능이 있었습니다.

이미 이전에 납품되었던 키오스크의 기능을 리뉴얼 하는 것이라 해당 기능이 구현되어 있긴 했지만, 관리자페이지에서 광고를 업데이트 할 시점에 켜져있는 키오스크만이 업데이트가 되는 문제가 있었습니다.(꺼져있는 키오스크는 업데이트가 반영되지 않았습니다)
따라서 키오스크가 켜질 때 자동으로 동기화하는 로직을 추가하여 역방향으로도 이미지를 받아와 업데이트 할 수 있도록 하였습니다.

2. 이벤트 조회 성능 이슈

키오스크에서 호텔에서 운영하는 이벤트를 조회할 수 있는 기능이 매우 느렸습니다. 문제점은 해당 이벤트를 조회하는 것이 호텔 측의 시스템에 의존하고 있었기 때문에 데이터베이스 및 쿼리 최적화 조치가 어렵다는 것이었습니다.

따라서 제가 할 수 있는 조치로서 외부 모듈에서 이벤트를 조회할 때 캐싱 처리하는 방법을 사용했습니다. 평균적으로 3초 이상이 걸리던 조회 성능이 200ms 이하의 유의미한 지표로 향상되었습니다.





기타 프로젝트

기간 구분 중심 스택 소속 프로젝트명 설명 저장소
2020-10 개인 - MatchUp!
  • 스포츠 경기 번개 매칭을 위한 커뮤니티
  • Node.js를 처음 배웠을 때 진행했던 프로젝트
  • 웹 개발에 필요한 인증, CRUD와 복잡한 쿼리, 양방향 통신에 대한 훈련이 되었던 프로젝트입니다.
링크
2020-07 코리아 IT 아카데미 Greeting!
  • 명함 교환을 위한 모바일 애플리케이션
  • 안드로이드 개발을 배운 후, 처음 REST API와 연동을 해본 프로젝트
  • 서버에서의 API 제공과 프론트엔드의 분업에 대해 이해하는 계기가 되었습니다.
링크
2020-06 코리아 IT 아카데미 EDU Explorer
  • 전국의 학원들과 학생들의 매칭 및 정보교류를 위한 사이트
  • 가장 처음 해본 웹 팀 프로젝트. 프론트엔드부터 백엔드, DB를 배운 후 처음 해보았던 프로젝트라 회고해보면 아쉬움이 많이 보이지만 의미도 깊습니다.
  • 웹표준과 JSP, Legacy Spring 사용
링크
기간 구분 제목 내용 저장소
2024년 토이 프로젝트 1:1 화상 스트리밍 졸업 프로젝트에 대비, WebRTC 기술과 Electron을 사용하여 실시간 영상 스트리밍 구현 링크
2023년 팀 프로젝트 인천광역시 도로의 시간별 상대적인 위험지표 분석 데이터 분석 프로세스에 따라 수집부터 시각화까지 진행. 수업 프로젝트 점수 최고점 기록 링크
2021년 토이 프로젝트 MeloSongBot 음악 트렌드를 따라가기 어려울 때 최신곡을 노티스해주는 슬랙 봇 링크
2020년 토이 프로젝트 MSGamble 회사 동료들과의 간식내기를 위한 점수관리 웹 링크
2020년 토이 프로젝트 PathMaker AWT와 외판원 순회 알고리즘을 사용한 여행계획 스케줄링 시스템 링크

기타 저장소

기간 구분 제목 내용 저장소
2024년 학교 공부 딥러닝 학교에서 배운 내용을 기반으로 CNN, RNN, Transformer, 생성형 모델 등을 만들고 특정 문제에 적용해보기 링크
2024년 개인 공부 PS / 알고리즘 코딩 테스트에 대비하여 꾸준하게 문제풀이하기. (늘어나는 문제 수와 올라가는 티어는 나의 원동력) 링크
2023년 학교 공부 빅데이터 분산형 빅데이터 분석 프레임워크인 Apache spark로 데이터 분석하기 링크
2023년 스터디 MSA Spring Cloud와 Kafka를 이용한 마이크로서비스에 관해 인터넷 강의를 듣고 그룹 스터디 링크
2023년 학교 공부 디자인 패턴 Java 디자인 패턴을 공부하고 객체지향의 핵심 목적 배우기 링크
2023년 스터디 Spring Boot 동아리 내 Spring 공부 : 김영한님의 스프링 링크
2022년 개인 공부 NestJS : 마켓 백엔드 개발과 배포 인터넷 강의 : NestJS와 GraphQL로 쇼핑몰 API를 만들고 Google Cloud에 Kubernetes로 배포, CI/CD 적용기 링크
링크
2021년 개인 공부 게시판과 채팅
(Node.js + Angular)
인증과 인가, CRUD 게시판, 채팅을 구현한 프론트엔드와 백엔드 공부를 위한 토이 프로젝트 링크
2020년 개인 공부 Android Java 기반 안드로이드 스튜디오 공부 링크
2020년 개인 공부 웹 개발 가장 처음 웹 개발 공부를 하면서 만든 저장소. 레거시 Spring, Node.js, JSP, HTML, CSS, Javascript, SQL 등을 공부하고 Markdown으로 파트별 공부 내용 정리 Markdown
2020년 개인 공부 Java 자바 프로그래밍 학습 링크

Pinned Loading

  1. WEB_Application_Pj_MatchUP WEB_Application_Pj_MatchUP Public

    축구 경기 매칭에 특화된 그룹 결성, 매칭 서비스, 쪽지 및 채팅 등을 제공하는 SNS 서비스, Node.js와 Express 기반의 웹 애플리케이션 개발 프로젝트

    HTML

  2. OnlineBrainstorm OnlineBrainstorm Public

    프로젝트 협업을 위한 브레인스토밍 플랫폼_DjangoProject

    JavaScript

  3. WISEFEE/SKLookie_SMU_Wisefee_Server WISEFEE/SKLookie_SMU_Wisefee_Server Public

    상명대학교 SK루키 와이즈피 백엔드 API 서버

    Java 2 6

  4. SKLookie_SMU_Wisefee_Server SKLookie_SMU_Wisefee_Server Public

    Forked from WISEFEE/SKLookie_SMU_Wisefee_Server

    상명대학교 SK루키 와이즈피 백엔드 API 서버

    Java

  5. graProj/didacto-api graProj/didacto-api Public

    DIDACTO Core API Server

    Java 1

  6. TRUSTICKET/TRUSTICKET-CORE TRUSTICKET/TRUSTICKET-CORE Public

    Core API

    Java