채용공고 올리기

이보미님을 응원해보세요!

가벼운 티타임 좋아요
책임감
학습 지향
자기 주도적
리더십

미리보기

기본 정보

이름
이보미
직업
백엔드 개발자
간단 소개

Github: https://github.com/BomLee427 Blog: https://bomlee427.github.io/ 늘 최선을 바라보며 멈추지 않고 노력하는 개발자가 되고 싶습니다. 적극적이고 능동적인 태도로 어떤 업무가 주어져도 끝까지 소화해 내겠습니다.

경력

회사명

(주)피에이치씨

직급 | 부서 | 근무 유형

백엔드 개발자 | 서버팀

근무 기간

2021.08. ~ 2022.04. (9개월)

담당 업무

헬스케어 서비스 서버 개발 및 유지보수

  • 사용 기술: PHP, Codeigniter4, MySQL

Healer Chart 서비스 개발

  • 주치의가 환자의 건강기록을 열람하고 환자를 관리할 수 있는 대시보드 서비스
  • MySQL의 VIEW를 구현하여 다량의 데이터 조회 성능을 최적화
  • Jitsi API 연동으로 주치의-환자 간 영상통화 기능 구현

레거시 코드 리팩토링

  • Controller 계층에 모든 비즈니스 로직이 구현되어 있었던 레거시 코드를 계층별로 리팩토링
  • 단위 테스트 코드 작성

문서화 작업

  • 당시 프로젝트는 기능 우선으로 개발되어 API 문서가 없었음
  • 문서화 도구 라이브러리인 ReDoc을 사용하여 Open API 규격의 API 문서 작성

기술 스택

기술 스택

Java, Kotlin, Spring Boot, JPA, querydsl, MySQL, JWT, Git, GitHub, Docker, github-actions, AWS, Google Cloud Platform, Linux, JavaScript

프로젝트

프로젝트명

HomeDoc

소속/기관명

개인

프로젝트 기간

2022.10. ~ 2023.03.

프로젝트 내용

Github - https://github.com/BomLee427/homedoc

주요 기능

헬스케어 앱을 클라이언트로 상정한 백엔드 서버
건강정보(혈당, 혈압) CRUD 및 통계, 병원 연결 기능

사용 기술

Java 11, Spring Boot 2.7
Spring Data JPA, Querydsl
Spring Security, JWT

프로젝트 주요 경험

  • 생산성 향상을 위한 ORM 적극 활용
    • Spring Data Jpa가 제공하는 기본 메소드와 편의성을 최대한 활용하는 방향으로 코딩
  • Spring Security와 jjwt 라이브러리를 사용해 JWT 방식의 인증/인가 구현
  • REST 원칙과 HTTP 규격 준수
    • 상황에 적합한 HTTP Status Code 사용
    • 에러 핸들링을 위한 Exception Handler를 구현하고, 에러 코드와 메시지를 Enum 클래스로 관리하여 응답 형태의 일관성 유지

코드리뷰 및 회고

HomeDoc 회고록: https://bomlee427.github.io/categories/#homedoc-개발-회고록
개발 당시 개발일지를 쓰지 못한 것이 아쉬워, 어느 정도 원하는 기능을 구현한 이후부터는 코드 리뷰 및 리팩토링 내용을 담은 회고록을 작성 중입니다.
첫 설계 단계에서 현재의 코드가 되기까지, 어떤 기술적 고민을 거쳤고 어떤 근거로 선택했는지를 되짚어보는 데에 초점을 두고 있습니다.

프로젝트명

묘한만남

소속/기관명

기타

프로젝트 기간

2023.06. ~ 2023.09.

프로젝트 내용

GitHub - https://github.com/MyohanMeeting/MeMyo-Backend

주요 기능

  • 유기묘 입양 홍보 플랫폼
  • 분양 공고 등록, 검색, 입양 신청, 간단한 커뮤니티 기능

사용 기술

Java 17, Spring Boot 3
Spring Data JPA, Querydsl, MySQL
Spring Security, JWT, Redis
Google Cloud Platform, Docker, GitHub Actions, Springdoc

프로젝트 주요 경험

  • HTTP PATCH 메서드 구현
    • Jackson Object Mapper의 기본 설정에서는 요청에 아예 포함되지 않은 필드도 null로 역직렬화되기 때문에, 값으로 null이 전달된 것인지 전달이 애초에 되지 않았는지 식별할 수 없는 이슈 발생
    • jackson-databind-nullable 라이브러리를 사용하여 JsonNullable Wrapper 클래스로 DTO를 감싸 HTTP PATCH 메서드를 구현
  • 인증/인가/보안
    • Spring Security 커스텀 인증 구현
      • SNS 회원은 ID/PW가 아닌 각 OAuth Provider의 서비스명/식별자를 조합하여 인증
      • Spring Security의 UserDetailsService를 상속하여 CustomUserDetailsService 클래스를 구현하고, 서비스 로직에 맞는 Authentication 구현체를 직접 작성함
    • Redis로 토큰 블랙리스트 관리
      • 토큰 탈취 등의 보안 취약점에 대비하기 위해 Redis를 통해 토큰 블랙리스트를 관리
      • 토큰 블랙리스트는 매 요청 조회되어야 하므로 잦은 조회에 유리한 Memory DB인 Redis 선택
    • CORS, XSS 필터 적용
  • API 문서 자동화
    • Springdoc 라이브러리를 사용해 API 문서 자동 생성
  • CI/CD 자동화
    • GCP 환경에서 Docker, GitHub Actions를 사용하여 CI/CD 파이프라인 구현
프로젝트명

Project I (AXYZ)

소속/기관명

기타

프로젝트 기간

2023.12. ~ 진행 중

프로젝트 내용

GitHub - https://github.com/Compono-Team/I-backend
랜딩 페이지 - https://www.axyz.today/

<Project I (AXYZ)>는 사이드 프로젝트로 참여 중인 일정관리 서비스입니다.
이전까지의 프로젝트는 기능 구현에만 집중했기에, 실제로 트래픽이 발생하는 서비스를 운영해보고 싶어서 완성 후 배포 계획까지 있는 팀에 참여하게 되었습니다.
저는 AWS를 활용한 초기 인프라 구축 및 일정 도메인 개발을 주로 담당하고 있습니다.

사용 기술

Java 17, Spring Boot 3
Spring Data JPA, Querydsl, MySQL
Spring Batch, Redis, Spring Security, JWT
AWS, Docker, Docker Compose, GitHub Actions, Spring Rest Docs

프로젝트 주요 경험

  • 개발서버 CI/CD 자동화
    • AWS 환경에서 Github Actions, AWS CodeDeploy를 이용하여 개발 서버의 CI/CD 파이프라인 구축
  • 클라우드 환경 구축
  • 기능 개발
    • 캘린더 도메인 개발
    • 외부 API 연동(사진 및 음성인식 등)
프로젝트명

makBase

소속/기관명

개인

프로젝트 기간

2023.07. ~ 2023.07.

프로젝트 내용

GitHub - https://github.com/BomLee427/makBase

주요 기능

  • 막걸리 정보 데이터베이스 서비스
  • 막걸리, 양조장, 제조사, 쌀 품종 등의 데이터를 다양한 조건으로 검색

사용 기술

Kotlin, Spring Boot 3
Spring Data JPA, Querydsl, Ehcache

프로젝트 주요 경험

  • 코틀린답게 코딩하기 위한 노력
    • Null Safety를 위한 문법(?, ?., ?:) 적극 활용
    • Named Argument를 활용해 빌더 패턴을 대체
    • Factory Method는 Companion Object를 활용해 구현
    • DTO에 data class 활용
  • JPA 2차 캐싱으로 무한 N+1 문제 해결
    • 지역(Region)은 하나 또는 0개의 상위 지역과, 최소 0개 이상의 하위 지역을 가지는 순환 참조 형태
      • 최대 depth가 정해져 있지 않은 트리 구조로, 하위 지역을 조회할 때 JPA의 N+1 문제를 피할 수 없는 이슈 발생
    • 이를 해결하기 위해 애플리케이션 로딩 시점에 테이블 전체를 2차 캐싱하여 DB가 아닌 메모리 내에서 조회하기로 함
      • ‘지역’은 데이터의 크기가 작고, 변경이 드물며, 조회가 빈번한 테이블이므로 캐싱이 적절하다고 판단
      • 애플리케이션 로딩 시점에만 캐싱하면 되므로 로컬 캐시 라이브러리인 Ehcache 선택
  • 복잡한 연관관계의 쿼리 최적화
    • N:N 관계를 조회하기 위해 다중 fetch join을 하면 MultipleBagFetchException이 터지는 이슈 발생
    • 하이버네이트의 default_batch_fetch_size 옵션을 설정해 1:N 관계를 where in 절로 묶고, N+1 관계만 fetch join하는 방식으로 문제를 해결함

교육

소속/기관명

성균관대학교

종류 | 전공

대학교(학사) | 미술학과

재학 기간 | 재학 상태

2010.03. ~ 2020.02. | 졸업

자격증

자격증명

정보처리기사 필기

점수 | 발급기관

취득 | 한국산업인력공단

취득연월

2024.03.

자격증명

TOEIC

점수 | 발급기관

830 | ETS

취득연월

2020.02.

외국어

외국어명

영어

점수

일상 회화 가능

외국어명

일본어

점수

비즈니스 회화 가능

자기소개

자기소개

미대생에서 백엔드 개발자로

제가 웹 개발을 하기로 결심한 것은 2018년 미대 졸업작품을 통해서였습니다. 가상 공간에서의 자아라는 주제를 표현하고자 웹사이트라는 매체를 택하였고, 관람자가 다양한 상호작용을 경험할 수 있는 작품을 만드는 과정에서 웹 개발 자체에 더욱 흥미를 느꼈습니다.
그 후 졸업작품을 계기로 주변 지인들의 의뢰를 받아 다양한 홈페이지를 만들었습니다. 마침 졸업 후 진로를 고민하고 있던 저는 이것을 직업으로 삼고 싶다는 더욱 강한 확신을 갖게 되었습니다.
그 후 첫 회사에 입사하여 프론트엔드와 백엔드 직무를 둘 다 접해보았고, 이 때 제가 좀 더 흥미를 느낀 분야는 프론트엔드가 아닌 백엔드 개발이었습니다. 기획자의 비즈니스 요구사항을 효율적으로 구현하고, 그 기능이 안정적으로 작동할 수 있는 견고한 서버 프로그램을 구축하는 것이 보다 재미있고 적성에 맞았기 때문입니다. 이를 계기로 저는 본격적으로 백엔드 개발자의 길을 걷기로 결심하였습니다.

스스로 찾아내는 학습자

저는 자기주도적 학습에 익숙합니다. 교사셨던 할머니의 가르침 아래, 정답 자체보다는 그것을 스스로 탐구하는 과정이 중요하다는 태도를 갖게 되었습니다. 큰 목표를 적절한 크기의 작은 목표로 쪼개고, 그에 맞는 적합한 로드맵을 수립하여 이행하는 능력이 저의 자기주도 학습의 비결입니다.
예를 들어 Java를 처음 공부할 때, 저의 최종 목표는 “이전에 사용하던 언어(PHP)로 개발하던 것과 똑같은 기능을 Java 및 Spring Framework로 개발할 수 있어야 한다” 였습니다. 그 목표를 달성하기 위해 필요한 마일스톤은 1) Java에 익숙해지기 2) 프레임워크에 익숙해지기 3) 실제로 개발해 보기의 세 단계로 정하였습니다.
Java에 익숙해지기 위해 가장 먼저 <Java의 정석> 등의 기본서를 통해 Java와 객체지향 프로그래밍의 이론적 기초를 탄탄히 다졌고, 프레임워크에 익숙해지기 위해 인터넷 강의 등으로 실무에서 많이 사용되는 Spring Boot와 JPA 등의 기술을 학습했습니다.
그 후 실습을 위해 이전 직장에서 개발했던 프로젝트를 Java로 클론코딩하거나(HomeDoc) 외부 팀 프로젝트에 참여하며 경험을 쌓아나갔습니다(묘한만남/Project I). 이 때 가장 중요하게 생각한 것이 바로 ‘끝나지 않는 개발’이었습니다.
새로운 프로젝트를 시작할 때는 앞선 프로젝트에서 미흡했던 부분이나 미처 개발하지 못한 기능을 반드시 새 프로젝트에 추가하는 것에 초점을 두었습니다. 이미 마무리한 프로젝트 역시 덮어두고 잊어버리는 것이 아니라 회고와 리팩토링을 진행하며 계속해서 발전시키고자 했습니다.
이렇게 학습의 목표를 스스로 설정하고 그것을 실천해 나가는 과정에서, 학습하고자 했던 내용은 물론 예상치 못한 문제를 마주쳤을 때 해결책을 찾는 능력, 그리고 학습한 것을 응용하는 능력까지도 자연스럽게 기를 수 있었습니다.

브레이크 없는 추진력

저는 무엇이건 한 번 시작하면 적당히 끝내지 않고 ‘끝장을 보는’ 성격으로, 일단 마음먹은 일은 강하게 몰입하고 추진하는 힘을 갖고 있습니다.
한 번은 제가 좋아하는 게임의 속편이 한국에 발매되지 않은 적이 있었는데, 어떻게든 게임을 꼭 해보고 싶은 마음에 일본어를 공부하여 단기간에 게임을 끝까지 플레이할 만큼의 실력을 쌓은 적이 있었습니다. 거기서 그치지 않고 그 때 습득한 일본어를 이용해 한일 양국 합동 팬 이벤트를 직접 개최하는 등, 저는 제가 관심을 갖고 애정을 쏟는 일이라면 넘치는 추진력을 발휘하곤 합니다.
이처럼 즐기고 몰입하는 과정에서 자연스럽게 실력이 오르고 그 과정 자체에 다시 재미를 느끼는 선순환의 과정이 제가 가진 추진력입니다.
개발자가 되기로 결심한 것 역시 이러한 열정과 몰입의 산물입니다. 타의나 외부의 영향이 아니라 온전히 스스로 흥미를 느껴 자발적으로 선택한 길이기 때문입니다. 제가 애정을 쏟은 일에 포기하거나 성과를 내지 못한 것은 단 한 번도 없었기에, 저는 개발자로서의 제 성장에 강한 확신을 갖고 있습니다.
이처럼 무한에 가까운 열정과 추진력으로 늘 최선을 바라보며 멈추지 않는 개발자가 되고 싶습니다.

댓글