채용공고 올리기

김영민님을 응원해보세요!

지금 만족하고 있어요
창의적
성실함
학습 지향
열정적
긍정적

미리보기

기본 정보

이름
김영민
직업
백엔드 개발자
간단 소개

자기소개

자기소개

- 안녕하세요 신입 백엔드 개발자 김영민입니다!

- 블로그 깃허브 등 다양한 개발 활동을 꾸준하게 이어가고 있습니다.

- 서버 배포를 좋아하여 홈 서버에 서버 os를 올려서 개인 서버로 활용하고 있습니다.

- 지식을 공유하는 활동을 좋아합니다. 배운 내용을 gist 또는 블로그에 작성하는 습관이 있습니다.

- 데일리 회고를 작성하는 활동을 중요하게 생각하며 개선할 점을 항상 생각합니다.

- 코드를 작성할 때 고민하며 사용자와 개발팀에게 최고의 가치를 전달할 수 있도록 노력합니다.

- 웹 풀스택 개발을 전체 다 할 수 있지만 다양한 프로젝트를 진행하며 서버쪽으로 전문성있게 공부하였습니다.

기술 스택

기술 스택

Java, JavaScript, Spring Boot, JPA, hibernate, MySQL, MariaDB, nginx, Docker, NestJS, TypeScript, Node.js, aws-ec2, aws-rds, Linux

자격증

자격증명

정보처리산업기사(21-03074554)

점수 | 발급기관

한국산업인력공단

취득연월

2022.12.

자격증명

SQL 개발자(045010032)

점수 | 발급기관

한국데이터산업진흥원

취득연월

2022.06.

자격증명

TOPCIT(ICT역량지수평가)

점수 | 발급기관

수준3 | 과학기술정보통신부

취득연월

2022.05.

자격증명

컴퓨터활용능력 2급(21-k9-106073)

점수 | 발급기관

대한상공회의소

취득연월

2021.09.

자격증명

AZ-900: Microsoft Azure Fundamentals(90069730)

점수 | 발급기관

Microsoft

취득연월

2021.06.

프로젝트

프로젝트명

밥도둑

소속/기관명

원티드 프리온보딩 챌린지 S팀

프로젝트 기간

2023.10. ~ 2023.12.

프로젝트 내용

깃허브: https://github.com/wanted-pre-onboarding-backend-team-s/bab-doduk?tab=readme-ov-file

개요

공공데이터를 활용하여, 지역 음식점 목록을 자동으로 업데이트 하고 이를 활용하는 서비스입니다. 사용자의 위치에 맞게 맛집 및 메뉴를 추천하여 더 나은 다양한 음식 경험을 제공하고, 음식을 좋아하는 사람들 간의 소통과 공유를 촉진합니다.

담당한 업무

백엔드

  • 스케쥴러 설정

    • Spring Scheduler 사용

      별도의 의존성이 필요하지 않고 복잡한 로직이 없기에 

      Spring Scheduler를 사용하게 되었습니다.

    • scheduler pool 설정

  • 맛집 알림 기능 구현

    • WebhookClient 인터페이스를 구현하는 구현체인 DiscordWebhookClient에서 작업하였습니다.

  • 맛집 추천 querydsl 작성

    • 가장 가까운 맛집 중, averageScore이 4이상 5이하인 맛집 5개 리턴

  • 유저 개별 전송 및 비동기 처리

    • @EnableAsync 어노테이션을 활용하였습니다.

느낀점, 성능 개선점

프로젝트의 웹 훅 시스템

  • 이번 프로젝트를 진행하며 웹 훅 시스템의 개념과 사용 방법을 알게되었고 앞으로의 프로젝트에서도 활용해봐야겠다는 생각이 들었습니다. 이번엔 디스코드 웹 훅을 사용하였지만 다음에는 메일 송수신 웹 훅을 구현해보고 싶습니다.

WebClient, RestTemplate

  • 개발하기 전 비교적 예제가 많은 RestTemplate을 사용할지 새로 떠오르는 WebClient를 사용할지 고민하였습니다. WebClientNon-Blocking과 비동기화를 지원하기 때문에 RestTemplate보다 더 성능 면에서 우세합니다. 해당 요구사항 특징 상, 동시 사용자의 규모가 커질 것이기 때문에 WebClient를 채택하였습니다.

Parallel Stream, 성능장애

  • 알림 설정한 모든 유저에게 알림을 보내는 과정에서 Parallel Stream을 사용하였습니다.하지만 Parallel()은 공유된 thread pool을 사용하기 때문에 심각한 성능장애를 일으킬 수 있다는 단점이 있었고 해당 부분을 Scheduler의 스레드 풀을 설정해 해결하였습니다. 스레드 풀을 이용하게 되면 @Scheduled 어노테이션을 사용하는 메서드의 실행 시 동시에 실행될 수 있는 스레드의 수를 제한할 수 있습니다. 따라서 Parallel()의 성능 문제도 해결할 수 있었습니다.

프로젝트명

Bssmh-Portfolio

소속/기관명

외주

프로젝트 기간

2022.11. ~ 2023.03.

프로젝트 내용

배포 사이트: https://portfolio.bssm.io/

깃허브: https://github.com/qkrjh0904/bssmh-portfolio

개요

부산소마고 공식 포트폴리오 공유 웹사이트입니다. 기업체 분들이 학교 학생들의 포트폴리오를 한눈에 확인할 수 있게 하기 위해 구성된 웹입니다.

담당한 업무

백엔드

  • 댓글 기능

    • 대댓글 기능 구현

    • 댓글 CRUD

    • 댓글 좋아요 기능 구현

    • 댓글 권한 관련

  • 포트폴리오 기능

    • 포트폴리오 좋아요 기능 구현

    • 포트폴리오 권한 관련

  • 예외 처리

  • 그 외 버그 픽스

성과

학교 학생들에게 웹사이트를 소개하기 위해 학교에서 시연을 하였고 성공적으로 끝마쳤습니다.

느낀점, 성능 개선점

외주로 진행된 프로젝트

  • 프로젝트는 학교에서 외주로 진행되어 현업 개발자들과 개발을 진행하였습니다. 실무 능력들을 기를 수 있게 되었고 개발을 진행하면서 현업에 계시는 개발자들이 어떻게 협업을 하는지 잘 알 수 있었습니다.

코드 리뷰 문화

  • PR을 날리기 전에 승인이 떨어져야 해서 1:1로 코드 리뷰를 받았었는데 코드의 부족한 부분을 보완할 수 있어 너무 좋았습니다. 그리고 한번 리뷰를 받는다고 생각하니 코드를 짤 때에도 생각하면서 코드를 작성하는 능력을 길렀습니다.

협업 툴의 이용

  • Slack을 통해 질문하고 코드에 관해서 토론하는 것이 좋은 경험이었습니다. 그리고 Jira 소프트웨어를 통한 애자일 프로젝트 관리 기능을 통해 개발하니 더 효율적으로 개발을 할 수 있게 되었습니다.

query dsl문법을 수정해 대댓글을 불러올 때 n+1문제를 해결하였습니다.

  • 대댓글 기능을 구현할 당시 처음에는 for문을 통해 자식댓글을 모조리 불러오는 식으로 구현하였습니다. 하지만 리팩토링을 한 후에 자식 댓글들을 재귀적으로 호출하여 Response의 children에 추가해 코드가 훨씬 줄어들고 간결해졌습니다.

프로젝트명

TechBlog

소속/기관명

개인

프로젝트 기간

2021.11. ~ 2024.07.

프로젝트 내용

배포 사이트: https://devlog.kro.kr

github: https://github.com/min050410/TechBlog

개요

gatsby 프레임워크를 이용해 처음부터 직접 개발한 블로그 사이트입니다.

담당한 기능

프론트엔드, 서버

  • 블로그 불러오기

  • 화이트모드, 다크모드 토글

  • 필터 기능 (해시태그)

  • 검색 기능

  • 인기있는 블로그, 최근 블로그 분리

  • 깃허브 로그인 기능과 댓글 기능 구현

성과

  • 2021년 부터 현재까지 쭉 배포된 상태입니다.

  • Google Search Console으로 분석하니 사이트의 전체 노출수가 4만명을 넘기게 되었습니다. (2024-03-04 기준)

느낀점, 성능 개선점

개인 프로젝트의 힘듦

  • 팀원이 같이 하는 협업과 다르게 기획, 디자인, 개발 혼자서 다 진행하다 보니 더 힘들다는 것을 새삼 깨달았습니다. 그래도 완성된 사이트를 보고 나니 뿌듯하였습니다. 개인 사이트를 배포하면 회의를 거칠 필요 없이 개선 사항을 바로 반영할 수 있는 점이 장점인 것 같습니다. 하지만 그만큼 협업과 다르게 시간이 오래걸린다는 단점이 있었습니다.

loadable로 dynamic import 를 하였다.

  • 기본적으로 gatsbynext.js와 같은 ssr 환경이기 때문에 suspense를 지양하고 loadable을 사용해야 하는데 해당 프로젝트에서는 리팩토링 할 때 loadable으로 코드를 교체하여 성능이 향상되었고 로딩 되기 전 로딩 되었습니다 문구가 뜰 수 있게 되었습니다.

SEO 개선

  • 검색 결과에 블로그를 더 잘 노출시키기 위해 google sitemap을 등록해서 seo를 개선하였습니다. 추가로 Google Search Colnsole에 색인 등록 작업을 완료하였습니다. 개선된 결과로 cors 관련 블로그는 구글 검색 후 2위까지 올라간 적이 있습니다.

프로젝트명

TCP

소속/기관명

T자형인재 동아리(고등학교 2학년)

프로젝트 기간

프로젝트 내용

api문서: https://documenter.getpostman.com/view/20938463/Uz5MEtC4

github: https://github.com/T-shaped-People

서비스 홍보 영상: https://www.youtube.com/watch?v=14KH55EAd2A

서비스 시연 영상: https://www.youtube.com/watch?v=DXHSx9M4h30&t=34s

개요

TCP(Team Cooperation Platform)은 팀원 모집, 팀 채팅, 팀 화상 통화, 일정 관리, Todolist 등 협업을 위해 필요한 기능들을 하나의 플랫폼에 모아둔 서비스입니다.

담당한 기능

백엔드, 프론트엔드

  • 팀 채팅 기능

  • 팀 화상 통화 기능

  • 알림 기능

  • 팀 일정 관리 기능

  • TODO 관리 기능

성과

2022 소프트웨이브에서 해당 작품을 출품하고 전시하였습니다.

느낀점, 성능 개선점

webRTC 영상통화 구현

  • webRTC를 이용하여서 react + nest.js 환경에서 화상통화를 구현하였는데 참고 자료도 별로 없어서 힘들었습니다. 하지만 구현하고 나서 한명씩 통화방에 들어오는 모습을 보고 엄청 기뻤습니다. 이 구현을 통해서 어려운 기술을 개발하는 것에 대한 자신감이 생긴 계기가 되었습니다.

협업 시스템의 문제점

  • 프로젝트를 개발할 때 먼저 기능 정의서를 만들어 놓고 자유롭게 개발을 하는 식으로 진행이 되었는데 마감 기한이 다다랐어도 프론트 개발이 끝내 완성되지 않아 프론트쪽으로 투입했었습니다. 당시에 애자일 방법론을 도입하고 정해진 기간에 맞춰서 개발을 진행하였다면 더 좋은 프로젝트결과가 나올 수 있었을 것 같습니다.

Guard 리팩토링

  • Nest.js에는 Exception을 전체적으로 관리해주는 어노테이션인 Guard가 있습니다. Mapping 함수 위에 붙여 넣으면 해당 예외를 통과 해야지 자연스럽게 요청이 들어가는 구조입니다. 처음 개발할 때에는 직접 메서드 안에서 예외처리를 했지만 나중에 리팩토링을 하면서 Guard 어노테이션으로 분리해서 코드가 훨씬 깔끔해졌습니다.

http → https

  • 아마존 aws 환경에서 Let's Encrypthttps를 적용하여서 보안 인증서를 받았습니다.

포트폴리오

URL

link

블로그

URL 링크
link

깃허브

깃허브
댓글