{"componentChunkName":"component---src-templates-blog-post-js","path":"/frontendPerformance/imageOptimization/","result":{"data":{"site":{"siteMetadata":{"title":"Zayden","author":"[Your Name]","siteUrl":"https://gatsby-starter-bee.netlify.com","comment":{"disqusShortName":"","utterances":"JaeYeopHan/gatsby-starter-bee"},"sponsor":{"buyMeACoffeeId":"jbee"}}},"markdownRemark":{"id":"f82d82c4-8aab-5776-954f-715fbb80cb82","excerpt":"비효율적인 이미지 분석 해당 분석하고자 하는 웹사이트를 Lighthouse 를 통해 분석합니다. 그리고 분석 결과에서 Opportunities 섹션의 ‘Properly size images…","html":"<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">해당 글은 \"프론트엔드 최적화 가이드\"라는 도서를 기반하여 작성한 글입니다.</code></pre></div>\n <br/>\n<h3 id=\"비효율적인-이미지-분석\" style=\"position:relative;\"><a href=\"#%EB%B9%84%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9D%B8-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EB%B6%84%EC%84%9D\" aria-label=\"비효율적인 이미지 분석 permalink\" class=\"anchor 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>해당 분석하고자 하는 웹사이트를 Lighthouse 를 통해 분석합니다. 그리고 분석 결과에서 Opportunities 섹션의 ‘Properly size images’ 항목을 주목합니다. 이 항목은 이미지를 적절한 사이즈를 사용하도록 제안합니다.</p>\n<p>해당 항목을 펼쳐서 내용을 살펴보면 어떤 이미지가 적절한지 않은 사이즈인지 리스트로 보여줍니다. </p>\n<span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 722px;\">\n      <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 73.00000000000001%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAAAsSAAALEgHS3X78AAACbklEQVQ4y3VUXW/aQBD0/2gwAWMb4+9gYoxtTEigTalJIqVSpFR9iCKhoqKSoJb0IVEfqvahP3q6e8RumtKH0d6e94bb2Tkko9WCbduo1+uoVquo1WpQFEXk26BwHUEWURGxSRyu58EiHsmjpNvpIElT9Ho9BEGARqMBVVW3okGIdR2HuoYDTcMRoUO5ZxhoM2GTNoxmU9ySYZommpQX0Kn4eW4TnJYN1/Lg2R5MgqI0oFB3EhdoBIN+oTjUolszeM37vOZYQOc6IjG8ALrjw/T3oaiakEsQypUKKpUdQgWyLJeRW+Qoi/wpqGbnBelZg22ZYs2dcYeC0LQs+HvtUliGaRXR+g9seP4eol4Mx/VEDLtdSBppGKcZjic5kv4AnTBCe7+LbpwiYiT9f/G4//rNFJPpCYajMfKTMxyOX0LiibbbAa5nV5h/+oB37y9weXkhpsk2kuUCchmru7ulzSqUs3Ysk9CQP6RJiq/3d/j54xe+f77Bl/VSTC0lKw2HQ4E8z5FlGVzXFXrxYR6aRzIxh+M4Yl8Q9vsZFosZrmZzfHtYY7mckxdVunmbvlGLUQTf9wUZEzwl5D3mKCwnaWxWgz4ENBSHJuVYZJPNgWLiz8H7u9T2RpLNumxZVRt0XRenpzmORhlG4wNMJsfi+XEhF3EswCTb8uLZipaTtI+H+xXGrzIMhhnWd7ei5Q49SX6O3PJoNEIcx8Lk7Aw+zD7lnDmKh1EOZbX6iLPzKc7f5ri5XZSEg8EASZIgDEORM3gAfI4JWFtes7bC2PwrBi3S4YBuEyJOIrpR98+/C7Ve2GJjHfmvNgsN5Uf7/AaWSs7sPqrRYwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"sizeImage\" title=\"sizeImage\" src=\"/static/f162b1cf5689da9693bda53e5a4175e2/d44c9/sizeImage.png\" srcset=\"/static/f162b1cf5689da9693bda53e5a4175e2/5a46d/sizeImage.png 300w,\n/static/f162b1cf5689da9693bda53e5a4175e2/0a47e/sizeImage.png 600w,\n/static/f162b1cf5689da9693bda53e5a4175e2/d44c9/sizeImage.png 722w\" sizes=\"(max-width: 722px) 100vw, 722px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\">\n    </span>\n<p>해당 웹 사이트에 포함된 이미지가 얼마나 크기에 로딩 시간을 단축시킬 수 있는 것인지 이미지를 직전 확인해 보겠습니다.</p>\n<p>이미지를 확인하려면 크롬 개발자 도구 중 Elements 패널로 이동해야 합니다. 그리고 아래 사진처럼 이미지 요소를 선택합니다.</p>\n<span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 871px;\">\n      <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 34.66666666666667%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsSAAALEgHS3X78AAABd0lEQVQoz02QSY7TQBRAfQdQI9SJZ8exq+3E2E5spxN3nKghYlAzLZFYsAWh5gAIroDEmkvAhsuwgHM8viudVkp6+qo/vCp9Iy1rZosLsnyOmpbESYbteDiur+Obt++4/njNarliaNo673kBcThCCXEYYkvOsl3db/jxBDVvKaslRb0iKyopuLphaFr8/vWT/nz9/IU7d09wRebIoCsS1/U0vehW2DfERUM+qykmCck41MU+b1kOP75/4++ff3x4/4mTe/d1fi/YSw4cpEY/FEQJsfxyVp3TFhNilVLOGwp5pBQm0wfS7OgHeuwbwW08/uFhX5HsL5kWpOqMMFIiX7C82FAvWtKsxA8V3ijGF7xgfCPyj9iLjX7Rg6GFJZcob1D5OabszvcDglFE1uwo2ivSskNlC87yFn+ccno6kDmTwcDcR42FUdcNVV1TVRXL9Ybt7gnd5TPNWtjsXrF9/Jru4XPWR3SPXtBJrdu9lPsV7fYpq+6S/+qq3r6Z1afnAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"elementImage\" title=\"elementImage\" src=\"/static/e612487c98feb04713839d8d08ab8278/9d5da/elementImage.png\" srcset=\"/static/e612487c98feb04713839d8d08ab8278/5a46d/elementImage.png 300w,\n/static/e612487c98feb04713839d8d08ab8278/0a47e/elementImage.png 600w,\n/static/e612487c98feb04713839d8d08ab8278/9d5da/elementImage.png 871w\" sizes=\"(max-width: 871px) 100vw, 871px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\">\n    </span>\n<p>위 사진에서 내용을 확인하면 실제 이미지 사이지(Intrinsic size)는 1200 x 1200px 인데, 화면에 그려지는 이미지의 사이즈(Rendered size)는 120 x 120px이라고 합니다. 그래서 큰 사이즈의 이미지를 사용해도 1200 x 1200px로 표시하지 못하니, 처음부터 120 x 120px에 맞는 이미지를 사용하라는 의미입니다. </p>\n<p><strong>그렇다면 이 이미지를 어느 정도 사이즈로 만들어서 사용해야 적절할까요?</strong></p>\n<p>단순히 120 x 120px로 만들어야 된다고 생각할 수 있지만, 요즘 사용되는 레티나 디스플레이는 같은 공간(픽셀)에 더 많은 픽셀을 그릴 수 있기 때문에, 두 배 정도 큰 이미지를 사용하는것이 적절합니다. 즉, 240 x 240px 사이즈로 사용하는 것입니다.</p>\n<p><strong>이미지 사이즈를 어떻게 줄이는가?</strong></p>\n<p>해당 방법을 알기 위해서는 해당 이미지가 어디서 오는지 파악해야 합니다. 크롬 Network 패널에서 확인 할 수 있습니다. 현재 해당 이미지는 서버에서 전달해주고 있고 해당 전달된 데이터를 확인해보니 이미지 주소로 전달하고 있는걸로 확인이 됩니다.</p>\n<span class=\"gatsby-resp-image-wrapper\" style=\"position: relative; display: block; margin-left: auto; margin-right: auto;  max-width: 897px;\">\n      <span class=\"gatsby-resp-image-background-image\" style=\"padding-bottom: 20%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAAsSAAALEgHS3X78AAAA50lEQVQY0x2QbW6DMBBEuUlscALGX0CwISRpWilqG7Wq1Psf5nXTH08jrXZnVlM9vn45HguuDzgX8D6xrGemcaa3PSWvbKcL63JmKRvjMJPi+L8XRZ1LpDQRwkAvHtXP94PL9UbXdULL4dBiw8i0XHBzJm5n4mnDLytBsGlgHxJeDJ5hWXAuomtD3eyp7q8bt7e7pAwY02AaQ9MnbL6ixwlVCioX9LKgxhE1CDI3xxnjA6a16H3LTgx3qqb6+HzwLhQ5zDnjnaexEXt6oS6ZWr7UUoXuvagQ4j9KzFTv2HUWJdXop+qGPyWge+J4kS1uAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;\"></span>\n  <img class=\"gatsby-resp-image-image\" alt=\"imageUrl\" title=\"imageUrl\" src=\"/static/801241739a6268467b765dde077f1f1d/3a737/imageUrl.png\" srcset=\"/static/801241739a6268467b765dde077f1f1d/5a46d/imageUrl.png 300w,\n/static/801241739a6268467b765dde077f1f1d/0a47e/imageUrl.png 600w,\n/static/801241739a6268467b765dde077f1f1d/3a737/imageUrl.png 897w\" sizes=\"(max-width: 897px) 100vw, 897px\" style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\" loading=\"lazy\">\n    </span> \n<p>이미지 정보가 어디서 오는지 확인해 봤는데, 한가지 문제가 생겼습니다. 자체적을 가지고 있는 정적 이미지라면 사진 편집 툴을 이용하여 직접 이미지 사이즈를 조절하면 되는데, 현재는 API를 통해 받아오고 있습니다.</p>\n<p><strong>이미지를 API를 통해 받아오는 경우 어떻게 이미지 사이즈를 조절할까요?</strong></p>\n<p>한 가지 방법은 Cloudinary나 Imgix 같은 이미지 CDN을 사용하는 방법입니다.</p>\n<br/>\n<h3 id=\"이미지-cdn\" style=\"position:relative;\"><a href=\"#%EC%9D%B4%EB%AF%B8%EC%A7%80-cdn\" aria-label=\"이미지 cdn permalink\" class=\"anchor 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>이미지 CDN</h3>\n<p>CDN(Content Delivery Network)이란 물리적인 거리의 한계를 극복하기 위해 사용자와 가까운 곳에 콘텐츠 서버를 두는 기술을 의미합니다. </p>\n<p>예를 들어 한국에 있는 사용자가 미구에 있는 서버에서 이미지를 다운로드 하는 경우, 아무리 요즘 인터넷이 빨라졌다고 해도 서버와 사용자 사이에는 굉장히 큰 물리적 거리가 있기 때문에 다운로드에 시간이 오래 걸릴 것입니다. 이 문제를 해결하기 위해 다음과 같이 생각해 볼 수 있습니다.</p>\n<p>미국에 있는 서버를 미리 한국으로 복사해 두고, 사용자가 이미지를 다운로드하려고 할 때 미국 서버가 아닌 한국 서버에서 다운로드하도록 하는 것입니다. 그러면 물리적 거리가 어느정도 해소가 됐으니 다운로드에 걸리는 시간도 단축이 됩니다. </p>\n<p>이미지 CDN은 이미지에 특화된 CDN이라고 볼 수 있습니다. 기본적인 CDN 기능과 더불어 이미지를 사용자에게 보내기 전에 특정 형태로 가공하여 전해주는 기능까지 있습니다. 예를 들어 이미지 사이즈를 줄이거나, 특정 포맷으로 변경하는 증의 작업 가능합니다.</p>\n<p>일반적인 이미지 CDN에서 제공하는 주소는 다음과 같이 이루어져 있습니다.</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">http://cdn.image.com?src=[img src]&amp;width=240&amp;height=240</code></pre></div>\n<p>이런 이미지 CDN을 자체적으로 만들어서 사용할 수도 있지만, Imgix와 같은 이미지 CDN 솔루션을 사용할 수 있습니다.</p>\n<blockquote>\n<p>imgix는 더 빠른 페이지, 더 나은 시각적 품질, 더 간단한 워크플로우를 위해 이미지와 비디오를 관리, 최적화 및 제공한다고 합니다.</p>\n</blockquote>\n<h3 id=\"br\" style=\"position:relative;\"><a href=\"#br\" aria-label=\"br permalink\" class=\"anchor 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><br/></h3>","frontmatter":{"title":"이미지 최적화","date":"July 22, 2023"}}},"pageContext":{"slug":"/frontendPerformance/imageOptimization/","previous":{"fields":{"slug":"/frontendPerformance/optimizationAndTools/"},"frontmatter":{"title":"최적화 기법 종류와 Lighthouse 툴"}},"next":{"fields":{"slug":"/yagmyagm/anyUnknown/"},"frontmatter":{"title":"Typescript - any vs unknown"}}}}}