-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path_config.yml
288 lines (255 loc) · 15.3 KB
/
_config.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
# Site
repository: HyunTaek5/HyunTaek5.github.io
favicon: images/favicon.ico
# Content configuration version
version: 2
# Personal info
name: 오현택
title: 백엔드 엔지니어
email: oht1312@gmail.com
website: https://eight20.tistory.com
# Dark Mode (true/false/never)
darkmode: never
# Social links
#twitter_username: facespics
github_username: HyunTaek5
# stackoverflow_username: "00000001"
# dribbble_username: jekyll
# facebook_username: jekyll
# flickr_username: jekyll
linkedin_username: dylanoh
# xing_username: jekyll
# pinterest_username: jekyll
#youtube_username: globalmtb
# googleplus_username: +jekyll
# orcid_username: 0000-0000-0000-0000
# Additional icon links
#additional_links:
#- title: itsgoingto.be
# icon: fas fa-globe
# url: https://www.itsgoingto.be
# - title: another link
# icon: font awesome brand icon name (eg. fab fa-twitter) (https://fontawesome.com/icons?d=gallery&m=free)
# url: Link url (eg. https://google.com)
# Google Analytics and Tag Manager
# Using more than one of these may cause issues with reporting
gtm: "G-2HNCVHLKNS"
# gtag: "UA-00000000-0"
# google_analytics: "UA-00000000-0"
# About Section
about_title: Summary
about_profile_image: images/profile.png
about_content: | # this will include new lines to allow paragraphs
3년차 백엔드 엔지니어로 **누적 회원수 300만명**의 에듀테크 서비스 프로젝트를 리드하여 런칭한 경험이 있고, NestJS, Spring Boot를 활용한 API 서버를 개발하였습니다. Github Actions, Jenkins를 이용한 CI/CD, AWS 인프라 구축을 하면서 서비스를 런칭한 경험이 있습니다.
반복되는 프로세스를 코드를 통해 자동화하는 것을 좋아합니다. 프로젝트 환경 세팅의 자동화를 통해 프로젝트 세팅에 소요되는 시간을 개선한 경험이 있습니다.
수동으로 프로젝트 배포하는 프로세스의 자동화를 통해 수동 배포하던 시간을 단축시켰습니다.
content:
- title: Experience # Title for the section
layout: list # Type of content section (list/text)
content:
- layout: left
title: Entropy Paradox
link: entropyparadox.com
# link_text: boringcompany.com
sub_title: 백엔드 엔지니어
caption: 2021.05 - 2024.01
description: | # this will include new lines to allow paragraphs
웹 MVP 프로젝트를 End-To-End로 개발 및 서비스를 운영하였습니다.
사내에서 사용하던 서버 로깅 시스템을 Winston 기반 로그 시스템의 신규 구축을 통해 대체하고,
Docker 다중 컨테이너 기반 무중단 배포 자동화를 구축하였습니다.
또한 이메일 발송 관리 시스템을 개선한 경험이 있습니다.
Grafana, Prometheus 기반 APM, 인프라 모니터링 시스템을 구축하여 서비스의 운영 단계에서 모니터링 관제를 추가하였습니다.
- title: Services # Title for the section
layout: list # Type of content section (list/text)
content:
- layout: left
border: weak
title: 튼튼영어 LIVE
quote: >
초등영어 콘텐츠를 1대1 화상으로 제공하는 누적 회원수 300만명의 에듀테크 서비스입니다.
sub_title: >
1 대 1 화상영어 서비스 </br>
</br>
사용 기술 </br>
<mark>TypeScript</mark>, <mark>NestJs</mark>, <mark>TypeORM</mark>, <mark>MSSQL</mark>, <mark>Window Server 2012</mark>, <mark>Redis</mark>,
<mark>Nginx</mark>, <mark>Prometheus</mark>, <mark>Grafana</mark>, <mark>K6</mark>, <mark>PageCall</mark>, <mark>Socket.IO</mark>, <mark>Github Action</mark>
description: |
**API 서버 애플리케이션 및 게이트웨이 구축**
- 유저 중복 접속을 방지하기 위해 Socket.IO 도입
- 온라인 결제를 위해 PG사 연동 결제 시스템 구축
**API 성능 개선**
- 프론트에서 전체 데이터를 조회하여 처리하던 로직을 백엔드에서 정렬,필터하여 조회후 반환하는 방식으로 전환하였고, 한번에 최대 30개의 데이터만 조회가능하도록 페이징 처리하여 대시보드 화면의 로딩 시간 **약 2초 개선** 및 쿼리 성능 향상 **(2100ms ➞ 800ms)**
- 랭킹 기반 조회의 실시간 랭킹 산정 로직을 5분 단위 스케줄링 작업의 별개 로직으로 분리하고, Redis 캐시의 TTL을 5분으로 설정하여 특정 API 엔드포인트 반복 호출시 부하가 걸리던 현상 개선 **(서버 CPU 로드율 약 15% 개선)**
**모니터링, 알림 시스템의 구축을 통해 서버 부하 및 장애 발생 여부 확인 자동화**
- 부하 시나리오 테스트를 통해 API의 성능 및 신뢰성 검증
- 장애 발생시 연결된 슬랙 채널을 통해 부하, 장애 알림 발송
- layout: left
border: weak
title: 슈퍼스쿨
quote: >
학교 생활과 관련된 출결, 교과활동, 행정관리 작업을 지원하고, NICE와 연계된 대시보드를 제공하는 누적 학생 수 3만명의 에듀 테크 서비스입니다.
sub_title: >
학교 생활 종합 플랫폼</br>
</br>
사용 기술 </br>
<mark>TypeScript</mark>, <mark>NestJs</mark>, <mark>TypeORM</mark>, <mark>PostgreSQL</mark>, <mark>Redis</mark>,
<mark>Nginx</mark>, <mark>K6</mark>, <mark>Prometheus</mark>, <mark>Grafana</mark>, <mark>Github Action</mark>
link: superstudy.kr
description: |
**API 서버 애플리케이션 구축 및 레거시 리팩토링**
- 기존 레거시 코드 중 잦은 장애가 발생하던 부분을 REST API로 리팩토링
- 불필요한 쿼리의 반복 실행을 방지하기 위해 Redis Cache 도입 **(1000ms ➞ 600ms)**
**학생 출결 데이터 시각화 대시보드 REST API 구현 및 레거시 성능 개선**
- GraphQL에서 1:N 관계에서 발생되는 N+1 슬로우 쿼리에 Data Loader를 적용하여 1번의 조회 쿼리로 개선 **(1700ms ➞ 900ms)**
- 프론트에서 전체 데이터를 조회하여 처리하던 정렬/필터 로직을 백엔드에서 정렬,필터하여 조회후 반환하는 방식으로 전환하였고, 한번에 최대 30개의 데이터만을 조회가능하도록 페이징 처리하여 대시보드 화면의 로딩 시간 3초 개선 및 쿼리 성능 향상 **(3700ms ➞ 700ms)**
**모니터링 & 알림 시스템 구축을 통해 서버 부하 및 장애 확인의 자동화**
- 부하 시나리오 테스트를 통해 API의 성능 및 신뢰성 검증
- layout: left
title: 바나나 파츠
quote: >
오프라인에서 발행되던 전기부품의 정보 및 뉴스, 부품 판매 및 견적을 제공하는 포털 서비스입니다.
판매자의 대량 부품 판매 등록 파이프라인의 목표 처리량 5000건을 안정적으로 처리하면서 서버의 고가용성을 유지하기 위해 부하테스트와 모니터링을 통해 안정성을 향상시켰습니다.
sub_title: >
정밀 가공 부품 포털 서비스 <br/>
</br>
사용 기술 </br>
<mark>TypeScript</mark>, <mark>NestJs</mark>, <mark>TypeORM</mark>, <mark>MySQL</mark>, <mark>Docker</mark>,
<mark>Redis</mark>, <mark>Jest</mark>, <mark>Mockito</mark>, <mark>Nginx</mark>, <mark>K6</mark>, <mark>Prometheus</mark>,
<mark>Grafana</mark>, <mark>Github Action</mark>, <mark>NHN Cloud(SMS, Email, 알림톡)</mark>
link: banana.parts
description: |
**API 서버 애플리케이션 및 대량 부품 등록 파이프라인 구축**
- 파이프라인 구조 : Server ➞ MQ ➞ Parsing ➞ MQ ➞ Validation ➞ MQ ➞ User Notice
- Non-blocking, 순차 처리 신뢰성을 위해 Redis 기반 Bull Message Queue 도입
- 알림 발송 서비스와 비즈니스 로직간의 결합성을 낮추기 위해 메시지 기반 유저 알림 비동기 발송 구현
**실시간 인기 위키 랭킹 처리를 위한 Worker, REST API 구현 및 성능 개선**
- 일별/시간대별 위키 조회수의 산정 범위를 30분 단위에서 10분 단위로 변경하여 랭킹 산정시 부하를 분산시키고, 인기순 위키 조회시 Redis 캐시의 TTL을 10분으로 설정하여 조회 성능 향상 **(2500ms ➞ 500ms)**
- 쿼리문에 Prepare Statement를 사용하여 쿼리 인젝션 공격 방어 및 옵티마이저 최적화
**Jest, Mockito를 활용한 핵심 비즈니스 로직의 TDD 도입**
- 유닛 테스트 및 E2E 테스트를 통해 핵심 비즈니스 로직의 신뢰성 검증
**모니터링 및 장애 알림 시스템 구축을 통한 API 서버 부하 및 장애 슬랙 알림 자동화**
- 부하 시나리오 테스트를 통해 파이프라인과 API의 성능 및 신뢰성 검증
- title: Skill
layout: list
content:
- layout: left
title: Language
description: |
- TypeScript, Java, Kotlin, Python
- layout: left
title: Backend
description: |
- NestJs, ExpressJs, SpringBoot, Django, Flask
- TypeORM, Prisma, Spring Data JPA
- MySQL, PostgreSQL, MSSQL
- layout: left
title: DevOps
description: |
- Docker, Docker-compose
- Nginx, PM2
- Github Action, Jenkins
- Prometheus, Grafana, K6
- PromTail, Loki
- layout: left
title: Frontend
description: |
- ReactJS
- NextJS
- TailwindCSS
- title: Projects # Title for the section
layout: list # Type of content section (list/text)
content:
- layout: left
border: weak
title: 그님레
quote: >
월드 오브 탱크(World of Tanks) 유저의 전적 데이터, 레이팅 관련 수치를 시각화하여 제공해주는 서비스입니다.
<br/>디스코드 봇을 통해 서비스를 제공 중이며, DAU 100명 정도의 트래픽이 발생하고 있습니다.
sub_title: >
WoT(World of Tanks) 전적/레이팅 시각화 제공 서비스<br/> 2022.10 - 서비스 운영 중 </br>
</br>
사용 기술 </br>
<mark>TypeScript</mark>, <mark>NestJs</mark>, <mark>TypeORM</mark>, <mark>MySQL</mark>, <mark>Docker</mark>,
<mark>Redis</mark>, <mark>Jest</mark>, <mark>Mockito</mark>, <mark>Nginx</mark>, <mark>K6</mark>, <mark>Prometheus</mark>,
<mark>Grafana</mark>, <mark>Github Action</mark>, <mark>Discord.js</mark>
link: github.com/GeNimRe
additional_links:
- title: GeNimRe-Server
icon: fab fa-github
url: github.com/GeNimRe/server
- title: GeNimRe-Discord-Client
icon: fab fa-github
url: github.com/GeNimRe/discord-bot
description: | # this will include new lines to allow paragraphs
**NestJs를 사용하여 API 서버, 배치 애플리케이션 및 레이팅 계산 파이프라인 구축**
- 전적 데이터 기반 커뮤니티 비공식 레이팅(WN8) 계산 파이프라인 구축
- 파이프라인 구조 : Server ➞ MQ ➞ Wargaming API ➞ Parsing ➞ MQ ➞ Calculating ➞ Client Webhook
- 중복 유저 전적 조회시 발생하는 부하를 분산시키기 위해 Redis 캐시의 TTL 15분으로 설정하여 조회 성능 개선**(4500ms ➞ 1000ms)**
**Discord.js 기반 디스코드 봇 클라이언트 구현**
- API 서버. 배치에 장애가 발생하여 전적 데이터 계산에 시간이 오래 소모되는 경우에도 TimeOut 응답이 아닌 서버에서 발송한 웹훅을 수신받아 유저에게 제공할 수 있도록 웹훅 수신 구현
**도커 다중 컨테이너 기반 온프레미스 환경 배포**
- 개발 생산성의 향상을 위해 무중단 배포 자동화 구축, Rolling 배포방식의 CI/CD 도입
**APM | 인프라 모니터링 및 장애 알림 시스템 구축을 통한 서버 부하 및 장애 알림 자동화**
- 부하 시나리오 테스트를 통해 파이프라인과 API의 성능 및 신뢰성 검증
- layout: left
title: MaskOn(마스크온)
sub_title: >
코로나-19 매장내 마스크 착용률 정보를 5분마다 측정하여 매장별로 정리하여 유저에게 제공하는 플랫폼<br/> 2021.01 - 2021.03 </br>
</br>
사용 기술 </br>
<mark>Django</mark>, <mark>Docker</mark>, <mark>MySQL</mark>, <mark>AWS(RDS, EC2, Elastic Beanstalk)</mark>, <mark>Grafana</mark>, <mark>Prometheus</mark>
link: github.com/Team-Mask-On
additional_links:
- title: Team-Mask-On/Mask_On
icon: fab fa-github
url: github.com/Team-Mask-On/Mask_On
description: | # this will include new lines to allow paragraphs
**Django를 사용하여 유저, 매장, 마스크 착용률 도메인 기능 개발**
- Django/ Docker/ Docker-compose를 활용하여 API 서버 개발
- RaspberryPi에서 OpenCV와 YOLO v5를 통해 이미지에서 산출한 로그 및 센서 정보 서버 송수신 구현
- Postman 기반 API 문서화
**Docker 컨테이너 기반 AWS EC2 배포**
- 수동 배포 시간의 절약을 위한 배포 자동화, Blue/Green 배포방식의 CI/CD 도입
- Grafana, Prometheus 기반 도커 컨테이너 리소스 모니터링 도입
- title: Activity # Title for the section
layout: list # Type of content section (list/text)
content:
- layout: left
title: Techeer [테커]
sub_title: >
2021.03 ~
description: |
- 실리콘밸리 개발자의 **SW 개발자 커리어 그룹**
- 실리콘밸리 한달 살기, 기술 컨퍼런스, 해커톤, 네트워킹 행사 등 다수 경험
- layout: left
title: 멘토
description: |
- [테커 파트너스] **Backend 파트 멘토** 2022.02 ~ 2022.08
- [한국공학대학교 x 테커] **2023 실리콘밸리 개발자 아이디어 해커톤** 2023.05.26 ~ 2023.05.27
- [D.camp x 티타임즈 x 테커] **2023 테커 하계 부트캠프 쿼리 튜닝 세션** 2023.07.28
- layout: left
title: 스터디 팀장
description: |
- **자바 ORM 표준 JPA** 2023.04 ~ 2023.07
- **어쩌다 Nest** 2023.11 ~ 진행중
- layout: left
title: 부트캠프 참가
description: |
- **AI 실리콘밸리 헤드스타트 인턴십 부트캠프 1기 수료** 2021.01 ~ 2021.02
- title: Education # Title for the section
layout: list # Type of content section (list/text)
content:
- layout: left
title: 단국대학교
caption: 2020 - 현재
sub_title: 모바일 시스템 공학과 3학년
# Footer
footer_show_references: true
# references_title: References on request (Override references text)
# Build settings
remote_theme: sproogen/resume-theme
sass:
sass_dir: _sass
style: compressed
plugins:
- jekyll-seo-tag