미리보기
기본 정보
자기소개
- 안녕하세요 신입 백엔드 개발자 김영민입니다!
- 블로그 깃허브 등 다양한 개발 활동을 꾸준하게 이어가고 있습니다.
- 서버 배포를 좋아하여 홈 서버에 서버 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
를 사용할지 고민하였습니다.WebClient
는Non-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 를 하였다.
기본적으로
gatsby
는next.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 Encrypt
로https
를 적용하여서 보안 인증서를 받았습니다.