<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>IT 아카이브</title>
    <link>https://cyberjung.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 1 Jun 2026 23:52:47 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>cyberjung</managingEditor>
    <image>
      <title>IT 아카이브</title>
      <url>https://tistory1.daumcdn.net/tistory/8583200/attach/6c15b1d8b68e4f9db19304efe1762a44</url>
      <link>https://cyberjung.tistory.com</link>
    </image>
    <item>
      <title>[웹 프로그래밍 실습] 포트폴리오 웹 페이지 제작</title>
      <link>https://cyberjung.tistory.com/9</link>
      <description>&lt;h3 data-path-to-node=&quot;5&quot; data-ke-size=&quot;size23&quot;&gt;핵심 기술 스택&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;6&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,0,0&quot;&gt;HTML5&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,1,0&quot;&gt;CSS3&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,2,0&quot;&gt;Google Fonts&lt;/b&gt;: CDN으로 연결해&amp;nbsp;Playfair Display, Fira Code, Noto Sans KR &lt;span&gt;세&lt;/span&gt; &lt;span&gt;가지&lt;/span&gt; &lt;span&gt;폰트를&lt;/span&gt; &lt;span&gt;사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 표준 기술인&lt;b&gt; HTML5&lt;/b&gt;와&lt;b&gt; CSS3&lt;/b&gt;만을 활용하여 가볍지만 강력한 시각 효과를 주는 데 집중했습니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-path-to-node=&quot;5&quot; data-ke-size=&quot;size23&quot;&gt;프로젝트 개요&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHEhjD/dJMcafsPPF5/kPSrM56o3eiXtEGkVEK8Mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHEhjD/dJMcafsPPF5/kPSrM56o3eiXtEGkVEK8Mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHEhjD/dJMcafsPPF5/kPSrM56o3eiXtEGkVEK8Mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHEhjD%2FdJMcafsPPF5%2FkPSrM56o3eiXtEGkVEK8Mk%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;500&quot; height=&quot;194&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;페이지는&lt;span&gt; &lt;/span&gt;크게&lt;span&gt; &lt;/span&gt;&lt;b&gt;세&lt;span&gt; &lt;/span&gt;섹션&lt;/b&gt;으로&lt;span&gt; &lt;/span&gt;구성됩니다&lt;span&gt;. &lt;/span&gt;&lt;b&gt;히어로&lt;span&gt; &lt;/span&gt;영역&lt;/b&gt;&lt;span&gt;, &lt;/span&gt;&lt;b&gt;개인&lt;span&gt; &lt;/span&gt;프로젝트&lt;span&gt; &lt;/span&gt;섹션&lt;/b&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;팀&lt;span&gt; &lt;/span&gt;프로젝트&lt;span&gt; &lt;/span&gt;섹션 &lt;/b&gt;입니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DbncR/dJMcacpmvm4/E0mEI2Bw5QEKf35kTQVAY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DbncR/dJMcacpmvm4/E0mEI2Bw5QEKf35kTQVAY0/img.png&quot; data-alt=&quot;히어로 섹션&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DbncR/dJMcacpmvm4/E0mEI2Bw5QEKf35kTQVAY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDbncR%2FdJMcacpmvm4%2FE0mEI2Bw5QEKf35kTQVAY0%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;900&quot; height=&quot;461&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;461&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;히어로 섹션&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&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-filename=&quot;blob&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUdWws/dJMcacpmvm6/WgE804QkeCt12vUiuP9D41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUdWws/dJMcacpmvm6/WgE804QkeCt12vUiuP9D41/img.png&quot; data-alt=&quot;개인 프로젝트 섹션&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUdWws/dJMcacpmvm6/WgE804QkeCt12vUiuP9D41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUdWws%2FdJMcacpmvm6%2FWgE804QkeCt12vUiuP9D41%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;900&quot; height=&quot;560&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;개인 프로젝트 섹션&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;479&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z3HZl/dJMcah5hGAW/9DRITURK30EOm0VrOtUhw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z3HZl/dJMcah5hGAW/9DRITURK30EOm0VrOtUhw0/img.png&quot; data-alt=&quot;팀 프로젝트 섹션&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z3HZl/dJMcah5hGAW/9DRITURK30EOm0VrOtUhw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ3HZl%2FdJMcah5hGAW%2F9DRITURK30EOm0VrOtUhw0%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;900&quot; height=&quot;479&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;479&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;팀 프로젝트 섹션&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-path-to-node=&quot;5&quot; data-ke-size=&quot;size23&quot;&gt;HTML 코드 구조 분석&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;&lt;b&gt;&lt;span&gt;&amp;lt;head&amp;gt; 영역&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tvprl/dJMcahqGfpl/wiVLGpee1s22rAxKRRps8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tvprl/dJMcahqGfpl/wiVLGpee1s22rAxKRRps8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tvprl/dJMcahqGfpl/wiVLGpee1s22rAxKRRps8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftvprl%2FdJMcahqGfpl%2FwiVLGpee1s22rAxKRRps8k%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;660&quot; height=&quot;435&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;512&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;&lt;span&gt;head &lt;/span&gt;태그&lt;span&gt; &lt;/span&gt;안에는&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;네&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;가지&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;핵심&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;요소&lt;/b&gt;&lt;/span&gt;가&lt;span&gt; &lt;/span&gt;들어있습니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;[ charset=UTF-8 ]&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;한글&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;등&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span&gt;다국어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;문자를&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;깨짐&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;없이&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;b&gt;표시&lt;/b&gt;합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;[ viewport &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;메타태그&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; ]&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;모바일&lt;span&gt; &lt;/span&gt;반응형&lt;span&gt; &lt;/span&gt;지원을&lt;span&gt; &lt;/span&gt;위한&lt;span&gt; &lt;/span&gt;필수&lt;span&gt; &lt;/span&gt;설정&lt;/b&gt;입니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;[ title &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;태그&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; ]&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;브라우저&lt;span&gt; &lt;/span&gt;탭과&lt;span&gt; &lt;/span&gt;검색엔진&lt;span&gt; &lt;/span&gt;결과에&lt;span&gt; &lt;/span&gt;표시되는&lt;span&gt; &lt;/span&gt;페이지&lt;span&gt; &lt;/span&gt;제목&lt;/b&gt;입니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ Google Fonts &lt;/b&gt;&lt;span&gt;&lt;b&gt;링크&lt;/b&gt;&lt;/span&gt;&lt;b&gt; ]&lt;/b&gt;&lt;span&gt; &lt;/span&gt;&lt;b&gt;&lt;span&gt;외부&lt;/span&gt;&lt;span&gt; CDN&lt;/span&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;폰트&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 3&lt;/span&gt;&lt;span&gt;종을&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;불러옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&quot;head &lt;/span&gt;태그는&lt;span&gt; &lt;/span&gt;화면에&lt;span&gt; &lt;/span&gt;보이지&lt;span&gt; &lt;/span&gt;않지만&lt;span&gt; &lt;/span&gt;&lt;b&gt;사이트&lt;span&gt; &lt;/span&gt;동작의&lt;span&gt; &lt;/span&gt;기반&lt;/b&gt;을&lt;span&gt; &lt;/span&gt;잡아주는&lt;span&gt; &lt;/span&gt;중요한&lt;span&gt; &lt;/span&gt;영역입니다&quot;&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;lt;nav&amp;gt; 내비게이션&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;772&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mglMc/dJMcajhFI1q/kXITPa2FtXZYu5NVdYS6s0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mglMc/dJMcajhFI1q/kXITPa2FtXZYu5NVdYS6s0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mglMc/dJMcajhFI1q/kXITPa2FtXZYu5NVdYS6s0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmglMc%2FdJMcajhFI1q%2FkXITPa2FtXZYu5NVdYS6s0%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;660&quot; height=&quot;609&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;772&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;&lt;span&gt;nav &lt;/span&gt;태그는&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;시맨틱&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;태그&lt;/b&gt;&lt;/span&gt;입니다&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;내비게이션 &lt;/span&gt;영역임을&lt;span&gt;&amp;nbsp;&lt;/span&gt;브라우저와&lt;span&gt; &lt;/span&gt;스크린리더에&lt;span&gt; &lt;/span&gt;의미적으로&lt;span&gt; &lt;/span&gt;전달합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;링크는&lt;span&gt; &lt;/span&gt;두&lt;span&gt; &lt;/span&gt;종류로&lt;span&gt; &lt;/span&gt;나뉩니다&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;href=&quot;#about&quot;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;처럼&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;샵&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;(#)&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;으로&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;시작하는&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;앵커&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;링크&lt;/b&gt;&lt;/span&gt;는&lt;span&gt; &lt;/span&gt;같은&lt;span&gt; &lt;/span&gt;페이지&lt;span&gt; &lt;/span&gt;내&lt;span&gt; &lt;/span&gt;특정&lt;span&gt; &lt;/span&gt;섹션으로&lt;span&gt; &lt;/span&gt;부드럽게&lt;span&gt; &lt;/span&gt;스크롤&lt;span&gt; &lt;/span&gt;이동시킵니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;반면&lt;/span&gt; GitHub&lt;span&gt;나&lt;/span&gt; Tistory &lt;span&gt;같은&lt;/span&gt; &lt;span&gt;외부&lt;/span&gt; &lt;span&gt;링크에는&lt;/span&gt; &lt;span&gt;&lt;b&gt;target=&quot;_blank&quot;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;를&lt;/span&gt; &amp;nbsp;&lt;span&gt;추가해&lt;/span&gt; &lt;span&gt;새&lt;/span&gt; &lt;span&gt;탭으로&lt;/span&gt; &lt;span&gt;열리도록&lt;/span&gt; &lt;span&gt;하였습니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;메뉴&lt;/span&gt; &lt;span&gt;항목은&lt;/span&gt;&lt;b&gt; ul&lt;span&gt;과&lt;/span&gt; li &lt;/b&gt;&lt;span&gt;&lt;b&gt;태그&lt;/b&gt;의&lt;/span&gt; &lt;span&gt;목록&lt;/span&gt; &lt;span&gt;구조로&lt;/span&gt; &lt;span&gt;작성되어&lt;/span&gt; &lt;span&gt;있으며&lt;/span&gt;,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CSS&lt;span&gt;에서&lt;/span&gt; list-style: none&lt;span&gt;으로&lt;/span&gt; &lt;span&gt;점을&lt;/span&gt; &lt;span&gt;제거하고&lt;/span&gt; flex를 적용하여&amp;nbsp;&lt;span&gt;가로&lt;/span&gt; &lt;span&gt;배치 되게 하였습니다&lt;/span&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;&lt;b&gt;&amp;lt;header&amp;gt; &lt;/b&gt;&lt;span&gt;&lt;b&gt;히어로&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&lt;span&gt;&lt;b&gt;섹션&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1492&quot; data-origin-height=&quot;990&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz8tlg/dJMcadV3Rmk/ek1QRUb5ZmKL1M3OX25xy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz8tlg/dJMcadV3Rmk/ek1QRUb5ZmKL1M3OX25xy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz8tlg/dJMcadV3Rmk/ek1QRUb5ZmKL1M3OX25xy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz8tlg%2FdJMcadV3Rmk%2Fek1QRUb5ZmKL1M3OX25xy1%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;660&quot; height=&quot;438&quot; data-origin-width=&quot;1492&quot; data-origin-height=&quot;990&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;페이지&lt;span&gt; &lt;/span&gt;최초&lt;span&gt; &lt;/span&gt;진입&lt;span&gt; &lt;/span&gt;시&lt;span&gt; &lt;/span&gt;전체&lt;span&gt; &lt;/span&gt;화면을&lt;span&gt; &lt;/span&gt;차지하는&lt;span&gt; &lt;/span&gt;소개&lt;span&gt; &lt;/span&gt;영역입니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이것이&lt;b&gt;&lt;span&gt; header &lt;/span&gt;태그로&lt;span&gt; &lt;/span&gt;구성된&lt;span&gt; &lt;/span&gt;&lt;/b&gt;&lt;b&gt;히어로&lt;span&gt; &lt;/span&gt;섹션&lt;/b&gt;입니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;header &lt;span&gt;태그에&lt;/span&gt; &lt;span&gt;&lt;b&gt;id=&quot;about&quot;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;을 &lt;/span&gt;&lt;span&gt;지정하여&lt;/span&gt; nav&lt;span&gt;의&lt;/span&gt; &lt;span&gt;앵커&lt;/span&gt; &lt;span&gt;링크와&lt;/span&gt;&lt;span&gt;연결하였습니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;즉&lt;/span&gt;, &lt;span&gt;상단&lt;/span&gt; &lt;span&gt;메뉴에서&lt;/span&gt; &lt;b&gt;Home&lt;span&gt;을&lt;/span&gt; &lt;span&gt;클릭하면&lt;/span&gt; &lt;span&gt;이&lt;/span&gt; header &lt;span&gt;영역으로&lt;/span&gt; &lt;/b&gt;&lt;span&gt;&lt;b&gt;스크롤&lt;/b&gt;됩니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;br / 태그 사용해 강제&lt;span&gt; &lt;/span&gt;줄바꿈&lt;/b&gt;으로 제목을 두 줄로 분리하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이름과&lt;span&gt; &lt;/span&gt;학번&lt;span&gt; &lt;/span&gt;부분은&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;span &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;태그&lt;/b&gt;&lt;/span&gt;로&lt;span&gt; &lt;/span&gt;감싸서&lt;span&gt; &lt;/span&gt;해당&lt;span&gt; &lt;/span&gt;부분에만&lt;span&gt; &lt;/span&gt;별도&lt;span&gt; &lt;/span&gt;폰트&lt;span&gt; &lt;/span&gt;스타일을&lt;span&gt; &lt;/span&gt;적용하였습니다&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;span&lt;/span&gt;은&lt;span&gt; &lt;/span&gt;인라인&lt;span&gt; &lt;/span&gt;요소이므로&lt;span&gt; &lt;/span&gt;줄바꿈&lt;span&gt; &lt;/span&gt;없이 텍스트&lt;span&gt; &lt;/span&gt;안에&lt;span&gt; &lt;/span&gt;자연스럽게&lt;span&gt; &lt;/span&gt;삽입됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;H&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;TML&lt;/span&gt;특수문자엔티티인&amp;nbsp;&lt;b&gt;&amp;amp;darr; &lt;/b&gt;를 사용해&lt;/span&gt;&amp;nbsp;&lt;span&gt;브라우저가&lt;/span&gt; &amp;darr; &lt;span&gt;기호로&lt;/span&gt; &lt;span&gt;렌더링합니다&lt;/span&gt;. CSS 애니메이션을 적용해 bounce 효과 &lt;span&gt;적용됩니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;버튼&lt;/span&gt; &lt;span&gt;두&lt;/span&gt; &lt;span&gt;개&lt;/span&gt;(GitHub, Tistory)&lt;span&gt;에&lt;/span&gt; &lt;span&gt;대해 &lt;/span&gt;&lt;span&gt;같은&lt;/span&gt; &lt;b&gt;btn &lt;/b&gt;&lt;span&gt;&lt;b&gt;클래스&lt;/b&gt;를&lt;/span&gt; &lt;span&gt;공유하되&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다중 클래스 패턴&lt;/b&gt;으로&lt;b&gt; btn-github&lt;span&gt;와&lt;/span&gt; btn-blog&lt;/b&gt;&lt;span&gt;로&lt;/span&gt; &lt;span&gt;디자인을&lt;/span&gt; &lt;span&gt;구분하였습니다.&lt;/span&gt;&lt;span&gt;&lt;/span&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;&lt;b&gt;&lt;span&gt;구분선 및 개인/팀 프로젝트 섹션&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1212&quot; data-origin-height=&quot;1372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Qwh6A/dJMcaiiNiKO/nbqjnF4X4ZLkkEpJ0eKi3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Qwh6A/dJMcaiiNiKO/nbqjnF4X4ZLkkEpJ0eKi3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Qwh6A/dJMcaiiNiKO/nbqjnF4X4ZLkkEpJ0eKi3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQwh6A%2FdJMcaiiNiKO%2FnbqjnF4X4ZLkkEpJ0eKi3K%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;660&quot; height=&quot;747&quot; data-origin-width=&quot;1212&quot; data-origin-height=&quot;1372&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;lt;section&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;주제별로&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;묶인&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;독립적인&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;콘텐츠&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;영역을&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;나타내는&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;시맨틱&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;태그입니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;헤딩&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;계층&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;h2&amp;rarr;h3&amp;rarr;h4&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;h2(&lt;span&gt;헤더&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;제목&lt;/span&gt;) &amp;rarr; h3(&lt;span&gt;섹션&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;제목&lt;/span&gt;) &amp;rarr; h4(&lt;span&gt;프로젝트&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;제목&lt;/span&gt;)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;순으로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;논리적&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;계층을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;유지합니다&lt;/span&gt;.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;lt;strong&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;단순히&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;굵게&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;보여주는&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;것&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;외에&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;의미적으로&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;중요한&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;텍스트임을&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;나타냅니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;style=&quot;margin-top: 30px&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;인라인&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;스타일로&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;두&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;번째&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;카드에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;30px&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;상단&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;여백을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;추가합니다&lt;/span&gt;.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;일반적으로는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;CSS&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;클래스&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;사용이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;권장됩니다&lt;/span&gt;.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt;ul class=&quot;project-spec-list&quot;&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;프로젝트&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;정보를&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;목록으로&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;구조화합니다&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;652&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CDi1m/dJMcabjIfWE/AbYqb6irzKIzTKcFn3dGvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CDi1m/dJMcabjIfWE/AbYqb6irzKIzTKcFn3dGvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CDi1m/dJMcabjIfWE/AbYqb6irzKIzTKcFn3dGvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCDi1m%2FdJMcabjIfWE%2FAbYqb6irzKIzTKcFn3dGvK%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;660&quot; height=&quot;611&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;652&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;&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;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;프로젝트와&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;팀&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;프로젝트&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;사이에는&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;hr&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;태그&lt;/b&gt;&lt;/span&gt;로&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;구분선을&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;넣었습니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기본&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;hr&lt;/span&gt;의&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;테두리는&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;CSS&lt;/span&gt;로&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;제거하고&lt;span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;청록색&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;그라디언트&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;선으로&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;재디자인하였습니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;팀&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;프로젝트&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;섹션도&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;개인&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;프로젝트와&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;동일한&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;카드&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;구조를&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;재사용하여&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;일관된&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;디자인을&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;유지하였습니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-path-to-node=&quot;5&quot; data-ke-size=&quot;size23&quot;&gt;CSS 코드 구조 분석&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;CSS &lt;/b&gt;&lt;span&gt;&lt;b&gt;변수&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&lt;span&gt;&lt;b&gt;및&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&lt;span&gt;&lt;b&gt;전역&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&lt;span&gt;&lt;b&gt;초기화&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1412&quot; data-origin-height=&quot;549&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5ELFJ/dJMcafTVHOc/J6ECtUDAkGY5P5tNk0jLx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5ELFJ/dJMcafTVHOc/J6ECtUDAkGY5P5tNk0jLx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5ELFJ/dJMcafTVHOc/J6ECtUDAkGY5P5tNk0jLx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5ELFJ%2FdJMcafTVHOc%2FJ6ECtUDAkGY5P5tNk0jLx1%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;660&quot; height=&quot;257&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1412&quot; data-origin-height=&quot;549&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;&lt;span&gt;&lt;b&gt;root &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;블록&lt;/b&gt;에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CSS &lt;/span&gt;변수를&lt;span&gt; &lt;/span&gt;선언합니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예를&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;들어&lt;/b&gt;&lt;span&gt;&lt;b&gt; --accent: #00ffcc&lt;/b&gt;&lt;/span&gt;&lt;b&gt;로&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;포인트&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;컬러를&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;변수로&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;등록하면&lt;/b&gt;&lt;span&gt;&lt;b&gt;, &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이후&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;전체&lt;/b&gt;&lt;span&gt;&lt;b&gt; CSS&lt;/b&gt;&lt;/span&gt;&lt;b&gt;에서&lt;/b&gt;&lt;span&gt;&lt;b&gt; var(-accent)&lt;/b&gt;&lt;/span&gt;&lt;b&gt;로&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;재사용할&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;수&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;있습니다&lt;/b&gt;&lt;span&gt;&lt;b&gt;. &lt;/b&gt;&lt;/span&gt;&lt;b&gt;나중에&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;포인트&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;색상을&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;바꾸고&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;싶을&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;때&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;이&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;한&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;줄만&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;수정하면&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;전체가&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;일괄&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;변경됩니다&lt;/b&gt;&lt;span&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그&lt;span&gt; &lt;/span&gt;다음&lt;span&gt;&lt;b&gt;&amp;nbsp; *&lt;/b&gt; , &lt;/span&gt;즉&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;전체&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;선택자로&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; margin&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;과&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; padding&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;을&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; 0&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;으로&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;초기화&lt;/b&gt;&lt;/span&gt;합니다&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저마다&lt;span&gt; &lt;/span&gt;기본&lt;span&gt; &lt;/span&gt;여백이&lt;span&gt; &lt;/span&gt;달라&lt;span&gt; &lt;/span&gt;레이아웃이&lt;span&gt; &lt;/span&gt;틀어지는&lt;span&gt; &lt;/span&gt;것을&lt;span&gt; &lt;/span&gt;방지하는&lt;span&gt; CSS &lt;/span&gt;리셋&lt;span&gt; &lt;/span&gt;기법입니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;함께&lt;/span&gt; &lt;span&gt;설정된&lt;/span&gt; &lt;span&gt;&lt;b&gt;box-sizing: border-box&lt;/b&gt;&lt;/span&gt;&lt;span&gt;는&lt;/span&gt; padding&lt;span&gt;과&lt;/span&gt; border&lt;span&gt;를&lt;/span&gt; &lt;span&gt;요소의&lt;/span&gt; &lt;span&gt;전체&lt;/span&gt; &lt;span&gt;크기에&lt;/span&gt; &lt;span&gt;포함해&lt;/span&gt;&amp;nbsp;&lt;span&gt;레이아웃&lt;/span&gt; &lt;span&gt;계산을&lt;/span&gt; &lt;span&gt;직관적으로&lt;/span&gt; &lt;span&gt;만들어줍니다&lt;/span&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;&lt;b&gt;body &lt;/b&gt;&lt;span&gt;&lt;b&gt;배경&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&lt;span&gt;&lt;b&gt;및&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&lt;span&gt;&lt;b&gt;기본&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&lt;span&gt;&lt;b&gt;스타일&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;body &lt;/b&gt;&lt;/span&gt;&lt;b&gt;스타일&lt;/b&gt;에서&lt;span&gt; &lt;/span&gt;가장&lt;span&gt; &lt;/span&gt;주목할&lt;span&gt; &lt;/span&gt;부분은&lt;span&gt; &lt;/span&gt;&lt;b&gt;배경&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;처리&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;방식&lt;/b&gt;입니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;522&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m76lz/dJMcaad1iBX/dY0aWhMKiHKRRYedJkMTVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m76lz/dJMcaad1iBX/dY0aWhMKiHKRRYedJkMTVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m76lz/dJMcaad1iBX/dY0aWhMKiHKRRYedJkMTVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm76lz%2FdJMcaad1iBX%2FdY0aWhMKiHKRRYedJkMTVK%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;660&quot; height=&quot;256&quot; data-origin-width=&quot;1348&quot; data-origin-height=&quot;522&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;background-image&lt;span&gt;에 &lt;/span&gt;&lt;span&gt;&lt;b&gt;두&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;개의&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;레이어&lt;/b&gt;&lt;/span&gt;&lt;span&gt;를&lt;/span&gt; &lt;span&gt;동시에&lt;/span&gt; &lt;span&gt;지정하였습니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;첫&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;번째&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;레이어는&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;검정&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;반투명&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;그라디언트이고&lt;/b&gt;&lt;span&gt;&lt;b&gt;, &lt;/b&gt;&lt;/span&gt;&lt;b&gt;두&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;번째&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;레이어는&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;실제&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;배경&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;이미지입니다&lt;/b&gt;&lt;span&gt;&lt;b&gt;. &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그라디언트가&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;이미지&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;위를&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;덮어&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;텍스트&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;가독성을&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;확보합니다&lt;/b&gt;&lt;span&gt;&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;background-attachment: fixed&lt;/b&gt;&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;설정하여&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크롤해도&lt;span&gt; &lt;/span&gt;배경&lt;span&gt; &lt;/span&gt;이미지는&lt;span&gt; &lt;/span&gt;고정되고&lt;span&gt; &lt;/span&gt;콘텐츠만&lt;span&gt; &lt;/span&gt;움직이는&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;패럴랙스&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;효과&lt;/b&gt;&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;구현하였습니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;b&gt;scroll-behavior: smooth&lt;/b&gt;&lt;/span&gt;&lt;span&gt;를&lt;/span&gt; &lt;span&gt;적용하여&lt;/span&gt; &lt;span&gt;앵커&lt;/span&gt; &lt;span&gt;링크&lt;/span&gt; &lt;span&gt;클릭&lt;/span&gt; &lt;span&gt;시&lt;/span&gt; &lt;span&gt;즉시&lt;/span&gt; &lt;span&gt;이동&lt;/span&gt; &lt;span&gt;대신&lt;/span&gt; &lt;span&gt;부드러운&lt;/span&gt; &lt;span&gt;스크롤&lt;/span&gt; &lt;span&gt;애니메이션이&lt;/span&gt; &lt;span&gt;실행됩니다&lt;/span&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;&lt;b&gt;.container &lt;/b&gt;&lt;span&gt;&lt;b&gt;및&lt;/b&gt;&lt;/span&gt;&lt;b&gt; nav &lt;/b&gt;&lt;span&gt;&lt;b&gt;스타일&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;726&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxK49q/dJMcaakLFk4/UntCtdVKNBq7sQHbgJ5uv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxK49q/dJMcaakLFk4/UntCtdVKNBq7sQHbgJ5uv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxK49q/dJMcaakLFk4/UntCtdVKNBq7sQHbgJ5uv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxK49q%2FdJMcaakLFk4%2FUntCtdVKNBq7sQHbgJ5uv0%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;660&quot; height=&quot;547&quot; data-origin-width=&quot;876&quot; data-origin-height=&quot;726&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레이아웃의&lt;span&gt; &lt;/span&gt;핵심이&lt;span&gt; &lt;/span&gt;되는&lt;span&gt; &lt;/span&gt;&lt;b&gt;컨테이너,&lt;span&gt;&amp;nbsp;&lt;/span&gt;고정&lt;span&gt; &lt;/span&gt;내비게이션&lt;span&gt; &lt;/span&gt;바&lt;/b&gt;의&lt;span&gt; &lt;/span&gt;스타일입니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내비게이션&lt;span&gt; &lt;/span&gt;바에는&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;position: fixed&lt;/b&gt;&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;적용해&lt;span&gt; &lt;/span&gt;스크롤해도&lt;span&gt; &lt;/span&gt;항상&lt;span&gt; &lt;/span&gt;화면&lt;span&gt; &lt;/span&gt;상단에&lt;span&gt; &lt;/span&gt;고정되도록&lt;span&gt; &lt;/span&gt;하였습니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;z-index: 1000&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;으로&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;다른&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;요소&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;위에&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;항상&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;표시됩니다&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;backdrop-filter: blur(15px) &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt; nav &lt;span&gt;뒤의&lt;/span&gt; &lt;span&gt;콘텐츠를&lt;/span&gt; 15px &lt;span&gt;블러&lt;/span&gt; &lt;span&gt;처리해&lt;/span&gt; &lt;span&gt;유리&lt;/span&gt;&amp;nbsp;&lt;span&gt;효과를&lt;/span&gt; &lt;span&gt;구현합니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메뉴&lt;span&gt; &lt;/span&gt;링크에는&lt;b&gt;&lt;span&gt; transition: 0.3s&lt;/span&gt;와&lt;span&gt; hover &lt;/span&gt;스타일&lt;/b&gt;을&lt;span&gt; &lt;/span&gt;함께&lt;span&gt; &lt;/span&gt;적용해&lt;span&gt;, &lt;/span&gt;마우스를&lt;span&gt; &lt;/span&gt;올리면&lt;span&gt; 0.3&lt;/span&gt;초에&lt;span&gt; &lt;/span&gt;걸쳐&lt;span&gt; &lt;/span&gt;청록색으로&lt;span&gt; &lt;/span&gt;부드럽게&lt;span&gt; &lt;/span&gt;색이&lt;span&gt; &lt;/span&gt;바뀝니다&lt;span&gt;.&lt;/span&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;&lt;b&gt;header &lt;/b&gt;&lt;span&gt;&lt;b&gt;히어로&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&lt;span&gt;&lt;b&gt;섹션&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&lt;span&gt;&lt;b&gt;스타일&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체&lt;span&gt; &lt;/span&gt;화면&lt;span&gt; &lt;/span&gt;높이의&lt;span&gt; &lt;/span&gt;소개&lt;span&gt; &lt;/span&gt;섹션과&lt;span&gt; &lt;/span&gt;반응형&lt;span&gt; &lt;/span&gt;제목&lt;span&gt; &lt;/span&gt;폰트&lt;span&gt;, &lt;/span&gt;텍스트&lt;span&gt; &lt;/span&gt;글로우&lt;span&gt; &lt;/span&gt;효과를&lt;span&gt; &lt;/span&gt;설정합니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;716&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvFujd/dJMcahjV9iw/rkko4eaXB5KWdo2KqwDWO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvFujd/dJMcahjV9iw/rkko4eaXB5KWdo2KqwDWO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvFujd/dJMcahjV9iw/rkko4eaXB5KWdo2KqwDWO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvFujd%2FdJMcahjV9iw%2Frkko4eaXB5KWdo2KqwDWO1%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;660&quot; height=&quot;403&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;716&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;header&lt;span&gt;에&lt;/span&gt; &lt;span&gt;&lt;b&gt;height: 100vh&lt;/b&gt;&lt;/span&gt;&lt;span&gt;를&lt;/span&gt; &lt;span&gt;적용하여 &lt;/span&gt;&lt;span&gt;화면&lt;/span&gt; &lt;span&gt;전체&lt;/span&gt; &lt;span&gt;높이를&lt;/span&gt; &lt;span&gt;차지하도록&lt;/span&gt; &lt;span&gt;하였습니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;display: flex&lt;/b&gt;&lt;span&gt;와 &lt;/span&gt;&lt;b&gt;align-items, justify-content&lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;를&lt;/span&gt;&lt;b&gt; center&lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;로&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;설정해&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;내부&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;콘텐츠를&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;가로와&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;세로&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;모두&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;완전히&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt; &lt;/span&gt;&lt;b&gt;중앙에 &lt;/b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;b&gt;배치&lt;/b&gt;하였습니다&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;Clamp(2.5rem, 6.5vw, 5rem) &lt;/b&gt;&lt;/span&gt;&lt;span&gt;최소&lt;/span&gt;&amp;nbsp;2.5rem, &lt;span&gt;기준값&lt;/span&gt; 6.5vw, &lt;span&gt;최대&lt;/span&gt;&amp;nbsp;5rem&lt;span&gt;으로&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;화면&lt;/span&gt; &lt;span&gt;크기에&lt;/span&gt; &lt;span&gt;따라&lt;/span&gt;&amp;nbsp; &amp;nbsp;&lt;span&gt;폰트&lt;/span&gt; &lt;span&gt;크기가&lt;/span&gt; &lt;span&gt;자동&lt;/span&gt; &lt;span&gt;조절되는&lt;/span&gt; &lt;span&gt;반응형&lt;/span&gt; &lt;span&gt;타이포그래피입니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;text-shadow&lt;/span&gt;에는&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;두&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;겹의&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;글로우&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;효과&lt;/b&gt;&lt;/span&gt;를&lt;span&gt; &lt;/span&gt;쌓았습니다&lt;span&gt;. &lt;/span&gt;흰색&lt;span&gt; &lt;/span&gt;글로우로&lt;span&gt; &lt;/span&gt;가독성을&lt;span&gt; &lt;/span&gt;높이고&lt;span&gt;, &lt;/span&gt;청록색&lt;span&gt; &lt;/span&gt;글로우로&lt;span&gt; &lt;/span&gt;포인트&lt;span&gt; &lt;/span&gt;컬러와의&lt;span&gt; &lt;/span&gt;통일감을&lt;span&gt; &lt;/span&gt;주었습니다&lt;span&gt;.&lt;/span&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;&lt;b&gt;버튼&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;스타일&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버튼은&lt;span&gt; &lt;/span&gt;&lt;b&gt;두&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;가지&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;패턴&lt;/b&gt;으로&lt;span&gt; &lt;/span&gt;디자인하였습니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;1050&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTd8kV/dJMcagL5iuB/uJEK22bv3PsHmR1KF5ZEjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTd8kV/dJMcagL5iuB/uJEK22bv3PsHmR1KF5ZEjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTd8kV/dJMcagL5iuB/uJEK22bv3PsHmR1KF5ZEjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTd8kV%2FdJMcagL5iuB%2FuJEK22bv3PsHmR1KF5ZEjK%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;660&quot; height=&quot;753&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;1050&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;&lt;span&gt;GitHub &lt;/span&gt;버튼인&lt;span&gt; btn-github&lt;/span&gt;는&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;아웃라인&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;스타일&lt;/b&gt;&lt;/span&gt;로&lt;span&gt;, &lt;/span&gt;테두리만&lt;span&gt; &lt;/span&gt;있고&lt;span&gt; &lt;/span&gt;배경은&lt;span&gt; &lt;/span&gt;없습니다&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;마우스를 hover 시 &lt;/span&gt;배경이&lt;span&gt; &lt;/span&gt;채워지며&lt;span&gt; &lt;/span&gt;텍스트&lt;span&gt; &lt;/span&gt;색이&lt;span&gt; &lt;/span&gt;검정으로&lt;span&gt; &lt;/span&gt;바뀝니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tistory &lt;span&gt;버튼인&lt;/span&gt; btn-blog&lt;span&gt;는&lt;/span&gt; &lt;span&gt;&lt;b&gt;솔리드&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;스타일&lt;/b&gt;&lt;/span&gt;&lt;span&gt;로&lt;/span&gt;, &lt;span&gt;처음부터&lt;/span&gt; &lt;span&gt;청록색&lt;/span&gt; &lt;span&gt;배경이&lt;/span&gt; &lt;span&gt;채워져&lt;/span&gt; &lt;span&gt;있습니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hover &lt;span&gt;시에는&lt;/span&gt; box-shadow&lt;span&gt;로&lt;/span&gt; &lt;span&gt;네온&lt;/span&gt; &lt;span&gt;빛이&lt;/span&gt; &lt;span&gt;번지는&lt;/span&gt; &lt;span&gt;효과가&lt;/span&gt; &lt;span&gt;나타납니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;border-radius&lt;/span&gt;를&lt;span&gt; 2px&lt;/span&gt;로&lt;span&gt; &lt;/span&gt;설정하여&lt;span&gt; &lt;/span&gt;모서리가&lt;span&gt; &lt;/span&gt;거의&lt;span&gt; &lt;/span&gt;직각에&lt;span&gt; &lt;/span&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;&lt;b&gt;스크롤&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;화살표&lt;/b&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;b&gt;애니메이션&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스크롤&lt;span&gt; &lt;/span&gt;유도&lt;span&gt; &lt;/span&gt;화살표에는&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;@keyframes &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;애니메이션 (키프레임)&lt;/b&gt;&lt;/span&gt;을&lt;span&gt; &lt;/span&gt;적용하였습니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;864&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3FXy1/dJMcacQqdN9/5SsMDO2fIsLJn3NaNPW5ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3FXy1/dJMcacQqdN9/5SsMDO2fIsLJn3NaNPW5ik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3FXy1/dJMcacQqdN9/5SsMDO2fIsLJn3NaNPW5ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3FXy1%2FdJMcacQqdN9%2F5SsMDO2fIsLJn3NaNPW5ik%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;660&quot; height=&quot;550&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;864&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;&lt;span&gt;&lt;b&gt;중앙&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;정렬&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;공식&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt; position:absolute + left:50% + translateX(-50%) &lt;span&gt;조합으로&lt;/span&gt; &lt;span&gt;정확한&lt;/span&gt; &lt;span&gt;수평&lt;/span&gt; &lt;span&gt;중앙&lt;/span&gt; &lt;span&gt;배치를 &lt;/span&gt;&lt;span&gt;구현합니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;@keyframes bounce &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt; 0~100% &lt;span&gt;구간&lt;/span&gt; &lt;span&gt;중&lt;/span&gt; 40% &lt;span&gt;지점에서만&lt;/span&gt; &lt;span&gt;위로&lt;/span&gt; 10px &lt;span&gt;이동해&lt;/span&gt; &lt;span&gt;통통&lt;/span&gt; &lt;span&gt;튀는&lt;/span&gt; &lt;span&gt;효과를&lt;/span&gt; &lt;span&gt;만듭니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;animation: 2s infinite &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span&gt; 2&lt;/span&gt;&lt;span&gt;초&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;주기로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;무한&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;반복&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;재생됩니다&lt;/span&gt;&lt;span&gt;.&lt;/span&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;&lt;span&gt;&lt;b&gt;프로젝트&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&lt;span&gt;&lt;b&gt;카드&lt;/b&gt;&lt;/span&gt;&lt;b&gt; (.project-card)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카드&lt;span&gt; &lt;/span&gt;컴포넌트의&lt;span&gt; &lt;/span&gt;배경&lt;span&gt;, &lt;/span&gt;테두리&lt;span&gt;, hover &lt;/span&gt;인터랙션&lt;span&gt; &lt;/span&gt;및&lt;span&gt; &lt;/span&gt;내부&lt;span&gt; &lt;/span&gt;스펙&lt;span&gt; &lt;/span&gt;리스트&lt;span&gt; &lt;/span&gt;정렬을&lt;span&gt; &lt;/span&gt;정의합니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1212&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l3JUp/dJMcabcSZ23/ZV2DvgkRhH3kQxgL13res1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l3JUp/dJMcabcSZ23/ZV2DvgkRhH3kQxgL13res1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l3JUp/dJMcabcSZ23/ZV2DvgkRhH3kQxgL13res1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl3JUp%2FdJMcabcSZ23%2FZV2DvgkRhH3kQxgL13res1%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;660&quot; height=&quot;384&quot; data-origin-width=&quot;1212&quot; data-origin-height=&quot;706&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;&lt;b&gt;background: rgba(255,255,255,0.05) &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt; 5% 흰색 불투명도로 배경과 미묘하게 구분되는 반투명 카드 효과를 표현합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;border 불투명도 변화 &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt; 평상시 20% 불투명도 &amp;rarr; hover 시 100% 불투명도로 테두리가 선명해집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;translateY(-5px) + box-shadow &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt; &lt;span&gt;카드가&lt;/span&gt; &lt;span&gt;위로&lt;/span&gt; 5px &lt;span&gt;부상하며&lt;/span&gt; &lt;span&gt;하단&lt;/span&gt; &lt;span&gt;청록&lt;/span&gt; &lt;span&gt;그림자로&lt;/span&gt; &lt;span&gt;떠오른&lt;/span&gt; &lt;span&gt;느낌을&lt;/span&gt; &lt;span&gt;강화합니다&lt;/span&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;&lt;span&gt;&lt;b&gt;반응형&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;&lt;span&gt;&lt;b&gt;디자인&lt;/b&gt;&lt;/span&gt;&lt;b&gt; (@media)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;b&gt;미디어&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;쿼리&lt;/b&gt;&lt;/span&gt;입니다&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;@media (max-width: 768px) &lt;/span&gt;조건으로&lt;span&gt; &lt;/span&gt;화면&lt;span&gt; &lt;/span&gt;너비가&lt;span&gt; 768&lt;/span&gt;픽셀&lt;span&gt; &lt;/span&gt;이하일&lt;span&gt; &lt;/span&gt;때&lt;span&gt;, &lt;/span&gt;즉&lt;span&gt; &lt;/span&gt;태블릿이나&lt;span&gt; &lt;/span&gt;모바일&lt;span&gt; &lt;/span&gt;환경에서&lt;span&gt; &lt;/span&gt;별도&lt;span&gt; &lt;/span&gt;스타일이&lt;span&gt; &lt;/span&gt;적용됩니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8Xt07/dJMcaiwjHPb/Vk3VTJ1FKP0fzc5rDnFjJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8Xt07/dJMcaiwjHPb/Vk3VTJ1FKP0fzc5rDnFjJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8Xt07/dJMcaiwjHPb/Vk3VTJ1FKP0fzc5rDnFjJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8Xt07%2FdJMcaiwjHPb%2FVk3VTJ1FKP0fzc5rDnFjJ0%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;660&quot; height=&quot;393&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;486&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;&lt;span&gt;&lt;b&gt;@media (max-width: 768px) &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt; &lt;span&gt;화면&lt;/span&gt; &lt;span&gt;너비&lt;/span&gt; 768px &lt;span&gt;이하&lt;/span&gt;(&lt;span&gt;태블릿&lt;/span&gt;/&lt;span&gt;모바일&lt;/span&gt;)&lt;span&gt;일&lt;/span&gt; &lt;span&gt;때&lt;/span&gt; &lt;span&gt;적용됩니다&lt;/span&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;display: none &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;모바일에서&lt;span&gt; &lt;/span&gt;내비게이션&lt;span&gt; &lt;/span&gt;메뉴를&lt;span&gt; &lt;/span&gt;숨깁니다&lt;span&gt;.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;컨테이너&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;패딩&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt;축소&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;b&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;패딩&lt;span&gt; &lt;/span&gt;축소&lt;span&gt;, &lt;/span&gt;폰트&lt;span&gt; &lt;/span&gt;크기&lt;span&gt; &lt;/span&gt;고정으로&lt;span&gt; &lt;/span&gt;모바일&lt;span&gt; &lt;/span&gt;레이아웃을&lt;span&gt; &lt;/span&gt;최적화합니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;1989&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blizmy/dJMcaciBgVB/q8T5BE1sLmAQSEK857n9R0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blizmy/dJMcaciBgVB/q8T5BE1sLmAQSEK857n9R0/img.png&quot; data-alt=&quot;모바일 접속시 화면&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blizmy/dJMcaciBgVB/q8T5BE1sLmAQSEK857n9R0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fblizmy%2FdJMcaciBgVB%2Fq8T5BE1sLmAQSEK857n9R0%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;550&quot; height=&quot;1038&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1179&quot; data-origin-height=&quot;1989&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;모바일 접속시 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-path-to-node=&quot;5&quot; data-ke-size=&quot;size23&quot;&gt;HTML 핵심 개념&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;520&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5gNru/dJMcad2OTJQ/2xjUiKBaN4KeYDq9hDBkPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5gNru/dJMcad2OTJQ/2xjUiKBaN4KeYDq9hDBkPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5gNru/dJMcad2OTJQ/2xjUiKBaN4KeYDq9hDBkPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5gNru%2FdJMcad2OTJQ%2F2xjUiKBaN4KeYDq9hDBkPK%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;600&quot; height=&quot;259&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;520&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-path-to-node=&quot;5&quot; data-ke-size=&quot;size23&quot;&gt;CSS 핵심 개념&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1232&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n6SN7/dJMcadoeO4f/BK4FNCbbI2xKgaWw3r86nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n6SN7/dJMcadoeO4f/BK4FNCbbI2xKgaWw3r86nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n6SN7/dJMcadoeO4f/BK4FNCbbI2xKgaWw3r86nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn6SN7%2FdJMcadoeO4f%2FBK4FNCbbI2xKgaWw3r86nk%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;600&quot; height=&quot;286&quot; data-origin-width=&quot;1232&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-path-to-node=&quot;5&quot; data-ke-size=&quot;size23&quot;&gt;결론&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본&lt;span&gt; &lt;/span&gt;포트폴리오&lt;span&gt; &lt;/span&gt;웹사이트는 구조적인&lt;span&gt; &lt;/span&gt;측면에서는&lt;span&gt; nav, header, section &lt;/span&gt;등&lt;span&gt; &lt;/span&gt;시맨틱&lt;span&gt; &lt;/span&gt;태그를&lt;span&gt; &lt;/span&gt;올바르게&lt;span&gt; &lt;/span&gt;사용하여&lt;span&gt; &lt;/span&gt;문서의&lt;span&gt; &lt;/span&gt;논리적&lt;span&gt; &lt;/span&gt;계층을&lt;span&gt; &lt;/span&gt;명확히&lt;span&gt; &lt;/span&gt;표현하였으며&lt;span&gt;, &lt;/span&gt;앵커&lt;span&gt; &lt;/span&gt;링크와&lt;span&gt; id &lt;/span&gt;속성의&lt;span&gt; &lt;/span&gt;연계로&lt;span&gt; &lt;/span&gt;단일&lt;span&gt; &lt;/span&gt;페이지&lt;span&gt;(SPA&lt;/span&gt;형&lt;span&gt;) &lt;/span&gt;내비게이션을&lt;span&gt; &lt;/span&gt;구현하였습니다&lt;span&gt;.&lt;/span&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;디자인&lt;span&gt; &lt;/span&gt;측면에서는&lt;span&gt; CSS &lt;/span&gt;변수를&lt;span&gt; &lt;/span&gt;활용한&lt;span&gt; &lt;/span&gt;중앙화된&lt;span&gt; &lt;/span&gt;테마&lt;span&gt; &lt;/span&gt;관리&lt;span&gt;, Glassmorphism &lt;/span&gt;기법의&lt;span&gt; &lt;/span&gt;내비게이션&lt;span&gt; &lt;/span&gt;바&lt;span&gt;, &lt;/span&gt;패럴랙스&lt;span&gt; &lt;/span&gt;배경&lt;span&gt; &lt;/span&gt;효과&lt;span&gt;, clamp() &lt;/span&gt;함수를&lt;span&gt; &lt;/span&gt;이용한&lt;span&gt; &lt;/span&gt;반응형&lt;span&gt; &lt;/span&gt;타이포그래피&lt;span&gt; &lt;/span&gt;등&lt;span&gt; &lt;/span&gt;최신&lt;span&gt; CSS &lt;/span&gt;트렌드를&lt;span&gt; &lt;/span&gt;적극적으로&lt;span&gt; &lt;/span&gt;도입하였습니다&lt;span&gt;. &lt;/span&gt;또한&lt;span&gt; @keyframes &lt;/span&gt;애니메이션&lt;span&gt;, hover &lt;/span&gt;인터랙션&lt;span&gt;, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이중&lt;span&gt; &lt;/span&gt;레이어&lt;span&gt; box-shadow &lt;/span&gt;등으로&lt;span&gt; JavaScript &lt;/span&gt;없이도&lt;span&gt; &lt;/span&gt;풍부한&lt;span&gt; &lt;/span&gt;동적&lt;span&gt; &lt;/span&gt;효과를&lt;span&gt; &lt;/span&gt;구현한&lt;span&gt; &lt;/span&gt;점이&lt;span&gt; &lt;/span&gt;특징입니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;</description>
      <category>웹 프로그래밍</category>
      <author>cyberjung</author>
      <guid isPermaLink="true">https://cyberjung.tistory.com/9</guid>
      <comments>https://cyberjung.tistory.com/9#entry9comment</comments>
      <pubDate>Sun, 26 Apr 2026 18:54:32 +0900</pubDate>
    </item>
    <item>
      <title>텔넷 서버가 무엇인가?</title>
      <link>https://cyberjung.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;요새는 텔넷 서버를 많이 사용하고 있지 않지만, 텔넷은 오랫동안 사용되어 온 접속 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텔넷 서버를 사용하기 위해서는 리눅스 서버에 텔넷 서버 설치 O &amp;lt;-&amp;gt;&amp;nbsp; &amp;nbsp;접속 할 PC에는 텔넷 클라이언트 프로그램 O&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심 원리 : &lt;span&gt;데이터를&lt;/span&gt; &lt;span&gt;평문 &lt;/span&gt;&lt;span&gt;으로&lt;/span&gt; &lt;span&gt;전송함&lt;/span&gt;. &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;작동 방식 : &lt;/span&gt;주로&lt;span&gt; xinetd(&lt;/span&gt;슈퍼&lt;span&gt; &lt;/span&gt;데몬&lt;span&gt;)&lt;/span&gt;에&lt;span&gt; &lt;/span&gt;의해&lt;span&gt; &lt;/span&gt;관리됨&lt;span&gt;. &lt;/span&gt;평소엔&lt;span&gt; &lt;/span&gt;죽어있다가&lt;span&gt; &lt;/span&gt;요청이&lt;span&gt; &lt;/span&gt;오면&lt;span&gt; &lt;/span&gt;슈퍼&lt;span&gt; &lt;/span&gt;데몬이&lt;span&gt; &lt;/span&gt;깨움&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜&lt;span&gt; &lt;/span&gt;텔넷은&lt;span&gt; &lt;/span&gt;바로&lt;span&gt; &lt;/span&gt;안&lt;span&gt; &lt;/span&gt;뜨고&lt;span&gt; &lt;/span&gt;슈퍼&lt;span&gt; &lt;/span&gt;데몬을&lt;span&gt; &lt;/span&gt;거치는가&lt;span&gt;? -&amp;gt; &lt;/span&gt;자원&lt;span&gt; &lt;/span&gt;절약을&lt;span&gt; &lt;/span&gt;위해서임&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;2&quot; data-ke-size=&quot;size23&quot;&gt;1. 텔넷(Telnet) 서버의 본질적 목적&lt;/h3&gt;
&lt;p data-path-to-node=&quot;3&quot; data-ke-size=&quot;size16&quot;&gt;텔넷은 &lt;b data-index-in-node=&quot;4&quot; data-path-to-node=&quot;3&quot;&gt;&quot;멀리 떨어져 있는 컴퓨터에 네트워크를 통해 접속하여, 마치 내 앞에 있는 컴퓨터처럼 조작하기 위해&quot;&lt;/b&gt; 사용합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;4&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,0,0&quot;&gt;원격 제어:&lt;/b&gt; 서버가 전산실에 있거나 멀리 떨어진 데이터 센터에 있을 때, 직접 가지 않고 내 책상에서 터미널(명령창)을 통해 명령어를 입력하고 결과를 확인하는 용도입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-path-to-node=&quot;6&quot; data-ke-size=&quot;size23&quot;&gt;2. &quot;왜 하필 텔넷인가?&quot;&amp;nbsp;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;사실 현대 실무에서는 보안 문제로 텔넷 대신 SSH(Secure Shell)를 씁니다. 그럼에도 불구하고 우리가 실습에서 텔넷을 배우고 구축하는 이유는 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,0&quot;&gt;네트워크 서비스의 기본 구조 학습:&lt;/b&gt; '텔넷'은 가장 단순하고 전형적인 &lt;b data-index-in-node=&quot;39&quot; data-path-to-node=&quot;8,0,0&quot;&gt;클라이언트-서버 모델&lt;/b&gt;입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;'슈퍼 데몬'과의 연동 원리를 배우기에 가장 적합한 모델이기 때문입니다.&lt;/li&gt;
&lt;li&gt;* 슈퍼 데몬이란? 리눅스 서버에는 텔넷, FTP, SSH 등 수많은 서비스 O -&amp;gt; 하지만 이 모든 서비스를 항상 켜두면 다음과 같은 문제 발생&lt;/li&gt;
&lt;li&gt;1.&lt;b&gt; 메모리 낭비:&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;접속하는 사용자가 한 명도 없는데 서버 프로세스가 계속 메모리를 차지하고 있게 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;2. &lt;b data-path-to-node=&quot;5,1,0&quot; data-index-in-node=&quot;0&quot;&gt;성능 저하:&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;관리해야 할 프로세스가 너무 많아지면 시스템 전체가 무거워집니다&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b data-path-to-node=&quot;6&quot; data-index-in-node=&quot;0&quot;&gt;슈퍼 데몬은 이 문제를 '대리인' 방식으로 해결합니다.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,0&quot;&gt;디버깅 및 테스트 용도:&lt;/b&gt; 특정 포트가 열려 있는지 확인하거나, HTTP/SMTP 같은 다른 프로토콜이 정상 작동하는지 테스트할 때 텔넷 클라이언트를 도구로 사용합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,2,0&quot;&gt;저사양/임베디드 환경:&lt;/b&gt; 암호화 연산 능력이 부족한 아주 오래된 장비나 초소형 기기에서는 SSH의 암호화 과정을 감당하지 못해 여전히 텔넷을 사용하기도 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;보안도 안 좋은 텔넷을 왜 굳이 깔아서 실습하나?&quot;&lt;/p&gt;
&lt;blockquote data-path-to-node=&quot;12&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-path-to-node=&quot;12,0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,0&quot;&gt;&quot;네트워크 서비스 관리의 메커니즘을 이해하기 위해서입니다.&quot;&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;12,1&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,1,0,0&quot;&gt;자원 관리의 효율성:&lt;/b&gt; 모든 서비스가 웹 서버처럼 항상 켜져 있을 필요는 없습니다. &lt;br /&gt;텔넷처럼 가끔 쓰이는 서비스를 슈퍼 데몬(xinetd)에 귀속시켜 관리함으로써 시스템 자원을 어떻게 효율적으로 배분하는지 배우기 위함입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,1,1,0&quot;&gt;데이터 전송의 가시성:&lt;/b&gt; 텔넷은 패킷이 암호화되지 않기 때문에, 네트워크 분석 도구(WireShark 등)로 패킷을 뜯어봤을 때 명령어가 어떻게 오가는지 &lt;b data-index-in-node=&quot;85&quot; data-path-to-node=&quot;12,1,1,0&quot;&gt;눈으로 직접 확인&lt;/b&gt;할 수 있어 학습 효과가 큽니다. (SSH는 암호화되어 있어 내부를 볼 수 없습니다.)&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p data-path-to-node=&quot;6&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>cyberjung</author>
      <guid isPermaLink="true">https://cyberjung.tistory.com/8</guid>
      <comments>https://cyberjung.tistory.com/8#entry8comment</comments>
      <pubDate>Fri, 3 Apr 2026 18:03:39 +0900</pubDate>
    </item>
    <item>
      <title>[MAC 환경] 이것이 리눅스다 라운드 로빈 네임 서버 공부하기</title>
      <link>https://cyberjung.tistory.com/7</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요! 리눅스 서버 운영을 하다 보면 접속자가 몰려 서버가 느려지는 상황을 마주하게 됩니다. 오늘은 네임 서버(DNS)를 활용해 여러 대의 웹 서버로 접속을 분산시키는 '라운드 로빈 네임 서버'에 대해 알아보겠습니다.&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;4&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 라운드 로빈 네임 서버란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;대형 웹 사이트처럼 사용자 접속이 엄청나게 많은 경우, 단 한 대의 웹 서버로는 모든 요청을 처리하기 부족합니다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;이때 동일한 서비스를 제공하는 웹 서버를 여러 대(예: 3대) 준비하고, 네임 서버가 IP 주소를 알려줄 때 &lt;b data-index-in-node=&quot;125&quot; data-path-to-node=&quot;5&quot;&gt;순차적으로 돌아가며&lt;/b&gt; 알려주는 방식입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;6&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,0,0&quot;&gt;작동 원리:&lt;/b&gt; 1. 첫 번째 사용자에게는 A 서버 IP 전달 2. 두 번째 사용자에게는 B 서버 IP 전달 3. 세 번째 사용자에게는 C 서버 IP 전달 4. 네 번째 사용자에게는 다시 A 서버 IP 전달&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,1,0&quot;&gt;장점:&lt;/b&gt; 고가의 로드 밸런싱 장비 없이도 웹 서버의 부하를 효과적으로 분산시킬 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-path-to-node=&quot;8&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 실습 준비: IP 주소 확보하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;9&quot; data-ke-size=&quot;size16&quot;&gt;현실적으로 웹 서버 3대를 모두 구축하기 어렵기 때문에, 이번 실습에서는 기존에 존재하는 유명 사이트의 IP 주소를 우리 웹 서버라고 가정하고 진행합니다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;10&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,0,0&quot;&gt;실습 가상 머신:&lt;/b&gt; Server (네임 서버 역할)&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,1,0&quot;&gt;대상 IP (가정):&lt;/b&gt; nslookup 명령어를 통해 네이트, 한빛미디어 등 3개 사이트의 IP 주소를 미리 메모해둡니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;958&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8Rivz/dJMcahYaLvh/6PKJf6UKAalO9whxLKqlU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8Rivz/dJMcahYaLvh/6PKJf6UKAalO9whxLKqlU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8Rivz/dJMcahYaLvh/6PKJf6UKAalO9whxLKqlU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8Rivz%2FdJMcahYaLvh%2F6PKJf6UKAalO9whxLKqlU1%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;1272&quot; height=&quot;958&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;958&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;12&quot; data-ke-size=&quot;size23&quot;&gt;3. 네임 서버 설정 (Zone 파일 수정)&lt;/h3&gt;
&lt;p data-path-to-node=&quot;13&quot; data-ke-size=&quot;size16&quot;&gt;네임 서버가 하나의 도메인에 대해 여러 개의 IP를 응답하도록 설정 파일을 수정해야 합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;14&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,0,0&quot;&gt;Zone 파일 열기:&lt;/b&gt; /var/named/thisislinux.com.db 파일을 편집합니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,1,0&quot;&gt;레코드 추가:&lt;/b&gt; 기존의 www 레코드를 아래와 같이 여러 개의 IP로 매핑합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;804&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csVqoS/dJMcafMRaZx/atPybnNd85x1HFs41AUbn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csVqoS/dJMcafMRaZx/atPybnNd85x1HFs41AUbn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csVqoS/dJMcafMRaZx/atPybnNd85x1HFs41AUbn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsVqoS%2FdJMcafMRaZx%2FatPybnNd85x1HFs41AUbn1%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;1292&quot; height=&quot;804&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;804&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3.&lt;b data-path-to-node=&quot;14,2,0&quot; data-index-in-node=&quot;0&quot;&gt; 서비스 재시작:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;설정 적용을 위해 서비스를 재시작합니다.&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;16&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 결과 확인 및 테스트&lt;/b&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;17&quot; data-ke-size=&quot;size16&quot;&gt;구축이 완료되었다면 클라이언트 PC에서 테스트를 진행합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;18&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;18,0,0&quot;&gt;DNS 조회 확인:&lt;/b&gt; nslookup www.thisislinux.com 명령어를 입력하면 3개의 IP 주소가 한꺼번에 나타나는 것을 볼 수 있습니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;18,1,0&quot;&gt;웹 브라우저 접속:&lt;/b&gt; 클라이언트 가상 머신에서 브라우저를 열고 도메인에 접속해 봅니다. 브라우저를 완전히 닫았다가 다시 열어 접속하면, 네임 서버가 알려주는 IP 순서에 따라 서로 다른 사이트(실습상 가정된 사이트)가 나타나는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&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;1208&quot; data-origin-height=&quot;784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pcjS1/dJMcaduD0UZ/bMDunQ9tZGAMDtSlMz17k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pcjS1/dJMcaduD0UZ/bMDunQ9tZGAMDtSlMz17k0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pcjS1/dJMcaduD0UZ/bMDunQ9tZGAMDtSlMz17k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpcjS1%2FdJMcaduD0UZ%2FbMDunQ9tZGAMDtSlMz17k0%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;1208&quot; height=&quot;784&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;784&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[Rocky Linux] 로키 리눅스</category>
      <category>Linux</category>
      <category>RockyLinux</category>
      <category>라운드로빈네임서버</category>
      <category>로키리눅스</category>
      <category>리눅스</category>
      <category>이것이리눅스다</category>
      <author>cyberjung</author>
      <guid isPermaLink="true">https://cyberjung.tistory.com/7</guid>
      <comments>https://cyberjung.tistory.com/7#entry7comment</comments>
      <pubDate>Mon, 30 Mar 2026 20:28:21 +0900</pubDate>
    </item>
    <item>
      <title>[MAC 환경] 이것이 리눅스다 마스터 네임 서버 공부하기</title>
      <link>https://cyberjung.tistory.com/6</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;지난 포스팅에서는 남의 주소를 대신 물어봐 주는 '캐싱 전용 네임 서버'를 알아봤는데요.&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;h3 data-path-to-node=&quot;4&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4&quot;&gt;1. 마스터 네임 서버란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;마스터 네임 서버는 특정 도메인 영역(Zone)에 대한 모든 정보를 직접 가지고 있는 서버입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;6&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,0,0&quot;&gt;캐싱 서버&lt;/b&gt;: &quot;모르는데 잠시만요, 제가 물어봐 드릴게요.&quot; (중개인)&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,1,0&quot;&gt;마스터 서버&lt;/b&gt;: &quot;그 주소는 제 관리 구역입니다. IP는 이거예요!&quot; (주인)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;이 서버를 구축하면 www, ftp, mail 등 다양한 서브 도메인을 내가 원하는 IP로 연결할 수 있습니다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;9&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9&quot;&gt;2. 실습 환경 구성&lt;/b&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;9&quot; data-ke-size=&quot;size16&quot;&gt;이번 실습에서는 총 3~4대의 가상 머신을 사용합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;10&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,0,0&quot;&gt;Server (100번):&lt;/b&gt; 마스터 네임 서버 및 웹 서버 역할&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,1,0&quot;&gt;Server B (200번):&lt;/b&gt; FTP 서버 역할&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,2,0&quot;&gt;Client (로키 리눅스/윈도우):&lt;/b&gt; 네임 서버가 정상 작동하는지 확인하는 클라이언트&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-path-to-node=&quot;12&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 단계별 서버 구축 절차&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-path-to-node=&quot;13&quot; data-ke-size=&quot;size20&quot;&gt;단계 1: 웹 서버 및 FTP 서버 기초 설정&lt;/h4&gt;
&lt;p data-path-to-node=&quot;14&quot; data-ke-size=&quot;size16&quot;&gt;먼저 네임 서버가 가리킬 대상 서버들을 준비합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;15&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;15,0,0&quot;&gt;웹 서버(Server):&lt;/b&gt; dnf install httpd로 설치 후 간단한 index.html 파일을 만듭니다. 방화벽에서 http, https 서비스를 허용해야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;15,1,0&quot;&gt;FTP 서버(Server B):&lt;/b&gt; dnf install vsftpd로 설치합니다. 환영 메시지(welcome.msg)를 설정하여 접속 시 본인의 서버임을 확인할 수 있게 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-ved=&quot;0CAAQhtANahgKEwim45e2xcKTAxUAAAAAHQAAAAAQlwc&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1336&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpHpuT/dJMcafzioab/aKVHs75kyyMKQ8bOOdCNqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpHpuT/dJMcafzioab/aKVHs75kyyMKQ8bOOdCNqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpHpuT/dJMcafzioab/aKVHs75kyyMKQ8bOOdCNqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpHpuT%2FdJMcafzioab%2FaKVHs75kyyMKQ8bOOdCNqk%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;1336&quot; height=&quot;314&quot; data-origin-width=&quot;1336&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1316&quot; data-origin-height=&quot;510&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFXKit/dJMcag514hQ/lpqGXrKwqIUvMC6YkUIZG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFXKit/dJMcag514hQ/lpqGXrKwqIUvMC6YkUIZG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFXKit/dJMcag514hQ/lpqGXrKwqIUvMC6YkUIZG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFXKit%2FdJMcag514hQ%2FlpqGXrKwqIUvMC6YkUIZG1%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;1316&quot; height=&quot;510&quot; data-origin-width=&quot;1316&quot; data-origin-height=&quot;510&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;1982&quot; data-origin-height=&quot;1338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boskuP/dJMcaipfkpt/dGmYVNtGjhhxu94T3lPuR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boskuP/dJMcaipfkpt/dGmYVNtGjhhxu94T3lPuR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boskuP/dJMcaipfkpt/dGmYVNtGjhhxu94T3lPuR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboskuP%2FdJMcaipfkpt%2FdGmYVNtGjhhxu94T3lPuR0%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;1982&quot; height=&quot;1338&quot; data-origin-width=&quot;1982&quot; data-origin-height=&quot;1338&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;다음으로 간단한 홈페이지 만들기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqGlCJ/dJMcaivYdFk/ynlIEUJnlQSytyJ4EQWyS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqGlCJ/dJMcaivYdFk/ynlIEUJnlQSytyJ4EQWyS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqGlCJ/dJMcaivYdFk/ynlIEUJnlQSytyJ4EQWyS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqGlCJ%2FdJMcaivYdFk%2FynlIEUJnlQSytyJ4EQWyS1%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;848&quot; height=&quot;110&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;110&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;1302&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/evIaMk/dJMcahKEaOM/qohhNqvxADAMib64Vj1Xj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/evIaMk/dJMcahKEaOM/qohhNqvxADAMib64Vj1Xj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/evIaMk/dJMcahKEaOM/qohhNqvxADAMib64Vj1Xj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FevIaMk%2FdJMcahKEaOM%2FqohhNqvxADAMib64Vj1Xj0%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;1302&quot; height=&quot;314&quot; data-origin-width=&quot;1302&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 다른 리눅스인 server B를 열어 간단한 FTP 서버로 만들기&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;2568&quot; data-origin-height=&quot;818&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PEis2/dJMcaivYdI6/ZWcV4u6civv1eK41hcqZj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PEis2/dJMcaivYdI6/ZWcV4u6civv1eK41hcqZj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PEis2/dJMcaivYdI6/ZWcV4u6civv1eK41hcqZj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPEis2%2FdJMcaivYdI6%2FZWcV4u6civv1eK41hcqZj0%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;2568&quot; height=&quot;818&quot; data-origin-width=&quot;2568&quot; data-origin-height=&quot;818&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방화벽에서 FTP 허용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1bpvv/dJMb99Tl9UH/H3619u8PLzpyLICKAzHK71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1bpvv/dJMb99Tl9UH/H3619u8PLzpyLICKAzHK71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1bpvv/dJMb99Tl9UH/H3619u8PLzpyLICKAzHK71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1bpvv%2FdJMb99Tl9UH%2FH3619u8PLzpyLICKAzHK71%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;1036&quot; height=&quot;88&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FTP 서버에 접속 된걸 확인 하기 위해 cd/var/ftp/ 한다음 nano를 열어 메세지 아무거나 적어주기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcBNYy/dJMcaaSirul/fTQflDi80rbfPDmyX4bHdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcBNYy/dJMcaaSirul/fTQflDi80rbfPDmyX4bHdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcBNYy/dJMcaaSirul/fTQflDi80rbfPDmyX4bHdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcBNYy%2FdJMcaaSirul%2FfTQflDi80rbfPDmyX4bHdk%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;516&quot; height=&quot;176&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;176&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 메세지가 나오도록 수정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;56&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x5LGX/dJMcabDEFkA/6k9y9jHO5fmc1DmBWRcX41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x5LGX/dJMcabDEFkA/6k9y9jHO5fmc1DmBWRcX41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x5LGX/dJMcabDEFkA/6k9y9jHO5fmc1DmBWRcX41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx5LGX%2FdJMcabDEFkA%2F6k9y9jHO5fmc1DmBWRcX41%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;500&quot; height=&quot;56&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;56&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접속하면 화면에 아까 적은 내용을 출력하기 위에 아래와 같은 내용을 적어주고 저장 후 나간다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1658&quot; data-origin-height=&quot;1212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bX2CDT/dJMcabjm6pH/wN2vnCx2oTO6bBM3uNUheK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bX2CDT/dJMcabjm6pH/wN2vnCx2oTO6bBM3uNUheK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bX2CDT/dJMcabjm6pH/wN2vnCx2oTO6bBM3uNUheK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbX2CDT%2FdJMcabjm6pH%2FwN2vnCx2oTO6bBM3uNUheK%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;1658&quot; height=&quot;1212&quot; data-origin-width=&quot;1658&quot; data-origin-height=&quot;1212&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;h4 data-path-to-node=&quot;16&quot; data-ke-size=&quot;size20&quot;&gt;단계 2: 네임 서버 설정 (/etc/named.conf)&lt;/h4&gt;
&lt;p data-path-to-node=&quot;17&quot; data-ke-size=&quot;size16&quot;&gt;마스터 네임 서버의 심장부인 설정 파일을 수정합니다. 파일 맨 아래에 관리할 도메인 정보를 추가합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NrwyT/dJMcaaSi9HY/Y7XwkhBbCKWmjteZC9cVdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NrwyT/dJMcaaSi9HY/Y7XwkhBbCKWmjteZC9cVdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NrwyT/dJMcaaSi9HY/Y7XwkhBbCKWmjteZC9cVdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNrwyT%2FdJMcaaSi9HY%2FY7XwkhBbCKWmjteZC9cVdK%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;674&quot; height=&quot;250&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;250&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-path-to-node=&quot;19&quot; data-ke-size=&quot;size20&quot;&gt;단계 3: 존(Zone) 파일 생성 및 작성&lt;/h4&gt;
&lt;p data-path-to-node=&quot;20&quot; data-ke-size=&quot;size16&quot;&gt;실제 도메인 이름과 IP를 매칭하는 데이터베이스 파일을 /var/named/ 디렉토리에 생성합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;21&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21,0,0&quot;&gt;파일명:&lt;/b&gt; thisislinux.com.db&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21,1,0&quot;&gt;내용:&lt;/b&gt; SOA 레코드, NS 레코드 및 각 서비스(www, ftp)의 A 레코드를 입력합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;21,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;www IN A 192.168.111.100&lt;/li&gt;
&lt;li&gt;ftp IN A 192.168.111.200&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLghkN/dJMcad2uq2A/LkEewlJSixU0ckJ3j5OKIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLghkN/dJMcad2uq2A/LkEewlJSixU0ckJ3j5OKIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLghkN/dJMcad2uq2A/LkEewlJSixU0ckJ3j5OKIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLghkN%2FdJMcad2uq2A%2FLkEewlJSixU0ckJ3j5OKIK%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;884&quot; height=&quot;204&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;204&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;1374&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YLQYO/dJMcahcNxbg/0vwdLc275pmeUEB771eQT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YLQYO/dJMcahcNxbg/0vwdLc275pmeUEB771eQT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YLQYO/dJMcahcNxbg/0vwdLc275pmeUEB771eQT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYLQYO%2FdJMcahcNxbg%2F0vwdLc275pmeUEB771eQT1%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;1374&quot; height=&quot;408&quot; data-origin-width=&quot;1374&quot; data-origin-height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-path-to-node=&quot;22&quot; data-ke-size=&quot;size20&quot;&gt;단계 4: 설정 검증 및 서비스 시작&lt;/h4&gt;
&lt;p data-path-to-node=&quot;23&quot; data-ke-size=&quot;size16&quot;&gt;설정에 오타가 없는지 검사하는 과정은 필수입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;24&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;named-checkconf: named.conf 파일 문법 검사&lt;/li&gt;
&lt;li&gt;named-checkzone: 존 파일 문법 검사 검사 후 systemctl restart named로 서비스를 재시작합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1312&quot; data-origin-height=&quot;754&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p44yv/dJMcadalrTs/J4kcXHFWGe7DqJmPzBDhAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p44yv/dJMcadalrTs/J4kcXHFWGe7DqJmPzBDhAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p44yv/dJMcadalrTs/J4kcXHFWGe7DqJmPzBDhAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp44yv%2FdJMcadalrTs%2FJ4kcXHFWGe7DqJmPzBDhAK%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;1312&quot; height=&quot;754&quot; data-origin-width=&quot;1312&quot; data-origin-height=&quot;754&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;26&quot; data-ke-size=&quot;size23&quot;&gt;4. 결과 확인 (클라이언트 테스트)&lt;/h3&gt;
&lt;p data-path-to-node=&quot;27&quot; data-ke-size=&quot;size16&quot;&gt;이제 클라이언트 가상 머신에서 우리가 설정한 도메인으로 접속해 봅니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;28&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;28,0,0&quot;&gt;DNS 설정 변경:&lt;/b&gt; /etc/resolv.conf의 nameserver를 우리가 구축한 서버 IP(100번)로 변경합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;28,1,0&quot;&gt;웹 접속:&lt;/b&gt; 브라우저에 www.thisislinux.com을 입력했을 때 로키 리눅스 웹 서버 페이지가 뜨면 성공!&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;28,2,0&quot;&gt;FTP 접속:&lt;/b&gt; 터미널에서 ftp ftp.thisislinux.com 명령어로 접속하여 설정한 환영 메시지가 나오는지 확인합니다.&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>[Rocky Linux] 로키 리눅스</category>
      <category>dns</category>
      <category>Linux</category>
      <category>RockyLinux</category>
      <category>로키리눅스</category>
      <category>리눅스</category>
      <category>마스터네임서버</category>
      <category>서버구축</category>
      <author>cyberjung</author>
      <guid isPermaLink="true">https://cyberjung.tistory.com/6</guid>
      <comments>https://cyberjung.tistory.com/6#entry6comment</comments>
      <pubDate>Mon, 30 Mar 2026 19:15:08 +0900</pubDate>
    </item>
    <item>
      <title>[Rocky Linux] 캐싱 전용 네임 서버(DNS) 개념 이해 및 구축하기</title>
      <link>https://cyberjung.tistory.com/5</link>
      <description>&lt;h3 data-path-to-node=&quot;4&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4&quot;&gt;1. 캐싱 전용 네임 서버란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;캐싱 전용 네임 서버는 말 그대로 &quot;자신이 직접 관리하는 도메인 영역은 없지만,&lt;/p&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;클라이언트의 요청을 대신 외부로 나가서 알아오고 그 결과를 캐시에 저장하는 서버&quot; 입니다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;8&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8&quot;&gt;2. DNS 작동 원리&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;9&quot; data-ke-size=&quot;size16&quot;&gt;우리가 브라우저에 www.nate.com을 입력하면 다음과 같은 계층적 탐색이 일어납니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;10&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,0,0&quot;&gt;PC&lt;/b&gt;: 로컬 네임 서버에게 주소를 묻습니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,1,0&quot;&gt;로컬 네임 서버&lt;/b&gt;: 캐시에 없다면 &lt;b data-index-in-node=&quot;18&quot; data-path-to-node=&quot;10,1,0&quot;&gt;루트(Root) 서버&lt;/b&gt;에게 묻습니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,2,0&quot;&gt;루트 서버&lt;/b&gt;: .com 서버의 주소를 알려줍니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,3,0&quot;&gt;.com 서버&lt;/b&gt;: nate.com 관리 서버의 주소를 알려줍니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,4,0&quot;&gt;nate.com 서버&lt;/b&gt;: 최종적으로 www 호스트의 IP 주소를 알려줍니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,5,0&quot;&gt;로컬 네임 서버&lt;/b&gt;: 이 주소를 PC에 전달하고 자신의 캐시에 저장합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;12&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12&quot;&gt;3. 캐싱 전용 네임 서버 구축 실습&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-path-to-node=&quot;13&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13&quot;&gt;환경 준비&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;14&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,0,0&quot;&gt;OS&lt;/b&gt;: Rocky Linux&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;14,1,0&quot;&gt;IP&lt;/b&gt;: 192.168.111.100 (서버 IP 예시)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-path-to-node=&quot;15&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;15&quot;&gt;Step 1. 패키지 설치&lt;/b&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;16&quot; data-ke-size=&quot;size16&quot;&gt;먼저 DNS 서비스를 제공하는 bind 패키지를 설치합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;838&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRa5o5/dJMcajhkHAh/JLsVmVBmb35EWcZIgSKSj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRa5o5/dJMcajhkHAh/JLsVmVBmb35EWcZIgSKSj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRa5o5/dJMcajhkHAh/JLsVmVBmb35EWcZIgSKSj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRa5o5%2FdJMcajhkHAh%2FJLsVmVBmb35EWcZIgSKSj0%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;1308&quot; height=&quot;838&quot; data-origin-width=&quot;1308&quot; data-origin-height=&quot;838&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;h4 data-path-to-node=&quot;18&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;18&quot;&gt;Step 2. 설정 파일 수정 (/etc/named.conf)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;19&quot; data-ke-size=&quot;size16&quot;&gt;서버가 외부 쿼리에 응답할 수 있도록 설정을 변경해야 합니다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;19&quot; data-ke-size=&quot;size16&quot;&gt;nona /etc/named.conf&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;1288&quot; data-origin-height=&quot;880&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YsE95/dJMb996TYlt/aT2YQtcZClmwB05JqeBXY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YsE95/dJMb996TYlt/aT2YQtcZClmwB05JqeBXY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YsE95/dJMb996TYlt/aT2YQtcZClmwB05JqeBXY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYsE95%2FdJMb996TYlt%2FaT2YQtcZClmwB05JqeBXY0%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;1288&quot; height=&quot;880&quot; data-origin-width=&quot;1288&quot; data-origin-height=&quot;880&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 항목들을 수정합니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;22&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;22,0,0&quot;&gt;listen-on port 53 { any; };&lt;/b&gt; : 53번 포트를 모든 IP에서 허용합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;22,1,0&quot;&gt;allow-query { any; };&lt;/b&gt; : 누구나 이 서버에 주소를 물어볼 수 있게 허용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-path-to-node=&quot;23&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23&quot;&gt;Step 3. 서비스 실행 및 방화벽 오픈&lt;/b&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;24&quot; data-ke-size=&quot;size16&quot;&gt;설정을 마쳤다면 서비스를 시작하고 부팅 시 자동 실행되도록 설정합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1318&quot; data-origin-height=&quot;208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQ1aFr/dJMcab4H5gl/F18BiDFxpsgu1rxHP5EYG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQ1aFr/dJMcab4H5gl/F18BiDFxpsgu1rxHP5EYG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQ1aFr/dJMcab4H5gl/F18BiDFxpsgu1rxHP5EYG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQ1aFr%2FdJMcab4H5gl%2FF18BiDFxpsgu1rxHP5EYG1%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;1318&quot; height=&quot;208&quot; data-origin-width=&quot;1318&quot; data-origin-height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1968&quot; data-origin-height=&quot;1156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNcHk3/dJMcaiW1ZxG/yWhnOtXmayP8tkfc9NOcGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNcHk3/dJMcaiW1ZxG/yWhnOtXmayP8tkfc9NOcGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNcHk3/dJMcaiW1ZxG/yWhnOtXmayP8tkfc9NOcGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNcHk3%2FdJMcaiW1ZxG%2FyWhnOtXmayP8tkfc9NOcGk%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;1968&quot; height=&quot;1156&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1968&quot; data-origin-height=&quot;1156&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;h3 data-path-to-node=&quot;27&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;27&quot;&gt;4. 클라이언트 설정 및 테스트&lt;/b&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;28&quot; data-ke-size=&quot;size16&quot;&gt;이제 다른 클라이언트가 우리가 만든 서버를 DNS로 사용하게 설정해 봅시다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;28&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;29,0,0&quot;&gt;Linux 클라이언트&lt;/b&gt;: /etc/resolv.conf 파일 수정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;96&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9RhgL/dJMcahqk5gZ/odRwby7ZmK4oDEwpps41Xk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9RhgL/dJMcahqk5gZ/odRwby7ZmK4oDEwpps41Xk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9RhgL/dJMcahqk5gZ/odRwby7ZmK4oDEwpps41Xk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9RhgL%2FdJMcahqk5gZ%2FodRwby7ZmK4oDEwpps41Xk%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;804&quot; height=&quot;96&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;96&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;1320&quot; data-origin-height=&quot;518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PggJo/dJMb99Tl9nT/SbfjOcjDJdcjRK7zxXU7Zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PggJo/dJMb99Tl9nT/SbfjOcjDJdcjRK7zxXU7Zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PggJo/dJMb99Tl9nT/SbfjOcjDJdcjRK7zxXU7Zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPggJo%2FdJMb99Tl9nT%2FSbfjOcjDJdcjRK7zxXU7Zk%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;1320&quot; height=&quot;518&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;518&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;h4 data-path-to-node=&quot;30&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;30&quot;&gt;작동 확인&lt;/b&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;31&quot; data-ke-size=&quot;size16&quot;&gt;터미널에서 nslookup 명령어를 통해 외부 도메인이 잘 조회되는지 확인합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;948&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFcJr0/dJMcahcMN9g/zmIy3yOy1Ze4Xj2d3dUAWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFcJr0/dJMcahcMN9g/zmIy3yOy1Ze4Xj2d3dUAWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFcJr0/dJMcahcMN9g/zmIy3yOy1Ze4Xj2d3dUAWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFcJr0%2FdJMcahcMN9g%2FzmIy3yOy1Ze4Xj2d3dUAWK%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;1008&quot; height=&quot;948&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;948&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 &lt;b data-index-in-node=&quot;6&quot; data-path-to-node=&quot;33&quot;&gt;Server&lt;/b&gt; 항목에 우리가 구축한 서버 IP가 뜨고 결과값이 잘 나온다면 성공입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;36&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[Rocky Linux] 로키 리눅스</category>
      <category>Linux</category>
      <category>RockyLinux</category>
      <category>로키리눅스</category>
      <category>리눅스</category>
      <author>cyberjung</author>
      <guid isPermaLink="true">https://cyberjung.tistory.com/5</guid>
      <comments>https://cyberjung.tistory.com/5#entry5comment</comments>
      <pubDate>Mon, 30 Mar 2026 00:24:19 +0900</pubDate>
    </item>
    <item>
      <title>OTP의 3가지 작동 방식: Java와 Python으로 직접 구현하기</title>
      <link>https://cyberjung.tistory.com/4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. OTP&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘날 보안의 핵심은 '일회용 비밀번호(OTP)'입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고정된 비밀번호는 탈취의 위험이 크지만, 매번 바뀌는 OTP는 강력한 2차 인증 수단이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스팅에서는 OTP의 대표적인 3가지 방식인 &lt;b data-index-in-node=&quot;114&quot; data-path-to-node=&quot;6&quot;&gt;시간 동기화(TOTP), 이벤트 동기화(HOTP), 챌린지-응답(C-R)&lt;/b&gt; 방식을 Java와 Python으로 각각 구현해 보겠습니다.&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. 서버 동기화 방식 (TOTP: Time-based OTP)&lt;/b&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;9&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9&quot;&gt;개념:&lt;/b&gt; 서버와 사용자의 '현재 시간'을 기준으로 비밀번호를 생성합니다. 보통 30초마다 번호가 갱신되는 가장 대중적인 방식입니다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;9&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;9&quot; data-ke-size=&quot;size16&quot;&gt;첫번째는 &lt;b&gt;자바(JAVA) &lt;/b&gt;구현방식이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;361&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/euJgHG/dJMcaaxOfGw/od76PCnBxkcfHWa1aCdynk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/euJgHG/dJMcaaxOfGw/od76PCnBxkcfHWa1aCdynk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/euJgHG/dJMcaaxOfGw/od76PCnBxkcfHWa1aCdynk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeuJgHG%2FdJMcaaxOfGw%2Fod76PCnBxkcfHWa1aCdynk%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;600&quot; height=&quot;361&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;361&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-path-to-node=&quot;9&quot; 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-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;318&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAbSvA/dJMcabXMg2Z/aSfyub8K6pskNyOF2XmY8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAbSvA/dJMcabXMg2Z/aSfyub8K6pskNyOF2XmY8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAbSvA/dJMcabXMg2Z/aSfyub8K6pskNyOF2XmY8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAbSvA%2FdJMcabXMg2Z%2FaSfyub8K6pskNyOF2XmY8K%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;600&quot; height=&quot;318&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;318&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p8nZN/dJMcafMFBqZ/1uz1uMUU9rBwnkvGSz60q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p8nZN/dJMcafMFBqZ/1uz1uMUU9rBwnkvGSz60q1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p8nZN/dJMcafMFBqZ/1uz1uMUU9rBwnkvGSz60q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp8nZN%2FdJMcafMFBqZ%2F1uz1uMUU9rBwnkvGSz60q1%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;600&quot; height=&quot;278&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XMQNT/dJMcaaYQ3L1/KUZolOoQR4ElADZXmPVOzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XMQNT/dJMcaaYQ3L1/KUZolOoQR4ElADZXmPVOzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XMQNT/dJMcaaYQ3L1/KUZolOoQR4ElADZXmPVOzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXMQNT%2FdJMcaaYQ3L1%2FKUZolOoQR4ElADZXmPVOzK%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;600&quot; height=&quot;386&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;386&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byzbP7/dJMcadH0N17/bTIolJ0TK7uHSfKBjYWHkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byzbP7/dJMcadH0N17/bTIolJ0TK7uHSfKBjYWHkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byzbP7/dJMcadH0N17/bTIolJ0TK7uHSfKBjYWHkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyzbP7%2FdJMcadH0N17%2FbTIolJ0TK7uHSfKBjYWHkK%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;600&quot; height=&quot;342&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;342&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;위의 사진과 같은 코드의 방식으로 진행되고 여기서 핵심 코드는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;long&lt;/span&gt; currentTimeSeconds = System.currentTimeMillis() &lt;/b&gt;핵심: 시간을 30초 단위 카운터로 변환&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;1000L&lt;/span&gt;; &lt;span&gt;long&lt;/span&gt; counter = currentTimeSeconds / &lt;span&gt;30L&lt;/span&gt;; &lt;/b&gt;이후 HMAC-SHA1로 해싱하여 6자리 추출&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;System.currentTimeMillis()&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;현재 시간을 밀리초 단위로 가져옵니다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이를&lt;span&gt; 1000&lt;/span&gt;으로 나누어 초 단위로 변환 후&lt;span&gt; 30&lt;/span&gt;으로 나누어 &lt;b&gt;시간 동기화 카운터&lt;/b&gt;를 만듭니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Mac.getInstance(&quot;HmacSHA1&quot;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;HMAC-SHA1 &lt;/span&gt;&lt;span&gt;암호화 알고리즘 인스턴스를 생성합니다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;공유 비밀키와 시간을 조합해 해시를 만드는 핵심 역할을 합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;SecretKeySpec &lt;/span&gt;&lt;/b&gt;&lt;span&gt;제공된 비밀키 문자열을 암호화 알고리즘에서 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용할 수 있는 키 형식으로 변환합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;mac.doFinal(data)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;준비된 카운터 데이터&lt;span&gt;(&lt;/span&gt;시간 값&lt;span&gt;)&lt;/span&gt;를 비밀키와 함께 해싱하여 고유한 바이트 배열을 생성합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Dynamic Truncation&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;생성된 해시 배열에서 특정 위치의 값을 추출해 사람이 읽기 쉬운&lt;span&gt; 6&lt;/span&gt;자리 숫자로 바꾸는 과정입니다&lt;span&gt;. (&lt;/span&gt;코드 하단의 비트 연산 부분&lt;span&gt;)&lt;/span&gt;&lt;/span&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;&lt;span&gt;&lt;span&gt;결과 값:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;580&quot; data-origin-height=&quot;176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qoGhM/dJMcafTpPEa/M0Z7U727IVsN0IBwRwnDs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qoGhM/dJMcafTpPEa/M0Z7U727IVsN0IBwRwnDs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qoGhM/dJMcafTpPEa/M0Z7U727IVsN0IBwRwnDs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqoGhM%2FdJMcafTpPEa%2FM0Z7U727IVsN0IBwRwnDs0%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;580&quot; height=&quot;176&quot; data-origin-width=&quot;580&quot; data-origin-height=&quot;176&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;두번째는 &lt;b&gt;파이썬(Python)&amp;nbsp;&lt;/b&gt;구현방식이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;631&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nc28E/dJMcacvDG3C/ZrSEkF1Dcb7fwZ2QfkVE61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nc28E/dJMcacvDG3C/ZrSEkF1Dcb7fwZ2QfkVE61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nc28E/dJMcacvDG3C/ZrSEkF1Dcb7fwZ2QfkVE61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnc28E%2FdJMcacvDG3C%2FZrSEkF1Dcb7fwZ2QfkVE61%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;600&quot; height=&quot;631&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;631&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과 값:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;211&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/thVRb/dJMcacComfM/4DKYaKKCBOHrBK5lJXvTR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/thVRb/dJMcacComfM/4DKYaKKCBOHrBK5lJXvTR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/thVRb/dJMcacComfM/4DKYaKKCBOHrBK5lJXvTR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FthVRb%2FdJMcacComfM%2F4DKYaKKCBOHrBK5lJXvTR1%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;600&quot; height=&quot;211&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;211&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;&lt;b&gt;3. 이벤트 동기화 방식 (HOTP: HMAC-based OTP)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;16&quot;&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;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;첫번째는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;자바(JAVA)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;구현방식이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;654&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WEJdj/dJMcajg9PIy/CD7jwC4CZKFOaEk8smIPl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WEJdj/dJMcajg9PIy/CD7jwC4CZKFOaEk8smIPl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WEJdj/dJMcajg9PIy/CD7jwC4CZKFOaEk8smIPl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWEJdj%2FdJMcajg9PIy%2FCD7jwC4CZKFOaEk8smIPl1%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;600&quot; height=&quot;654&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;654&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;589&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c84QcQ/dJMcahXZizL/tr3n0fiOTk0tpZ4KkXrJ50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c84QcQ/dJMcahXZizL/tr3n0fiOTk0tpZ4KkXrJ50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c84QcQ/dJMcahXZizL/tr3n0fiOTk0tpZ4KkXrJ50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc84QcQ%2FdJMcahXZizL%2Ftr3n0fiOTk0tpZ4KkXrJ50%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;600&quot; height=&quot;589&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;589&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;위의 사진과 같은 코드의 방식으로 진행되고 여기서 핵심 코드는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;byte&lt;/span&gt;[] data = ByteBuffer.allocate(&lt;span&gt;8&lt;/span&gt;).putLong(counter).array(); &lt;/b&gt;핵심: 횟수(counter)를 8바이트 데이터로 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;ByteBuffer.allocate(8).putLong(counter)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;숫자 형태인 카운터&lt;span&gt;(1, 2, 3...)&lt;/span&gt;를&lt;span&gt; 8&lt;/span&gt;바이트&lt;span&gt;(64&lt;/span&gt;비트&lt;span&gt;)&lt;/span&gt;의 &lt;b&gt;바이트 배열&lt;/b&gt;로 변환합니다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;암호화 함수인&lt;span&gt; HMAC&lt;/span&gt;은 숫자 데이터가 아닌 바이트 데이터를 입력값으로 받기 때문에 이 변환 과정이 꼭 필요합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;SecretKeySpec(key.getBytes(), &quot;HmacSHA1&quot;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사용자가 설정한 비밀키 문자열을 &lt;b&gt;&lt;span&gt;HMAC-SHA1 &lt;/span&gt;알고리즘 전용 키&lt;/b&gt; 객체로 변환합니다&lt;span&gt;. &lt;/span&gt;이 키가 있어야만 해시값을 안전하게 생성할 수 있습니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;mac.doFinal(data)&lt;/span&gt;&lt;/b&gt;&lt;span&gt;비밀키와 바이트로 변환된 카운터 값을 조합하여 최종적인&lt;span&gt; **&lt;/span&gt;해시값&lt;span&gt;(20&lt;/span&gt;바이트&lt;span&gt;)**&lt;/span&gt;을 계산합니다&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 값은 외부에서 예측하기 불가능한 난수 형태를 띱니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Bitwise Operations (&amp;amp; 0x7f, &amp;lt;&amp;lt; 24 &lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span&gt;등&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;생성된 긴 해시값에서 특정&lt;span&gt; 4&lt;/span&gt;바이트를 뽑아내어 &lt;b&gt;사람이 읽을 수 있는 정수 형태&lt;/b&gt;로 변환하는 과정입니다&lt;span&gt;. &lt;/span&gt;이를 통해 복잡한 해시가&lt;span&gt; 6&lt;/span&gt;자리&lt;span&gt; OTP &lt;/span&gt;번호로 바뀝니다&lt;/span&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;&lt;span&gt;결과 값:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5kYo1/dJMcabjcgSv/o5v2GIcVkUNX36x89dKt30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5kYo1/dJMcabjcgSv/o5v2GIcVkUNX36x89dKt30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5kYo1/dJMcabjcgSv/o5v2GIcVkUNX36x89dKt30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5kYo1%2FdJMcabjcgSv%2Fo5v2GIcVkUNX36x89dKt30%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;600&quot; height=&quot;147&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;147&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;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;두번째는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;파이썬(Python)&amp;nbsp;&lt;/b&gt;구현방식이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;618&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AoDSh/dJMcajg9PK8/xu7GfsKwvvihky6NO6iTNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AoDSh/dJMcajg9PK8/xu7GfsKwvvihky6NO6iTNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AoDSh/dJMcajg9PK8/xu7GfsKwvvihky6NO6iTNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAoDSh%2FdJMcajg9PK8%2Fxu7GfsKwvvihky6NO6iTNk%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;600&quot; height=&quot;618&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;618&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결과 값:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;111&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lKP3H/dJMcaiihTUT/NXa4z5hsNBmSl2dziIBUP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lKP3H/dJMcaiihTUT/NXa4z5hsNBmSl2dziIBUP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lKP3H/dJMcaiihTUT/NXa4z5hsNBmSl2dziIBUP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlKP3H%2FdJMcaiihTUT%2FNXa4z5hsNBmSl2dziIBUP1%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;600&quot; height=&quot;111&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;111&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;&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;4. 챌린지&lt;span&gt;-&lt;/span&gt;응답 방식&lt;span&gt; (Challenge-Response)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;23&quot;&gt;개념:&lt;/b&gt; 서버가 난수(Challenge)를 던지면, 사용자가 자신의 비밀키로 계산한 결과값(Response)을 돌려주는 방식입니다. 재전송 공격에 매우 강력합니다.&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;span style=&quot;color: #333333; text-align: start;&quot;&gt;첫번째는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;자바(JAVA)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;구현방식이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eo9O0W/dJMcadusynQ/FAOKSQatDk5E29Q5aImoT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eo9O0W/dJMcadusynQ/FAOKSQatDk5E29Q5aImoT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eo9O0W/dJMcadusynQ/FAOKSQatDk5E29Q5aImoT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feo9O0W%2FdJMcadusynQ%2FFAOKSQatDk5E29Q5aImoT0%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;600&quot; height=&quot;682&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj6pWx/dJMcahRdmoZ/IhhyhRAe4Drk4NVc8X3d31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj6pWx/dJMcahRdmoZ/IhhyhRAe4Drk4NVc8X3d31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj6pWx/dJMcahRdmoZ/IhhyhRAe4Drk4NVc8X3d31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj6pWx%2FdJMcahRdmoZ%2FIhhyhRAe4Drk4NVc8X3d31%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;600&quot; height=&quot;477&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;477&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;위의 사진과 같은 코드의 방식으로 진행되고 여기서 핵심 코드는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SecretKeySpec signKey = &lt;span&gt;new&lt;/span&gt; SecretKeySpec(secret.getBytes(), &lt;span&gt;&quot;HmacSHA256&quot;&lt;/span&gt;); &lt;/b&gt;핵심: HMAC-SHA256을&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용한 긴 해시 응답&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;Mac.getInstance(&quot;HmacSHA256&quot;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;1, 2&lt;/span&gt;&lt;span&gt;번보다 더 강력한 보안이 필요한 챌린지 방식에서는 &lt;b&gt;&lt;span&gt;SHA256&lt;/span&gt;&lt;/b&gt;&lt;span&gt; &lt;/span&gt;알고리즘을 사용 &lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;이는 해시값이 더 길고 복잡하여 위조가 거의 불가능합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;challenge.getBytes()&lt;/span&gt;&lt;/b&gt;&lt;span&gt;서버가 보낸 일회용 난수&lt;span&gt;(Challenge)&lt;/span&gt;를 암호화 계산을 위해 바이트 배열로 변환합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;new BigInteger(1, rawHmac)&lt;/span&gt;&lt;/b&gt;&lt;span&gt;계산된&lt;span&gt; HMAC &lt;/span&gt;결과&lt;span&gt;(&lt;/span&gt;바이트 배열&lt;span&gt;)&lt;/span&gt;는 읽기 어렵기 때문에&lt;span&gt;, &lt;/span&gt;이를 매우 큰 숫자로 변환합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;String.format(&quot;%064x&quot;, ...)&lt;/span&gt;&lt;/b&gt;&lt;span&gt;큰 숫자로 변환된 데이터를 &lt;b&gt;&lt;span&gt;16&lt;/span&gt;진수&lt;span&gt;(hex) &lt;/span&gt;문자열&lt;/b&gt;로 포맷팅합니다&lt;span&gt;. &lt;/span&gt;챌린지&lt;span&gt;-&lt;/span&gt;응답 방식에서는 보통&lt;span&gt; 6&lt;/span&gt;자리 숫자 대신 이렇게 긴 문자열&lt;span&gt;(&lt;/span&gt;응답값&lt;span&gt;)&lt;/span&gt;을 서버로 전송하여 인증합니다&lt;span&gt;.&lt;/span&gt;&lt;/span&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;결과 값 :&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kymPt/dJMcaaR7Jt9/hXbSRlZ6mDYfjfWvsLz9N0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kymPt/dJMcaaR7Jt9/hXbSRlZ6mDYfjfWvsLz9N0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kymPt/dJMcaaR7Jt9/hXbSRlZ6mDYfjfWvsLz9N0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkymPt%2FdJMcaaR7Jt9%2FhXbSRlZ6mDYfjfWvsLz9N0%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;600&quot; height=&quot;284&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;br /&gt;두번째는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;파이썬(Python)&amp;nbsp;&lt;/b&gt;구현방식이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;520&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tBw3K/dJMcaiWRlxc/AiNIzDqmjr6iidUP793Rnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tBw3K/dJMcaiWRlxc/AiNIzDqmjr6iidUP793Rnk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tBw3K/dJMcaiWRlxc/AiNIzDqmjr6iidUP793Rnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtBw3K%2FdJMcaiWRlxc%2FAiNIzDqmjr6iidUP793Rnk%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;600&quot; height=&quot;520&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;520&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과 값:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lTEdN/dJMcadnIywj/p9ZfPNfHGFisnG8Vkbc2m1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lTEdN/dJMcadnIywj/p9ZfPNfHGFisnG8Vkbc2m1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lTEdN/dJMcadnIywj/p9ZfPNfHGFisnG8Vkbc2m1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlTEdN%2FdJMcadnIywj%2Fp9ZfPNfHGFisnG8Vkbc2m1%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;600&quot; height=&quot;90&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;90&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;&lt;b&gt;5. 결론 및 비교&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;34&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;34,0,0&quot;&gt;TOTP:&lt;/b&gt; 스마트폰 앱 인증에 적합 (Google Authenticator 등)&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;34,1,0&quot;&gt;HOTP:&lt;/b&gt; 전용 하드웨어 토큰기에 적합&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;34,2,0&quot;&gt;Challenge-Response:&lt;/b&gt; 높은 보안이 필요한 서버-클라이언트 통신에 적합&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>cyberjung</author>
      <guid isPermaLink="true">https://cyberjung.tistory.com/4</guid>
      <comments>https://cyberjung.tistory.com/4#entry4comment</comments>
      <pubDate>Tue, 17 Mar 2026 11:53:08 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 초보자를 위한 리눅스 터미널 기초: alias 설정부터 도움말 확인까지</title>
      <link>https://cyberjung.tistory.com/3</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스를 처음 접하면 복잡한 명령어들이 어렵게 느껴질 수 있습니다. 오늘은 터미널 사용을 훨씬 편하게 만들어주는 별칭(alias) 설정 방법과, 명령어의 용도를 확인하는 다양한 방법을 정리해 보겠습니다&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;6&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6&quot;&gt;1. 명령어 별칭(alias)으로 작업 효율 높이기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;자주 사용하는 긴 명령어를 나만의 짧은 키워드로 등록할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,0&quot;&gt;별칭 등록하기:&lt;/b&gt; alias 별칭='명령어'
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8,0,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예: alias c='cal' (이제 c만 입력해도 달력이 출력됩니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,0&quot;&gt;별칭 해제하기:&lt;/b&gt; unalias 별칭
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예: unalias c (등록한 별칭 c를 삭제합니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,2,0&quot;&gt;모든 별칭 해제:&lt;/b&gt; unalias -a (현재 세션에 등록된 모든 별칭을 지웁니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b data-path-to-node=&quot;9,0&quot; data-index-in-node=&quot;0&quot;&gt;  Tip:&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;터미널을 껐다 켜도 별칭을 유지하고 싶다면 ~/.bashrc 파일에 등록해야 합니다&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;737&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6vxfy/dJMcabjakuY/et3I4UrMj1Ck1Lr7v8wKp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6vxfy/dJMcabjakuY/et3I4UrMj1Ck1Lr7v8wKp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6vxfy/dJMcabjakuY/et3I4UrMj1Ck1Lr7v8wKp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6vxfy%2FdJMcabjakuY%2Fet3I4UrMj1Ck1Lr7v8wKp1%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;1284&quot; height=&quot;737&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;737&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ls&lt;/b&gt;&amp;nbsp; -&amp;gt;&amp;nbsp; 리눅스에서 가장 많이 사용되는 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;현재 디렉토리(폴더) 안에 어떤 파일이나 폴더가 있는지 목록을 보여주는 역할&quot;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;4&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;4,1,0&quot;&gt;자주 쓰는 옵션&amp;nbsp;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;4,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ls -l: 파일의 권한, 소유자, 크기, 수정 날짜 등 &lt;b data-index-in-node=&quot;32&quot; data-path-to-node=&quot;4,1,1,0,0&quot;&gt;상세 정보&lt;/b&gt;를 리스트 형태로 보여줍니다.&lt;/li&gt;
&lt;li&gt;ls -a: 이름이 .으로 시작하는 &lt;b data-index-in-node=&quot;20&quot; data-path-to-node=&quot;4,1,1,1,0&quot;&gt;숨겨진 파일&lt;/b&gt;까지 모두 보여줍니다.&lt;/li&gt;
&lt;li&gt;ls -al: 위 두 옵션을 합쳐서 모든 파일의 상세 정보를 보여줍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;cal&amp;nbsp;&lt;/b&gt;-&amp;gt; 터미널에 &quot;텍스트 형식의 달력을 출력&quot; 명령어&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,0&quot;&gt;자주 쓰는 활용법:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;cal [연도]: 해당 연도의 12개월 달력을 모두 보여줍니다. (예: cal 2026)&lt;/li&gt;
&lt;li&gt;cal [월] [연도]: 특정 시점의 달력을 확인합니다. (예: cal 12 2025)&lt;/li&gt;
&lt;li&gt;ncal: cal과 비슷하지만 달력을 세로 방향으로 출력해주는 좀 더 현대적인 명령어입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약, 설정에 놓은 별칭을 없애고 싶다면&lt;b&gt; unalias&lt;/b&gt; 를 사용하면 된다.&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;11&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;11&quot;&gt;2. 이 명령어는 어디에 있을까? which 명령어&lt;/b&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;12&quot; data-ke-size=&quot;size16&quot;&gt;리눅스 시스템 내에서 특정 명령어의 실행 파일이 어느 경로에 저장되어 있는지 확인하고 싶을 때 사용합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;13&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;which cal &amp;rarr; /usr/bin/cal&lt;/li&gt;
&lt;li&gt;which ls &amp;rarr; /usr/bin/ls&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-path-to-node=&quot;14&quot; data-ke-size=&quot;size16&quot;&gt;우리가 흔히 쓰는 명령어들이 사실은 /usr/bin 폴더 안에 위치한 실행 파일이라는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wF5S8/dJMcafy5JEJ/QSb2Chb9k6FNeN5fXVQ9K1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wF5S8/dJMcafy5JEJ/QSb2Chb9k6FNeN5fXVQ9K1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wF5S8/dJMcafy5JEJ/QSb2Chb9k6FNeN5fXVQ9K1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwF5S8%2FdJMcafy5JEJ%2FQSb2Chb9k6FNeN5fXVQ9K1%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;1226&quot; height=&quot;632&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;16&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;16&quot;&gt;3. 모르는 명령어가 나왔을 때? 도움말 확인법&lt;/b&gt;&lt;/h3&gt;
&lt;p data-path-to-node=&quot;17&quot; data-ke-size=&quot;size16&quot;&gt;명령어의 정확한 옵션이나 용도가 궁금할 때 구글링보다 빠른 방법들입니다.&lt;/p&gt;
&lt;h4 data-path-to-node=&quot;18&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;18&quot;&gt;① whatis: 명령어 한 줄 요약&lt;/b&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;19&quot; data-ke-size=&quot;size16&quot;&gt;명령어의 기능을 아주 간략하게 알고 싶을 때 유용합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;20&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;whatis cal : &quot;display a calendar&quot; (달력 표시)&lt;/li&gt;
&lt;li&gt;whatis ls : &quot;list directory contents&quot; (디렉토리 목록 표시)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;510&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKG7Cy/dJMcaaR5LZg/rqLxONQAay79vcKIDckxAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKG7Cy/dJMcaaR5LZg/rqLxONQAay79vcKIDckxAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKG7Cy/dJMcaaR5LZg/rqLxONQAay79vcKIDckxAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKG7Cy%2FdJMcaaR5LZg%2FrqLxONQAay79vcKIDckxAK%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;1262&quot; height=&quot;510&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;510&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-path-to-node=&quot;21&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;21&quot;&gt;② man: 상세 매뉴얼 확인&lt;/b&gt;&lt;/h4&gt;
&lt;p data-path-to-node=&quot;22&quot; data-ke-size=&quot;size16&quot;&gt;가장 강력한 도움말 도구입니다. 명령어의 모든 옵션과 사용법을 보여줍니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;23&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;man -h: 매뉴얼 명령어 자체의 도움말(도작 모드 등)을 확인합니다.&lt;/li&gt;
&lt;li&gt;man [명령어]: 해당 명령어의 상세 페이지로 들어갑니다. (나올 때는 q 입력)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8Vgba/dJMcafy5JLg/vAUmQX7auUxdkgB1KzTxWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8Vgba/dJMcafy5JLg/vAUmQX7auUxdkgB1KzTxWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8Vgba/dJMcafy5JLg/vAUmQX7auUxdkgB1KzTxWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8Vgba%2FdJMcafy5JLg%2FvAUmQX7auUxdkgB1KzTxWk%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;1256&quot; height=&quot;720&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;man - h (h -&amp;gt; help)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,0,0&quot;&gt;man [명령어]&lt;/b&gt;: 특정 명령어의 두꺼운 백과사전(매뉴얼)을 펼치는 것.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5,1,0&quot;&gt;man -h&lt;/b&gt;: man이라는 프로그램의 사용 설명서(Quick Help)를 짧게 보여달라는 것.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[Rocky Linux] 로키 리눅스</category>
      <category>로키리눅스</category>
      <category>리눅스</category>
      <category>리눅스마스터</category>
      <author>cyberjung</author>
      <guid isPermaLink="true">https://cyberjung.tistory.com/3</guid>
      <comments>https://cyberjung.tistory.com/3#entry3comment</comments>
      <pubDate>Fri, 13 Mar 2026 21:43:50 +0900</pubDate>
    </item>
    <item>
      <title>Mac 환경에서 VMware로 Rocky Linux 설치하기</title>
      <link>https://cyberjung.tistory.com/2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요! 오늘은 Mac 환경에서 가상화 소프트웨어인 &quot;&lt;b data-index-in-node=&quot;31&quot; data-path-to-node=&quot;4&quot;&gt;VMware Fusion&quot;&lt;/b&gt;을 사용하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안정적인 리눅스 배포판인 &quot;&lt;b data-index-in-node=&quot;65&quot; data-path-to-node=&quot;4&quot;&gt;Rocky Linux&quot;&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;가장 먼저 OS 설치를 위한 이미지 파일이 필요합니다. 록키 리눅스 공식 홈페이지의 다운로드 페이지에 접속합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,0,0&quot;&gt;다운로드 주소:&lt;/b&gt; &lt;a href=&quot;https://rockylinux.org/download&quot;&gt;https://rockylinux.org/download&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,0&quot;&gt;플랫폼 선택 시 주의사항:&lt;/b&gt; M4 맥북은 ARM 기반 아키텍처를 사용하므로 반드시 &lt;b data-index-in-node=&quot;45&quot; data-path-to-node=&quot;8,1,0&quot;&gt;ARM64(aarch64)&lt;/b&gt; 버전을 선택해야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,2,0&quot;&gt;이미지 타입 선택:&lt;/b&gt; 가장 범용적인 &lt;b data-index-in-node=&quot;19&quot; data-path-to-node=&quot;8,2,0&quot;&gt;'DVD'&lt;/b&gt; 버전을 권장합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8,2,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,2,1,0,0&quot;&gt;DVD ISO:&lt;/b&gt; GUI 환경 및 주요 라이브러리가 모두 포함되어 있어 별도의 인터넷 연결 없이도 기본적인 패키지 설치가 가능합니다. (용량은 크지만 가장 안정적입니다.)&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,2,1,1,0&quot;&gt;Minimal ISO:&lt;/b&gt; 텍스트 기반의 최소 설치 버전입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2450&quot; data-origin-height=&quot;932&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDcxcO/dJMcacoNdDu/k2RTuKKqUPKMUEmDhGLF81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDcxcO/dJMcacoNdDu/k2RTuKKqUPKMUEmDhGLF81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDcxcO/dJMcacoNdDu/k2RTuKKqUPKMUEmDhGLF81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDcxcO%2FdJMcacoNdDu%2Fk2RTuKKqUPKMUEmDhGLF81%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;2450&quot; height=&quot;932&quot; data-origin-width=&quot;2450&quot; data-origin-height=&quot;932&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;&lt;b&gt;VMware Fusion 실행&lt;/b&gt;: File &amp;gt; New를 클릭하여 새 가상 머신 생성 창을 연다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ISO 파일 드래그&lt;/b&gt;: 다운로드한 Rocky 파일을 설치 창으로 드래그 앤 드롭한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;1065&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VbpMD/dJMb996FZZx/EO02GMxQtINDuTSYWZXRW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VbpMD/dJMb996FZZx/EO02GMxQtINDuTSYWZXRW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VbpMD/dJMb996FZZx/EO02GMxQtINDuTSYWZXRW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVbpMD%2FdJMb996FZZx%2FEO02GMxQtINDuTSYWZXRW0%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;1284&quot; height=&quot;1065&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1284&quot; data-origin-height=&quot;1065&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;계속을 눌러 진행 후 Finsh 버튼 을 누르면 된다.&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;Rocky Linux 설치 진행&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2040&quot; data-origin-height=&quot;1610&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDe7yv/dJMb99ZVUjH/0vfcL23CdHb0qJFuamE4d1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDe7yv/dJMb99ZVUjH/0vfcL23CdHb0qJFuamE4d1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDe7yv/dJMb99ZVUjH/0vfcL23CdHb0qJFuamE4d1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDe7yv%2FdJMb99ZVUjH%2F0vfcL23CdHb0qJFuamE4d1%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;2040&quot; height=&quot;1610&quot; data-origin-width=&quot;2040&quot; data-origin-height=&quot;1610&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;&lt;b&gt;Install Rocky Linux 10.1&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;을 눌러 설치를 진행&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b data-path-to-node=&quot;20,0,0&quot; data-index-in-node=&quot;0&quot;&gt;Welcome Screen:&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: center;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;언어 설정을 진행&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;20,1,0&quot;&gt;Software Selection (중요):&lt;/b&gt; 우측 상단 'Software Selection'에서 'Server with GUI'를 선택합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;M4 환경에서 GUI 라이브러리를 제대로 활용하기 위해 기본 서버 환경에 필요한 개발 도구 옵션을 추가로 체크해 주면 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;20,2,0&quot;&gt;Installation Destination:&lt;/b&gt; 가상 디스크를 선택하고 완료(Done)를 누릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;20,3,0&quot;&gt;Network &amp;amp; Host Name:&lt;/b&gt; 이더넷을 &lt;b data-index-in-node=&quot;26&quot; data-path-to-node=&quot;20,3,0&quot;&gt;ON&lt;/b&gt;으로 켜서 인터넷이 연결되도록 설정&lt;/p&gt;
&lt;p data-path-to-node=&quot;23&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;23&quot; data-ke-size=&quot;size16&quot;&gt;설치가 완료 되었다면, 모든 과정이 끝나면&lt;b&gt; 시스템을 재부팅&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;23&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;23&quot; data-ke-size=&quot;size16&quot;&gt;터미널을 열고 이와 같은 명령어로 sudo dnf update -y 시스템을 최신 상태로 업데이트하며 설치를 마무리합니다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;23&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ved=&quot;0CAAQhtANahgKEwj_tJfNwoGTAxUAAAAAHQAAAAAQgBo&quot; data-hveid=&quot;0&quot;&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>[Rocky Linux] 로키 리눅스</category>
      <category>Rocky Linux</category>
      <category>VMware</category>
      <category>리눅스</category>
      <category>리눅스마스터</category>
      <author>cyberjung</author>
      <guid isPermaLink="true">https://cyberjung.tistory.com/2</guid>
      <comments>https://cyberjung.tistory.com/2#entry2comment</comments>
      <pubDate>Thu, 12 Mar 2026 17:17:16 +0900</pubDate>
    </item>
    <item>
      <title>웹 프로그래밍 첫걸음: HTML 구조와 자기소개 페이지 만들기</title>
      <link>https://cyberjung.tistory.com/1</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요! 웹 프로그래밍 수업의 기초, HTML 구조 잡기를 실습했습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비주얼 스튜디오(VS Code)를 활용해 직접 코드를 작성해 보니,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 매일 보는 웹사이트들이 어떤 뼈대로 이루어져 있는지 조금씩 실감이 나네요 :)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1.&amp;nbsp; HTML의 기본 골격 이해하기&lt;/b&gt;비주얼 스튜디오 코드(VS Code)에서 새 파일을 만들고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;! 만 입력하면 표준 HTML5 골격이 자동으로 생성됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zaPus/dJMcag5MSXe/51fpFEOECvyg7ut8EKccrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zaPus/dJMcag5MSXe/51fpFEOECvyg7ut8EKccrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zaPus/dJMcag5MSXe/51fpFEOECvyg7ut8EKccrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzaPus%2FdJMcag5MSXe%2F51fpFEOECvyg7ut8EKccrK%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;1292&quot; height=&quot;446&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;446&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;코드 핵심 요약 :&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,0,0&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/b&gt;: &quot;이건 HTML5 문서야!&quot;라고 선언&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,1,0&quot;&gt;&amp;lt;html lang=&quot;en&quot;&amp;gt;&lt;/b&gt;: 페이지의 기본 언어 설정 (한국어라면 ko로 변경 권장)&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,2,0&quot;&gt;&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;&lt;/b&gt;: 가장 중요! 한글이 깨지지 않게 해주는 문자 인코딩 설정&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,3,0&quot;&gt;&amp;lt;meta name=&quot;viewport&quot; ...&amp;gt;&lt;/b&gt;: 스마트폰이나 태블릿 등 기기 크기에 맞춰 화면을 조절해주는 모바일 대응 설정&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,4,0&quot;&gt;&amp;lt;title&amp;gt;&lt;/b&gt;: 브라우저 상단 탭에 들어갈 제목입니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7,5,0&quot;&gt;&amp;lt;body&amp;gt;&lt;/b&gt;: 우리가 작성한 글이 들어가는 실제 콘텐츠 공간&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-path-to-node=&quot;12&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 실습 1: 기초 자기소개 페이지&lt;/b&gt;&lt;/p&gt;
&lt;p data-path-to-node=&quot;12&quot; data-ke-size=&quot;size16&quot;&gt;첫 번째 실습에서는 가장 기본이 되는 제목(h1)과 문단(p) 태그를 활용해 보았습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;13&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,0,0&quot;&gt;&amp;lt;h1&amp;gt;자기소개&amp;lt;/h1&amp;gt;&lt;/b&gt;: 페이지의 가장 큰 주제를 나타냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;13,1,0&quot;&gt;&amp;lt;p&amp;gt;&lt;/b&gt;: 문단을 나눌 때 사용하며, 텍스트를 구조적으로 배치합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-path-to-node=&quot;14&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;12,0,0&quot;&gt;&amp;lt;h1&amp;gt; ~ &amp;lt;h6&amp;gt;&lt;/b&gt;: 제목 (숫자가 커질수록 글자는 작아짐)&lt;/p&gt;
&lt;p data-path-to-node=&quot;14&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;10,1,0&quot;&gt;p&lt;/b&gt;: 문단 나누기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;134&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbjzTl/dJMcafsfSmL/6PKxOBitFiPNeKl37W1vOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbjzTl/dJMcafsfSmL/6PKxOBitFiPNeKl37W1vOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbjzTl/dJMcafsfSmL/6PKxOBitFiPNeKl37W1vOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbjzTl%2FdJMcafsfSmL%2F6PKxOBitFiPNeKl37W1vOK%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;570&quot; height=&quot;134&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;134&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;</description>
      <category>웹 프로그래밍</category>
      <category>HTML</category>
      <category>html기초</category>
      <category>VSCode꿀팁</category>
      <category>웹프로그래밍</category>
      <author>cyberjung</author>
      <guid isPermaLink="true">https://cyberjung.tistory.com/1</guid>
      <comments>https://cyberjung.tistory.com/1#entry1comment</comments>
      <pubDate>Wed, 11 Mar 2026 10:57:37 +0900</pubDate>
    </item>
  </channel>
</rss>