채용공고 올리기

황창현님을 응원해보세요!

이직/구직 중이에요

미리보기

기본 정보

이름
황창현
직업
백엔드 개발자
간단소개

팀 성장을 중요시 여겨, 팀의 문화에 적응하고 융화되기 위해 노력합니다. 부트캠프 팀 피어리뷰에서 같이 일하고 싶은 팀원으로 좋은 평가를 받은 경험이 있으며, 학부시절 여러 프로젝트에서 팀장을 맡아 적절한 팔로우와 리딩으로 수상한 경험이 있습니다. 제가 아는 모든 것을 공유하고 고민하기를 좋아합니다. 학부 시절 후배들에게 전공과목 튜터링을 진행하여 튜티 5명이 A+를 받는 성과를 낸적이 있으며, 모든 것을 고민하며 기록하고 해결하려합니다.

기술 스택

기술 스택

프로젝트

소속/기관명

프로그래머스 백엔드 데브코스 / 팀

프로젝트명

Pickple

프로젝트 내용

농구 게스트 및 크루(팀원) 모집 서비스

사용 기술

  • Spring Boot, Java, JPA
  • AWS EC2, AWS RDS, AWS ElastiCache, Docker, Nginx
  • MySQL, Redis
  • Github Actions, Jenkins

주요 역할

  • MySQL 공간 타입, 공간 인덱스 적용을 통한 평균 조회 0.125ms → 0.025ms 5배 성능 향상
  • N+1 문제를 Fetch Join과 Batch Size 조절을 통해 API 조회 성능 1.2s → 0.3s로 4배 성능 향상
  • 지도 Polygon 데이터 조회를 Caffeine 캐시를 활용하여 Cache Aside 전략으로 조회 성능 향상
  • Jenkins와 Spring Batch 또는 Redis Keyspace Notification을 이용한 경기 상태 변경 자동화
  • 불필요한 연관 관계 제거 및 구현 계층 도입 리팩토링을 통한 코드 재사용성 및 가독성 증가
  • Scale out 상황에서의 확장성과 편의성을 고려하여 JWT 로그인 구현, Redis를 활용한 RefreshToken 저장
  • 문서화 코드와 운영 코드가 합쳐진 Swagger의 단점과 asciidoc 문서의 불편함을 극복하기 위해 RestDocs + Swagger API문서화 구현

트러블 슈팅 및 고민

어떻게 하면 코드를 통해 비즈니스 로직을 쉽게 이해하고, 유지보수성을 높일 수 있을까? 링크

  • 문제: 많은 연관 관계와 양방향 연관 관계로 인해 엔티티가 비대해지고, 엔티티 간 강결합으로 인하여 유지보수성이 떨어지며, 코드를 수평 형태로 읽어야하는 문제가 생겨 비즈니스 로직을 이해하기 어려움
  • 해결: 연관 관계를 제거하여 엔티티가 가지는 로직을 줄이고, 구현 계층 도입을 통해 비즈니스 로직과 구현 로직을 분리하여 비즈니스 로직 이해를 높이고 코드의 재사용성을 증가시킴

농구 경기 시간이 되었을 때 경기 상태 변경 자동화에 대한 고민

  • 문제: 농구 경기 시간이 되었을 때 클라이언트에서 현재 시간과 경기 시간을 비교하여 UI에서만 변경하다보니 모든 경기 목록 출력시 클라이언트에서 경기 목록에 대한 상태 값을 모두 계산해야하는 비효율적인 작업이 발생
  • 해결: Game 테이블에 경기 상태 컬럼 추가하여 경기 상태를 관리, Jenkins와 Spring Batch를 이용해서 일정 간격마다 현재 시간을 기준으로 경기 상태를 자동으로 변경하는 작업 수행

특정 좌표로부터 특정 거리에 속하는 데이터 불러오기 링크

  • 문제: 두 좌표 사이의 거리 계산을 DB 테이블 풀 스캔하며 연산하는 쿼리로 인해 성능 저하
  • 해결: MySQL의 공간 타입 도입, 공간 인덱스를 적용한 쿼리로 평균 duration 0.125 → 0.025 조회 성능 약 5배 개선
프로젝트 기간
2023.11. ~ 진행 중
소속/기관명

프로그래머스 백엔드 데브코스 / 팀

프로젝트명

TicketParis

프로젝트 내용

인터파크 티켓 서비스 클론 코딩

사용 기술

  • SpringBoot, Java, MyBatis
  • AWS EC2, AWS RDS, AWS ElastiCache, Docker
  • MySQL, Redis
  • Github Actions

주요 역할

  • Github Actions와 Docker를 기반으로 CI/CD 파이프라인 구축
  • 비관적 락을 이용한 좌석 예매의 동시성 문제 해결
  • 조회 API Offset 기반의 페이지네이션 적용
  • 팀원들의 성능 테스트를 위한 Ngrinder 서버 구축
  • 예매 도메인 구현

트러블 슈팅 및 고민

공연 예매시 발생하는 좌석 동시성 문제 링크 링크

  • 문제: 두 개의 트랜잭션이 좌석 수 데이터를 동시에 갱신하면서 업데이트한 좌석 수가 손실되는 문제
  • 해결: 티켓팅시 동시성 문제가 자주 발생될 가능성이 높아, 비관적 락을 이용하여 해결
프로젝트 기간
2023.08. ~ 2023.08.
(1개월)
소속/기관명

동양미래대학교 / 팀

프로젝트명

GrowT(Growing Trip)

프로젝트 내용

사용자가 여행을 다니며 자신의 캐릭터와 함께 같이 성장하는 여행 SNS 웹 애플리케이션

사용 기술

  • Node.js, React, JavaScript, TypeScript
  • MySQL, MongoDB, Sequelize
  • Synology Nas, Nginx, Ubuntu

주요 역할

  • Synology Nas Docker와 Nginx를 활용한 서버 구축/배포 경험
  • React를 활용한 모든 웹페이지 화면 개발 경험
  • 지도 API와 제주 API를 결합한 여행지 도메인과 회원, 여행일지 등 모든 도메인 기능 구현
  • 랜드마크 판별을 위한 인공지능 서버와의 연동 경험

트러블 슈팅 및 고민

바닐라 스크립트 사용으로 인한 코드 증가 문제

  • 문제: 바닐라 스크립트를 이용하여 SPA를 구성하려하니 코드가 증가하고 재사용성이 떨어짐
  • 해결: React를 도입하여 useEffect와 useState를 이용함으로써 상태 관리를 보다 편하게하고, 컴포넌트로 분리하여 재사용성을 증가시킴. 바닐라 스크립트를 이용했을 때 걸렸던 시간 2달에서 학습하고 적용까지 1달로 단축하여 생산성과 유지보수 증가
프로젝트 기간
2022.06. ~ 2022.10.
(5개월)
소속/기관명

개인

프로젝트명

근로장학생 출석 프로그램

프로젝트 내용

컴퓨터공학부 근로장학생들이 월 말에 근무일지 작성시 출, 퇴근 하는 시간을 잘 기억하지 못하는 경우가 있어 편하게 확인할 수 있도록 만든 출석체크시스템

사용 기술

  • Spring Framework, Java, JavaScript, HTML/CSS, JSP
  • MySQL, MyBatis

주요 역할

  • JsQR과 웹캠을 활용한 QR코드 인식 기반의 출석프로그램 개발
  • 학부사무실 인수인계, 업무 관련 공지사항 기능 개발로 업무 누락 감소
  • 근로장학생 출, 퇴근 확인이 가능한 달력 기능 개발로 근무 일지 작성시 오류 현저히 감소
  • 근로장학생 출, 퇴근시 카카오톡 연동하여 메시지 전송 기능 개발

트러블 슈팅 및 고민

웹캠을 활용하기 위해 서버에 SSL을 적용해야하는 문제

  • 문제: 학교 망은 사설 IP 대역으로 서버의 사설 IP를 이용하여 도메인 발급이 불가 함, SSL을 발급받을 수 없어, 로컬이 아닌 다른 IP에서 웹서버에 접속했을 때, 웹캠을 켤 수 없는 상황
  • 해결: 웹캠을 서버와 직접 연결하여, 외부 망의 영향 없이 학교 망 자체에서도 돌아갈 수 있도록 함
프로젝트 기간
2021.05. ~ 2021.09.
(5개월)

대외활동

소속/기관명

그렙(프로그래머스)

활동명

프로그래머스 백엔드 데브코스 4기

내용

활동내역 저장소

  • Java 심화, Database, Spring Boot, JPA 학습과 구현 과제를 통한 백엔드 역량 증가
  • AWS와 Docker, Github Actions를 통한 CI/CD 구축 경험 링크
  • 개인, 백엔드, 프론트엔드 & 백엔드 프로젝트를 통한 협업 및 애자일 소프트웨어 개발 경험
  • 부족한 부분을 보완하기 위한 스터디 참여
    • CS 스터디 - Java, Spring, DB, Network 등 여러 카테고리에 대한 키워드 학습 링크
    • 알고리즘 스터디 - 1일 1문제 풀이를 통한 문제 해결 능력 개선 링크
    • navy-next-step 스터디 - 테스트 코드, 클린 코드 학습, 스터디원 코드 리뷰를 통한 동료 성장 학습 링크
연도

2023

교육

소속/기관명

동양미래대학교

종류 | 전공

대학교(학사) | 컴퓨터소프트웨어공학과

재학 기간

2022.03. ~ 2023.02.

재학 상태

졸업

소속/기관명

동양미래대학교

종류 | 전공

대학교(전문학사) | 컴퓨터소프트웨어공학과

재학 기간

2019.03. ~ 2022.02.

재학 상태

졸업

자격증

자격증명

정보처리기사

점수 | 발급기관

한국산업인력공단

취득연월

2023.06.

경력

회사명

NHN CLOUD

직책 • 부서

사원 • 성능보안개발팀

담당 업무
  • NHN CLOUD 네트워크 보안 플랫폼 백엔드 API 서버 설계 및 개발

근무 기간 (근무 형태)
2024.08. ~ 재직 중

(7개월 | 계약직)

포트폴리오

타입

URL

깃허브
링크

개발자가 되기 전 나의 10년 회고록

깃허브
링크

개발 블로그

깃허브
링크

트러블 슈팅 및 고민 위키

깃허브
링크

데브코스 팀원들이 평가한 나

자기소개

자기소개

전체적인 자기소개

지속 성장 가능한 소프트웨어를 만드는 개발자

소프트웨어의 특정 기능을 구현하기 위해 특정 기술에 함몰되기보다 견고한 설계와 유지보수하기 쉬운 코드를 작성하여 지속 가능한 소프트웨어를 만드는 것을 지향하고 있습니다. 학부 시절 여러 프로젝트를 진행하며 요구사항에 대한 기능 구현을 모두 하면서 개발은 곧 구현이라고만 생각했었습니다. 데브코스 교육을 받은 교육생들은 구현보다 견고한 설계를 더 중요시했고, 코드 작성에 많은 시간을 투자하여 근거 있는 기술 선택을 위해 노력했습니다. 이를 보며 전에는 그러지 못한 저의 모습을 반성하게되었습니다. 그리하여 저는 코드에 저의 생각을 많이 담기 위해 고민 거리를 블로그나 깃 허브에 남기기도 하고, 작성한 코드의 품질을 개선하기 위해 기업들의 테크 영상을 보며 좋은 아키텍처나 코드를 흡수하려고 노력하고 있습니다. 현재는 팀원들과 함께 특정 기업의 테크 영상을 보며 기존 아키텍처를 개선하는 방향으로 나아가고 있습니다. 구현 계층을 추가하고 엔티티 간의 연관관계를 분리하는 등 다양한 문제에 대해 코드를 리팩토링하며 소프트웨어의 품질을 높이는 노력을 기울이고 있습니다. 앞으로도 더 나은 설계와 유지보수 가능한 코드를 작성하여 지속 성장 가능한 소프트웨어를 만들기 위해 노력할 것 입니다.

성장과정

개발에 대한 호기심과 열정

개발의 매력에 빠져 지금까지 지속적으로 호기심과 열정으로 성장해온 개발자입니다. 초등학생 시절, 프리 메이플 게임을 접하고 동영상을 보며 직접 게임 클라이언트 서버를 구축하고 MySQL을 이용하여 데이터를 다루는 경험을 했습니다. 당시에는 어떻게 동작하는지 잘 이해하지 못하고 영상을 따라하며 노력했지만, 컴퓨터로 무언가를 만드는 작업에 대한 흥미와 확신을 갖게 되었습니다. 중, 고등학생 시절에는 웹사이트 제작에 관심을 갖고 동영상을 통해 서버를 구축하는 과정을 학습해본 경험이 있습니다. 이후 정보보안과 관련된 회사에 취직하여 업무 프로세스에 대해 조금 더 효율적인 방법이 없을까 고민하며 윈도우 명령어를 통해 파일 명을 변경하는 작업을 개발해보기도 했습니다. 그러나 스스로 개발에 대한 역량이 부족하다고 느껴 컴퓨터소프트웨어공학 전공으로 대학 진학을 결정했습니다. 적극적인 태도로 학습에 몰두하며 4.5 만점 중 4.37의 평균 학점을 얻어 차석으로 졸업하게 되었습니다. 학과 공부뿐만 아니라 컴퓨터공학부 근로장학생을 하며 근로장학생들의 출석관리를 위해 QR코드를 이용하여 출석 내역을 확인할 수 있는 웹 사이트를 제작해서 근로장학생들의 일지 누락을 방지하고 인수인계 게시판을 통해 업무 누락을 감소시킬 수 있었습니다. 학부 4학년 때는 교직원으로 근무하며 학과 내 네트워크를 관리하거나, 실습실의 PC, 개발 환경을 구축하며 여러 경험을 쌓았습니다. 이렇게 일상에서 발생할 수 있는 다양한 문제들을 해결하기 위해 많은 개발을 시도해보고, 다양한 경험과 역량을 바탕으로 더 나은 소프트웨어 개발을 위해 지속적으로 노력하고 있습니다.
성격의 장단점

성격의 장단점

빠른 습득력과 철두철미한 계획력

학부 시절 프로젝트를 진행하면서 높은 습득력과 철저한 계획력을 발휘한 경험이 있습니다.
그 당시 프로젝트는 이미 70%정도가 완성되었으며 마감 기한은 한 달 밖에 남지 않은 상황이었습니다. 그러나 순수 JavaScript로 구현한 UI가 생산성과 효율성 측면에서 많이 부족하다고 판단하여 React로 변경하게 되었습니다. 그리하여 저는 제한된 시간안에 개발하기 위하여 스프린트 주기를 각각의 스프린트마다 어떤 도메인을 개발할지 계획하고 분담하여 작업을 나누었습니다. 동시에 저의 빠른 습득력을 활용하여 React에 대한 강의를 수강하고, 프로젝트에 적용할 수 있었습니다. 이를 통해 빠른 시간 내에 프로젝트를 성공적으로 완료하기 위한 명확한 계획을 수립하고, React라는 기술을 습득할 수 있었습니다. 이러한 노력과 능력을 바탕으로 프로젝트를 성공적으로 마무리하였고, 결과적으로 교내 경진대회에서도 수상하였습니다.

겸허히 수긍하는 자세

대학을 차석으로 졸업하면서 ‘그래도 나 정도면 취업할 수 있겠지’라는 생각을 하며 안일함과 자신감을 가지고 있었습니다. 그러나 졸업 후 취업 준비를 하며 스스로의 부족함을 많이 느끼게 되었고, 데브코스 교육을 통해 더 잘하는 교육생들을 보며 ‘나는 우물 안 개구리였구나’라는 생각이 들었고 겸손해지게 되었습니다. 이러한 생각에 그치지 않고 저의 부족함을 인정하고 잘하는 교육생들에게서 모르는 것을 끊임 없이 질문하고 학습하는 노력을 했습니다. 그 결과, 수료 때에는 짧은 시간내에 많이 성장한 동료로 평가 받을 수 있었습니다. 그 이후로 항상 겸손한 태도를 가지며, 저보다 잘하는 사람들은 어디에나 있다는 생각을 가지고 그 분들을 존경하며 부족한 부분을 배우고 채우기 위해 노력하고 있습니다. 앞으로도 계속해서 학습과 성장을 위해 노력하며, 겸손한 자세로 나아가고자 합니다.

학교 생활

가르침과 지식 공유

저는 학과 꼴등을 하던 친구를 학과 2등으로 만들었던 경험이 있습니다. 고등학생 시절, 인문계 고등학교에서 특성화 고등학교로 전학을 가게 되었고, 첫 시험에서 학과 1등을 차지한 적이 있습니다. 그로 인해 꼴등이던 친구가 호기심을 가지며 저와 친해지게 되었고, 제 학습 노트와 기본적인 수학, 암기 방법 등을 알려주며 함께 1,2 등을 차지하고 반의 분위기를 변화시키는 보람찬 경험을 할 수 있었습니다.

대학 시절에는 전공 튜터링을 하면서 5명의 튜티들이 모두 A+의 성적을 받는 성과를 이루었습니다. 한 학기동안 아래 학년 후배들을 대상으로 ‘웹프로젝트 실습’ 교과목을 가르쳤는데, 프로젝트 수업이었기 때문에 학생들이 프로젝트를 잘 제작할 수 있도록 아이디어나 기능 추가 개발에 도움을 주었습니다. 수업에서는 기본적인 JSP만을 가르쳐주었기 때문에 여러가지 API 활용 방법이나 Ajax를 이용하여 SPA로 화면 구성하는 방법 등 새로운 개념에 대해 알려주었습니다. 제가 가진 지식을 다른 사람에게 가르쳐주고, 그 지식을 활용하여 프로젝트에서 좋은 성과를 얻는 모습을 보며 굉장한 보람을 느끼고 스스로도 공부하며 많이 성장할 수 있었습니다.

소통과 협업

대학 경진대회에서 팀 프로젝트를 수행하면서 팀원들 간의 의견 충돌을 해결하고 성공적으로 마무리하여 수상한 경험이 있습니다. 이 팀 프로젝트에서는 처음부터 학교를 나오지 않는 팀원, 일부 팀원들은 정하는 주제가 어려워 다른 팀으로 가기를 희망했던 적도 있었습니다. 저는 팀장으로써 모든 팀원들의 의견을 듣고 반영하여 이끌어 나가자고 했고, 설득하기 위해 각각의 주제에 대해 시스템 설계를 해보고 필요한 기술 역량과 경진대회 평기 기준을 계산하여 PPT로 발표한 적이 있습니다. 그렇게 함께 최선의 주제를 선택해내고, 기술적으로 어려운 부분은 제가 먼저 학습하여 팀원들에게 알려주었습니다. 또한 회의할 내용이 없을 때에도 주마다 회의를 열어 팀원들과 소통하며 개발 이외의 즐거운 시간을 보낼 수 있도록 노력했습니다. 이러한 경험들을 통해 저는 다른 사람들과 소통하고 협력하여 목표를 달성하는 능력을 키웠으며, 협업을 통해 더 나은 결과를 이끌어내고자 하는 태도를 갖게 되었습니다.

댓글