채용공고 올리기

백종인님을 응원해보세요!

이직/구직 중이에요
혁신적
성실함
분석적
목표 지향적
전략적

미리보기

기본 정보

이름
백종인
직업
백엔드 개발자
간단 소개

개발에 정답은 없다고 생각합니다. 항상 더 나은 해결 방안을 찾고 다양한 도전 과제들에 유연하게 대처할 수 있는 개발자가 되겠습니다.

자기소개

자기소개

공식 문서를 적극 활용하고, 오픈소스 코드를 분석하며 성장합니다.

초기에는 강의 시청이 빠른 학습에 도움이 되었지만, 시간이 지나면서 새로운 라이브러리와 고급 기능을 학습해야 할 일이 많아졌습니다. 강의에서는 반복되는 내용이 많아 문서나 코드를 직접 분석하는 것이 더 효율적임을 느끼게 되었고, 공식 문서와 소스를 참조하는 빈도가 점차 늘었습니다. 예를 들어, CircuitBreaker 기능을 설정할 때 slidingWindowTypeTIME_BASED로 설정하면 slidingWindowSize 단위가 초인지 밀리초인지 불확실해서 소스 코드를 직접 분석한 결과, 초 단위로 입력된다는 사실을 확인할 수 있었습니다. 이처럼, 문제 상황에 맞는 정보를 찾아가며 깊이 있는 학습을 지향하고 있습니다.

스터디와 토론을 통해 사고를 확장합니다.

정기적으로 참여하는 스터디에서 다양한 주제를 토론하며 시야를 넓히고 있습니다. 최근에는 객체지향 설계에서 순환 참조에 대해 논의했는데, 저는 서비스 위에 레이어를 하나 더 두어 순환 참조를 피하는 방식을 사용해 왔습니다. 그러나 책에서 소개한 예시를 통해, JPA의 다대일 양방향 연관 관계 역시 순환 참조를 일으킬 수 있다는 점을 깨닫게 되었습니다. 이로 인해 1:N 관계에서 어느 쪽이 연관 관계를 가져야 하는지에 대해 팀원들과 의견을 나누었고, 이를 통해 알고 있던 지식을 재점검하고 더 나은 설계 방식을 모색할 수 있었습니다. 이렇게 다양한 스터디와 토론을 통해 사고를 확장해 나가고 있습니다.

두려움 없이 질문하며 배움을 쌓습니다.

Post-Comment 1:N 관계에서 PostCommentCount가 반정규화되면서 동시성 문제가 발생했는데, 비관락을 적용해도 CommentCount가 1로 고정되는 상황이었습니다. 커뮤니티에 질문을 남긴 후, 문제의 원인을 파악하는 데 도움을 받았습니다. 첫 번째 문제는 Converter가 동작하며 자동으로 첫 번째 조회 쿼리가 발생했기 때문이었는데, 이는 예상치 못한 동작이었습니다. 특히, 이 Converter는 데이터 형식을 변환하는 역할을 했으나, 클래스와 메서드명에서 그 동작이 명확히 드러나지 않았습니다.

두 번째 문제는 제가 Repeatable Read에서 Lock이 걸리는 시점을 제대로 이해하지 못한 것입니다. Repeatable Read에서 첫 번째 쿼리가 조회되는 순간 Record Version이 고정이 됩니다. 이로 인해 이후 쿼리에서도 동일한 버전을 계속 조회하면서 CommentCount가 제대로 갱신되지 않는 상황이 발생했습니다. 이런 예처럼, 저는 조언을 구하는데 거리낌이 없고 적절한 질문을 할 수 있어 좀 더 깊은 지식과 빠른 답을 찾아 갑니다.

기술 스택

기술 스택

Spring Boot, Java, Kotlin, docker-compose, Docker, MySQL, PostgreSQL, NestJS, vmware, nginx, Firebase, AWS, Redis

포트폴리오

URL

link

깃허브

깃허브
link

블로그

URL 링크
link

학습노트

URL 링크

프로젝트

프로젝트명

List-it 관리자 페이지 개발

소속/기관명

외주

프로젝트 기간

2024.09. ~ 2024.10.

프로젝트 내용

프로젝트 소개

  • 스포츠 컬렉션 전문 사이트 List-it의 관리자 페이지 개발

팀 구성 및 역할

  • 프론트 개발자 1명, 기획 겸 디자인 1명, 백엔드 개발자 3명

  • 관리자 페이지 백엔드 담당

기술스택

  • React, React Native, NestJS

  • EC2, S3, Coolify

링크

주요 구현 내용

  • 프로젝트 기초 세팅 (TypeORM, Swagger 설정)

  • 공통 모듈 구현 (페이지네이션 기능, 트랜잭션 기능, 우선순위 정렬 기능)

  • 추천 상품, 추천 상품 카테고리, 배너, 푸터 관리 페이지 구현

  • FCM 알림 배치 발송, 취소 기능 구현

  • 상품 대량 업로드 기능 구현

  • S3 이미지 업로드 기능 구현

핵심 구현 내용과 학습 포인트

빠른 NestJS 학습과 첫 실무 투입

Problem

  • 고객사 개발자가 Nest, Django 기술스택을 사용중이기 때문에 Nest, Django 중 선택 요청

Solve

  • Spring Framework와 비슷한 NestJS를 선택

  • 공식문서를 읽으면서 Controller, Injectable, HTTP Method 등 NestJS의 주요 동작 학습

  • IoC Container, .env 로드 방식 등 이해가 가지 않는 내용은 인터넷 강의를 통해서 학습

  • 주변 NestJS 개발자에게 조언 요청해서 프로젝트 구조 및 Typescript 유틸리티 타입에 대해 학습

  • 게시판 프로젝트로 간단한 POC 진행 후 실무 프로젝트 투입 - 게시판 프로젝트 POC 내용

FCM 알림 배치 발송 구현

Problem

  • 전체 유저 대상 공지 알림을 즉시, 예약된 시간, 반복 발송할 수 있는 기능

  • 서비스가 배포될 때 서버가 재시작되면 CronJob이 초기화 된다는 점과 예약된 알림의 경우 취소하는 기능을 구현해야 한다는 점이 주요 이슈사항

Solve

  • Nest Module의 LifeCycle에 대해서 학습 후 onModuleInit()에서 PENDING 상태의 BatchNotificationHistory를 불러와서 CronJob에 재등록하는 로직 구현

  • BatchNotification에서 User가 제대로 맵핑되지 않는 버그 발생 -> M:N 연관관계에서 @JoinTable을 한쪽에만 명시해줘야 한다는 Stack Overflow 이슈 읽고 수정 후 해결

  • BatchNotificationHistory ID를 Key로 CronJob을 Value로 하는 HashMap을 static 변수로둬서 취소 구현

프로젝트명

Spettrum

소속/기관명

Unpeil

프로젝트 기간

프로젝트 내용

프로젝트 소개

  • 반려동물 사진 AI 모델링 스타트업

팀 구성 및 역할

  • 기획 1명, 디자이너 2명, 프론트 개발자 2명, 백엔드 개발자 3명, AI 개발자 1명

  • 백엔드 개발자로 참여해서 시큐리티 고도화 및 리팩터링 진행

기술스택

  • React, React Native, Spring Boot

  • EC2, S3, Runpod, Github Action

링크

주요 구현 내용

  • 서비스 국제화 진행 및 DB 마이그레이션

  • Security 및 Filter 고도화

    • Cors 설정 통합, JWT 필터 등록 및 JWT 검증 로직 통합

    • Prefix를 통한 권한 분리

  • 테스트 코드 작성

  • 롤링 배포 구현

핵심 구현 내용과 학습 포인트

API 변경에 따른 인프라 설계 및 배포 방식 구현

Problem

  • Prefix를 통해서 권한을 분리하는 과정에서 API 주소가 전체적으로 변경되게 되어서 구버전 API 서버를 남겨야 함

Solve

  • docker compose에 이전버전 서버를 blue 서버로 최신버전 서버를 green 서버로 올릴 수 있도록 변경

  • Nginx를 도입해서 "api", "open-api", "admin-api" 등 신버전 API의 Prefix에 따라서 경로를 라우팅 하도록 설정

  • green 서버를 2개 둬서 첫 번째 서버가 배포가 완료되면 두 번째 서버가 배포되는 형식으로 롤링 배포 구현

프로젝트명

겜문철

소속/기관명

팀 프로젝트

프로젝트 기간

2024.02. ~ 2024.08.

프로젝트 내용

프로젝트 소개

  • 한문철 변호사님의 유튜브를 모티브로 게임 유저간의 갈등 해소를 위한 투표 서비스 플랫폼

팀 구성 및 역할

  • 디자이너 1명, 프론트 개발자 2명, 백엔드 개발자 2명

  • 프로젝트 기획을 하고 팀원을 모집해서 팀장 및 백엔드 개발자로 참여

기술스택

  • NextJS, Spring Boot

  • EC2, S3, Github Action

링크

주요 구현 내용

  • 회원 가입 및 로그인 구현 (Spring Security 활용 Google, Apple OAuth 인증 개발)

  • 게시물 작성, 댓글 작성, S3 이미지 업로드 및 동영상 업로드 구현

  • Riot API 및 Youtube Upload API 구현

핵심 구현 내용과 학습 포인트

Cache Aside Pattern 적용으로 API 응답 속도 개선

Conclusion

  • 10건의 동시 요청에 대해서 965ms → 40ms 약 20배 개선

Solve

  • Redis Out of memory 방지를 위해서 Ram 4096으로 설정하고 메모리 관리 정책 volatile-lru로 설정

  • 사용자가 어떤 게시물에 관심을 가질지 예측 불가능하기 때문에 Cache Aside Pattern을 활용해서 API 응답 속도 향상

동시성 문제 해결

Problem

  • Comment의 개수는 Post에 반정규화 되어있는데 Comment가 생성이 될 때마다 Post의 Comment Count를 올려줘야 함 -> 동시성 문제 발생

Conclusion

  • 비관락보다 낙관락의 동작속도가 더 빠름 → 최종적으로 낙관락 적용

Solve

  • 동시 접속자 수 100명으로 설정 후 테스트 결과 낙관락 42s vs 비관락 40s로 비관락 우세 -> 비관락 선택

  • 낙관락을 잘못 설정했으며 실제 서비스 상황에서 동시에 투표를 진행할 확률이 굉장히 낮다는 피드백을 받음

  • 낙관락의 Retryable 시간 설정을 Random으로 한 후 테스트 재진행 -> 낙관락 203ms vs 비관락 331ms

    • 낙관락 사용하기로 결정

  • 낙관락 비관락 설정 및 성능 비교 PR

경력

회사명

이글루코퍼레이션

직급 | 부서 | 근무 유형

사원

근무 기간

2020.12. ~ 2023.06. (2년 7개월)

담당 업무
  • 보안관제 및 공격분석: SIEM을 사용한 보안관제, 공격 분석 및 신규 분석 룰 등록

  • 장애 처리: Kibana, Logstash, Elastic Search의 상태 확인 및 재기동을 통해 AI 데이터 수집 문제 해결

  • 악성메일 분석: 악성메일 분석 및 보고서 작성

  • 홈페이지 모니터링: 18개 시도 홈페이지 모니터링 및 상황 전파

회사명

씨앤아이인포테크

직급 | 부서 | 근무 유형

사원 | 전산실

근무 기간

2018.02. ~ 2019.10. (1년 9개월)

담당 업무
  • 네트워크 및 웹 관제 : Watch Pro 및 IDC 관제를 통해 네트워크와 웹 모니터링

  • 업무 자동화 : VBA로 업무 자동화 솔루션 개발, 업무 프로세스 개선

  • C언어 소스 수정 : Watch Pro 장애 시 C언어 코드 수정으로 모니터링 정상화

대외활동

활동명

면접 스터디

소속/기관명

기타

연도

내용

컴퓨터 기초지식을 좀 더 심도있게 공부하기 위한 컴퓨터 공학 면접 스터디 입니다. 총 진행 인원은 4명이었습니다. 4명이 번갈아가면서 무작위 1명을 지목해서 질문을 하고 답변을 하는 면접형식으로 진행이 되었습니다.

이 스터디를 통해서 운영체제, 네트워크, 자료구조, 데이터베이스, Java, Spring 등 전반적인 백엔드 개발자로써 갖춰야 할 기본 소양들을 재점검하고 좀 더 심도 깊은 내용들에 대해서 공부하게 되었습니다.

자격증

자격증명

정보처리산업기사

점수 | 발급기관

한국산업인력공단

취득연월

2024.06.

자격증명

네트워크 관리사

점수 | 발급기관

2급 | 한국정보통신자격협회

취득연월

2018.04.

교육

소속/기관명

학점은행제

종류 | 전공

대학교(학사) | 컴퓨터공학

재학 기간 | 재학 상태

2022.02. ~ 2024.08. | 졸업

소속/기관명

i2sec

종류 | 전공

사설 교육 | 정보보안

재학 기간 | 재학 상태

2016.11. ~ 2017.03. | 졸업

댓글