{
    "componentChunkName": "component---src-templates-index-jsx",
    "path": "/index/projects/BackEnd/Cardme/",
    "result": {"data":{"directorys":{"nodes":[{"id":"25a7ea47-9810-57c2-aed3-170559f514a4","name":"posts"},{"id":"f5729257-7c38-58ab-830f-1d18809687ec","name":"develop"},{"id":"70c762b1-287c-5a42-b45b-c7f7fb8095dc","name":"projects"}]},"markdown":{"html":"<h2 id=\"목차\" style=\"position:relative;\"><a href=\"#%EB%AA%A9%EC%B0%A8\" aria-label=\"목차 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" 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\"></path></svg></a>목차</h2>\n<blockquote>\n<ul>\n<li><a href=\"#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B0%9C%EC%9A%94\">개요</a></li>\n<li><a href=\"#%EC%82%AC%EC%9A%A9%EC%98%88%EC%8B%9C\">사용예시</a></li>\n<li><a href=\"#%EA%B8%B0%EB%8A%A5%EA%B5%AC%ED%98%84\">기능구현</a></li>\n</ul>\n</blockquote>\n<h2 id=\"프로젝트-개요\" style=\"position:relative;\"><a href=\"#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B0%9C%EC%9A%94\" aria-label=\"프로젝트 개요 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" 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\"></path></svg></a>프로젝트 개요</h2>\n<img alt=\"cardme 로고\" src=\"https://user-images.githubusercontent.com/33706043/140515262-14d29e79-c3f1-4660-875e-723285c9edcc.png\" width=\"30%\">\n<p>개발자들의 Github 및 블로그의 여러 프로필을 둘러보다 보면 Git Stat 을 보기 쉽게 디자인해놓은 SVG 들을 간혹 볼 수 있었습니다.<br>\n이러한 서비스는 보통 마크다운이나 HTML의 img 태그에 src 속성으로 API URI를 입력하여 사용합니다.<br>\n저 또한 위와 비슷하게 자신을 간단하게 소개할 수 있는 카드 형식의 SVG를 제공하는 API를 만들어 보고자 하였습니다.<br>\n위와 같은 서비스는 보통은 로그인 없이 API를 사용하는 형태이지만 저는 SpringBoot 공부 목적으로 회원 관리 기능을 포함시켰습니다.<br>\n추후 서비스 페이지를 SPA로 구성하고 사용자가 로그인 후 카드 생성 기능을 통하여 자신만의 카드를 생성하고 SVG를 제공받도록 하는 것이 목표입니다.</p>\n<p>코드는 <a href=\"https://github.com/je0ngyun/cardmeBE\"><strong>GitHub 에서</strong></a> 보실 수 있습니다.</p>\n<h2 id=\"사용예시\" style=\"position:relative;\"><a href=\"#%EC%82%AC%EC%9A%A9%EC%98%88%EC%8B%9C\" aria-label=\"사용예시 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" 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\"></path></svg></a>사용예시</h2>\n<p>Jenkins를 통하여 Docker Image 기반으로 CI/CD 파이프라인을 구축해놓았습니다.\n테스트 서버로의 API요청 주소는 다음과 같습니다.<br>\n<a href=\"http://www.je0ngyun.kro.kr:8080/cardme/api/v1/card?userId=je0ngyun&#x26;cardName=mycard1\"><strong>http://www.je0ngyun.kro.kr:8080/cardme/api/v1/card?userId=je0ngyun&#x26;cardName=mycard1</strong></a></p>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\">//e.g\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span>\n  <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://www.je0ngyun.kro.kr/cardme/api/v1/card?userId=je0ngyun&amp;cardName=mycard1<span class=\"token punctuation\">\"</span></span>\n<span class=\"token punctuation\">/></span></span></code></pre></div>\n<h3 id=\"결과\" style=\"position:relative;\"><a href=\"#%EA%B2%B0%EA%B3%BC\" aria-label=\"결과 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" 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\"></path></svg></a>결과</h3>\n<p><img src=\"https://www.je0ngyun.kro.kr/cardme/api/v1/card?userId=je0ngyun&amp;cardName=mycard1\"><br/></p>\n<h2 id=\"기능구현\" style=\"position:relative;\"><a href=\"#%EA%B8%B0%EB%8A%A5%EA%B5%AC%ED%98%84\" aria-label=\"기능구현 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" 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\"></path></svg></a>기능구현</h2>\n<h3 id=\"1-svg-생성\" style=\"position:relative;\"><a href=\"#1-svg-%EC%83%9D%EC%84%B1\" aria-label=\"1 svg 생성 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" 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\"></path></svg></a>1. SVG 생성</h3>\n<p>여러 디자인의 카드가 추가될 것을 고려하여 <a href=\"https://github.com/je0ngyun/cardmeBE/blob/master/src/main/resources/static/WhiteDefault.svg?short_path=080f71b\">기본적인 형태를 가진 SVG 파일</a>을 토대로 사용자가 기입한 정보를 적용하였습니다.<br>\nHTML 파서인 Jsoup 라이브러리를 사용하여 Dom 객체에 접근하여 SVG를 수정하는 방식을 사용하였습니다.<br>\n또한 SVG 생성에 <a href=\"https://github.com/je0ngyun/cardmeBE/blob/master/src/main/java/com/jy/cardme/components/card/Card.java\">Factory method 패턴을 적용하여</a> 후에 새로운 디자인의 카드를 쉽게 추가할 수 있게 설계하려 하였습니다.</p>\n<h3 id=\"2-응답형식\" style=\"position:relative;\"><a href=\"#2-%EC%9D%91%EB%8B%B5%ED%98%95%EC%8B%9D\" aria-label=\"2 응답형식 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" 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\"></path></svg></a>2. 응답형식</h3>\n<p>성공응답 형식은 다음과 같습니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token comment\">//POST https://www.je0ngyun.kro.kr/cardme/api/v1/card</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"message\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"카드 생성 성공\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"httpStatus\"</span><span class=\"token operator\">:</span> <span class=\"token number\">201</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"timestamp\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"2021-12-07T05:35:02.017Z\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"data\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">\"cardName\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"mycard\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"cardTitle\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"Kim Jeong Yun\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"cardMotto\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"Hello everyone! I'm JeongYun\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"cardEmail\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"jeongyunniim@gmail.com\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"cardDepartment\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"Web Developer\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"cardSkills\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n      <span class=\"token string\">\"SpringBoot\"</span><span class=\"token punctuation\">,</span>\n      <span class=\"token string\">\"NodeJS\"</span><span class=\"token punctuation\">,</span>\n      <span class=\"token string\">\"MySQL\"</span><span class=\"token punctuation\">,</span>\n      <span class=\"token string\">\"Vue\"</span><span class=\"token punctuation\">,</span>\n      <span class=\"token string\">\"React\"</span><span class=\"token punctuation\">,</span>\n      <span class=\"token string\">\"Git\"</span><span class=\"token punctuation\">,</span>\n      <span class=\"token string\">\"DevOps\"</span>\n    <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"cardType\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"WHITE_DEFAULT\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token property\">\"cardHighlightColor\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"#8195de\"</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>에러 응답시 에러필드를 나타내도록 하였습니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token comment\">//POST https://www.je0ngyun.kro.kr/cardme/api/v1/card</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token property\">\"message\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"잘못된 매서드 매개변수\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"httpStatus\"</span><span class=\"token operator\">:</span> <span class=\"token number\">400</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"timestamp\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"2021-12-07T05:36:48.225Z\"</span><span class=\"token punctuation\">,</span>\n  <span class=\"token property\">\"errors\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token punctuation\">{</span>\n      <span class=\"token property\">\"field\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"cardType\"</span><span class=\"token punctuation\">,</span>\n      <span class=\"token property\">\"value\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"WHITE_DEFAULT1\"</span><span class=\"token punctuation\">,</span>\n      <span class=\"token property\">\"reason\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"존재하지 않는 카드 타입입니다.\"</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">{</span>\n      <span class=\"token property\">\"field\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"cardName\"</span><span class=\"token punctuation\">,</span>\n      <span class=\"token property\">\"value\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"mycard\"</span><span class=\"token punctuation\">,</span>\n      <span class=\"token property\">\"reason\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"중복된 이름의 카드가 존재합니다.\"</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"3-에러-핸들링\" style=\"position:relative;\"><a href=\"#3-%EC%97%90%EB%9F%AC-%ED%95%B8%EB%93%A4%EB%A7%81\" aria-label=\"3 에러 핸들링 permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" 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\"></path></svg></a>3. 에러 핸들링</h3>\n<p>에러 핸들링을 위해 ControllerAdvice 와 ConstraintValidator 를 상속받은 <a href=\"https://github.com/je0ngyun/cardmeBE/tree/master/src/main/java/com/jy/cardme/components/validation\">CustumValidator를 작성하여</a> 사용하였습니다.<br>\nControllerAdvice로 처리할 수 없는 SpringSecurity 의 JWT 에러처리는 <a href=\"https://github.com/je0ngyun/cardmeBE/blob/master/src/main/java/com/jy/cardme/security/JwtAuthenticationEntryPoint.java\">컨트롤러로 리다이렉팅 후</a> 컨트롤러에서 에러를 throw 시켜 간접적으로 ControllerAdvice 에서 처리할 수 있게 하였습니다.</p>\n<h3 id=\"4-aop\" style=\"position:relative;\"><a href=\"#4-aop\" aria-label=\"4 aop permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" 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\"></path></svg></a>4. AOP</h3>\n<p>로깅을 위해 <a href=\"https://github.com/je0ngyun/cardmeBE/blob/master/src/main/java/com/jy/cardme/aspect/ControllerLogAspect.java\">컨트롤러에 AOP를 적용하여</a> 요청 메소드, 경로, 응답상태코드, 소요시간을 나타내도록 하였습니다.</p>\n<h3 id=\"5-cicd\" style=\"position:relative;\"><a href=\"#5-cicd\" aria-label=\"5 cicd permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" 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\"></path></svg></a>5. CI/CD</h3>\n<p>프로젝트를 진행하면서 배포까지의 단계를 자동화 하였습니다.<br>\n<a href=\"https://je0ngyun.netlify.app/develop/devops/spring-boot-jenkins-ci-cd/\">젠킨스와 도커기반으로 진행</a>하였으며 <a href=\"https://je0ngyun.netlify.app/develop/devops/jenkins-branch-webhook/\">Github branch별 WebHook</a>을 통하여 정해진 branch에 push시에만 배포가 되도록 하였습니다.<br>\n젠킨스 플러그인중 하나인 Generic Webhook Trigger 를 사용하였습니다</p>\n<h3 id=\"6-ssl\" style=\"position:relative;\"><a href=\"#6-ssl\" aria-label=\"6 ssl permalink\" class=\"anchor-header before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" 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\"></path></svg></a>6. SSL</h3>\n<p>HTTPS를 통해 제공되는 페이지에 안전하지 않은 HTTP 리소스를 로드하지 않기때문에 API에 HTTPS를 적용하였습니다.<br>\n무료 인증서인 Let's Encrypt를 사용하였습니다.</p>","id":"382e0d49-7794-5661-b369-87a35ebfe1dc","excerpt":"목차 개요 사용예시 기능구현 프로젝트 개요 개발자들의 Github 및 블로그의 여러 프로필을 둘러보다 보면 Git Stat 을 보기 쉽게 디자인해놓은 SVG…","tableOfContents":"<ul>\n<li>\n<p><a href=\"#%EB%AA%A9%EC%B0%A8\">목차</a></p>\n</li>\n<li>\n<p><a href=\"#%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EA%B0%9C%EC%9A%94\">프로젝트 개요</a></p>\n</li>\n<li>\n<p><a href=\"#%EC%82%AC%EC%9A%A9%EC%98%88%EC%8B%9C\">사용예시</a></p>\n<ul>\n<li><a href=\"#%EA%B2%B0%EA%B3%BC\">결과</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"#%EA%B8%B0%EB%8A%A5%EA%B5%AC%ED%98%84\">기능구현</a></p>\n<ul>\n<li><a href=\"#1-svg-%EC%83%9D%EC%84%B1\">1. SVG 생성</a></li>\n<li><a href=\"#2-%EC%9D%91%EB%8B%B5%ED%98%95%EC%8B%9D\">2. 응답형식</a></li>\n<li><a href=\"#3-%EC%97%90%EB%9F%AC-%ED%95%B8%EB%93%A4%EB%A7%81\">3. 에러 핸들링</a></li>\n<li><a href=\"#4-aop\">4. AOP</a></li>\n<li><a href=\"#5-cicd\">5. CI/CD</a></li>\n<li><a href=\"#6-ssl\">6. SSL</a></li>\n</ul>\n</li>\n</ul>","fields":{"slug":"/projects/BackEnd/Cardme/"},"frontmatter":{"title":"CardMe","date":"September 10 , 2021","tags":"자신을 소개하는 간단한 카드형식의 SVG를 제공하는 서비스"}}},"pageContext":{"slug":"/projects/BackEnd/Cardme/","curSrcInsName":"index","previous":{"title":"Gasby-Starter-Oasis","slug":"/projects/FrontEnd/Gatsby-starter-oasis/","sourceInstanceName":"index"},"next":{"title":"10Plus-Server","slug":"/projects/BackEnd/10plusServer/","sourceInstanceName":"index"}}},
    "staticQueryHashes": ["1603766897","3484302218","993254799"]}