안성윤 프로필 사진
Introduction

"동료들과 함께 토론으로 성장하고, 본질로 수렴하는 엔지니어"

기획 단계부터 배포, 운영까지 프로덕트의 전체 생명주기를 경험하며 '왜?'라는 질문이 더 안정적인 백엔드를 만든다는 것을 배웠습니다.

동료들과의 자유로운 토론속에서 끊임없이 문제의 본질에 대해 되묻고 '정답에 가까운 해법'을 만들어 나가는 방법에 관심이 많으며 궁극적으로 사용자에게 안정적인 환경 속에서 유의미한 가치를 전달하는 백엔드 개발자가 되고자 합니다.

Career

젠스타파트너스

2026/03 ~ 현재

백엔드 엔지니어

국내 최대 규모 상업용 부동산 기업 (주)젠스타메이트의 IT 솔루션 전문 자회사로, 사내 다양한 부서의 업무 전반에 활용되는 백오피스 서비스를 개발 및 운영합니다.

리서치 백오피스 시스템 2026/03 ~ 현재 #전담 개발
프로젝트 소개 온프레미스 레거시(Windows 네이티브 앱 + Oracle 10g)를 클라우드 웹 서비스로 마이그레이션한 사내 백오피스 시스템 역할 백엔드 설계 및 구현 담당 사용 기술 TypeScriptNestJSMikroORMPostgreSQLZodExcelJSS3ECS
  • 도메인 정책 레이어로 비즈니스 규칙 산포 방지

    문제 역할,시점,필드별 수정 권한이 달라 조건 분기가 UseCase 전반에 산포될 위험.

    • Policy 클래스(Vacancy/Building/Snapshot) 로 규칙을 모아 단일 파일 수정으로 변경 범위 한정
    • PolicyCtx 타입을 진입 시 1회 구성해 재사용함으로써 반복 DB 조회 제거
    • 인프라 의존 없는 순수 함수라 DI 없이 단위 테스트 가능
  • 스트리밍 기반 대용량 엑셀 Export로 메모리 리스크 차단

    문제 수천 건을 전체 적재 방식으로 Export하면 동시 요청 시 메모리 급증 위험.

    • ExcelJS 스트리밍 Writer로 임시 파일에 즉시 기록 후 HTTP 스트림 응답
    • 처리 루프에 setImmediate 삽입을 통한 이벤트 루프 블로킹 방지
    • 완료/오류/연결 끊김 모두에서 임시 파일 정리로 안전한 생명주기 관리
  • 레거시 데이터 정제와 스키마 재설계로 DB 용량 및 조회 성능 동시 개선

    문제 신규 서비스에 불필요한 레거시 데이터와 비효율적 스키마(낮은 정규화 수준, 과도한 인덱스, Hot/Cold 데이터 미분리)가 누적되어 DB 용량과 조회 성능이 모두 저하된 상태.

    • 신규 서비스 요구사항을 기준으로 불필요한 레거시 데이터를 폐기하고 필요한 데이터만 정제 및 이관, 정규화 수준을 높여 데이터 일관성 확보
    • 실제 조회 패턴을 분석해 불필요한 인덱스를 최소화함으로써 쓰기 비용과 저장 공간 절감
    • 시계열 데이터를 Hot/Cold 파티션으로 분리해 자주 조회되는 최신 데이터 접근 효율을 높이고 과거 데이터는 별도 관리
    • 레거시 대비 DB 용량 65% 이상 절감, 주요 조회 쿼리 평균 응답속도 약 70% 이상 개선 달성
  • 시스템 컨텍스트 기반의 의도적 동시성 제어 선택

    문제 마감 중 동시 변경 시 불일치 가능하나, 행 단위 락은 관리 복잡도가 큼.

    • 사용 패턴(동시 수십 명)을 근거로 단일 Revision 행으로 변경 신호를 관리하도록 의도적 선택
    • raw(version + 1) 아토믹 증분으로 다중 인스턴스에서도 충돌 감지
    • 선택의 한계(고트래픽 락 경합)를 명시하고 확장 경로까지 검토 후 채택
  • 재실행 안전성부터 사후 정합성 검증까지 이관 전 과정의 신뢰성을 직접 책임

    문제 일회성 작업이 아닌 회사 핵심 자산(운영 데이터) 이관이었기 때문에, 중간 실패 시 재실행해도 데이터가 중복 및 유실되지 않아야 했고, 이관이 끝난 뒤에도 '정말 빠짐없이, 정확하게 옮겨졌는가'를 스스로 증명할 수 있어야 했음.

    • 테이블 이름과 구조가 비슷해도 그 데이터가 '현재 상태(언제든 새로고침 가능)' / '변경 이력(과거분 보존 필수)' / '특정 시점 스냅샷' 중 무엇을 표현하는지에 따라 삭제 범위와 트랜잭션 경계를 다르게 설계 — 일괄 적용이 아닌 데이터 의미 기반의 차별화된 멱등 전략으로 몇 번을 재실행해도 동일한 결과를 보장
    • 이관 중 만난 이상 데이터를 '변환 자체가 불가능해 건너뛴 것'과 '변환은 됐지만 값이 비정상적이라 후속 검토가 필요한 것'으로 분리 추적해, 실행 성공 여부와 데이터 품질 이슈를 별개 축으로 관리
    • 이관 완료를 '스크립트가 에러 없이 끝났다'가 아니라 '레거시 데이터와 결과가 일치한다'로 정의하고, 별도의 정합성 검증 과정을 통해 테이블별 건수 비교, 동일 기준 정렬 후 행 단위 비교(diff)를 수행 — 코드 리뷰나 로그만으로는 드러나지 않는 누락 및 중복을 직접 잡아내는 이관 검증 체계 구축
Projects
플랫폼 통합 개발 블로그 허브 2024/10 ~ 2025/08 #네이버 부스트캠프 팀 프로젝트
프로젝트 소개 RSS 기반 개발 기술 블로그 큐레이션 플랫폼. 누구나 자신의 RSS를 등록하고 여러개의 최신 피드 확인 가능. 역할 팀장(스크럼 마스터), 백엔드 엔지니어, 데브옵스 엔지니어 사용 기술 TypescriptNestJSTypeORMRedisMySQLDockerNaverCloudPlatformTerraform Github https://github.com/boostcampwm-2024/web05-Denamu 배포 주소 https://denamu.dev/
  • RSS 기반 자동 피드 데이터 수집을 위한 크롤링 스케줄러 구현

    문제 주기적으로 등록된 사용자 블로그 피드를 크롤링해 데이터로 변환해야 하는 요구사항 존재.

    • 배치 스케줄링을 별도 마이크로서비스로 분리해 API 서버와 관심사 및 책임 분리
    • 수집(fetch)→파싱(XML→DTO)→필터링(시간 기반)→저장(DB/Redis) 파이프라인으로 단계 분리해 독립적인 테스트 및 디버깅이 가능한 구조로 개선
    • DI Container(TSyringe) 적용으로 모듈 간 결합도를 낮추고 테스트 편의성 향상
    • 템플릿 메서드 패턴 적용으로 새로운 XML 스펙(RSS 2.0, Atom 1.0 등) 등장 시에도 파서 클래스 추가만으로 손쉽게 대응 가능하도록 개선
  • 모니터링 및 관리 체계 구축

    문제 외부 데이터 크롤링 및 파싱 특성상 예상치 못한 형태의 데이터가 유입될 수 있어 지속적인 모니터링과 빠른 대응 체계 필요.

    • 로그를 레벨별/일별로 분리해 Loki + Promtail로 수집하고 Grafana Dashboard로 검색 및 시각화하는 환경 설계
    • NestJS Interceptor 기반 Prometheus 커스텀 메트릭(응답시간 히스토그램, 성공/실패율 등) 수집 체계 구축
    • Critical 레벨 예외 발생 시 팀 메신저 웹훅 Alert 자동화로 장애 인지 및 대응 사이클 단축
  • CI/CD 파이프라인 및 테스트 환경 셋업 자동화

    문제 한정된 서버 자원 안에서 안정적인 배포 환경과 팀 개발 생산성 향상을 동시에 확보해야 하는 과제.

    • Github Actions 기반 CI/CD 파이프라인 구축과 LeftHook + commitlint로 커밋 컨벤션 강제
    • Self-Hosted Runner + 컨테이너 레지스트리로 빌드 및 실행 환경을 분리해 배포 시 서버 부하 최소화
    • TestContainers 기반 통합테스트 환경을 자동 셋업해 테스트용 MySQL/Redis 컨테이너 자동 생성
  • 유지보수 및 변경에 유연한 테스트 코드 관리

    문제 운영 중 비즈니스 로직 구조개선을 진행할 때마다 기존 테스트 코드까지 함께 변경해야 하는 문제 발생.

    • 공개 인터페이스 및 비즈니스 로직 중심 테스트로 내부 구현 변경에 영향받지 않는 구조를 만들어 유지보수 복잡도 감소
    • 복잡한 내부 private 메서드리플렉션으로 제한적이지만 엄격한 검증 수행
    • Fixture 패턴으로 재사용 가능한 테스트 데이터를 관리해 테스트 코드 유지보수성 향상
  • 확장 가능한 OAuth 2.0 기반 소셜 로그인 아키텍처 구축

    문제 다양한 소셜 로그인 플랫폼의 상이한 인증 프로토콜을 통합 관리해야 하는 복잡성 존재.

    • OAuthProvider 인터페이스 설계로 인증 흐름(인가 URL 생성, 토큰 교환, 사용자 정보 조회) 표준화
    • NestJS 커스텀 Provider로 런타임에 적절한 OAuth Provider 인스턴스를 동적으로 주입하도록 설계
    • 플랫폼별 응답 구조를 통일된 타입으로 정규화해 표준화된 토큰 및 사용자 정보 처리 파이프라인 구축
지출 내역 관리 SNS 플랫폼 2024/03 ~ 2024/10 #교내 졸업 프로젝트
프로젝트 소개 소비 습관 개선을 위한 소비 지출 내역 기록, 관리, 커뮤니케이션 플랫폼 역할 백엔드 엔지니어 사용 기술 JavaSpringBootJPAMySQLRedisAWSDocker Github https://github.com/CollaBu/pennyway-was
  • 능동적 코드리뷰와 구조 도식화 전략으로 빠른 팀 합류

    문제 개발이 상당 부분 진행된 프로젝트에 투입되어, 팀이 사용 중인 프레임워크와 아키텍처는 물론 협업 방식(애자일 스크럼, Jira + Confluence)까지 빠르게 파악해 한 명의 엔지니어로 합류해야 하는 상황.

    • 코드리뷰 적극 참여와 비즈니스 로직 도식화를 스스로의 합류 전략으로 삼아 짧은 기간 안에 프로젝트 구조와 맥락 파악
    • 기존 디렉토리 구조, 의존성, 컨벤션을 숙지해 첫 기여부터 팀 컨벤션에 맞는 일관된 방식으로 기능 구현
    • 애자일 스크럼 방법론Jira + Confluence 기반 협업 프로세스(스프린트 계획, Smart Commit/Issue Linking 연동 등)를 빠르게 습득해 팀의 기존 워크플로우에 자연스럽게 합류
  • 비동기 처리를 활용한 응답속도 개선

    문제 문의하기 API에 메일 발송 로직이 동기적으로 엮여있어 응답 속도가 현저히 느려지는 현상 발생.

    • @TransactionalEventListener 기반 이벤트 발행 방식으로 이메일 발송 로직을 분리해 추후 수평 확장에 유리한 구조 확보
    • 이벤트 핸들러만으로는 메일 발송 로직이 별도 스레드에서 실행되지 않고 블로킹됨을 확인
    • @Async 어노테이션 기반 비동기 처리로 API 응답속도 약 80% 개선
  • 소비 내역 복수 조회 시 발생하는 N+1 문제 개선

    문제 소비 내역을 복수 조회할 때마다 JPA가 연관 엔티티인 카테고리를 매번 추가 조회하는 N+1 현상 확인.

    • QueryDSL fetchJoin 적용으로 쿼리 횟수 개선
    • Hibernate 실행 쿼리 횟수 검증 테스트 작성으로 N+1 문제 재발 방지 보장
Opensource Contribution

TypeORM

Typescript / Javascript 기반 ORM 라이브러리

  • fix: Migration시 collation 변경을 감지하지 못하는 문제 수정 Merged

    배경 로컬-프로덕션 환경 간 컬럼 Collation 차이로 비교 연산 오류가 발생해 Migration으로 고치려 했으나, TypeORM Migration이 Collation 변경을 감지하지 못함을 확인

    • Migration의 Collation 변경 미감지 문제가 이미 오래전 보고된 이슈임을 확인
    • Collation을 detection 범위에 추가하고 검증 테스트 작성
  • upsert 시 부분 업데이트를 제어하는 updateOnly 옵션 추가 Reviewing

    배경 TypeORM EntityManager가 upsert 충돌 처리 시 업데이트 대상을 세밀하게 제한하는 옵션을 제공하지 않음

    • UpsertOptions에 updateOnly 옵션을 추가해 업데이트 허용 컬럼을 화이트리스트로 지정하도록 설계 및 구현
    • Postgres 등 드라이버별 엣지 케이스 보정과 검증 테스트까지 포함해 PR 작성

NestJS

Node.js 기반 서버사이드 프레임워크

  • fix: 종료 라이프사이클 훅에서 일부 Provider 실패 시 나머지 정리 로직이 스킵되는 문제 수정 Reviewing

    배경 종료(shutdown) 시 라이프사이클 훅 중 하나라도 reject되면 Promise.all이 즉시 실패해, 나머지 Provider와 이후 모듈의 정리 로직이 조용히 스킵되는 문제 발견

    • 세 종료 훅의 Promise.all을 Promise.allSettled로 교체해 일부 실패와 무관하게 나머지 정리가 계속 진행되도록 수정하고, 실패한 훅은 Logger.error로 로깅
    • fail-fast가 의도된 시작 훅(onModuleInit 등)은 변경 범위에서 제외해 기존 동작 유지
Activities

삼성 청년 SW·AI 아카데미 (비영리 교육과정)

삼성 청년 SW·AI 아카데미 [2026/01 ~ 진행중]

Java 전공반 연수생

  • Java 기반 객체지향 교육 및 알고리즘 과정 진행

네이버 커넥트 재단 (비영리 교육과정)

부스트캠프 웹 모바일 9기 [2024/06 ~ 2024/12]

웹 풀스택 과정 연수생

  • Javascript 기반 문제 해결 역량 향상 및 CS 지식 학습 (HTTP, Socket, Async, EventHandler, FunctionalProgramming ...)
  • 다양한 동료들과 코드리뷰, 피어 세션, 페어프로그래밍 등을 통한 협업 및 커뮤니케이션 역량 강화
  • 백엔드 개발자에게 필요한 DB 구조 및 활용 능력 학습 (인덱스 설계, 실행 계획 분석, InnoDB 동작 원리 등...)
  • 개발자를 위한 블로그 허브 Denamu 프로젝트 팀장 및 백엔드 개발

멋쟁이 사자처럼 대학 (연합 동아리)

영남대학교 11기 ~ 12기 [2023/02 ~ 2024/12]

11기 : 백엔드 트랙 부원 / 12기 : 백엔드 트랙 운영진

  • [11기] Python django 기반 백엔드 개발 교육 이수
  • [11기] 청각 장애인을 위한 자막 공개 입찰 서비스 HSB 백엔드 개발 및 해커톤 참여
  • [12기] 백엔드 세션 Java / Spring Boot 기반 백엔드(Web, DB, JPA, 배포 자동화) 강의 자료 제작 및 오프라인 강의 진행
  • [12기] 멘티 프로젝트 진행간 멘토링 수행
  • [12기] 동아리 운영을 위한 여러가지 의사결정 진행
  • [12기] 최종 해커톤에 멘토로 참여하여 개발간 발생하는 여러가지 상황들 멘토링 수행

영남대학교 - 에스엘 주식회사 (산학협력 활동)

RPA 실무 교육 및 현업 과제 [2023/12 ~ 2024/02]

정보보안팀 / 과제 수행인

  • 에스엘 주식회사와 영남대학교 협력 프로젝트인 RPA 프로젝트에 참여
  • Microsoft PowerAutomate, Web Automation, Python, Javascript, VBScript 활용 사내 재무팀의 문서 작업 자동화 솔루션 과제를 담당하여 요구사항 이해, 설계, 제작, 운영 및 유지보수 수행
  • 사내 SAP, 고객사 ERP 솔루션 기반 조회 재무 데이터 다운로드 자동화 및 엑셀 문서 생성 자동화
  • 작성된 작업 문서 자동 메일 전송 프로세스 및 예외 시스템 오류 감지 알림 파이프라인 설계
  • 프로젝트 수행 결과, 기관 평가에서 최고 등급 달성 및 최우수 포상금 수여
Award & Certificate & Education

Award

대구광역시 공공데이터 활용 경진대회

2023년 / 아이디어 부문 - 최우수상

  • 공공데이터(선거 공약 데이터)를 활용하여 선거 공약을 그림으로 보여주는 AI 서비스 기획 및 프로토타입 출품
  • 공공데이터를 fetch하고, 데이터 기반 AI 이미지 생성 API 호출하여 결과값을 분류하여 저장하는 배치 프로세스 설계
  • 대구광역시 최우수상 수상 및 전국 대회 출전

Certificate

TOEIC Speaking

영어 회화 능력 시험 / Advanced Low (160)

정보처리기사

2025년 정기 기사 3회

Education

영남대학교 (졸업 / 23-03 ~ 26-02)

컴퓨터 공학과 / 학사 / 전공 평균 3.7 / 4.5

대구대학교 (중퇴 / 19-03 ~ 23-02)

컴퓨터 소프트웨어 학과 / 학사 / 전공 평균 4.3 / 4.5