<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>이서영의 개발 블로그</title>
    <link>https://young0105.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 7 May 2026 14:03:16 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>스응</managingEditor>
    <image>
      <title>이서영의 개발 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/5970680/attach/e08ca4b1828440e2bb09410c5b97c6a8</url>
      <link>https://young0105.tistory.com</link>
    </image>
    <item>
      <title>[Vue.js/PrimeVue] Password 컴포넌트에 구글 계정 정보가 자동 입력되는 문제</title>
      <link>https://young0105.tistory.com/397</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;326&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpOLG9/btsO9t0wFwz/xkhxcmKOtJCxrqUtwKBPGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpOLG9/btsO9t0wFwz/xkhxcmKOtJCxrqUtwKBPGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpOLG9/btsO9t0wFwz/xkhxcmKOtJCxrqUtwKBPGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpOLG9%2FbtsO9t0wFwz%2FxkhxcmKOtJCxrqUtwKBPGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;326&quot; height=&quot;191&quot; data-origin-width=&quot;326&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4HzpI/btsO9tlWcoQ/guj9Uf6aKQo2Gc2V96Lw3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4HzpI/btsO9tlWcoQ/guj9Uf6aKQo2Gc2V96Lw3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4HzpI/btsO9tlWcoQ/guj9Uf6aKQo2Gc2V96Lw3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4HzpI%2FbtsO9tlWcoQ%2Fguj9Uf6aKQo2Gc2V96Lw3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;646&quot; height=&quot;125&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;125&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PrimeVue의 Password 컴포넌트를 사용했는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 사이트에 저장해둔 계정 정보가 계속 자동으로 입력되는 문제가 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 해결방법&lt;/p&gt;
&lt;pre id=&quot;code_1752024444716&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Password
  id=&quot;password&quot;
  v-model=&quot;vm.user.password&quot;
  name=&quot;password&quot;
  :input-props=&quot;{ autocomplete: 'new-password' }&quot;
/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 위와 같은 방식으로 넣어 주어야 Password 컴포넌트 내부의 &amp;lt;input&amp;gt; 태그에 autocomplete: 'new-password'가 적용된다.&lt;/p&gt;</description>
      <category>Error Notes</category>
      <category>vuejs</category>
      <author>스응</author>
      <guid isPermaLink="true">https://young0105.tistory.com/397</guid>
      <comments>https://young0105.tistory.com/397#entry397comment</comments>
      <pubDate>Wed, 9 Jul 2025 10:28:57 +0900</pubDate>
    </item>
    <item>
      <title>[Swagger] Please indicate a valid Swagger or OpenAPI version field.</title>
      <link>https://young0105.tistory.com/396</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Unable to render this definition The provided definition does not specify a valid version field. &lt;br /&gt;Please indicate a valid Swagger or OpenAPI version field. &lt;br /&gt;Supported version fields are swagger: &quot;2.0&quot; and those that match openapi: 3.x.y (for example, openapi: 3.1.0).&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;딱히 건든 거 없이, git push만 했는데 갑자기 저런 에러가 나면서 스웨거가 제대로 실행이 안됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Swashbuckle 캐시 문제 때문에 이런 현상이 발생하는 경우가 있다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강력 새로고침 ([Ctrl] + [Shift] + [R])로 해결했다.&lt;/p&gt;</description>
      <category>Error Notes</category>
      <category>errorNote</category>
      <category>SWAGGER</category>
      <author>스응</author>
      <guid isPermaLink="true">https://young0105.tistory.com/396</guid>
      <comments>https://young0105.tistory.com/396#entry396comment</comments>
      <pubDate>Wed, 11 Jun 2025 13:58:33 +0900</pubDate>
    </item>
    <item>
      <title>[Vue.js/konva] 파스칼 케이스로 작성했을 때 konva 컴포넌트가 불러와지지 않는 문제</title>
      <link>https://young0105.tistory.com/395</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;[ 문제 상황 ]&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vue-konva는 기본적으로 컴포넌트명에 'v-' 접두사를 붙여서 케밥 케이스로 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) v-stage, v-text, ...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 다른 프로젝트에서는 괜찮았는데, 이번 프로젝트는 저장 시 컴포넌트명이 자동으로 파스칼 케이스로 변환되도록 규칙이 설정되어 있어서 컴포넌트 인식이 안되는 문제가 발생했다.&lt;/p&gt;
&lt;pre id=&quot;code_1744260748820&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;VStage :config=&quot;containerConfig&quot;&amp;gt;
    &amp;lt;VLayer&amp;gt;
        &amp;lt;VText :config=&quot;{ text: 'temp', fontSize: 15 }&quot; /&amp;gt;
    &amp;lt;/VLayer&amp;gt;
&amp;lt;/VStage&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;[Vue warn]: Failed to resolve component: VStage If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement. at &amp;lt;PaybackChallenge onVnodeUnmounted=fn&amp;lt;onVnodeUnmounted&amp;gt; ref=Ref&amp;lt; null &amp;gt; &amp;gt; at &amp;lt;RouterView &amp;gt; at &amp;lt;AppLayout onVnodeUnmounted=fn&amp;lt;onVnodeUnmounted&amp;gt; ref=Ref&amp;lt; Proxy(Object) {__v_skip: true} &amp;gt; &amp;gt; at &amp;lt;RouterView &amp;gt; at &amp;lt;App&amp;gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;[ 해결 ]&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main.ts에 VueKonva를 등록할 때 prefix를 변경해주면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1744261146468&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import VueKonva from 'vue-konva'

// 생략

app.use(VueKonva, { prefix: 'V' })
app.mount('#app')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Error Notes</category>
      <category>errorNote</category>
      <category>vuejs</category>
      <author>스응</author>
      <guid isPermaLink="true">https://young0105.tistory.com/395</guid>
      <comments>https://young0105.tistory.com/395#entry395comment</comments>
      <pubDate>Thu, 10 Apr 2025 14:00:13 +0900</pubDate>
    </item>
    <item>
      <title>[CS] CI/CD</title>
      <link>https://young0105.tistory.com/394</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #c8ebe2;&quot;&gt;CI/CD&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 코드를 지속적으로 통합, 테스트, 배포하는 프로세스를 자동화하는 프로세스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - CI (Continuous Integration)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 코드 변경 사항을 주기적으로 중앙 저장소에 통합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;rarr; 병합 충돌 최소화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 자동 빌드 및 단위 테스트 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 문제를 빠르게 식별하고 수정할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - CD (Continuous Delivery)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 코드를 항상 배포 가능한 상태로 유지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 빌드 후에 모든 코드 변경 사항을 운영 환경에 자동으로 배포&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;CI/CD 파이프라인&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 1. 코드 푸시 (Push)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;: 개발자가 변경 사항을 버전 관리 시스템(Git 등)에 Push함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 2. 빌드 (Build)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;: 코드를 컴파일하고 의존성을 설치한 후, 실행 가능한 애플리케이션 생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 3. 테스트 (Test)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;: 자동화된 테스트 수행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 4. 배포 (Deploy)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;: 테스트를 통과한 코드를 스테이징(테스트 환경) or 운영 환경에 배포&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;※ 파이프라인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; : 소프트웨어 개발/배포 과정에서 자동화된 작업이 순차적으로 진행되는 일련의 흐름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;CI/CD 구성 요소&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 1) 버전 관리 시스템 (VCS)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; GitBub, GitLab, Bitbucket 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 2) CI/CD 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; Jenkins, GitHub Actions, CircleCI, Travis CI, Azure DevOps 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 3) 테스트 프레임워크&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; Jest, Mocha, PHPUnit, xUnit 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 4) 배포 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; Docker, Kubernetes, AWS CodeDeploy, Terraform 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CS</category>
      <category>cs</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>스응</author>
      <guid isPermaLink="true">https://young0105.tistory.com/394</guid>
      <comments>https://young0105.tistory.com/394#entry394comment</comments>
      <pubDate>Wed, 27 Nov 2024 23:30:11 +0900</pubDate>
    </item>
    <item>
      <title>[CS] 해시 알고리즘 (Hash Algorithm)</title>
      <link>https://young0105.tistory.com/393</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #c8ebe2;&quot;&gt;해시 알고리즘&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 임의의 길이를 가진 입력 값을 고정된 길이의 해시 값 또는 해시 코드로 변환하는 함수&lt;br /&gt;&amp;nbsp; - 결과 값의 길이가 고정되어 있음&lt;br /&gt;&amp;nbsp; - 해시 값은 입력 값에 대해 고유 식별자 역할을 함&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;※ 단, 충돌 가능성이 존재하기 때문에 완벽한 고유성을 보장하지 않으나, 이러한 충돌이 발생한 확률은 매우 낮도록 설계됨&lt;br /&gt;&amp;nbsp; - 일방향성 (One-way Property)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;: 해시 값을 통해 원 입력 값을 역으로 추론하는 것이 거의 불가능함&lt;br /&gt;&amp;nbsp; - 계산 속도 빠름&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;MD5 (Message Digest 5)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 길이 : 128비트&lt;br /&gt;&amp;nbsp; - SHA에 비해 충돌 공격에 취약함&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;rarr; 현재는 보안에 민감한 애플리케이션에 사용하지 않음&lt;br /&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;※ 충돌 공격&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : 두 개의 서로 다른 입력 값이 같은 해시 값을 만들어 내는 공격&lt;br /&gt;&amp;nbsp; - 길이 : 128비트&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;SHA (Secure Hash Algorithm)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; i. SHA-1&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 길이 : 160비트&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 보안성이 약화되어 더 이상 권장되지 않음&lt;br /&gt;&lt;b&gt;&amp;nbsp; ii. SHA-2&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 현재 가장 널리 사용됨&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; SHA-256 : 256비트 / 블록체인 및 보안 인증서에서 많이 사용됨&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; SHA-512 : 512비트 / 데이터 저장 시 높은 보안성이 요구될 때 사용됨&lt;br /&gt;&lt;b&gt;&amp;nbsp; iii. SHA-3&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 가장 최신 버전&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 강력한 충돌 저항성과 보안성 제공&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;bcrypt&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 비밀번호 저장에 특화된 해싱 함수&lt;br /&gt;&amp;nbsp; - 기존 시스템과의 호환성이 뛰어남&lt;br /&gt;&amp;nbsp; - CPU 공격 방어&lt;br /&gt;&amp;nbsp; - 고유한 랜덤 데이터(Salt)를 추가하여, 동일한 비밀번호라도 다른 해시 값을 생성함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;rarr; &lt;b&gt;레인보우 테이블 공격&lt;/b&gt; 방어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : 해시 값을 역추적하여 원래의 입력 값을 알아내는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 슬로우 해싱 (Slow Hashing)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;: 의도적으로 연산을 느리게 만듦&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;rarr; 공격자가 대량의 해시를 빠르게 계산하지 못하도록 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 비용 인자 설정 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;: 하드웨어 성능이 개선되더라도, 해싱 과정을 의도적으로 느리게 만들 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;rarr;&lt;b&gt; 브루트 포스 공격&lt;/b&gt; 방어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 가능한 모든 입력 값을 하나씩 대입하여 비밀번호를 찾아내는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;scrypt&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 비밀번호 저장에 특화된 해싱 함수&lt;br /&gt;&amp;nbsp; - 병렬 공격 방어&lt;br /&gt;&amp;nbsp; - bcrypt에 비해 보안성이 높음&lt;br /&gt;&amp;nbsp; - GPU/ASIC 공격 방어&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CS</category>
      <category>cs</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>스응</author>
      <guid isPermaLink="true">https://young0105.tistory.com/393</guid>
      <comments>https://young0105.tistory.com/393#entry393comment</comments>
      <pubDate>Tue, 26 Nov 2024 18:56:37 +0900</pubDate>
    </item>
    <item>
      <title>[CS] 웹 보안(Web Security)과 주요 취약점</title>
      <link>https://young0105.tistory.com/392</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;핵심 보안 원칙&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 기밀성 (Confidentiality)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 민감한 데이터가 인가되지 않은 사용자에게 노출되지 않도록 보호&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp; &amp;nbsp;ex) 암호화된 통신(SSL/TLS)을 사용해 데이터 전송 보호&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 무결성 (Integrity)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 데이터가 전송 중 손상/변경되지 않도록 보장&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp; &amp;nbsp;ex) 데이터 해시 및 디지털 서명 활용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 가용성 (Availability)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 서비스가 항상 정상적으로 사용 가능하도록 보장&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp; &amp;nbsp;ex) DDoS 방어와 서버 장애 대비&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;HTTPS의 중요성&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 웹사이트의 무결성 보호&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 침입자가 웹사이트와 사용자 간의 통신을 암호화함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;rarr; 침입자가 조작하지 못하도록 방지함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 악의적인 공격자 또는 불법적인 광고 삽입을 차단함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) 사용자의 개인 정보 보호&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 웹사이트와 사용자 간의 통신을 암호화하여, 사용자의 개인 정보나 활동이 노출되지 않도록 보호함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;(HTTP 요청인 경우 사용자의 활동 정보를 쉽게 추적할 수 있음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) SEO 점수 향상&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 검색 엔진은 HTTPS를 사용하는 웹사이트를 우선시함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;rarr; HTTPS를 사용하면 검색 결과에서 더 높은 순위를 얻을 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;주요 보안 취약점&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1) Zero-day&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 취약점이 공개되기 전에, 공격자가 이를 발견하여 악용하는 공격&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 보안 패치가 발표되기 전까지 방어하기 어려움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 악성코드나 해킹 도구를 사용해 시스템에 침입하거나 데이터를 탈취함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2) Vulnerable packages (취약한 패키지)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 외부 패키지/라이브러리가 보안 취약점을 내포하고 있을 때 발생하는 위험&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 패치가 늦어지면 시스템 전체에 영향을 미칠 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3) XSS (Cross Site Scripting)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 웹사이트에 악성 스크립트를 삽입하여, 사용자의 브라우저에서 실행시키는 공격&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;rarr; 사용자의 브라우저에서 공격자가 원하는 작업을 수행할 수 있게 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 사용자 세션 탈취&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 클릭을 유도하여 악성 사이트로 유도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4) SQL Injection (SQL 삽입)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 사용자의 입력값을 필터링하지 않고 SQL 쿼리에 직접 포함시킬 경우 발생하는 공격&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 공격자가 쿼리를 변조해 DB의 민감한 데이터를 유출/삭제할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 이를 방지하기 위해, 반드시 파라미터화된 쿼리나 바인딩된 변수를 사용해야 함&lt;/p&gt;
&lt;pre id=&quot;code_1732453749858&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 예시
SELECT * 
FROM MEMBER 
WHERE ID = @ID

-- 여기서 @ID를 필터링하지 않고 문자열로 그대로 받을 경우
-- &quot;123; DELETE FROM MEMBER&quot; 와 같은 형태의 문자열이 들어가게 되면

SELECT *
FROM MEMBER
WHERE ID = 123; DELETE FROM MEMBER

-- 와 같은 쿼리가 실행되며 MEMBER 테이블의 전체 데이터가 삭제됨&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;5) Credential Leaks (자격 증명 유출)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 사용자 인증 정보가 노출/유출되어 계정 탈취 등의 사고가 발생하는 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 비밀번호 또는 API 키가 암호화되지 않거나 잘못된 보안 설정으로 인해 유출되는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;6) PoLP (최소 권한 원칙, Principle of Least Privilege)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 사용자가 시스템에서 수행할 수 있는 작업의 범위를 최소화하여 권한을 설정하는 보안 원칙&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 공격자가 침입하더라도 피해를 최소화할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7) DDoS (분산 서비스 거부 공격, Distributed Denial of Service)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- &lt;u&gt;여러 대의 시스템&lt;/u&gt;을 이용해 특정 서버/네트워크를 과부하 상태로 만들어 서비스를 방해하는 공격&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;- 대량의 트래픽을 발생시킴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;rarr; 서버의 리소스를 고갈시켜 서비스가 중단되도록 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;※ DoS (서비스 거부 공격, Denial of Service)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - 네트워크/시스템의 가용성을 방해하는 공격 유형&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - 서비스의 정상적인 동작을 방해하여 시스템을 과부하/차단시키려는 시도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; - &lt;u&gt;단일 시스템&lt;/u&gt;의 공격 &amp;rarr; DDoS에 비해 출처를 탐지하고 방어하기가 훨씬 쉬움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CS</category>
      <category>cs</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>스응</author>
      <guid isPermaLink="true">https://young0105.tistory.com/392</guid>
      <comments>https://young0105.tistory.com/392#entry392comment</comments>
      <pubDate>Mon, 25 Nov 2024 00:04:42 +0900</pubDate>
    </item>
    <item>
      <title>[CS] 캐싱 유형</title>
      <link>https://young0105.tistory.com/391</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #c8ebe2;&quot;&gt;캐싱 유형&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;1) 클라이언트 측 캐싱 (Client-side Caching)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 저장 위치 : 사용자의 기기 (브라우저, 앱, ...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 이미 로드한 정적 리소스를 저장하여, 재요청 시 로딩 속도를 개선함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 주로 브라우저 캐시를 통해 이뤄짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;: HTTP 헤더로 캐싱 정책 설정&amp;nbsp; ex) Cache-Control, Expires, ...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 네트워크 요청 없이 오프라인 액세스를 지원할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt; [장점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;middot; 서버에 대한 요청량 감소 &amp;rarr; 서버의 부하 감소&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;middot; 데이터가 로컬에 있어 즉시 제공 가능 &amp;rarr; 응답 속도 빠름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;b&gt; [단점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;middot; 저장 용량이 제한적임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;middot; 최신 데이터를 가져오려면 캐시를 삭제해야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;2) 서버 측 캐싱 (Server-side Caching)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 저장 위치 : 서버 내 메모리/디스크 또는 별도의 캐시 서버(Redis, Memcached 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 서버에서 데이터를 준비하는 과정에서 캐싱을 사용함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; : 반복된 요청에 대해 동일한 응답을 일일이 생성하지 않고, 미리 계산된 데이터를 제공함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 주로 동적 데이터를 캐싱함 (API 응답, 렌더링 결과 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [장점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;middot; DB/서버의 부하 감소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;middot; 복잡한 계산이나 데이터 처리 시간을 줄임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [단점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;middot; 캐싱 무효화 정책을 잘못 설정하면 최신 데이터와 다른 데이터를 제공할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;middot; 캐시 저장소를 위한 추가적인 비용이 발생할 수 있음&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;3) CDN Caching&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 저장 위치 : 전 세계에 분산된 CDN 서버&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 정적 리소스를 사용자와 가까운 위치에 저장하여 제공함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - HTTP 헤더로 캐싱 정책 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [장점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;middot; 글로벌 성능 향상&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 사용자가 자신과 가까운 CDN 서버로부터 콘텐츠를 받음 &amp;rarr; 응답 속도 빠름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;middot; 정적 리소스 요청이 CDN에서 처리됨 &amp;rarr; 서버 부하 감소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;middot; 자동 확장 지원 &amp;rarr; 트래픽이 급증하더라도 안정적임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [단점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;middot; 비용 증가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;middot; 동적 데이터를 캐싱하는 데에는 적합하지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;※ CDN (Content Delivery Network)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 콘텐츠를 사용자에게 더 빠르고 효율적으로 제공하기 위해 전 세계에 분산된 서버 네트워크&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 콘텐츠 캐싱&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 트래픽 분산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;: 특정 서버로의 트래픽 집중을 방지하고, 여러 서버로 요청을 분배함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 콘텐츠를 원본 서버가 아닌, 사용자와 가까운 엣지 서버(Edge Server)에서 제공함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - DDoS 방어 및 웹 애플리케이션 방화벽(WAF) 기능을 제공함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #c8ebe2;&quot;&gt;캐싱 정책을 설정하는 HTTP 헤더&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;# Cache-Control&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 현대 HTTP 캐싱의 핵심 헤더&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &lt;b&gt;[주요 지시자]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;i. max-age&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : 콘텐츠를 캐싱할&amp;nbsp; 최대 시간 (초 단위)&lt;/p&gt;
&lt;pre id=&quot;code_1732441333684&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Cache-Control: max-age=3600 // 3600초 (1시간) 동안 캐싱&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ii. no-cache&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : 캐싱된 데이터가 있어도 서버에서 유효성을 확인한 후 사용함&lt;/p&gt;
&lt;pre id=&quot;code_1732441352251&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Cache-Control: no-cache&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;iii. no-store &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : 데이터를 절대 캐싱하지 않음&lt;/p&gt;
&lt;pre id=&quot;code_1732441361480&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Cache-Control: no-store&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;iv. must-revalidate&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : 캐시된 콘텐츠가 만료된 경우, 클라이언트가 반드시 서버에 유효성 검사를 요청하도록 강제함&lt;/p&gt;
&lt;pre id=&quot;code_1732441430844&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Cache-Control: public, max-age=3600, must-revalidate&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;v. public&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : 모든 클라이언트와 프록시에서 캐싱 허용&lt;/p&gt;
&lt;pre id=&quot;code_1732441374155&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Cache-Control: public, max-age=86400&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;vi. private&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : 특정 사용자만 캐싱 가능&lt;/p&gt;
&lt;pre id=&quot;code_1732441381403&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Cache-Control: private, max-age=3600&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;# Expires&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 특정 시점 이후 캐싱된 콘텐츠가 만료되었음을 알림&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - HTTP/1.0에서 사용되었으며, 현재는 Cache-Control의 max-age로 대체됨&lt;/p&gt;
&lt;pre id=&quot;code_1732441707902&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 2024년 11월 21일 12시 이후에는 콘텐츠를 새로 가져와야 함
Expires: Wed, 21 Nov 2024 12:00:00 GMT&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;# Vary&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 서버 응답이 요청 헤더의 값에 따라 다를 수 있음을 알림&lt;/p&gt;
&lt;pre id=&quot;code_1732441866570&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 클라이언트의 언어에 따라 다른 데이터를 캐싱함
Vary: Accept-Language&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;# Pragma&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - HTTP/1.0에서 사용되었으며, 현재는 Cache-Control로 대체됨&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1732442176145&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Pragma: no-cache&lt;/code&gt;&lt;/pre&gt;</description>
      <category>CS</category>
      <category>cs</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>스응</author>
      <guid isPermaLink="true">https://young0105.tistory.com/391</guid>
      <comments>https://young0105.tistory.com/391#entry391comment</comments>
      <pubDate>Sun, 24 Nov 2024 18:56:31 +0900</pubDate>
    </item>
    <item>
      <title>[CS] 백엔드 개발자 로드맵 따라가기 (진행중)</title>
      <link>https://young0105.tistory.com/390</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;백엔드 개발자 로드맵 링크&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - &lt;a href=&quot;https://roadmap.sh/backend&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://roadmap.sh/backend&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;Backend Developer Roadmap: What is Backend Development?&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;Learn what backend development is, what backend developers do and how to become one using our community-driven roadmap.&quot; data-og-host=&quot;roadmap.sh&quot; data-og-source-url=&quot;https://roadmap.sh/backend&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cDeeaH/hyXDcgiavt/LzKSdfFnYNdgM7JmNBZkZk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot; data-og-url=&quot;https://roadmap.sh/backend&quot;&gt;&lt;a href=&quot;https://roadmap.sh/backend&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://roadmap.sh/backend&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cDeeaH/hyXDcgiavt/LzKSdfFnYNdgM7JmNBZkZk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Backend Developer Roadmap: What is Backend Development?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Learn what backend development is, what backend developers do and how to become one using our community-driven roadmap.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;roadmap.sh&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 인터넷 (Internet)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 정의 &amp;amp; 인터넷 주소 체계 &amp;amp; DNS 작동 방식 :&amp;nbsp; &lt;a href=&quot;https://young0105.tistory.com/383&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://young0105.tistory.com/383&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp; - HTTP/HTTPS : &lt;a href=&quot;https://young0105.tistory.com/146&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://young0105.tistory.com/146&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp; - 웹 : &lt;a href=&quot;https://young0105.tistory.com/147&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://young0105.tistory.com/147&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp; - 호스팅 : &lt;a href=&quot;https://young0105.tistory.com/384&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://young0105.tistory.com/384&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp; - 브라우저 : &lt;a href=&quot;https://young0105.tistory.com/385&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://young0105.tistory.com/385&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 버전 관리 시스템 (Version Control Systems, Git)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - &lt;a href=&quot;https://young0105.tistory.com/50&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://young0105.tistory.com/50&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. API&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - &lt;a href=&quot;https://young0105.tistory.com/386&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://young0105.tistory.com/386&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;4. 인증 (Authentication)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 정의 &amp;amp; 인증 전략 :&amp;nbsp; &lt;a href=&quot;https://young0105.tistory.com/387&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://young0105.tistory.com/387&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp; - 쿠키 &amp;amp; 세션 : &lt;a href=&quot;https://young0105.tistory.com/160&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://young0105.tistory.com/160&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;5. 캐싱 (Caching)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 정의 &amp;amp; 캐싱 전략 : &lt;a href=&quot;https://young0105.tistory.com/388&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://young0105.tistory.com/388&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&amp;nbsp; - 캐싱 유형 : &lt;a href=&quot;https://young0105.tistory.com/391&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://young0105.tistory.com/391&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;6. 웹 보안 (Web Security)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 보안 원칙 &amp;amp; 주요 취약점 : &lt;a href=&quot;https://young0105.tistory.com/392&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://young0105.tistory.com/392&lt;/a&gt;&lt;br /&gt;&amp;nbsp; - 해시 알고리즘 : &lt;a href=&quot;https://young0105.tistory.com/393&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://young0105.tistory.com/393&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;7. 테스팅 (Testing)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;8. CI/CD&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - &lt;a href=&quot;https://young0105.tistory.com/394&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://young0105.tistory.com/394&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CS</category>
      <category>cs</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>스응</author>
      <guid isPermaLink="true">https://young0105.tistory.com/390</guid>
      <comments>https://young0105.tistory.com/390#entry390comment</comments>
      <pubDate>Sat, 23 Nov 2024 18:19:03 +0900</pubDate>
    </item>
    <item>
      <title>[C#/dotnet] 권한 부여 (Authorize)</title>
      <link>https://young0105.tistory.com/389</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;참조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - &lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/aspnet/core/security/authorization/simple?view=aspnetcore-8.0&quot;&gt;https://learn.microsoft.com/ko-kr/aspnet/core/security/authorization/simple?view=aspnetcore-8.0&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #c8ebe2;&quot;&gt;[Authorize] 어트리뷰트&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 대상에 대한 액세스를 인증된 사용자만 가능하도록 제한하는 어트리뷰트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 인증되지 않은 사용자가 접근하는 경우 &amp;rarr; 401 Unauthorized 반환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 인증되었지만, 권한이 없는 사용자가 접근하는 경우 &amp;rarr; 403 Forbidden 반환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;# 컨트롤러에 대한 액세스를 인증된 사용자로 제한하기&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1732263072132&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AccountController 내부의 Login(), Logout() 둘 다 인증된 사용자만 액세스 가능
[Authorize]
public class AccountController : Controller
{
    public ActionResult Login()
    {
    }

    public ActionResult Logout()
    {
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;# 개별 메서드에 대한 액세스를 인증된 사용자로 제한하기&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1732263097065&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class AccountController : Controller
{
    // Login()은 모든 사용자가 액세스 가능
   public ActionResult Login()
   {
   }

    // Logout()은 인증된 사용자만 액세스 가능
   [Authorize]
   public ActionResult Logout()
   {
   }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;# 대상에 대한 액세스를 특정 역할을 가진 인증된 사용자로 제한하기&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1732263197457&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// &quot;Admin&quot; 역할을 가진 인증된 사용자만 액세스 가능
[Authorize(Roles = &quot;Admin&quot;)]

// &quot;Admin&quot; 또는 &quot;Manager&quot; 역할을 가진 인증된 사용자만 액세스 가능
[Authorize(Roles = &quot;Admin,Manager&quot;)]&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;# 특정 정책에 따라 제한하기&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1732263285704&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 정책 정의 (Program.cs)
services.AddAuthorization(options =&amp;gt;
{
    options.AddPolicy(&quot;MinimumAge&quot;, policy =&amp;gt;
        policy.RequireClaim(&quot;Age&quot;, &quot;18&quot;));
});

---------

// 해당 정책 내 조건을 만족하는 인증된 사용자만 액세스 가능
[Authorize(Policy = &quot;MinimumAge&quot;)]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #c8ebe2;&quot;&gt;[AllowAnonymous] 어트리뷰트&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 인증되지 않은 사용자의 액세스를 허용하는 어트리뷰트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - [Authorize]를 무시함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;: 컨트롤러에 [Authorize], 특정 메서드에 [AllowAnonymous]가 적용되어 있는 경우, 해당 메서드는 모든 사용자가 액세스 가능&lt;/p&gt;
&lt;pre id=&quot;code_1732263453521&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Authorize]
public class AccountController : Controller
{
    // Login()은 모든 사용자가 액세스 가능
    [AllowAnonymous] 
    public ActionResult Login()
    {
    }

    // Logout()은 인증된 사용자만 액세스 가능
    public ActionResult Logout()
    {
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>C#</category>
      <category>C#</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>스응</author>
      <guid isPermaLink="true">https://young0105.tistory.com/389</guid>
      <comments>https://young0105.tistory.com/389#entry389comment</comments>
      <pubDate>Fri, 22 Nov 2024 17:18:40 +0900</pubDate>
    </item>
    <item>
      <title>[CS] 캐싱 전략</title>
      <link>https://young0105.tistory.com/388</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #c8ebe2;&quot;&gt;캐싱 (Caching)&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 자주 사용하는 데이터를 미리 저장해 두고, 필요할 때 빠르게 가져와서 사용하는 기술&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [장점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;i. (적절하게 사용할 경우) 성능 향상&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ii. 리소스 절약&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : 네트워크 트래픽 감소 &amp;amp; 데이터베이스 부하 감소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;iii. 지연 시간 응답 &amp;rarr; 사용자 경험 개선&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [고려사항]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;i. 캐시된 데이터와 원본 데이터 간 불일치가 발생할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ii. 유효성 관리 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;middot; TTL로 데이터 갱신 or 수동으로 캐시 무효화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;iii. 불필요한 캐싱은 메모리 낭비로 이어질 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;iv. 캐싱 처리를 하는 게 적합한 상황인지 판단해야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;middot; 읽기 작업이 많은 경우 캐싱이 유용함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;middot; 쓰기 작업이 많은 경우 일관성 문제가 생길 가능성이 높음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;캐싱 전략&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;# Write-Through 캐싱&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 데이터를 캐시에 쓰는 동시에, 원본 저장소(DB)에도 즉시 기록함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 추천 대상 : 실시간 데이터 일관성이 중요한 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [장점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 캐시에 항상 최신 데이터가 유지됨 &amp;rarr; 데이터 일관성 보장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [단점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 쓰기 작업 시 속도가 느릴 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;# Write-Back 캐싱&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 데이터를 캐시에 쓰고, 원본 저장소에는 특정 조건일 때에만 기록함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;ex) 캐시 만료, 시스템 종료 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 추천 대상 : 데이터 변경 빈도가 높고, 일관성이 덜 중요한 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [장점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 쓰기 작업이 빠름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 원본 저장소 접근 횟수 감소 &amp;rarr; 부하 감소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [단점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 캐시 손상 시 데이터가 유실될 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;b&gt;# Read-Through 캐싱&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 데이터 요청 시 캐시를 먼저 확인하고, 캐시에 없으면 원본 저장소에서 데이터를 먼저 가져와 캐시에 저장함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 추천 대상 : 읽기 작업이 빈번한 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [장점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 자주 조회되는 데이터인 경우 빠른 응답 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 캐시에 없는 데이터만 원본에서 가져오기 때문에 효율적임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [단점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 캐시에 없을 경우 초기 요청이 느릴 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;# Lazy-Loading 캐싱&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 데이터를 요청할 때에만 캐시에 저장함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 추천 대상 : 요청이 간헐적으로 발생하는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [장점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 초기 캐시 로드 시간이 필요 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 필요한 데이터만 캐싱 처리 &amp;rarr; 메모리 효율 UP&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [단점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 해당 데이터를 처음으로 요청하는 경우 응답이 느릴 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 자주 사용되지 않는 데이터는 캐싱되지 않음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;# Time-to-Live (TTL)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 캐시된 데이터의 유효 기간을 설정하여, 일정 시간이 지나면 무효화시킴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 실시간 데이터가 필요 없는 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [장점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 오래된 데이터를 자동으로 갱신할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 메모리 관리 용이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; [단점]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;middot; 유효 기간을 적절하게 설정하지 않는 경우 문제가 생길 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - TTL이 너무 짧을 때 : 갱신 빈도 증가 &amp;rarr; 원본 저장소 부담&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - TTL이 너무 길 때 : 캐시된 데이터와 원본 데이터 간 불일치 가능성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;# LRU (Least Recently Used)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 가장 오래 사용되지 않은 캐시 데이터를 삭제함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;# LFU (Least Frequently Used)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 가장 적게 사용된 캐시 데이터를 삭제함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CS</category>
      <category>cs</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>스응</author>
      <guid isPermaLink="true">https://young0105.tistory.com/388</guid>
      <comments>https://young0105.tistory.com/388#entry388comment</comments>
      <pubDate>Thu, 21 Nov 2024 23:33:48 +0900</pubDate>
    </item>
  </channel>
</rss>