-
Notifications
You must be signed in to change notification settings - Fork 0
/
component---src-template-post-tsx-2c441cd7b6088d54c4c0.js
2 lines (2 loc) · 37 KB
/
component---src-template-post-tsx-2c441cd7b6088d54c4c0.js
1
2
"use strict";(self.webpackChunk_portfolio_blog=self.webpackChunk_portfolio_blog||[]).push([[412,980],{3392:function(t,e,r){r.d(e,{E:function(){return i}});var n=JSON.parse('{"author":"Dylan","title":"Blog","titleTemplate":"%s · Dylan","placeholder":"/profile.jpg","siteUrl":"https://justsloth.com","description":"08시 20분 개발기록","twitterUserName":"","github":"HyunTaek5","secondary":"https://eight20.tistory.com"}'),o=JSON.parse('{"config":{"name":"오현택","role":"Software Engineer","bio":["분야 상관없이 다양한 도메인에 관심이 많은 <string>3년차 소프트웨어 엔지니어</string>","<string>누적 회원수 300만</string>의 에듀테크 아키텍쳐 설계 및 백엔드 서비스 개발","운영 환경 개선을 위한 모니터링 및 로그 시스템 개발"],"github":"https://github.com/HyunTaek5","blog":"https://eight20.tistory.com","email":"[email protected]"},"careers":{"title":"경력","list":[{"name":"EntropyParadox","position":"Software Engineer","department":"백엔드 엔지니어","startDate":"2021.05","endDate":"2024.01","descriptions":["웹 MVP 프로젝트를 End-To-End로 아키텍쳐 설계/구축 및 서비스를 운영하였습니다.","1년 11개월간 병역 특례를 받아 병역의 의무를 수행하였습니다."],"projects":[{"name":"튼튼영어 LIVE","startDate":"2021.06","endDate":"2023.01","descriptions":["초등학생 대상으로 초등영어 콘텐츠를 1대1 화상으로 제공하는 누적 회원수 300만명의 에듀테크 서비스입니다. 느린 응답 속도 개선을 목표로 서버 안정화 작업을 진행하였고, 부하테스트와 모니터링 시스템을 구축하여 안정성을 향상시켰습니다."],"which":[{"title":"API 서버 애플리케이션 및 게이트웨이 구축","subTitle":["프론트에서 데이터를 조회하여 처리하던 로직을 백엔드에서 정렬,필터하여 조회후 반환하는 방식으로 전환하였고, 한번에 최대 30개의 데이터만 조회가능하도록 페이징 처리하여 대시보드 화면의 로딩 시간 약 2초 개선 및 쿼리 성능 향상 (2100ms ➞ 800ms)","랭킹 조회시 랭킹 산정하던 로직을 5분 단위 스케줄링 작업의 별도 로직으로 분리하였고, Redis 캐시의 TTL을 5분으로 설정하여 특정 API 엔드포인트 호출시 부하가 걸리던 현상 개선 (서버 CPU 로드율 약 15% 개선)"]},{"title":"모니터링, 알림 시스템의 구축을 통한 서버 부하 및 장애 발생 여부 확인 자동화","subTitle":["부하 시나리오 테스트를 통해 API의 성능 및 신뢰성 검증","장애 발생시 연결된 슬랙 채널을 통해 부하, 장애 알림 발송"]}]},{"name":"슈퍼스쿨","startDate":"2021.12","endDate":"2023.02","descriptions":["학교 생활과 관련된 출결, 교과활동, 행정관리 작업을 지원하고, NICE와 연계된 대시보드를 제공하는 누적 학생 수 3만명의 에듀 테크 서비스입니다. 기존 레거시 코드의 느린 응답 속도 개선을 목표로 서버 안정화 작업을 진행하였고, 부하테스트와 추가적인 리소스 모니터링 시스템을 구축하여 가용성과 안정성을 향상시켰습니다."],"which":[{"title":"API 서버 애플리케이션 구축 및 레거시 리팩토링","subTitle":["기존 레거시 코드 중 잦은 장애가 발생하던 부분을 REST API로 리팩토링","불필요한 쿼리의 반복 실행을 방지하기 위해 Redis Cache 도입 (1000ms ➞ 600ms)"]},{"title":"학생 출결 데이터 시각화 대시보드 REST API 구현 및 레거시 성능 개선","subTitle":["GraphQL에서 1:N 관계에서 발생되는 N+1 슬로우 쿼리에 Data Loader를 적용하여 1번의 조회 쿼리로 개선 (1700ms ➞ 900ms)","프론트에서 전체 데이터를 조회하여 처리하던 정렬/필터 로직을 백엔드에서 정렬,필터하여 조회후 반환하는 방식으로 전환하였고, 한번에 최대 30개의 데이터만을 조회가능하도록 페이징 처리하여 대시보드 화면의 로딩 시간 3초 개선 및 쿼리 성능 향상 (3700ms ➞ 700ms)"]},{"title":"모니터링 & 알림 시스템 구축을 통해 서버 부하 및 장애 확인의 자동화 ","subTitle":["부하 시나리오 테스트를 통해 API의 성능 및 신뢰성 검증"]}]},{"name":"바나나파츠","startDate":"2022.12","endDate":"2024.01","descriptions":["오프라인에서 발행되던 전기부품의 정보 및 뉴스, 부품 판매 및 견적을 제공하는 포털 서비스입니다. 판매자의 대량 부품 판매 등록 파이프라인의 목표 처리량 5000건을 안정적으로 처리하면서 서버의 고가용성을 유지하기 위해 부하테스트와 모니터링을 통해 안정성을 향상시켰습니다."],"which":[{"title":"API 서버 애플리케이션 및 대량 부품 등록 파이프라인 구축","subTitle":["파이프라인 구조 : Server ➞ MQ ➞ Parsing ➞ MQ ➞ Validation ➞ MQ ➞ User Notice","Non-blocking, 순차 처리 신뢰성을 위해 Redis 기반 Bull Message Queue 도입","알림 발송 서비스와 비즈니스 로직간의 결합성을 낮추기 위해 메시지 기반 유저 알림 비동기 발송 구현"]},{"title":"실시간 인기 위키 랭킹 처리를 위한 Worker, REST API 구현 및 성능 개선","subTitle":["일별/시간대별 위키 조회수의 산정 범위를 30분 단위에서 10분 단위로 변경하여 랭킹 산정시 부하를 분산시키고, 인기순 위키 조회시 Redis 캐시의 TTL을 10분으로 설정하여 조회 성능 향상 (2500ms ➞ 500ms)","쿼리문에 Prepare Statement를 사용하여 쿼리 인젝션 공격 방어 및 옵티마이저 최적화"]},{"title":"Jest, Mockito를 활용한 핵심 비즈니스 로직의 TDD 도입","subTitle":["유닛 테스트 및 E2E 테스트를 통해 핵심 비즈니스 로직의 신뢰성 검증"]},{"title":"모니터링 및 장애 알림 시스템 구축을 통한 API 서버 부하 및 장애 슬랙 알림 자동화","subTitle":["부하 시나리오 테스트를 통해 파이프라인과 API의 성능 및 신뢰성 검증"]}]},{"name":"데브옵스","startDate":"2022.01","endDate":"2024.01","descriptions":["사내 프로젝트 배포, 알림, 모니터링 관련 시스템 구축 및 운영"],"which":[{"title":"AWS Elastic Beanstalk, Code deploy를 사용한 Blue-Green 무중단 배포","subTitle":[]},{"title":"Github Action, Docker를 사용한 Rolling 무중단 배포","subTitle":["수동으로 배포하던 프로세스를 Github Action을 통해 자동화하여 배포 시간을 단축","AS-IS : 30분","TO-BE : 8분"]},{"title":"Winston 기반 로그 시스템 신규 구축","subTitle":[]},{"title":"Grafana, Prometheus 기반 APM, 인프라 모니터링 시스템을 구축하여 서비스의 운영 단계 모니터링 관제 추가","subTitle":["Prometheus를 통해 서비스의 CPU, Memory, Network, Disk 등의 리소스 모니터링","Grafana를 통해 Prometheus의 데이터를 시각화하여 모니터링 대시보드 구축","Alert Manager를 통해 서비스의 장애 발생시 슬랙 장애 알림 자동화"]},{"title":"S3, Cloud Front를 이용한 정적 리소스 비용 절감 및 CDN 적용","subTitle":[]}]}]}]},"skills":{"title":"기술","list":[{"title":"Language","descriptions":[{"title":"TypeScript","subTitle":[]},{"title":"JavaScript","subTitle":[]},{"title":"Java","subTitle":[]},{"title":"Kotlin","subTitle":[]},{"title":"Python","subTitle":[]}]},{"title":"Server","descriptions":[{"title":"NestJs","subTitle":[]},{"title":"ExpressJs","subTitle":[]},{"title":"Spring Boot","subTitle":[]},{"title":"Django","subTitle":[]},{"title":"Flask","subTitle":[]}]},{"title":"Database","descriptions":[{"title":"MySQL","subTitle":[]},{"title":"PostgreSQL","subTitle":[]},{"title":"MSSQL","subTitle":[]}]},{"title":"ORM","descriptions":[{"title":"TypeORM","subTitle":[]},{"title":"Prisma","subTitle":[]},{"title":"Spring Data JPA","subTitle":[]}]},{"title":"DevOps","descriptions":[{"title":"AWS","subTitle":["EC2, S3, RDS, SQS, CloudFront","Elastic Beanstalk, Code Deploy","ECR, Amplify"]},{"title":"Web Server","subTitle":["Nginx, PM2"]},{"title":"Cache","subTitle":["Redis"]},{"title":"Message Queue","subTitle":["RabbitMQ, BullMQ"]},{"title":"Monitoring","subTitle":["Grafana, Prometheus, Alert Manager"]},{"title":"Log","subTitle":["Winston, Promtail, Loki"]},{"title":"CI/CD","subTitle":["Jenkins","Github Action"]}]},{"title":"Client","descriptions":[{"title":"NextJs","subTitle":[]},{"title":"React","subTitle":[]},{"title":"Tailwind CSS","subTitle":[]}]}]},"hobby":{"description":"취미","list":[{"title":"블로깅","url":"https://eight20.tistory.com","descriptions":["개발하다 발생했던 이슈와 원인, 해결 방법을 글로 작성하여 블로그에 공유합니다.","3년째 꾸준히 작성하고 있으며, 누적 방문자수 24000명을 기록하고 있습니다.","https://eight20.tistory.com에서 기존 글을 확인하실 수 있습니다."]},{"title":"카페 탐방","url":null,"descriptions":["평균 평점 4.0 이상인 카페 100개 이상 맛집 리스트","분위기 좋은 카페/맛있는 커피를 찾아 여행다니면서 기록하고 있어요."]},{"title":"사이드 프로젝트","url":null,"descriptions":["적용해보고 싶은 기술을 가지고, 서비스를 만듭니다.","주변 사람들이 있으면 좋겠다라는 이야기를 하는 주제로, 누군가에게 도움이 되는 프로젝트를 진행하고 있어요."]},{"title":"개발자 행사 준비 및 기획","url":null,"descriptions":["개발 관련 오프라인 밋업, 컨퍼런스를 기획하고, 준비하는 걸 좋아해요.","기회가 될 때마다 100명 규모의 기술 컨퍼런스, 해커톤, 네트워킹 행사를 기획하고 있어요!"]}]},"activities":{"description":"활동","list":[{"title":"2021.01 ~ 2021.02 AI 실리콘밸리 헤드스타트 인턴십 부트캠프 1기 수료","url":"http://techeer.net"},{"title":"2021.03 ~ Techeer 1기","url":"https://github.com/techeer-sv"},{"title":"2022.02 ~ 2022.08 [테커 파트너스] Backend 파트 멘토","url":null},{"title":"2022.05.26 ~ 2022.05.27 [한국공학대학교 x 테커] 2023 실리콘밸리 아이디어 해커톤 멘토","url":null},{"title":"2023.04 ~ 2023.07 자바 ORM 표준 JPA 프로그래밍 스터디 팀장","url":null},{"title":"2023.07.28 [D.camp x 티타임즈 x 테커] 2023 테커 하계 부트캠프 쿼리 튜닝 세션","url":null},{"title":"2023.11 ~ 어쩌다 Nest 팀장","url":"https://github.com/eojjeoda-nest"}]}}');function i(){return{profile:n,resume:o}}},6268:function(t,e,r){r.r(e),r.d(e,{default:function(){return O}});var n=r(5668),o=r(1228),i=r(1004),a=r(6448);const s=(0,i.c)("div",{target:"e2oxk7i0"})("max-width:900px;width:100%;margin:4rem auto;box-sizing:border-box;padding:2rem 2rem;border-top:1px solid ",(t=>{let{theme:e}=t;return e.colors.PRIMARY.ACCENT_2}),";&>p{margin-bottom:1.5rem;font-size:1.8rem;",(t=>{let{theme:e}=t;return(0,a.gV)("color:",e.colors.PRIMARY.FOREGROUND,";","")}),";}&>a{border:none!important;outline:none!important;transition:none!important;background:none!important;&:hover{background:none!important;border-color:none!important;}}");var l=r(7e3);const c=()=>{const t=(0,n.useRef)(null),{0:e,1:r}=(0,n.useState)({status:"pending"});return(0,o.Kk)((()=>{var e,n,o;if((null!==(e=null===(n=t.current)||void 0===n?void 0:n.children)&&void 0!==e?e:[]).length>0)return;const i=document.createElement("script");i.onload=()=>{r({status:"success"})},i.onerror=()=>{r({status:"failure"})},i.async=!0,i.src="https://utteranc.es/client.js",i.setAttribute("repo","HyunTaek5/justsloth"),i.setAttribute("issue-term","title"),i.setAttribute("theme","github-light"),i.setAttribute("crossorigin","anonymous"),null===(o=t.current)||void 0===o||o.appendChild(i)})),(0,l.jsxs)(s,{children:["success"!==e.status&&(0,l.jsx)(o.c8,{size:50}),(0,l.jsx)("div",{ref:t})]})};r(5816);var u=r(384);const p=(0,i.c)("section",{target:"e1jwzgfa1"})({name:"ufexmo",styles:"width:100%;max-width:900px;padding:2rem;margin-left:auto;margin-right:auto;@media screen and (max-width: 1024px){padding:1rem;}"}),f=(0,i.c)(p,{target:"e1jwzgfa0"})("width:calc(100vw - 400px);@media screen and (max-width: 1308px){width:calc(100vw - 408px);}@media screen and (max-width: 1024px){width:calc(100vw - 8px);}",(t=>{let{theme:e}=t;return(0,a.gV)("p>img{width:100%;}p{color:",e.colors.PRIMARY.ACCENT_8,";font-weight:400;line-height:1.6;letter-spacing:-0.02rem;}p,table,ul,blockquote,ol{font-size:1rem;margin:0 0 2rem;}center{color:",e.colors.PRIMARY.ACCENT_5,";font-size:0.8rem;font-weight:400;line-height:1.5;letter-spacing:-0.02rem;margin:0 0 2rem;}p+center,iframe+center{margin-top:-1rem;}h1,h2,h3,h4,h5{position:relative;color:",e.colors.PRIMARY.FOREGROUND,";line-height:1.2;scroll-margin-top:60px;letter-spacing:-0.02rem;font-weight:600;background:none;&>a{color:",e.colors.PRIMARY.FOREGROUND,";opacity:0;border:none;position:absolute;top:50%;left:0;transform:translate(-100%, -50%);padding-right:4px;}&:hover>a{color:",e.colors.PRIMARY.FOREGROUND,";background:none;border:none;opacity:1;}}h2:not(:first-of-type),h3:not(:first-of-type),h4:not(:first-of-type){margin-top:3rem;}h1,h2,h3,h4,h5{margin:0 0 1.25rem;}h1,h2{font-size:1.8rem;filter:brightness(1);}h3{font-size:1.4rem;filter:brightness(1.3);}h4{filter:brightness(1.5);font-size:1.1rem;padding-bottom:0.25rem;text-transform:uppercase;}ul,ol{padding-left:1.5rem;box-sizing:border-box;line-height:1.6;& ul{margin-top:8px;}& ul,& ol{margin-bottom:0;}}ul{list-style:disc;}ol{list-style:decimal;}ul li{margin-bottom:0.5rem;&::marker{font-weight:600;color:",e.colors.CYAN.DEFAULT,";}}ol li{margin-bottom:0.5rem;&::marker{font-weight:600;color:",e.colors.CYAN.DEFAULT,";}}li>a{white-space:inherit;word-wrap:break-word;}li{color:",e.colors.PRIMARY.FOREGROUND,";& code{font-weight:600;color:",e.colors.CYAN.DEFAULT,";white-space:inherit;& * span{white-space:inherit;}& * span:not([class='grvsc-source']){padding-left:0!important;}}}iframe{margin-bottom:2rem;}div[class*='markdown-wrapper']{font-size:0.9rem;text-size-adjust:none;margin:1rem -1rem;overflow-x:auto;overflow-y:hidden;box-sizing:border-box;background-color:var(--scrollbar-background);padding-left:2rem;scrollbar-width:8px;scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-background);&::-webkit-scrollbar{background:var(--scrollbar-background);height:8px;width:8px;}&::-webkit-scrollbar-thumb{background:var(--scrollbar-thumb);border-radius:0;}@media screen and (min-width: 1350px){margin-left:-3.5rem;margin-right:-3.5rem;margin-bottom:2rem;}@media screen and (max-width: 1024px){padding-left:1rem;}}pre{border-radius:0;float:left;margin-bottom:0;margin-top:0;min-width:calc(100% + 1rem);padding:1rem 1rem 1rem 0;-webkit-font-smoothing:subpixel-antialiased;overflow:initial;white-space:pre;font-family:var(--code-font-family);word-wrap:normal;hyphens:none;line-height:1.5;tab-size:2;word-break:normal;word-spacing:normal;&>code{font-weight:600;color:",e.colors.CYAN.DEFAULT,";white-space:inherit;& * span{white-space:inherit;}& * span:not([class='grvsc-source']){padding-left:0!important;}}}p>code{font-weight:600;color:",e.colors.CYAN.DEFAULT,";white-space:inherit;& * span{white-space:inherit;}& * span:not([class='grvsc-source']){padding-left:0!important;}}img[class='gatsby-resp-image-image']{box-shadow:none!important;}img[class='gatsby-resp-image-image'][alt]:after{display:flex;justify-content:center;align-items:center;position:absolute;top:0;left:0;width:100%;height:100%;background:",e.colors.PRIMARY.BACKGROUND,";font-weight:200;content:'이미지를 표시할 수 없어요. :(';}blockquote{background:",e.colors.PRIMARY.ACCENT_2,";margin:0 -1rem;margin-bottom:2rem;padding:1rem 1rem;border-left:6px solid ",e.colors.CYAN.DEFAULT,";&>p{margin-bottom:0;}@media screen and (min-width: 1350px){margin-left:-3.5rem;margin-right:-3.5rem;}@media screen and (max-width: 1024px){padding-left:1rem;}}","")}),";"),d=t=>{const e=(0,u.useLocation)(),r=(0,n.useRef)(null),o=(0,n.useMemo)((()=>t.html.replaceAll("<pre",'<div class="markdown-wrapper"><pre').replaceAll("</pre>","</pre></div>")),[]);return(0,n.useEffect)((()=>{var t,n;Array.from(null!==(t=null===(n=r.current)||void 0===n?void 0:n.getElementsByTagName("*"))&&void 0!==t?t:[]).filter((t=>{var e,r;return Number(null!==(e=null===(r=t.tagName)||void 0===r?void 0:r[1])&&void 0!==e?e:"999")<6})).forEach((t=>{if(t.getElementsByTagName("a").length>0)return;const e=t.innerHTML.replaceAll(" ","-");t.innerHTML='\n <a href="#'+e+'" aria-label="'+e+' permalink">\n <svg aria-hidden="true" focusable="false" height="16" version="1.1" viewBox="0 0 16 16" width="16" \n stroke=\'currentColor\'\n stroke-width=\'1\'\n stroke-linecap=\'round\'\n stroke-linejoin=\'round\'\n fill=\'none\'\n shape-rendering=\'geometricPrecision\'>\n <path\n fill-rule="evenodd" \n d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z">\n </path>\n </svg>\n </a>\n '+t.innerHTML+"\n ",t.id=e})),window.onload=()=>{setTimeout((()=>{const t=decodeURIComponent(e.hash).substring(1);var r,n;t&&window.scrollTo(0,null!==(r=null===(n=document.getElementById(t))||void 0===n?void 0:n.getBoundingClientRect().bottom)&&void 0!==r?r:0)}))}}),[]),(0,l.jsx)("div",{children:(0,l.jsx)(f,{ref:r,dangerouslySetInnerHTML:{__html:o}})})};var m=r(9300);const h=(0,i.c)("header",{target:"eon93v07"})({name:"1azakc",styles:"text-align:center"}),g=(0,i.c)("div",{target:"eon93v06"})({name:"1j1kikd",styles:"display:flex;flex-direction:column;justify-content:flex-start;align-items:center;max-width:900px;padding:2rem;margin-left:auto;margin-right:auto;@media screen and (max-width: 1024px){padding:1.5rem 1rem;}"}),b=(0,i.c)("div",{target:"eon93v05"})({name:"715507",styles:"display:flex;justify-content:space-between;align-items:center;width:100%;@media screen and (max-width: 1024px){flex-direction:column-reverse;align-items:flex-start;justify-content:center;}"}),v=(0,i.c)("div",{target:"eon93v04"})({name:"1u6n871",styles:"display:flex;flex-direction:column;justify-content:center;align-items:flex-start"}),x=(0,i.c)("div",{target:"eon93v03"})({name:"1yvy03y",styles:"display:flex;gap:0.5rem;margin-bottom:1.5rem"}),y=(0,i.c)("button",{target:"eon93v02"})("display:flex;justify-content:center;align-items:center;width:30px;height:30px;outline:none;border:none;border-radius:15px;cursor:pointer;padding:0;",(t=>{let{theme:e}=t;return(0,a.gV)("background:",e.colors.PRIMARY.FOREGROUND,";color:",e.colors.PRIMARY.BACKGROUND,";","")}),";"),w=(0,i.c)("div",{target:"eon93v01"})({name:"1cdt2kf",styles:"display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;width:100%;padding:0 1.5rem;&>h1{text-align:left;}"}),j=(0,i.c)("div",{target:"eon93v00"})({name:"1d3w5wq",styles:"width:100%"});var T=r(8440);const k=t=>{const{title:e,tags:r,date:n,author:i,timeToRead:a,children:s}=t,[c,p,f]=(0,T.HI)(n),d=(0,u.useLocation)(),k=(0,o.ui)(),S=c+"년 "+Number(p)+"월 "+Number(f)+"일";return(0,l.jsx)(h,{children:(0,l.jsxs)(g,{children:[(0,l.jsxs)(w,{children:[(0,l.jsx)(o.a,{as:"h1",size:40,weight:800,children:e}),(0,l.jsx)(o.SU,{y:1}),r&&(0,l.jsx)(o.q4,{row:!0,wrap:"wrap",gap:.5,children:r.map((t=>(0,l.jsxs)(o.kt,{size:"large",children:["#",t]},t)))}),(0,l.jsx)(o.SU,{y:1}),(0,l.jsxs)(b,{children:[(0,l.jsxs)(v,{children:[(0,l.jsxs)(o.a,{size:16,as:"span",children:["Written by ",(0,l.jsx)(m.Link,{to:"/",children:i})]}),(0,l.jsx)(o.SU,{y:.25}),(0,l.jsxs)(o.a,{size:14,as:"span",children:[S," · ",a," min read"]})]}),(0,l.jsxs)(x,{children:[(0,l.jsx)(o.o5,{text:"링크드인 공유",position:"top",children:(0,l.jsx)(y,{onClick:function(){k.success("링크드인 공유 페이지로 이동합니다."),window.open("https://www.linkedin.com/feed/?shareActive=true&text="+decodeURIComponent(d.href),"_blank")},children:(0,l.jsxs)("svg",{viewBox:"0 0 24 24",width:"16",height:"16",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",fill:"none",shapeRendering:"geometricPrecision",children:[(0,l.jsx)("path",{d:"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"}),(0,l.jsx)("rect",{x:"2",y:"9",width:"4",height:"12"}),(0,l.jsx)("circle",{cx:"4",cy:"4",r:"2"})]})})}),(0,l.jsx)(o.o5,{text:"링크 복사",position:"top",children:(0,l.jsx)(y,{onClick:function(){(0,o.kT)(decodeURIComponent(d.href)),k.success("링크를 복사했습니다.")},children:(0,l.jsxs)("svg",{viewBox:"0 0 24 24",width:"16",height:"16",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round",strokeLinejoin:"round",fill:"none",shapeRendering:"geometricPrecision",children:[(0,l.jsx)("path",{d:"M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71"}),(0,l.jsx)("path",{d:"M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71"})]})})})]})]})]}),(0,l.jsx)(o.SU,{y:1}),(0,l.jsx)(j,{children:s})]})})};var S=r(6252);const R=(0,i.c)("ol",{target:"eo4qlex1"})({name:"1o02nna",styles:"padding-left:1.5rem;box-sizing:border-box;line-height:1.6;list-style:decimal"}),A=(0,i.c)("li",{target:"eo4qlex0"})((t=>{let{theme:e,timeToRead:r}=t;return(0,a.gV)("margin-bottom:0.5rem;&::marker{font-weight:600;color:",e.colors.CYAN.DEFAULT,";}&::after{content:'- ",r,"분';margin-left:0.2rem;font-size:0.8rem;}&>span{cursor:pointer;border-bottom:2px solid ",e.colors.CYAN.DEFAULT,";font-weight:600;text-decoration:none;color:",e.colors.PRIMARY.FOREGROUND,";transition:all 0.1s ease-out;&:hover{background:",e.colors.CYAN.DEFAULT,";border-top:2px solid ",e.colors.CYAN.DEFAULT,";color:",e.colors.PRIMARY.BACKGROUND,";}}","")}),";"),E=t=>{const{name:e,posts:r}=t;return(0,l.jsx)(o.aS,{title:e,card:!0,size:"medium",subtitle:"시리즈의 글 ("+r.length+"개)",children:(0,l.jsx)(o.q4,{children:(0,l.jsx)(R,{children:r.map((t=>(0,l.jsx)(A,{timeToRead:t.timeToRead,children:(0,l.jsx)("span",{onClick:()=>{return e=t.slug,void(0,m.navigate)(e);var e},children:t.name})},t.name)))})})})};var P=r(3392);var O=t=>{const{profile:e}=(0,P.E)(),{allMarkdownRemark:r}=t.data,{nodes:o,group:i}=r,{timeToRead:a,html:s}=t.data.markdownRemark,{title:u,date:p,image:f,tags:m,series:h}=t.data.markdownRemark.frontmatter,g=(0,n.useCallback)((function(){return o.filter((t=>t.frontmatter.series)).filter((t=>t.frontmatter.series===h)).map((t=>({name:t.frontmatter.title,timeToRead:t.timeToRead,slug:t.fields.slug})))}),[t.data]);return(0,l.jsxs)("div",{children:[(0,l.jsx)(S.y,{name:u,image:null==f?void 0:f.publicURL,isPost:!0}),(0,l.jsx)(k,{title:u,date:p,image:null==f?void 0:f.publicURL,tags:m,timeToRead:a,author:e.author,children:h&&i&&(0,l.jsx)(E,{name:h,posts:g()})}),(0,l.jsx)(d,{html:s}),(0,l.jsx)("section",{id:"comments"}),(0,l.jsx)(c,{})]})}},6580:function(t,e,r){var n=r(5156),o=r(580),i=TypeError;t.exports=function(t){if(n(t))return t;throw new i(o(t)+" is not a function")}},6928:function(t,e,r){var n=r(4436),o=String,i=TypeError;t.exports=function(t){if(n(t))return t;throw new i(o(t)+" is not an object")}},8880:function(t,e,r){var n=r(9704),o=r(1212),i=r(5827),a=function(t){return function(e,r,a){var s,l=n(e),c=i(l),u=o(a,c);if(t&&r!=r){for(;c>u;)if((s=l[u++])!=s)return!0}else for(;c>u;u++)if((t||u in l)&&l[u]===r)return t||u||0;return!t&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},7740:function(t,e,r){var n=r(8256),o=n({}.toString),i=n("".slice);t.exports=function(t){return i(o(t),8,-1)}},264:function(t,e,r){var n=r(2704),o=r(5156),i=r(7740),a=r(1720)("toStringTag"),s=Object,l="Arguments"===i(function(){return arguments}());t.exports=n?i:function(t){var e,r,n;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,e){try{return t[e]}catch(r){}}(e=s(t),a))?r:l?i(e):"Object"===(n=i(e))&&o(e.callee)?"Arguments":n}},1747:function(t,e,r){var n=r(7204),o=r(5776),i=r(2060),a=r(8712);t.exports=function(t,e,r){for(var s=o(e),l=a.f,c=i.f,u=0;u<s.length;u++){var p=s[u];n(t,p)||r&&n(r,p)||l(t,p,c(e,p))}}},4952:function(t,e,r){var n=r(9160),o=r(8712),i=r(1520);t.exports=n?function(t,e,r){return o.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},1520:function(t){t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},8788:function(t,e,r){var n=r(5156),o=r(8712),i=r(9032),a=r(1588);t.exports=function(t,e,r,s){s||(s={});var l=s.enumerable,c=void 0!==s.name?s.name:e;if(n(r)&&i(r,c,s),s.global)l?t[e]=r:a(e,r);else{try{s.unsafe?t[e]&&(l=!0):delete t[e]}catch(u){}l?t[e]=r:o.f(t,e,{value:r,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return t}},1588:function(t,e,r){var n=r(899),o=Object.defineProperty;t.exports=function(t,e){try{o(n,t,{value:e,configurable:!0,writable:!0})}catch(r){n[t]=e}return e}},9160:function(t,e,r){var n=r(2088);t.exports=!n((function(){return 7!==Object.defineProperty({},1,{get:function(){return 7}})[1]}))},7496:function(t,e,r){var n=r(899),o=r(4436),i=n.document,a=o(i)&&o(i.createElement);t.exports=function(t){return a?i.createElement(t):{}}},540:function(t){t.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},5556:function(t,e,r){var n,o,i=r(899),a=r(540),s=i.process,l=i.Deno,c=s&&s.versions||l&&l.version,u=c&&c.v8;u&&(o=(n=u.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!o&&a&&(!(n=a.match(/Edge\/(\d+)/))||n[1]>=74)&&(n=a.match(/Chrome\/(\d+)/))&&(o=+n[1]),t.exports=o},9432:function(t){t.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},5460:function(t,e,r){var n=r(899),o=r(2060).f,i=r(4952),a=r(8788),s=r(1588),l=r(1747),c=r(8976);t.exports=function(t,e){var r,u,p,f,d,m=t.target,h=t.global,g=t.stat;if(r=h?n:g?n[m]||s(m,{}):n[m]&&n[m].prototype)for(u in e){if(f=e[u],p=t.dontCallGetSet?(d=o(r,u))&&d.value:r[u],!c(h?u:m+(g?".":"#")+u,t.forced)&&void 0!==p){if(typeof f==typeof p)continue;l(f,p)}(t.sham||p&&p.sham)&&i(f,"sham",!0),a(r,u,f,t)}}},2088:function(t){t.exports=function(t){try{return!!t()}catch(e){return!0}}},876:function(t,e,r){var n=r(2088);t.exports=!n((function(){var t=function(){}.bind();return"function"!=typeof t||t.hasOwnProperty("prototype")}))},2884:function(t,e,r){var n=r(876),o=Function.prototype.call;t.exports=n?o.bind(o):function(){return o.apply(o,arguments)}},7624:function(t,e,r){var n=r(9160),o=r(7204),i=Function.prototype,a=n&&Object.getOwnPropertyDescriptor,s=o(i,"name"),l=s&&"something"===function(){}.name,c=s&&(!n||n&&a(i,"name").configurable);t.exports={EXISTS:s,PROPER:l,CONFIGURABLE:c}},8256:function(t,e,r){var n=r(876),o=Function.prototype,i=o.call,a=n&&o.bind.bind(i,i);t.exports=n?a:function(t){return function(){return i.apply(t,arguments)}}},6960:function(t,e,r){var n=r(899),o=r(5156);t.exports=function(t,e){return arguments.length<2?(r=n[t],o(r)?r:void 0):n[t]&&n[t][e];var r}},531:function(t,e,r){var n=r(6580),o=r(3344);t.exports=function(t,e){var r=t[e];return o(r)?void 0:n(r)}},9888:function(t,e,r){var n=r(8256),o=r(2032),i=Math.floor,a=n("".charAt),s=n("".replace),l=n("".slice),c=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,u=/\$([$&'`]|\d{1,2})/g;t.exports=function(t,e,r,n,p,f){var d=r+t.length,m=n.length,h=u;return void 0!==p&&(p=o(p),h=c),s(f,h,(function(o,s){var c;switch(a(s,0)){case"$":return"$";case"&":return t;case"`":return l(e,0,r);case"'":return l(e,d);case"<":c=p[l(s,1,-1)];break;default:var u=+s;if(0===u)return o;if(u>m){var f=i(u/10);return 0===f?o:f<=m?void 0===n[f-1]?a(s,1):n[f-1]+a(s,1):o}c=n[u-1]}return void 0===c?"":c}))}},899:function(t,e,r){var n=function(t){return t&&t.Math===Math&&t};t.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof r.g&&r.g)||n("object"==typeof this&&this)||function(){return this}()||Function("return this")()},7204:function(t,e,r){var n=r(8256),o=r(2032),i=n({}.hasOwnProperty);t.exports=Object.hasOwn||function(t,e){return i(o(t),e)}},4088:function(t){t.exports={}},9924:function(t,e,r){var n=r(9160),o=r(2088),i=r(7496);t.exports=!n&&!o((function(){return 7!==Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},700:function(t,e,r){var n=r(8256),o=r(2088),i=r(7740),a=Object,s=n("".split);t.exports=o((function(){return!a("z").propertyIsEnumerable(0)}))?function(t){return"String"===i(t)?s(t,""):a(t)}:a},1656:function(t,e,r){var n=r(8256),o=r(5156),i=r(4128),a=n(Function.toString);o(i.inspectSource)||(i.inspectSource=function(t){return a(t)}),t.exports=i.inspectSource},5355:function(t,e,r){var n,o,i,a=r(9412),s=r(899),l=r(4436),c=r(4952),u=r(7204),p=r(4128),f=r(2923),d=r(4088),m="Object already initialized",h=s.TypeError,g=s.WeakMap;if(a||p.state){var b=p.state||(p.state=new g);b.get=b.get,b.has=b.has,b.set=b.set,n=function(t,e){if(b.has(t))throw new h(m);return e.facade=t,b.set(t,e),e},o=function(t){return b.get(t)||{}},i=function(t){return b.has(t)}}else{var v=f("state");d[v]=!0,n=function(t,e){if(u(t,v))throw new h(m);return e.facade=t,c(t,v,e),e},o=function(t){return u(t,v)?t[v]:{}},i=function(t){return u(t,v)}}t.exports={set:n,get:o,has:i,enforce:function(t){return i(t)?o(t):n(t,{})},getterFor:function(t){return function(e){var r;if(!l(e)||(r=o(e)).type!==t)throw new h("Incompatible receiver, "+t+" required");return r}}}},5156:function(t){var e="object"==typeof document&&document.all;t.exports=void 0===e&&void 0!==e?function(t){return"function"==typeof t||t===e}:function(t){return"function"==typeof t}},8976:function(t,e,r){var n=r(2088),o=r(5156),i=/#|\.prototype\./,a=function(t,e){var r=l[s(t)];return r===u||r!==c&&(o(e)?n(e):!!e)},s=a.normalize=function(t){return String(t).replace(i,".").toLowerCase()},l=a.data={},c=a.NATIVE="N",u=a.POLYFILL="P";t.exports=a},3344:function(t){t.exports=function(t){return null==t}},4436:function(t,e,r){var n=r(5156);t.exports=function(t){return"object"==typeof t?null!==t:n(t)}},5428:function(t){t.exports=!1},3572:function(t,e,r){var n=r(4436),o=r(7740),i=r(1720)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[i])?!!e:"RegExp"===o(t))}},3232:function(t,e,r){var n=r(6960),o=r(5156),i=r(1808),a=r(5104),s=Object;t.exports=a?function(t){return"symbol"==typeof t}:function(t){var e=n("Symbol");return o(e)&&i(e.prototype,s(t))}},5827:function(t,e,r){var n=r(2440);t.exports=function(t){return n(t.length)}},9032:function(t,e,r){var n=r(8256),o=r(2088),i=r(5156),a=r(7204),s=r(9160),l=r(7624).CONFIGURABLE,c=r(1656),u=r(5355),p=u.enforce,f=u.get,d=String,m=Object.defineProperty,h=n("".slice),g=n("".replace),b=n([].join),v=s&&!o((function(){return 8!==m((function(){}),"length",{value:8}).length})),x=String(String).split("String"),y=t.exports=function(t,e,r){"Symbol("===h(d(e),0,7)&&(e="["+g(d(e),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),r&&r.getter&&(e="get "+e),r&&r.setter&&(e="set "+e),(!a(t,"name")||l&&t.name!==e)&&(s?m(t,"name",{value:e,configurable:!0}):t.name=e),v&&r&&a(r,"arity")&&t.length!==r.arity&&m(t,"length",{value:r.arity});try{r&&a(r,"constructor")&&r.constructor?s&&m(t,"prototype",{writable:!1}):t.prototype&&(t.prototype=void 0)}catch(o){}var n=p(t);return a(n,"source")||(n.source=b(x,"string"==typeof e?e:"")),t};Function.prototype.toString=y((function(){return i(this)&&f(this).source||c(this)}),"toString")},568:function(t){var e=Math.ceil,r=Math.floor;t.exports=Math.trunc||function(t){var n=+t;return(n>0?r:e)(n)}},8712:function(t,e,r){var n=r(9160),o=r(9924),i=r(612),a=r(6928),s=r(5448),l=TypeError,c=Object.defineProperty,u=Object.getOwnPropertyDescriptor,p="enumerable",f="configurable",d="writable";e.f=n?i?function(t,e,r){if(a(t),e=s(e),a(r),"function"==typeof t&&"prototype"===e&&"value"in r&&d in r&&!r[d]){var n=u(t,e);n&&n[d]&&(t[e]=r.value,r={configurable:f in r?r[f]:n[f],enumerable:p in r?r[p]:n[p],writable:!1})}return c(t,e,r)}:c:function(t,e,r){if(a(t),e=s(e),a(r),o)try{return c(t,e,r)}catch(n){}if("get"in r||"set"in r)throw new l("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},2060:function(t,e,r){var n=r(9160),o=r(2884),i=r(2912),a=r(1520),s=r(9704),l=r(5448),c=r(7204),u=r(9924),p=Object.getOwnPropertyDescriptor;e.f=n?p:function(t,e){if(t=s(t),e=l(e),u)try{return p(t,e)}catch(r){}if(c(t,e))return a(!o(i.f,t,e),t[e])}},4536:function(t,e,r){var n=r(4424),o=r(9432).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return n(t,o)}},6456:function(t,e){e.f=Object.getOwnPropertySymbols},1808:function(t,e,r){var n=r(8256);t.exports=n({}.isPrototypeOf)},4424:function(t,e,r){var n=r(8256),o=r(7204),i=r(9704),a=r(8880).indexOf,s=r(4088),l=n([].push);t.exports=function(t,e){var r,n=i(t),c=0,u=[];for(r in n)!o(s,r)&&o(n,r)&&l(u,r);for(;e.length>c;)o(n,r=e[c++])&&(~a(u,r)||l(u,r));return u}},2912:function(t,e){var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,o=n&&!r.call({1:2},1);e.f=o?function(t){var e=n(this,t);return!!e&&e.enumerable}:r},5464:function(t,e,r){var n=r(2884),o=r(5156),i=r(4436),a=TypeError;t.exports=function(t,e){var r,s;if("string"===e&&o(r=t.toString)&&!i(s=n(r,t)))return s;if(o(r=t.valueOf)&&!i(s=n(r,t)))return s;if("string"!==e&&o(r=t.toString)&&!i(s=n(r,t)))return s;throw new a("Can't convert object to primitive value")}},5776:function(t,e,r){var n=r(6960),o=r(8256),i=r(4536),a=r(6456),s=r(6928),l=o([].concat);t.exports=n("Reflect","ownKeys")||function(t){var e=i.f(s(t)),r=a.f;return r?l(e,r(t)):e}},996:function(t,e,r){var n=r(6928);t.exports=function(){var t=n(this),e="";return t.hasIndices&&(e+="d"),t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.dotAll&&(e+="s"),t.unicode&&(e+="u"),t.unicodeSets&&(e+="v"),t.sticky&&(e+="y"),e}},824:function(t,e,r){var n=r(2884),o=r(7204),i=r(1808),a=r(996),s=RegExp.prototype;t.exports=function(t){var e=t.flags;return void 0!==e||"flags"in s||o(t,"flags")||!i(s,t)?e:n(a,t)}},6852:function(t,e,r){var n=r(3344),o=TypeError;t.exports=function(t){if(n(t))throw new o("Can't call method on "+t);return t}},2923:function(t,e,r){var n=r(5340),o=r(5436),i=n("keys");t.exports=function(t){return i[t]||(i[t]=o(t))}},4128:function(t,e,r){var n=r(899),o=r(1588),i="__core-js_shared__",a=n[i]||o(i,{});t.exports=a},5340:function(t,e,r){var n=r(5428),o=r(4128);(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:"3.35.1",mode:n?"pure":"global",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.35.1/LICENSE",source:"https://github.com/zloirock/core-js"})},6808:function(t,e,r){var n=r(5556),o=r(2088),i=r(899).String;t.exports=!!Object.getOwnPropertySymbols&&!o((function(){var t=Symbol("symbol detection");return!i(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},1212:function(t,e,r){var n=r(8116),o=Math.max,i=Math.min;t.exports=function(t,e){var r=n(t);return r<0?o(r+e,0):i(r,e)}},9704:function(t,e,r){var n=r(700),o=r(6852);t.exports=function(t){return n(o(t))}},8116:function(t,e,r){var n=r(568);t.exports=function(t){var e=+t;return e!=e||0===e?0:n(e)}},2440:function(t,e,r){var n=r(8116),o=Math.min;t.exports=function(t){var e=n(t);return e>0?o(e,9007199254740991):0}},2032:function(t,e,r){var n=r(6852),o=Object;t.exports=function(t){return o(n(t))}},1664:function(t,e,r){var n=r(2884),o=r(4436),i=r(3232),a=r(531),s=r(5464),l=r(1720),c=TypeError,u=l("toPrimitive");t.exports=function(t,e){if(!o(t)||i(t))return t;var r,l=a(t,u);if(l){if(void 0===e&&(e="default"),r=n(l,t,e),!o(r)||i(r))return r;throw new c("Can't convert object to primitive value")}return void 0===e&&(e="number"),s(t,e)}},5448:function(t,e,r){var n=r(1664),o=r(3232);t.exports=function(t){var e=n(t,"string");return o(e)?e:e+""}},2704:function(t,e,r){var n={};n[r(1720)("toStringTag")]="z",t.exports="[object z]"===String(n)},9552:function(t,e,r){var n=r(264),o=String;t.exports=function(t){if("Symbol"===n(t))throw new TypeError("Cannot convert a Symbol value to a string");return o(t)}},580:function(t){var e=String;t.exports=function(t){try{return e(t)}catch(r){return"Object"}}},5436:function(t,e,r){var n=r(8256),o=0,i=Math.random(),a=n(1..toString);t.exports=function(t){return"Symbol("+(void 0===t?"":t)+")_"+a(++o+i,36)}},5104:function(t,e,r){var n=r(6808);t.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},612:function(t,e,r){var n=r(9160),o=r(2088);t.exports=n&&o((function(){return 42!==Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},9412:function(t,e,r){var n=r(899),o=r(5156),i=n.WeakMap;t.exports=o(i)&&/native code/.test(String(i))},1720:function(t,e,r){var n=r(899),o=r(5340),i=r(7204),a=r(5436),s=r(6808),l=r(5104),c=n.Symbol,u=o("wks"),p=l?c.for||c:c&&c.withoutSetter||a;t.exports=function(t){return i(u,t)||(u[t]=s&&i(c,t)?c[t]:p("Symbol."+t)),u[t]}},1764:function(t,e,r){var n=r(5460),o=r(2884),i=r(8256),a=r(6852),s=r(5156),l=r(3344),c=r(3572),u=r(9552),p=r(531),f=r(824),d=r(9888),m=r(1720),h=r(5428),g=m("replace"),b=TypeError,v=i("".indexOf),x=i("".replace),y=i("".slice),w=Math.max;n({target:"String",proto:!0},{replaceAll:function(t,e){var r,n,i,m,j,T,k,S,R,A=a(this),E=0,P=0,O="";if(!l(t)){if((r=c(t))&&(n=u(a(f(t))),!~v(n,"g")))throw new b("`.replaceAll` does not allow non-global regexes");if(i=p(t,g))return o(i,t,A,e);if(h&&r)return x(u(A),t,e)}for(m=u(A),j=u(t),(T=s(e))||(e=u(e)),k=j.length,S=w(1,k),E=v(m,j);-1!==E;)R=T?u(e(j,E,m)):d(j,m,E,[],void 0,e),O+=y(m,P,E)+R,P=E+k,E=E+S>m.length?-1:v(m,j,E+S);return P<m.length&&(O+=y(m,P)),O}})},5816:function(t,e,r){r(1764)}}]);
//# sourceMappingURL=component---src-template-post-tsx-2c441cd7b6088d54c4c0.js.map