About Me

이규원 :🌱 다정한 개발자를 꿈꾸는 백엔드 엔지니어 👋

이메일: kyuwoon369@gmail.com / lkw2v@naver.com

도메인을 이해하고 사용자 관점에서 더 나은 서비스를 만들어가는 것을 선호합니다. 도메인을 어떻게 이해하는가에 따라 사용자에게 제공할 수 있는 서비스가 달라진다고 생각합니다. 기술적인 측면도 중요하지만 결국 서비스를 이용하는 사용자가 만족할 만한 서비스를 만들기 위해서는 도메인을 온전히 이해하고 사용자가 원하는 서비스가 무엇인지 알아야 한다고 생각합니다. 개발관점 뿐만 아니라 기획의 관점에서 도메인을 바라보는 것을 좋아합니다.

새로운 기술을 습득하는데 두려움이 없습니다. 회사에서 사용하는 기술들 중 처음 들어본 것도 많았지만 동료들의 도움과 공식 문서, 직접 부딪혀봄으로 빠르게 업무에 적응했습니다. 문제를 해결하는 데 한가지 방법만 고집하기 보다는 다양한 방법들을 생각하고 각 상황에 적절한 방법을 선택하는 것을 선호합니다. 문제를 좀 더 다양한 방법으로 풀기위해 학습을 꾸준히 하고 있습니다. 또, 다양한 기술들이 있지만 각 기술들이 사용돼야 할 곳이 있고 적절한 곳에 사용해야 큰 효과를 발휘한다고 생각합니다.

모르는 것을 모른다고 빨리 무지를 드러냈을 때 훨씬 더 빠르고 양질의 정보를 얻을 수 있다는 것을 경험했습니다. 그래서 모르는 것을 인정하고 무지목록을 작성하여 책, 질문, 검색 등을 통해 다른 분들의 양질의 정보를 모아 상황에 맞게 정보를 사용합니다. 질문과 피드백이 없었다면 주어진 문제를 제대로 해결하지 못했을 것입니다. 모르는 것을 아는 척하는 게 더 부끄러운 일이라고 생각합니다.

더 나은 코드를 작성하고 설계하기 위해 매주 스터디를 진행하고 있습니다. 스터디의 주 목적은 같이 읽기, 같이 나누기입니다. 혼자 읽으면 끝까지 못읽거나 책의 일부분(좁은 시야)만 볼 수 있는데, 같이 읽으면 책도 끝까지 읽게되고 서로 읽은 것을 나누면서 몰랐던, 못보았던 부분들을 알 수 있습니다. 내가 알고 있는 것을 남이 알 수 있게 설명하는 것은 매우 어려운 일입니다. 또, 내가 무지한 부분을 드러내는 것은 어려운 일입니다. 그 분야에 전문성이 생기고 경력이 쌓일수록 더 힘든 일입니다. 스터디를 통해 무지를 드러내는 연습을 하고 동료에게 도움을 주고 받는 연습을 합니다. 도움을 주고 받기에 허들이 없는 다정한 개발자가 되고 싶습니다.


🏃 경력

📎 Makinarocks: Backend Engineer 2022.10 ~ 현재

MRXray 고도화

2023.07 ~

MRXray( 장비 이상탐지 모니터링 대시보드 ) 자바 마이그레이션

2023.03 ~ 2023.07

기존 이상 탐지 모니터링 서비스는 python / Django로 구현되어있었습니다. 안정성, 확장성, 구인 등의 이유로 자바로 마이그레이션이 결정되었습니다. MRXray 기본 구조를 잡고 스켈레톤을 구현, api 개발(80프로) 등 자바 마이그레이션을 주도했습니다.

요구사항이 변경됨에 따라 도메인을 이해하고 UX관점에서 사용자가 원하는 데이터가 무엇인지 고민했습니다. 불필요한 데이터를 줄이고, 사용자 입장에서 서비스를 사용한다면 어떤 것들이 필요할지 어떤 것들을 덜어내야 할지 동료들과 고민했습니다. 그 덕분에 api들을 정리 할 수 있었습니다.

기존에는 플랫한 모습으로 구현되어 170개였던 api를 리팩토링을 통해 80여개로 줄였습니다. 트랜잭션 관리, 무수한 api 요청, 사용하지 않는 api 등의 이유로 리팩토링을 진행했습니다. 이전에는 한 페이지(=기능)을 조회하는데 20여개의 api가 날아갔다면 1개의 api로 해당 페이지를 조회하도록 변경하였습니다.

DB 리팩토링을 진행했습니다. 서비스의 초기 요구사항과 현재 요구사항의 변경에 따라 DB 스키마에도 변동이 있었습니다. 불필요한 컬럼, 무분별한 인덱스, 무분별한 대체키 등을 제거했습니다.

마이그레이션을 하는 기간 동안 필요한 기술들에 대해 학습했습니다. 더 나은 설계, 코드를 작성하기 위해 스터디를 했습니다. 그 주의 금요일에는 개발보다는 리팩토링 하는 날로 정하여 코드를 정리하고 공부 했던 것을 적용했습니다. 학습하고 적용했던 부분을 이슈, PR, 노션에 정리하여 동료들이 언제든 해당 결정에 대한 맥락을 파악할 수 있도록 기록했습니다.

skill: Java, Spring boot, PostgreSQL, AWS

MRXray 모델링을 위한 raw data 적재 파이프라인과 데이터베이스 설계 및 구축

2023.01 ~ 2023.02

모델링 팀의 프로젝트에서 사용할 원천 데이터를 쌓을 DB를 구축했습니다. MDF라는 특수한 형태의 파일로 전달되는 데이터에서 모델링에 필요한 특정 데이터 값들을 추출해 각 데이터들의 시간을 보정하여 적재하는 프로세스를 개발했습니다.

먼저, mdf 파일의 포맷을 분석했습니다. 어떻게 데이터가 담겨있고 각 데이터들의 의미하는 것이 무엇인지 분석했습니다. 분석한 결과를 가지고 ML엔지니어 분들과 의논하여 수집 시간이 다른 데이터의 시간 정합을 맞춰 최대한 원본 데이터를 가공하지 않고 적재하기로 결정했습니다.

설정 파일에 적힌 경로를 지켜보다가 mdf 파일이 들어오면 원하는 데이터를 수집하여 DB에 적재하도록 프로세스를 만들었습니다. 사내 K8s에 DB와 데이터 파싱 프로세스를 띄워서 모델링 팀이 사용할 수 있도록 했습니다.

아쉬웠던 점은 계속 변하는 데이터이기 때문에 RDB가 아닌 NoSQL을 사용하여 좀 더 유연하게 적재할 수 있지 않았을까라는 아쉬움이 있습니다.

skill : Python, PostgreSQL, k8s

MRXray 데이터 이상 모니터링 및 모니터링 알림 개발

2022. 11 ~ 2022.12

이상 탐지를 위해서는 센서에서 측정하는 원천 데이터가 필요합니다. 또 원천 데이터에서 추론된 이상 값도 있습니다. 이 데이터들이 수집되지 않을 때, 데이터 수집 파이프 라인에서 어떤 부분이 문제인지 알려면 기계에 부착된 센서 DB, 추론 파이프라인 등등 한번에 파악이 되지 않고 각 담당자에게 확인 요청을 했어야 했습니다. 확인 작업이 오래걸려 대응하는데 시간이 오래걸리고 매번 모든 담당자가 주의를 기울이고 있어야 했습니다.

각 파이프 라인에서 어떤 시그널이 있을 때, 데이터가 수집되고 있지 않다라고 판단할 수 있는 기준을 세웠습니다. 처음에는 데이터 수집 시점을 기록하는 마커를 통해 판단했지만, 속도 지연으로 더디게 수집이 되어도 데이터가 들어오지 않는다고 판단 하는 경우가 발생했습니다. 이를 실제 DB의 마지막 데이터를 확인하여 체크하도록 하였고, 기준을 세워 일정 시간 지속해서 데이터가 들어오지 않는다면 담당자에게 슬랙 알림이 가도록 스크립트를 짜 스케줄러에 등록했습니다. 이전에는 계속해서 데이터를 모니터링 했지만 알림이 생긴 후엔 데이터 수집 이슈가 생겼을 때, 어디가 문제인지 보다 빠르게 파악하고 대응할 수 있게 되었습니다.

skill : Python, Django, PostgreSQL, Docker, Linux

수집 데이터 아카이브 및 압축

2022.10 ~ 2022.10

기계 학습 분야의 통계적 분류 같은 문제에서 학습으로 훈련된 분류 알고리즘의 성능을 시각화 할 수 있는 표를 분류 모델 성과 지표라고 합니다.

추론된 이상 값을 판단 기준에 따라 계산하여 분류 모델 성과 지표를 보여주는 기능을 개발하였습니다. 추론된 이상 값의 시간 범위에 따라 쿼리로 계산해서 보여주도록 1차 개발되었습니다. 그러나 DB에 부하와 성능 이슈가 생겼습니다. 조회할 때마다 계산 했던 이유는 이상치라고 판단하는 임계값(threashold)가 달라질 수 있기 때문에 파라미터로 받아 계산하여 미리 계산할 수 없었습니다. 이를 개선하기 위해 추론 전 모델에서 이상 값의 임계값이 1 ( 지정된 값, 기준 )이 되도록 조정하도록 규약하고, 조회할 때마다 계산하는 것이 아니라 추론된 이상 값을 적재할 때 분류 모델 성과 지표 계산을 애플리케이션에서 처리하여 통계 테이블에 적재하도록 개선하였습니다. 한달 치 조회 기준으로 5초 정도 걸렸던 작업이, 1초 미만 초로 개선되었습니다.

MRXray 분류 모델 성과 지표 기능 개발 및 개선

2022.10 ~ 2022.10

기계 학습 분야의 통계적 분류 같은 문제에서 학습으로 훈련된 분류 알고리즘의 성능을 시각화 할 수 있는 표를 분류 모델 성과 지표라고 합니다.

추론된 이상 값을 판단 기준에 따라 계산하여 분류 모델 성과 지표를 보여주는 기능을 개발하였습니다. 추론된 이상 값의 시간 범위에 따라 쿼리로 계산해서 보여주도록 1차 개발되었습니다. 그러나 DB에 부하와 성능 이슈가 생겼습니다. 조회할 때마다 계산 했던 이유는 이상치라고 판단하는 임계값(threashold)가 달라질 수 있기 때문에 파라미터로 받아 계산하여 미리 계산할 수 없었습니다. 이를 개선하기 위해 추론 전 모델에서 이상 값의 임계값이 1 ( 지정된 값, 기준 )이 되도록 조정하도록 규약하고, 조회할 때마다 계산하는 것이 아니라 추론된 이상 값을 적재할 때 분류 모델 성과 지표 계산을 애플리케이션에서 처리하여 통계 테이블에 적재하도록 개선하였습니다. 한달 치 조회 기준으로 5초 정도 걸렸던 작업이, 1초 미만 초로 개선되었습니다.

skill : Python, Django, PostgreSQL, Docker, Linux

📎 유플러스 아이티: Software Engineer 2021.09 ~ 2022.10

● 홈택스 & 손택스 근로소득자 신고 경정청구 21귀속 오픈 개발

2022.06 - 2022.07

연말정산을 한 근로자가 세금 감면을 덜 받았을 때 세금을 감면받기 위해 근로소득자 경정청구를 할 수 있습니다. 이때 사용되는 근로소득자 경정청구 신고서에 21귀속 세법 개정이 되어 달라진 계산기 팝업들과 계산 알고리즘을 개발하였습니다.

기존에 코드들이 정리되지 않아 코드 분석이 힘들고, 재사용과 코드 변경이 힘들다는 문제점이 나왔습니다. 업무의 효율성을 위해 재사용이 가능하고 변경하기 쉬운 코드로 변경하자는 의견을 냈습니다. 7000줄이 넘었던 계산 알고리즘 스크립트를 리팩토링하여 2000줄 정도를 정리하였 습니다. 이후 코드 분석과 추가 변경사항 적용시 시간을 단축시킬 수 있었습니다.

다른 팀의 데이터와 서비스를 써야해서 원천 데이터가 어떻게 들어가는지 파악하기 어려웠습니 다. 다른 팀과 소통하기를 주저하는 동료들이 있었습니다. 먼저 적극적으로 다른 팀에게 연락을 하였고 빠르게 데이터 흐름을 파악하여 이전 귀속보다 2주 빨리 구현을 마칠 수 있었습니다.

● 홈택스 & 손택스 종합소득세 일반신고서 21귀속 오픈 개발

2022.01 - 2022.06

종합소득세 신고는 홈택스에서 제일 트래픽이 높고 사용자 수가 많은 프로그램입니다. 매년 데이 터 이슈, 에러 등 오픈 때 긴장을 놓칠 수 없어 신고 기간 동안 야근을 안 하는 날이 없었습니다. 그 얘기를 듣고 대비하기 위해, 작년과 변경되는 부분을 미리 체크하고, 동료들과 공유하여 불필 요한 일을 줄였습니다. 그러다 보니 개발할 수 있는 시간을 충분히 확보하여 테스트하고 검증할 수 있는 시간을 확보할 수 있었습니다.

기존에는 개인이 맡은 업무만 처리하는 문화였습니다. 팀은 이 문화를 개선하기 위해 올해 소통을 목표로 세웠습니다. 모르는 것이 생기면 옆에 과장님이 귀찮아 하실 때까지 물어보았고 서로 모르는 것이 생기면 “HELP ME!” 또는 “도움!” 또는 “잠깐만요!”를 외치는 분위기가 형성되었습 니다. 신고기간 저는 맡은 업무를 기간보다 일찍 개발을 완료하였으나 이번 시즌 메인 서비스 개 발을 맡은 동료를 도와 테스트에 검출된 버그들을 같이 분석하였습니다. 코드를 같이 분석해 빠 르게 버그의 원인을 찾아내어 고칠 수 있었습니다.

매번 긴장이었던 5월 신고가 1000만건이나 신고되는 동안 이렇게 조용한 적이 처음이라고 칭찬 받았습니다.


📚 읽은 책

2023

  • 면접을 위한 CS 저공지식 노트
  • 파이브 라인스 오브 코드
  • 리얼 마이에스큐엘 8.0 2권
  • 하루에 한 걸음씩 행복해지기
  • 한 권으로 읽는 컴퓨터 구조와 프로그래밍
  • 웹 개발자를 위한 대규모 서비스를 지탱하는 기술
  • 피플웨어
  • 관계형 데이터 베이스 실전 입문
  • 프로그래밍 심리학
  • 디자인 패턴의 아름다움
  • 알고리즘 (로버트 세지윅)
  • 업무 시각화
  • 자바 코딩의 기술
  • 모던 자바 인 액션
  • 엔터프라이즈 애플리케이션 아키텍처 패턴
  • 생각하는 늑대 타스케
  • 모든 삶은 흐른다

2022

  • 리얼 마이에스큐엘 8.0 1권
  • 코딩 인터뷰
  • 표현적 글쓰기
  • 쏙쏙 들어오는 함수형 코딩
  • 하루 3분 네트워크 교실
  • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
  • 오브젝트
  • 자바와 JUnit을 활용한 실용주의 단위 테스트
  • 비전공자를 위한 이해할 수 있는 IT 지식
  • 함께자라기
  • 실용주의 프로그래머
  • 프로그래머의 뇌
  • 이펙티브 자바 Effective Java 3/E
  • 데이터 중심 애플리케이션 설계
  • 개발자의 글쓰기
  • 그림으로 배우는 HTTP & Network
  • 그림으로 배우는 프로그래밍 구조
  • 자바 ORM 표준 JPA 프로그래밍

2021

  • 팀 개발을 위한 Git GitHub 시작하기
  • 객체지향의 사실과 오해 역할, 책임, 협력 관점에서 본 객체지향
  • 리팩터링 2판
  • 코어 자바스크립트
  • 자바스크립트 코딩의 기술
  • Do it! 자료구조와 함께 배우는 알고리즘 입문 자바 편
  • 이것이 취업을 위한 코딩 테스트다 with 파이썬
  • 최범균의 JSP 2.3 웹 프로그래밍 : 기초부터 중급까지
  • 이것이 자바다
  • 혼자 공부하는 자바
  • 모두의 딥러닝
  • Do it! 오라클로 배우는 데이터베이스 입문
  • Do it! HTML+CSS+자바스크립트 웹 표준의 정석
  • 모두의 SQL

✏️ 교육

📎 코드숨

스프링 4기

2021.11 ~ 2022.02

코드숨 스프링 4기 교육에 참여했습니다.

테스트 코드를 작성하는 법을 배웠고 TDD로 개발함으로써 코드의 의도를 파악하고 클린한 코드 를 작성하고 싶어졌습니다. 코드 리뷰를 통해 내가 보기엔 괜찮았던 코드들에 더 나은 해결책이 있다는 것을 알게되었고 동료들과의 협업이 얼마나 중요한지 알게되었습니다. 누군가에게 보여 줘야 한다고 생각하니 이전에는 완성에 의의를 두었다면 이제는 좀 더 나은 코드를 작성하고 싶 어졌습니다.

주간 회고와 T.I.L을 적으므로 그날 배운 것들을 정리하고 메타인지를 높여 다음에 내가 해야할 일을 계획세우게 되었습니다.

이전에는 모르는 것을 부끄럽다고 여겨 숨겻지만 나의 무지를 들어낼수록 더 빠른 속도로 더 나 은 방법을 얻을 수 있음을 알게되었습니다.

깃 강의

2022.04 ~ 2022.06

코드숨 깃 교육에 참여했습니다.

이전에는 단순히 깃 명령어만 외워서 사용했었는데 깃이 어떻게 동작하는지 이해하게 되었습니다. Git을 사용하면서 다양한 문제를 만났을 때 단순히 구글링으로 해결하는 것이 아니라, Git의 원리를 생각하면서 문제에 접근하여 해결하게 되었습니다.

스터디

2022.03 ~

좋은 프로그래밍 책을 두 달에 한 권, 즉 일주일에 대략 35페이지 정도만 읽어도 당신은 이내 이 분야에 >대해서 확실한 감을 갖게 될 것이며 주변의 거의 모든 이들과 구별되는 수준으로 올라설 것이다.
-스티브 멕코넬 -

한달에 한 권은 꾸준하게 좋은 책들을 추천받아 읽고 스터디를 하고 있습니다. 문제를 만들고 질문하고 답하기, 액션 플랜을 세워 실천하고 에세이 쓰기 등 다양한 방법들을 시도하며 책을 읽는 것에서 그치지않고 배운 것을 적용할 수 있는 부분들을 찾아 시도하고 회고하고 있습니다.

스터디를 통해 배웠던 질문하고 답하기를 업무에 적용하였습니다. 동료가 모르는 것을 물어봤을 때 그냥 알려주는 것이 아니라 질문과 답변을 통해 스스로 답을 도출할 수 있도록 도움을 주었습 니다. 동료분이 그냥 알려주셨다면 또 까먹었을텐데 덕분에 확실히 알게되었다고 감사하다고 말 씀해주셨습니다. 앞으로도 어떤 오류 상황을 해결할 때 논리적으로 단계적으로 해결해야겠다는 생각이 들었고 동료에게 계속해서 좋은 영향을 주어야겠다고 생각이 들었습니다.

  • 프로그래머의 뇌, 실용주의 프로그래머, 데이터 중심 애플리케이션 설계, 쏙쏙 들어오는 함수형 코딩 등

📎 넥스트아이티: 머신러닝 활용 JAVA 웹 응용 SW 엔지니어

2021.02 ~ 2021.08
  • 근로자를 위한 법률 상담 사이트 : 2021.06 - 2021. 07

근로자를 위한 법률 상담 사이트 프로젝트에 팀장을 맡아 서버, DB, 프론트에 전반적인 구축과 설계를 담당했습니다.

기술 스택과, 프로젝트 초기 설계를 맡아 팀원들과 상의하며 의사결정을 했습니다. 팀원들의 역 량에 맞게 기능들을 분배하여 일정을 진행하였고 가장 필요한 기능들부터 선정하여 빠르게 구현 하여 1주일만에 기본 서비스를 구축하였습니다. 후에 팀원들의 진행 속도에 따라 동료들이 해보 고 싶었던 서비스들을 프로젝트 목적에 맞게 설계하여 댓글, 답글, 좋아요, 실시간 다중 채팅, 프 로필 사진 등의 기능들을 추가로 구현했습니다.

  • 3D로 미리보는 주문 제작 케이크 사이트 : 2021.05 - 2021.05

개인 프로젝트로 일주일 간 3D로 케이크 주문 도안을 미리 볼 수 있는 웹사이트를 만들었습니다.

Three.js 를 사용하여 내가 주문하고 싶은 케이크 도안을 첨부하면 3D모형에 도안이 매핑되 는 서비스를 만들었습니다. 또 canvas를 사용하여 사용자가 그림판 공간에 그림을 그리면 해당 그림이 3D 모형에 실시간으로 그려지는 서비스를 만들었습니다.

또, 추가적으로 날씨 API를 사용하여 현재 위치 실시간 날씨에 따라 사용자에게 메뉴를 추천해주 는 기능을 개발하였습니다.


Skill

  • Java Javascript Python
  • Spring Framework

Github : https://github.com/kyuwon53
Web : https://kyuwon53.github.io/
LinkedIn: 이규원

results matching ""

    No results matching ""