<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>지치지 않는 백엔드 개발자 김성주</title>
        <link>https://velog.io/</link>
        <description>지치지 않는 백엔드 개발자 김성주입니다 :)</description>
        <lastBuildDate>Thu, 10 Aug 2023 22:43:26 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>지치지 않는 백엔드 개발자 김성주</title>
            <url>https://velog.velcdn.com/images/dev_seongjoo/profile/82a77a68-e794-40c4-a5cb-2f747bb2dd7b/image.JPG</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. 지치지 않는 백엔드 개발자 김성주. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dev_seongjoo" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[디바운스, 스로틀링]]></title>
            <link>https://velog.io/@dev_seongjoo/%EB%94%94%EB%B0%94%EC%9A%B4%EC%8A%A4-%EC%8A%A4%EB%A1%9C%ED%8B%80%EB%A7%81</link>
            <guid>https://velog.io/@dev_seongjoo/%EB%94%94%EB%B0%94%EC%9A%B4%EC%8A%A4-%EC%8A%A4%EB%A1%9C%ED%8B%80%EB%A7%81</guid>
            <pubDate>Thu, 10 Aug 2023 22:43:26 GMT</pubDate>
            <description><![CDATA[<h1 id="디바운스-스로틀링">디바운스, 스로틀링</h1>
<p><strong>디바운스(Debounce)와 스로틀링(Throttling)은 이벤트 제어 방식</strong>으로, 웹 개발 등에서 자주 사용되는 개념입니다. 두 방식 모두 이벤트의 발생 빈도를 제어하여 성능 개선이나 예기치 않은 동작 방지를 위해 활용됩니다.</p>
<h2 id="디바운스">디바운스</h2>
<p>디바운스는 <strong>연이어 발생하는 이벤트 중에서 마지막 이벤트만 처리하는 방식</strong>입니다. 주로 사용자가 <strong>입력 필드에 값을 입력할 때나 브라우저 창 크기를 조정할 때 등에 활용</strong>됩니다.</p>
<p>예를 들어, 사용자가 검색어를 입력하는 입력 필드에 디바운스를 적용한다면, 사용자가 연속해서 문자를 입력할 때마다 실시간으로 검색 결과를 요청하는 것이 아니라, <strong>일정 시간 동안 입력이 없을 때 마지막 입력 값을 기반으로 한 번만 검색 요청</strong>을 보내게 됩니다. 이를 통해 사용자가 입력을 마치고 잠시 기다린 후 검색 결과를 표시하므로, <strong>불필요한 요청 횟수를 줄이고 성능을 향상</strong>시킬 수 있습니다.</p>
<h2 id="스로틀링">스로틀링</h2>
<p>스로틀링은 <strong>일정 시간 간격으로 이벤트를 제한적으로 발생시키는 방식</strong>입니다. 주로 <strong>스크롤 이벤트나 리사이즈 이벤트 등과 같이 빈번하게 발생하는 이벤트에 사용</strong>됩니다.</p>
<p>예를 들어, <strong>사용자가 웹 페이지를 스크롤할 때 스로틀링을 적용한다면, 스크롤 이벤트가 매번 발생하는 것이 아니라 일정 시간 동안 한 번만 발생하도록 제어</strong>할 수 있습니다. 이를 통해 스크롤 이벤트의 빈번한 발생으로 인한 브라우저 성능 저하를 막을 수 있습니다.</p>
<h2 id="차이점-요약">차이점 요약</h2>
<p><strong>디바운스:</strong> <strong>연이어 발생하는 이벤트 중 마지막 이벤트만을 처리</strong>하므로, 불필요한 이벤트의 처리를 방지하고 성능을 개선합니다.</p>
<p><strong>스로틀링:</strong> <strong>일정 시간 간격마다 이벤트를 발생시킴</strong>으로써, 너무 빈번한 이벤트 발생으로 인한 성능 저하를 방지합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[JWT]]></title>
            <link>https://velog.io/@dev_seongjoo/JWT</link>
            <guid>https://velog.io/@dev_seongjoo/JWT</guid>
            <pubDate>Tue, 08 Aug 2023 22:53:31 GMT</pubDate>
            <description><![CDATA[<h1 id="jwt">JWT</h1>
<h2 id="jwt의-개념">JWT의 개념</h2>
<p>JWT는 &quot;JSON Web Token&quot;의 약자로, <strong>웹 기반의 토큰 기반 인증 및 권한 부여 시스템을 구현하는 데 사용되는 오픈 표준</strong>입니다. JWT는 정보를 안전하게 전달하기 위한 간단한 방법을 제공하며, 주로 웹 및 모바일 애플리케이션에서 사용되며 API 요청의 인증 및 권한 부여에 활용됩니다.</p>
<h2 id="jwt의-구성">JWT의 구성</h2>
<p>JWT는 세 부분으로 구성되어 있습니다:</p>
<p><strong>1. Header:</strong> <strong>토큰의 유형 및 해싱 알고리즘 정보가 포함</strong>되어 있습니다.
<strong>2. Payload:</strong> <strong>실제 정보가 JSON 형식으로 포함</strong>되어 있으며, 클레임(claim)이라는 속성들로 이루어져 있습니다. 클레임은 토큰의 발급자, 유효 기간, 사용자 ID 등을 포함할 수 있습니다.
<strong>3. Signature:</strong> <strong>Header와 Payload를 기반으로 생성</strong>되며, <strong>토큰의 변조 여부를 확인하는데 사용</strong>됩니다. 서버는 이 시그니처를 사용하여 토큰의 유효성을 검증합니다.</p>
<h2 id="jwt의-작동-방식">JWT의 작동 방식</h2>
<p>JWT의 작동 방식은 다음과 같습니다:</p>
<ol>
<li><strong>사용자가 로그인하면 서버는 JWT를 생성</strong>합니다. 이 JWT에는 사용자 정보 및 해당 사용자의 권한 정보가 포함될 수 있습니다.</li>
<li><strong>서버는 생성한 JWT를 클라이언트에게 반환</strong>합니다.</li>
<li><strong>클라이언트는 이후 API 요청을 할 때마다 JWT를 함께 전달</strong>합니다.</li>
<li><strong>서버는 JWT의 시그니처를 확인하여 토큰의 유효성을 검증</strong>하고, <strong>클라이언트의 권한에 따라 요청을 처리</strong>합니다.</li>
</ol>
<p>JWT의 장점은 간단하고 경량적인 구조로 정보를 전달할 수 있다는 점입니다. 또한 <strong>토큰 자체에 필요한 정보가 포함</strong>되어 있으므로, <strong>별도의 세션 상태를 유지할 필요가 없어집니다.</strong> 그러나 JWT를 사용할 때에는 보안에 주의해야 하며, 토큰의 유효 기간 및 안전한 키 관리 등을 신중하게 다뤄야 합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[URI vs URL]]></title>
            <link>https://velog.io/@dev_seongjoo/URI-vs-URL</link>
            <guid>https://velog.io/@dev_seongjoo/URI-vs-URL</guid>
            <pubDate>Tue, 01 Aug 2023 23:00:33 GMT</pubDate>
            <description><![CDATA[<h1 id="uri-vs-url">URI vs URL</h1>
<p>URI(Uniform Resource Identifier)와 URL(Uniform Resource Locator)은 모두 웹 자원을 고유하게 식별하는데 사용되는 문자열이지만, 그 사용 목적과 범위에 있어서 몇 가지 차이점이 있습니다.</p>
<p><strong>1. 범위:</strong> URI는 더 넓은 개념으로 URL과 URN(Uniform Resource Name)의 상위 집합입니다. 즉, <strong>모든 URL은 URI이지만, 모든 URI가 URL은 아닙니다.</strong></p>
<p><strong>2. 사용 목적:</strong> </p>
<ul>
<li><strong>URL은 웹 리소스의 위치를 정확하게 표시하고 그 위치를 어떻게 찾아갈 수 있는지에 대한 정보</strong>를 제공합니다. 예를 들어, &quot;<a href="http://www.example.com&quot;%EC%9D%80">http://www.example.com&quot;은</a> 서버(&#39;<a href="http://www.example.com&#39;)%EC%97%90%EC%84%9C">www.example.com&#39;)에서</a> 웹페이지를 가져오는 방법을 제공합니다. </li>
<li>반면에 <strong>URI는 리소스를 고유하게 식별하는 것이 주된 목적</strong>입니다. 이것은 위치를 제공하지 않을 수도 있습니다. 예를 들어, <strong>URN은 리소스를 고유하게 식별하지만 그 위치를 제공하지는 않습니다.</strong> URN 예시로는 &quot;urn:isbn:0451450523&quot;이 있으며, 이는 특정 책의 고유한 ISBN 번호를 제공하지만, 그 책의 실제 위치를 제공하지는 않습니다.</li>
</ul>
<p>요약하면, <strong>URL은 어떤 리소스가 &#39;어디에 있는지&#39;</strong> 를 나타내며, <strong>URI는 리소스를 고유하게 &#39;식별&#39;</strong> 하는 것입니다. 그리고 모든 URL은 URI입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[크로스 브라우징이 무엇인가요?]]></title>
            <link>https://velog.io/@dev_seongjoo/%ED%81%AC%EB%A1%9C%EC%8A%A4-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A7%95%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</link>
            <guid>https://velog.io/@dev_seongjoo/%ED%81%AC%EB%A1%9C%EC%8A%A4-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A7%95%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</guid>
            <pubDate>Tue, 25 Jul 2023 22:49:55 GMT</pubDate>
            <description><![CDATA[<h1 id="크로스-브라우징이-무엇인가요">크로스 브라우징이 무엇인가요?</h1>
<h2 id="크로스-브라우징의-개념">크로스 브라우징의 개념</h2>
<p>&quot;크로스 브라우징&quot;은 <strong>다양한 웹 브라우저(예: 크롬, 파이어폭스, 사파리, 인터넷 익스플로러 등)에서 모두 웹사이트나 웹 어플리케이션이 올바르게 작동하도록 보장하는 것을 의미</strong>합니다.</p>
<p>크로스 브라우징을 지원하는 것은 종종 <strong>특정 브라우저의 특정 기능이 다른 브라우저에서는 작동하지 않는 등의 이슈를 해결해야 하는 것</strong>을 포함합니다. 따라서 개발자들은 종종 이러한 문제를 해결하기 위해 <strong>폴리필</strong>이나 <strong>트랜스파일러</strong> 같은 도구를 사용하게 됩니다. 이런 도구들은 브라우저 간의 차이점을 줄이거나 없애서 코드가 잘 작동하도록 도와줍니다.</p>
<h2 id="폴리필의-개념">폴리필의 개념</h2>
<p><strong>&quot;폴리필(polyfill)&quot;은 웹 개발에서 특정 기능을 지원하지 않는 브라우저를 위해 그 기능을 대체하는 코드</strong>를 의미합니다. 폴리필은 이론적으로는 <strong>개발자가 사용하려는 웹 API, CSS, HTML5, JavaScript 등의 최신 기능이 브라우저에서 지원되지 않을 경우, 그 기능을 모방하거나 대체하여 해당 기능이 동작하도록 하는 코드</strong>입니다.</p>
<p>예를 들어, 특정 JavaScript 메소드가 오래된 브라우저에서 지원되지 않을 경우, 개발자는 그 메소드의 <strong>폴리필을 작성하거나 이미 존재하는 폴리필을 사용</strong>할 수 있습니다. 이 폴리필은 해당 메소드를 지원하지 않는 브라우저에서도 그 메소드와 동일하게 동작하도록 하는 코드를 제공합니다.</p>
<p>폴리필은 웹 개발자가 최신 기술을 사용하면서도 오래된 브라우저를 사용하는 사용자에게도 웹사이트가 제대로 작동하도록 할 수 있게 도와줍니다. 하지만 폴리필은 추가적인 코드를 의미하므로, <strong>페이지 로딩 시간에 영향</strong>을 줄 수 있으므로 신중하게 사용해야 합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[MVC 패턴]]></title>
            <link>https://velog.io/@dev_seongjoo/MVC-%ED%8C%A8%ED%84%B4</link>
            <guid>https://velog.io/@dev_seongjoo/MVC-%ED%8C%A8%ED%84%B4</guid>
            <pubDate>Sun, 23 Jul 2023 23:11:18 GMT</pubDate>
            <description><![CDATA[<h1 id="mvc-패턴">MVC 패턴</h1>
<p><strong>MVC는 &quot;Model-View-Controller&quot;의 약자</strong>로, 애플리케이션을 구성하는 요소를 세 가지 역할로 나눈 소프트웨어 디자인 패턴입니다. 이 세 가지 역할이란 <strong>데이터를 처리하는 모델(Model), 사용자 인터페이스를 담당하는 뷰(View), 그리고 모델과 뷰 사이의 상호 작용을 관리하는 컨트롤러(Controller)</strong>입니다.</p>
<ol>
<li><p><strong>모델(Model)</strong>: <strong>애플리케이션의 데이터 부분</strong>을 취급하며, 비즈니스 로직, 기본 계산, 데이터베이스에서의 데이터 검색 등을 담당합니다. 모델은 <strong>데이터의 직접적인 관리</strong>를 담당하며, 특정한 UI를 가지지 않습니다.</p>
</li>
<li><p><strong>뷰(View)</strong>: 사용자에게 표시되는 UI 부분입니다. 이것은 <strong>애플리케이션의 시각적 요소</strong>를 담당합니다. 예를 들어 웹 페이지, 모바일 앱의 화면 등이 여기에 해당됩니다. 사용자가 보는 화면을 구성하고, <strong>사용자의 입력을 컨트롤러에 전달</strong>합니다.</p>
</li>
<li><p><strong>컨트롤러(Controller)</strong>: <strong>모델과 뷰 사이의 연결고리 역할</strong>을 합니다. 사용자가 <strong>뷰를 통해 액션</strong>을 취하면, <strong>컨트롤러가 그 액션을 해석</strong>하고, <strong>적절한 모델의 연산을 호출하거나 뷰를 업데이트하는 등의 작업</strong>을 합니다. </p>
</li>
</ol>
<p>이러한 MVC 패턴을 이용하면 <strong>애플리케이션의 개발과 유지 보수가 용이</strong>해집니다. 왜냐하면 관련 작업들이 모델, 뷰, 컨트롤러라는 세 가지 부분으로 분리되기 때문에 <strong>각 부분을 독립적으로 개발하고 테스트</strong>할 수 있기 때문입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[CI / CD가 무엇인가요?]]></title>
            <link>https://velog.io/@dev_seongjoo/CI-CD%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</link>
            <guid>https://velog.io/@dev_seongjoo/CI-CD%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</guid>
            <pubDate>Thu, 20 Jul 2023 22:52:24 GMT</pubDate>
            <description><![CDATA[<h1 id="cicd가-무엇인가요">CI/CD가 무엇인가요?</h1>
<p><img src="https://velog.velcdn.com/images/dev_seongjoo/post/7f37304e-370e-4f40-922b-3e64a7cfd3aa/image.png" alt=""></p>
<h2 id="ci의-개념">CI의 개념</h2>
<p><strong>지속적 통합 (Continuous Integration, CI):</strong> 이것은 개발자들이 <strong>자신의 코드 변경을 팀의 공유 리포지토리에 지속적으로 통합하는 것</strong>을 말합니다. 각 <strong>통합은 그 후 자동화된 빌드 및 테스트 프로세스를 통해 검증</strong>되어, 코드 변경에 대한 문제를 가능한 한 빨리 발견할 수 있습니다. 이러한 접근 방식은 문제를 신속하게 식별하고 해결하므로, 개발자가 버그에 수 시간 또는 수 일을 보내는 것을 방지하고 프로젝트 비용을 줄이는 데 도움이 됩니다.</p>
<h2 id="cd의-개념">CD의 개념</h2>
<p>&quot;CD&quot;는 <strong>지속적인 서비스 제공(Continuous Delivery)</strong> 및/또는 <strong>지속적인 배포(Continuous Deployment)</strong> 를 의미하며 이 두 용어는 상호 교환하여 사용합니다.</p>
<p><strong>지속적인 서비스 제공 (Continuous Delivery, CD):</strong> 이것은 CI의 확장으로 볼 수 있으며, <strong>소프트웨어를 언제든지 안전하게 실제 생산 환경에 배포할 수 있는 상태로 유지하는 것</strong>을 목표로 합니다. 이것은 매번 코드 변경이 이루어질 때마다 자동화된 테스트를 거친 후, <strong>테스트를 통과한 빌드가 자동으로 스테이징 환경으로 배포</strong>되는 방식입니다. 그 후, 실제 생산 배포는 수동으로 수행할 수 있습니다.</p>
<p><strong>지속적 배포 (Continuous Deployment, CD):</strong> 이것은 Continuous Delivery의 한 단계 더 나아가, <strong>테스트를 통과한 모든 변경사항을 자동적으로 생산 환경에 배포하는 접근 방식</strong>을 말합니다. 이것은 개발 단계에서 고객에게 신속하게 제공되는 빠른 피드백 루프를 가능하게 합니다. 그러나 이런 접근 방식은 강력한 자동화된 테스팅 환경과 세밀한 모니터링을 필요로 합니다.</p>
<p><strong>CI/CD(지속적 통합/지속적 배포)</strong> 는 위와 같이 소프트웨어 개발에서 <strong>코드 품질 향상, 프로세스 자동화, 빠른 피드백 주기 등의 장점</strong>을 제공하기 때문에 널리 사용되고 있습니다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[라이브러리와 프레임워크의 차이가 무엇인가요?]]></title>
            <link>https://velog.io/@dev_seongjoo/%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EC%99%80-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC%EC%9D%98-%EC%B0%A8%EC%9D%B4%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</link>
            <guid>https://velog.io/@dev_seongjoo/%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EC%99%80-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC%EC%9D%98-%EC%B0%A8%EC%9D%B4%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</guid>
            <pubDate>Tue, 18 Jul 2023 12:58:00 GMT</pubDate>
            <description><![CDATA[<h1 id="라이브러리와-프레임워크의-차이가-무엇인가요">라이브러리와 프레임워크의 차이가 무엇인가요?</h1>
<h2 id="라이브러리의-개념">라이브러리의 개념</h2>
<p><strong>라이브러리는 특정 기능을 쉽게 구현할 수 있도록 미리 작성되어 있는 코드의 집합을 의미</strong>합니다.</p>
<p>라이브러리를 사용하는 것은 특정 작업을 수행하기 위해 필요한 코드를 모두 직접 작성하는 것보다 훨씬 효율적입니다. 예를 들어, 웹 요청을 처리하는 코드, 그래픽을 처리하는 코드, 복잡한 수학 연산을 수행하는 코드 등을 라이브러리 형태로 사용할 수 있습니다.</p>
<p>프로그래머가 언제 라이브러리를 호출하고 어떻게 사용할지 결정합니다. 따라서 라이브러리는 일반적으로 애플리케이션 코드에서 호출되어 사용됩니다.</p>
<h2 id="프레임워크의-개념">프레임워크의 개념</h2>
<p><strong>프레임워크는 소프트웨어의 특정 문제를 해결하기 위해 제공하는, 구조화된 플랫폼 또는 기반이라고 할 수 있습니다.</strong> 프레임워크는 구체적인 기능 구현에 사용되는 라이브러리들, 그리고 그 라이브러리들이 상호 작용하는 방식, 그리고 그러한 상호 작용을 제어하는 메인의 제어 흐름까지 포함합니다.</p>
<p>프레임워크는 &quot;제어의 역전(Inversion of Control, IoC)&quot; 이라는 원칙에 기반합니다. 이는 프로그램의 흐름을 프레임워크가 관리하고, 개발자는 프레임워크가 정의한 틀에서 필요한 코드를 작성하는 것을 의미합니다. </p>
<h2 id="라이브러리와-프레임워크의-차이">라이브러리와 프레임워크의 차이</h2>
<p> 라이브러리를 사용할 때 개발자는 코드에서 라이브러리를 호출하며, 제어 흐름을 가지고 있지만, 프레임워크에서는 그 반대로 프레임워크 자체가 제어 흐름을 가지고 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로세스와 스레드가 무엇인가요?]]></title>
            <link>https://velog.io/@dev_seongjoo/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</link>
            <guid>https://velog.io/@dev_seongjoo/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</guid>
            <pubDate>Tue, 11 Jul 2023 22:56:24 GMT</pubDate>
            <description><![CDATA[<h1 id="프로세스와-스레드가-무엇인가요">프로세스와 스레드가 무엇인가요?</h1>
<h2 id="프로세스의-개념">프로세스의 개념</h2>
<p><strong>운영체제에서 프로세스는 일련의 작업 단위</strong>입니다. <strong>프로그램은 파일이 저장장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태</strong>이며, 이러한 <strong>프로그램을 실행시켜 운영 체제로부터 CPU를 할당받고 실행되고 있는 상태를 바로 프로세스</strong>라고 합니다.</p>
<p><img src="https://velog.velcdn.com/images/dev_seongjoo/post/5a8ac2b8-d54b-4c19-a089-8d42badd9b95/image.png" alt=""></p>
<h2 id="프로세스의-메모리-구조">프로세스의 메모리 구조</h2>
<p><strong>프로세스의 메모리 구조</strong>는 일반적으로 다음과 같이 구성되어 있습니다:</p>
<p><strong>1. 텍스트 영역 (Text Segment or Code Segment):</strong> 이 영역에는 <strong>프로세스가 실행하는 프로그램의 코드</strong>가 포함되어 있습니다. 이 코드는 일반적으로 읽기 전용으로, 실행 가능한 명령어들이 순서대로 저장됩니다.</p>
<p><strong>2. 데이터 영역 (Data Segment):</strong> 이 영역에는 <strong>프로그램의 전역 변수와 정적 변수가 저장</strong>됩니다. 이들 변수는 프로그램 전체의 실행 동안 계속 존재하며, 특정 함수에 속하지 않는 변수입니다. <strong>초기화된 데이터 영역</strong>과 <strong>초기화되지 않은 데이터 영역(BSS segment)</strong>으로 더 세분화될 수도 있습니다.</p>
<p><strong>3. 힙 영역 (Heap Segment):</strong> 힙은 <strong>동적 메모리 할당이 이루어지는 곳</strong>입니다. 프로그램이 실행되는 동안 요구에 따라 메모리 공간이 할당되거나 해제될 수 있습니다. 힙은 메모리의 낮은 주소에서 높은 주소로 증가합니다. <strong>FIFO</strong>(First In First Out) 방식으로 동작합니다.</p>
<p><strong>4. 스택 영역 (Stack Segment):</strong> 스택 영역은 <strong>함수 호출과 관련된 정보를 저장하는 곳</strong>입니다. 함수 호출시에 생성되는 각 로컬 변수와 반환 주소는 스택에 저장됩니다. 스택은 메모리의 높은 주소에서 낮은 주소로 감소합니다. <strong>LIFO</strong>(Last In First Out) 방식으로 동작합니다.</p>
<h2 id="프로세스의-종류">프로세스의 종류</h2>
<p>프로세스는 그들의 특성에 따라 여러 가지로 분류될 수 있습니다. 다음은 프로세스의 일반적인 분류입니다:</p>
<p><strong>1. Foreground (Interactive) Processes:</strong> 이 프로세스들은 일반적으로 사용자의 입력을 기다리는 상호 작용적인 작업에 사용됩니다. 예를 들어, 텍스트 편집기, 그래픽 사용자 인터페이스(GUI), 데이터베이스 관리 시스템(DBMS)과 같은 응용 프로그램이 이 분류에 속합니다.</p>
<p><strong>2. Background (Batch or Non-interactive) Processes:</strong> 이 프로세스들은 사용자의 상호 작용 없이 실행되며, 일반적으로 일정한 시간에 실행되거나 특정 이벤트를 기다리는 작업에 사용됩니다. 예를 들어, 스케줄링된 백업 작업, 서버 프로세스, 이메일을 확인하는 데몬 등이 이 분류에 속합니다.</p>
<p><strong>3. Parent and Child Processes:</strong> 운영 체제는 한 프로세스가 다른 프로세스를 생성할 수 있는 메커니즘을 제공합니다. 이러한 관계에서 생성한 프로세스를 &#39;부모 프로세스(Parent Process)&#39;라고 하고, 생성된 프로세스를 &#39;자식 프로세스(Child Process)&#39;라고 합니다. 이런 구조를 통해 프로세스 간에 계층적 관계를 형성할 수 있습니다.</p>
<p><strong>4. Daemon Processes:</strong> 데몬 프로세스는 백그라운드에서 실행되는 특별한 유형의 프로세스로, 특정 서비스를 제공하거나 시스템 관리 작업을 수행합니다. 일반적으로 운영 체제가 시작될 때 자동으로 실행되며, 사용자의 입력 없이도 계속 실행됩니다.</p>
<p>이 외에도, 실시간 프로세스, 멀티스레드 프로세스, 분산 시스템의 분산 프로세스 등 다양한 유형의 프로세스가 존재할 수 있습니다.</p>
<h2 id="스레드의-개념">스레드의 개념</h2>
<p>스레드는 <strong>프로세스 내에서 실행되는 개별적인 실행 흐름 또는 실행 단위를 의미</strong>합니다. 각 스레드는 프로세스의 리소스(메모리 공간, 파일 핸들, 등)를 공유하면서 동시에 실행될 수 있습니다. 따라서 스레드를 사용하면 <strong>한 프로세스 내에서 여러 작업을 동시에 수행</strong>할 수 있으며, 이를 통해 프로그램의 성능을 향상시킬 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/dev_seongjoo/post/fca4bb76-a56a-4116-ba8d-07e6debab43a/image.png" alt=""></p>
<h2 id="스레드의-특징">스레드의 특징</h2>
<p><strong>1. 자원 공유:</strong> <strong>스레드는 동일한 프로세스의 다른 스레드와 코드, 데이터 및 힙 영역 등의 메모리를 공유</strong>합니다. 이것은 스레드 간의 통신을 용이하게 하며, 스레드 생성과 제거의 비용을 줄입니다.</p>
<p><strong>2. 독립적인 실행:</strong> 각 스레드는 자신만의 스택을 가지며, 스택 내의 데이터와 CPU 레지스터는 다른 스레드와 공유되지 않습니다. 따라서 <strong>각 스레드는 독립적으로 실행되며, 한 스레드의 실행 상태가 다른 스레드에 직접적인 영향을 미치지 않습니다.</strong></p>
<p><strong>3. 효율적인 커뮤니케이션:</strong> 스레드는 동일한 프로세스 내에서 메모리를 공유하므로, 스레드 간의 통신은 프로세스 간의 통신보다 훨씬 빠르고 효율적입니다.</p>
<p><strong>4. 병렬성:</strong> <strong>멀티프로세서와 멀티코어 시스템에서, 여러 스레드는 동시에 병렬적으로 실행</strong>될 수 있습니다. 이로 인해 복잡한 작업을 빠르게 수행할 수 있으며, 프로그램의 전반적인 성능을 향상시킬 수 있습니다.</p>
<p><strong>5. 경량:</strong> 스레드는 프로세스에 비해 생성과 제거에 드는 오버헤드가 작습니다. 이는 <strong>스레드가 메모리와 자원을 공유하므로, 스레드를 생성하거나 제거하는 것이 프로세스를 생성하거나 제거하는 것보다 더 경제적</strong>이라는 것을 의미합니다.</p>
<p><img src="https://velog.velcdn.com/images/dev_seongjoo/post/9fd155c5-3a31-4173-b3bc-c7c19d201465/image.png" alt=""></p>
<h2 id="스레드의-종류">스레드의 종류</h2>
<p>스레드는 일반적으로 두 가지 기본 유형으로 분류될 수 있습니다: <strong>사용자 수준 스레드(User-Level Threads, ULT)</strong>와 <strong>커널 수준 스레드(Kernel-Level Threads, KLT)</strong>. </p>
<p><strong>1. 사용자 수준 스레드 (User-Level Threads, ULT):</strong> 이 유형의 <strong>스레드는 커널이 아닌 사용자 수준의 스레드 라이브러리에 의해 관리</strong>됩니다. ULT는 커널의 지원을 받지 않으며, 커널은 ULT의 존재를 알지 못합니다. 따라서 <strong>스케줄링이나 스레드 관리가 사용자 수준에서 수행</strong>되며, 이로 인해 성능 향상을 얻을 수 있습니다. 그러나 한 스레드가 시스템 호출을 통해 블록되면, 동일한 프로세스 내의 다른 모든 스레드도 블록될 수 있는 문제가 있습니다.</p>
<p><strong>2. 커널 수준 스레드 (Kernel-Level Threads, KLT):</strong> <strong>KLT는 직접 커널에 의해 관리</strong>되며, 각각이 커널의 개별 스케줄링 단위로 간주됩니다. 이런 유형의 스레드는 커널이 직접 지원하므로, 한 스레드가 블록되더라도 동일한 프로세스의 다른 스레드가 실행될 수 있습니다. 그러나 <strong>커널 수준의 스레드는 생성, 제거, 스케줄링 등의 연산이 비교적 무거운 작업이므로, 사용자 수준 스레드에 비해 비용이 더 들 수 있습니다.</strong></p>
<p>어떤 경우에는 이 두 유형의 스레드를 <strong>혼합하여 사용하는 하이브리드 접근법도 사용</strong>될 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Ajax, Axios, Fetch의 차이점이 무엇인가요?]]></title>
            <link>https://velog.io/@dev_seongjoo/Ajax-Axios-Fetch%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</link>
            <guid>https://velog.io/@dev_seongjoo/Ajax-Axios-Fetch%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</guid>
            <pubDate>Mon, 10 Jul 2023 09:37:57 GMT</pubDate>
            <description><![CDATA[<h1 id="ajax-axios-fetch의-차이점이-무엇인가요">Ajax, Axios, Fetch의 차이점이 무엇인가요?</h1>
<p><img src="https://velog.velcdn.com/images/dev_seongjoo/post/08a65559-9299-4287-ad75-9c442a9f8c3b/image.png" alt=""></p>
<p>Ajax, Axios, Fetch는 모두 웹 개발에서 <strong>HTTP 요청을 만들고 처리하는 데 사용되는 기술이나 라이브러리</strong>이지만 각각의 차이점들은 아래와 같습니다:</p>
<ol>
<li><p><strong>비동기 처리 방식:</strong> 
<strong>Ajax는 비동기 처리를 위해 콜백 패턴을 사용</strong>하므로 코드가 복잡해질 수 있습니다. 이에 반해 <strong>Axios와 Fetch는 Promise를 기반</strong>으로 하므로 비동기 처리를 보다 간결하게 할 수 있습니다.</p>
</li>
<li><p><strong>요청 취소 기능:</strong> 
<strong>Ajax는 비동기 요청을 취소하는 기능을 제공하지 않습니다.</strong> 반면, <strong>Axios와 Fetch는 이를 지원</strong>합니다. </p>
</li>
<li><p><strong>브라우저 호환성:</strong> 
<strong>Ajax는 브라우저 간 호환성 문제</strong>가 있을 수 있습니다. 반면에, Fetch는 현대 브라우저에서 널리 지원되지만, 오래된 브라우저에서는 지원되지 않을 수 있으며, IE는 전혀 지원하지 않습니다. <strong>Axios는 브라우저와 Node.js 모두에서 사용</strong>할 수 있습니다.</p>
</li>
<li><p><strong>추가 기능:</strong> 
<strong>Axios는 요청과 응답의 인터셉터, 요청 재시도, 클라이언트와 서버 측에서의 예외 처리, JSON 데이터 자동 변환 등과 같은 고급 기능을 제공</strong>합니다. 이에 비해, <strong>Fetch는 기본적인 기능만 제공</strong>합니다.</p>
</li>
<li><p><strong>제공 방식:</strong> 
<strong>Fetch는 브라우저에 기본적으로 내장</strong>되어 있어서 별도의 라이브러리 설치 없이 사용할 수 있습니다. 반면, <strong>Axios는 별도의 라이브러리로 제공</strong>됩니다.</p>
</li>
<li><p><strong>에러 처리:</strong> 
<strong>Fetch는 요청에서 발생하는 HTTP 에러를 기본적으로 reject하지 않습니다. 요청이 성공적으로 완료되었는지 여부와 관계없이 fulfilled 상태의 Promise를 반환</strong>합니다. 이 점은 에러 처리 시 주의가 필요합니다.</p>
</li>
<li><p><strong>보안:</strong> 
<strong>Axios는 XSRF(Cross-site Request Forgery) 보호를 지원</strong>합니다. 이는 서버로부터 전달받은 특별한 토큰을 쿠키에 저장하고, 이후 요청에서 이 토큰을 함께 보내 서버에서 검증하는 방식으로 XSRF 공격을 방어합니다.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[클라이언트 사이드 렌더링(CSR) vs 서버 사이드 렌더링(SSR)]]></title>
            <link>https://velog.io/@dev_seongjoo/%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%82%AC%EC%9D%B4%EB%93%9C-%EB%A0%8C%EB%8D%94%EB%A7%81CSR-vs-%EC%84%9C%EB%B2%84-%EC%82%AC%EC%9D%B4%EB%93%9C-%EB%A0%8C%EB%8D%94%EB%A7%81SSR</link>
            <guid>https://velog.io/@dev_seongjoo/%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%82%AC%EC%9D%B4%EB%93%9C-%EB%A0%8C%EB%8D%94%EB%A7%81CSR-vs-%EC%84%9C%EB%B2%84-%EC%82%AC%EC%9D%B4%EB%93%9C-%EB%A0%8C%EB%8D%94%EB%A7%81SSR</guid>
            <pubDate>Thu, 06 Jul 2023 22:30:18 GMT</pubDate>
            <description><![CDATA[<h1 id="클라이언트-사이드-렌더링csr-vs-서버-사이드-렌더링ssr">클라이언트 사이드 렌더링(CSR) vs 서버 사이드 렌더링(SSR)</h1>
<p>클라이언트 사이드 렌더링(Client-Side Rendering, CSR)과 서버 사이드 렌더링(Server-Side Rendering, SSR)은 웹 애플리케이션의 내용이 렌더링 되는 위치와 시점에 따라 분류됩니다. 각각의 방식은 특징과 장단점을 가지고 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/dev_seongjoo/post/76e7a342-b0f2-430e-bf29-d841d53e9a53/image.png" alt=""></p>
<h2 id="클라이언트-사이드-렌더링-csr">클라이언트 사이드 렌더링 (CSR)</h2>
<p>클라이언트 사이드 렌더링은 웹 서버에서는 초기 페이지 로드에 필요한 최소한의 HTML과 JavaScript를 클라이언트(브라우저)로 보내고, 그 이후의 렌더링은 브라우저가 JavaScript를 이용하여 진행합니다. 이렇게 하면 초기 로딩 속도는 느릴 수 있지만, 이후의 사용자와의 상호작용은 매우 빠르게 처리될 수 있습니다.</p>
<p>장점:</p>
<ul>
<li>사용자와의 상호작용이 빠르다.</li>
<li>서버 부하가 상대적으로 적다.</li>
</ul>
<p>단점:</p>
<ul>
<li>초기 페이지 로드 시간이 길다.</li>
<li>검색 엔진 최적화(SEO)에 약할 수 있다.</li>
<li>JavaScript를 지원하지 않는 브라우저에서는 작동하지 않을 수 있다.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/dev_seongjoo/post/a750466d-fb81-4d7e-86eb-3c77023cfb07/image.png" alt=""></p>
<h2 id="서버-사이드-렌더링-ssr">서버 사이드 렌더링 (SSR)</h2>
<p>서버 사이드 렌더링은 서버에서 페이지의 전체 HTML을 렌더링하여 클라이언트로 보냅니다. 이 방식은 초기 페이지 로딩 속도가 빠르며, 검색 엔진 최적화에 유리합니다. 그러나 사용자와의 상호작용이 발생할 때마다 서버에 요청을 보내서 새로운 페이지를 로드해야 하므로, 상호작용이 많은 페이지에서는 효율성이 떨어질 수 있습니다.</p>
<p>장점:</p>
<ul>
<li>초기 페이지 로드 시간이 빠르다.</li>
<li>검색 엔진 최적화(SEO)에 강하다.</li>
<li>JavaScript를 지원하지 않는 브라우저에서도 작동한다.</li>
</ul>
<p>단점:</p>
<ul>
<li>사용자와의 상호작용이 느리다.</li>
<li>서버 부하가 상대적으로 크다.</li>
</ul>
<p>현재는 이 두 가지 방식의 장점을 취하고 단점을 보완하기 위한 다양한 접근법들이 제안되고 있습니다. 예를 들어, 초기 페이지 로드는 SSR로 빠르게 처리하고 이후의 상호작용은 CSR로 처리하는 하이브리드 렌더링 방식이나, Next.js와 같은 프레임워크에서 제공하는 정적 사이트 생성(Static Site Generation, SSG) 등이 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[DNS가 무엇인가요?]]></title>
            <link>https://velog.io/@dev_seongjoo/DNS%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</link>
            <guid>https://velog.io/@dev_seongjoo/DNS%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</guid>
            <pubDate>Tue, 04 Jul 2023 13:58:15 GMT</pubDate>
            <description><![CDATA[<h1 id="dns가-무엇인가요">DNS가 무엇인가요?</h1>
<p><img src="https://velog.velcdn.com/images/dev_seongjoo/post/a0c53dcc-468e-4025-aca2-aad7d2fca5a5/image.png" alt=""></p>
<h2 id="dns의-개념">DNS의 개념</h2>
<p><strong>DNS(Domain Name System)</strong>는 <strong>인터넷에서 도메인 이름을 IP 주소로 변환하거나 그 반대의 작업</strong>을 수행하는 시스템입니다. 이 시스템은 웹 브라우저가 웹 서버에 접속할 때 필요한 IP 주소를 찾는 데 사용됩니다.</p>
<h2 id="dns의-주요-기능">DNS의 주요 기능</h2>
<p>DNS의 가장 중요한 기능은 사람들이 쉽게 기억할 수 있는 <strong>도메인 이름(예: <a href="http://www.example.com)%EC%9D%84">www.example.com)을</a> 기계가 이해할 수 있는 숫자 형태의 IP 주소(예: 192.0.2.1)로 변환</strong>하는 것입니다. 이런 과정을 &#39;이름 해석&#39;이라고 부릅니다.</p>
<p>DNS는 전화번호부와 유사하게 작동합니다. 사람의 이름을 알고 있지만 전화번호를 모를 때, 전화번호부를 찾아 해당 사람의 전화번호를 찾을 수 있습니다. DNS도 이와 비슷한 원리로 동작하는데, <strong>도메인 이름을 알고 있지만 해당 서버의 IP 주소를 모를 때, DNS를 통해 IP 주소를 찾을 수 있습니다.</strong> </p>
<p><strong>DNS는 이러한 정보를 전 세계 DNS 서버에 분산하여 저장</strong>하고, 필요할 때마다 이 정보를 찾아서 제공하는 역할을 합니다. 이렇게 함으로써, 사용자는 웹사이트의 IP 주소를 직접 기억하거나 찾아볼 필요 없이 <strong>웹사이트의 이름만으로 접근</strong>할 수 있게 됩니다.</p>
<h2 id="dns의-작동-원리">DNS의 작동 원리</h2>
<ol>
<li><p>사용자가 웹 브라우저에 URL(예: <a href="http://www.example.com)%EC%9D%84">www.example.com)을</a> 입력하면, 먼저 사용자의 컴퓨터는 <strong>해당 도메인 이름에 대한 IP 주소가 로컬 DNS 캐시에 있는지 확인</strong>합니다. 이 캐시는 최근에 방문했던 웹사이트의 IP 주소를 저장하고 있습니다.</p>
</li>
<li><p>로컬 DNS 캐시에 해당 IP 주소가 없는 경우, 요청은 <strong>사용자의 컴퓨터를 인터넷에 연결해주는 ISP(Internet Service Provider, 인터넷 서비스 제공자)의 DNS 서버로 전달</strong>됩니다.</p>
</li>
<li><p><strong>ISP의 DNS 서버에도 해당 정보가 없으면, 이 서버는 &#39;Root DNS 서버&#39;에게 정보를 물어봅니다.</strong> 루트 DNS 서버는 전 세계에 13개만 있으며, 이들은 TLD(Top-Level Domain, 최상위 도메인) 서버의 위치를 알고 있습니다.</p>
</li>
<li><p><strong>루트 DNS 서버는 TLD 서버의 정보를 ISP의 DNS 서버에 반환</strong>합니다. TLD 서버는 .com, .net, .org 등의 도메인에 대한 DNS 정보를 관리합니다.</p>
</li>
<li><p><strong>ISP의 DNS 서버는 이제 TLD 서버에게 해당 도메인의 IP를 요청</strong>합니다. TLD 서버는 해당 도메인을 관리하는 <strong>&#39;Authoritative DNS 서버&#39;의 정보를 ISP의 DNS 서버에 제공</strong>합니다.
(Authoritative DNS 서버는 보통 웹 호스팅 제공자나 도메인 등록 기관, 또는 대형 조직이 내부 네트워크를 위해 직접 운영하는 경우가 많습니다.)</p>
</li>
<li><p>ISP의 DNS 서버는 마지막으로 <strong>Authoritative DNS 서버에게 해당 도메인의 IP 주소를 요청</strong>합니다. 이 서버는 해당 도메인에 대한 &#39;정확한&#39; IP 주소를 가지고 있습니다.</p>
</li>
<li><p><strong>Authoritative DNS 서버의 응답은 ISP의 DNS 서버를 통해 사용자의 컴퓨터로 반환</strong>됩니다. 이제 웹 브라우저는 이 IP 주소를 이용하여 웹 서버에 연결할 수 있습니다.</p>
</li>
<li><p><strong>이러한 응답은 향후 참조를 위해 사용자의 로컬 DNS 캐시에 저장</strong>되어, 같은 웹사이트에 다시 접속할 때 DNS 조회 과정을 건너뛸 수 있게 합니다.</p>
</li>
</ol>
<p>이 모든 과정은 사실상 순식간에 일어나며, 사용자가 웹 브라우저의 주소창에 URL을 입력하고 엔터키를 누른 후 웹 페이지가 로딩되기 시작하는 그 사이의 시간 동안에 벌어집니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[BFC(Block Formatting Context)가 무엇인가요?]]></title>
            <link>https://velog.io/@dev_seongjoo/BFCBlock-Formatting-Context%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</link>
            <guid>https://velog.io/@dev_seongjoo/BFCBlock-Formatting-Context%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</guid>
            <pubDate>Sun, 02 Jul 2023 23:10:03 GMT</pubDate>
            <description><![CDATA[<h1 id="bfcblock-formatting-context가-무엇인가요">BFC(Block Formatting Context)가 무엇인가요?</h1>
<p><strong>BFC(Block Formatting Context)는 CSS 레이아웃 모델에서 요소를 배치하는 데 사용되는 개념</strong>입니다. <strong>BFC는 해당 요소와 그 자식 요소들이 어떻게 배치되고 상호작용하는지를 정의하는 독립적인 레이아웃 컨텍스트를 생성</strong>합니다.</p>
<h2 id="bfc의-주요-특징과-동작-방식">BFC의 주요 특징과 동작 방식</h2>
<p>BFC의 주요 특징과 동작 방식은 다음과 같습니다:</p>
<ol>
<li><p><strong>요소의 배치:</strong> BFC 내의 블록 요소는 수직으로 위에서 아래로 배치됩니다. 인접한 블록 요소는 수평으로 나란히 배치되며, 요소 간의 공간은 마진(margin)으로 결정됩니다.</p>
</li>
<li><p><strong>부모 요소와의 상호작용:</strong> BFC는 부모 요소와 자식 요소 사이의 상호작용을 격리시킵니다. BFC 내의 자식 요소는 BFC 외부의 요소와 상호작용하지 않고, 부모 요소의 크기에 영향을 받습니다.</p>
</li>
<li><p><strong>Floated 요소 처리:</strong> BFC는 부모 요소가 float된 자식 요소를 감쌀 수 있도록 합니다. 이는 부모 요소가 float된 자식 요소를 감지하고 높이를 조정하여 레이아웃의 깨짐을 방지하는 데 도움이 됩니다.</p>
</li>
<li><p><strong>Clearing Floats:</strong> BFC는 부모 요소에 <code>clear: left</code> 또는 <code>clear: right</code> 속성을 사용하여 float된 요소의 영향을 피할 수 있도록 합니다. 이를 통해 float된 요소가 영향을 주지 않고 부모 요소의 영역 내에 콘텐츠가 표시될 수 있습니다.</p>
</li>
</ol>
<p>BFC는 다양한 상황에서 유용하게 사용될 수 있습니다. 예를 들어, float된 요소를 처리하거나 부모 요소와 자식 요소의 상호작용을 격리시키고 싶을 때 BFC를 사용할 수 있습니다. BFC는 <code>overflow: hidden</code>, <code>display: inline-block</code>, <code>float: left</code> 등의 속성을 사용하여 생성될 수 있습니다.</p>
<p>BFC는 웹 페이지의 레이아웃과 요소의 배치를 관리하기 위한 강력한 도구로 사용될 수 있으며, 정확한 배치와 원하는 동작을 구현하는 데 도움이 됩니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Position 속성이 무엇인가요?]]></title>
            <link>https://velog.io/@dev_seongjoo/Position-%EC%86%8D%EC%84%B1%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</link>
            <guid>https://velog.io/@dev_seongjoo/Position-%EC%86%8D%EC%84%B1%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</guid>
            <pubDate>Sun, 02 Jul 2023 23:08:06 GMT</pubDate>
            <description><![CDATA[<h1 id="position-속성이-무엇인가요">Position 속성이 무엇인가요?</h1>
<p><code>position</code> 속성은 CSS에서 요소의 위치를 지정하는 데 사용되는 속성입니다. <code>position</code> 속성은 요소를 정적(static), 상대적(relative), 절대적(absolute), 고정(fixed), 그리고 스티키(sticky) 위치로 배치할 수 있게 합니다.</p>
<p>다음은 <code>position</code> 속성의 주요 값과 역할입니다:</p>
<ol>
<li><p><strong><code>static</code>:</strong> 요소를 일반적인 문서 흐름에 따라 배치합니다. <code>position: static</code>이 기본 값입니다. <code>top</code>, <code>right</code>, <code>bottom</code>, <code>left</code>, <code>z-index</code> 속성은 <code>static</code> 위치에는 영향을 주지 않습니다.</p>
</li>
<li><p><strong><code>relative</code>:</strong> 요소를 자기 자신을 기준으로 상대적인 위치로 이동시킵니다. <code>top</code>, <code>right</code>, <code>bottom</code>, <code>left</code> 속성을 사용하여 상대적인 거리를 지정할 수 있습니다. 다른 요소들과의 상대적인 위치 관계를 변경하고 싶을 때 유용합니다. 상대적으로 이동한 요소의 공간은 다른 요소에 영향을 주지 않습니다.</p>
</li>
<li><p><strong><code>absolute</code>:</strong> 요소를 가장 가까운 위치 지정 조상 요소를 기준으로 절대적인 위치로 이동시킵니다. 만약 조상 요소 중에 <code>position</code> 값이 <code>static</code>이 아닌 요소가 없다면, 문서의 초기 컨테이너를 기준으로 배치됩니다. <code>top</code>, <code>right</code>, <code>bottom</code>, <code>left</code> 속성을 사용하여 정확한 위치를 지정할 수 있습니다. <code>absolute</code> 위치로 이동한 요소는 다른 요소들에 영향을 줄 수 있으며, 이동하기 전의 공간을 차지합니다.</p>
</li>
<li><p><strong><code>fixed</code>:</strong> 요소를 뷰포트(Viewport)를 기준으로 고정 위치로 배치합니다. 스크롤되더라도 화면에 고정되어 유지됩니다. <code>top</code>, <code>right</code>, <code>bottom</code>, <code>left</code> 속성을 사용하여 고정 위치를 지정할 수 있습니다.</p>
</li>
<li><p><strong><code>sticky</code>:</strong> 요소를 스크롤 영역에 상대적인 위치로 배치합니다. 지정된 임계값까지 스크롤될 때까지는 일반적인 문서 흐름에 따라 배치되지만, 임계값을 넘어서면 고정 위치로 유지됩니다. <code>top</code>, <code>right</code>, <code>bottom</code>, <code>left</code> 속성을 사용하여 임계값과 고정 위치를 지정할 수 있습니다.</p>
</li>
</ol>
<p><code>position</code> 속성은 웹 페이지의 레이아웃을 조정하고 요소들을 원하는 위치에 배치하는 데 유용합니다. 적절한 <code>position</code> 속성 값을 사용하여 요소를 배치하고, 다른 속성들과 함께 조합하여 원하는 디자인을 구성할 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[padding과 margin이 무엇인가요?]]></title>
            <link>https://velog.io/@dev_seongjoo/padding%EA%B3%BC-margin%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</link>
            <guid>https://velog.io/@dev_seongjoo/padding%EA%B3%BC-margin%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</guid>
            <pubDate>Sun, 02 Jul 2023 23:06:51 GMT</pubDate>
            <description><![CDATA[<h1 id="padding과-margin이-무엇인가요">padding과 margin이 무엇인가요?</h1>
<p><code>padding</code>과 <code>margin</code>은 CSS에서 요소의 레이아웃을 조정하기 위해 사용되는 속성입니다. 이들은 박스 모델에서 각각 패딩 영역과 마진 영역을 나타냅니다.</p>
<ol>
<li><p><strong>패딩 (<code>padding</code>):</strong> 패딩은 요소의 콘텐츠 영역과 테두리 사이의 공간을 의미합니다. 패딩은 요소 내부에 적용되며, 콘텐츠와 패딩 영역 사이에 여백을 생성합니다. 패딩은 <code>padding-top</code>, <code>padding-right</code>, <code>padding-bottom</code>, <code>padding-left</code> 속성을 사용하여 각 방향마다 독립적으로 설정할 수 있습니다. 예를 들어, <code>padding: 10px;</code>은 모든 방향에 동일한 패딩 값을 적용하고, <code>padding-top: 5px; padding-right: 10px; padding-bottom: 15px; padding-left: 20px;</code>와 같이 각 방향별로 다른 값을 지정할 수 있습니다.</p>
</li>
<li><p><strong>마진 (<code>margin</code>):</strong> 마진은 요소와 주변 요소 사이의 간격을 조정하는 데 사용됩니다. 마진은 요소 외부에 적용되며, 요소와 주변 요소 간의 간격을 생성합니다. 마진은 <code>margin-top</code>, <code>margin-right</code>, <code>margin-bottom</code>, <code>margin-left</code> 속성을 사용하여 각 방향마다 독립적으로 설정할 수 있습니다. 마진도 패딩과 마찬가지로 동일한 값 또는 각 방향에 다른 값을 지정할 수 있습니다.</p>
</li>
</ol>
<p>패딩과 마진은 요소의 크기와 간격을 조정하여 레이아웃을 구성하는 데 사용됩니다. 패딩은 요소 내부에 여백을 생성하여 콘텐츠와의 간격을 조절하고, 마진은 요소와 주변 요소 간의 간격을 조절합니다. 이들 속성을 조정하여 요소의 레이아웃을 구성하고, 요소 사이의 간격을 설정함으로써 원하는 디자인을 달성할 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Box-Model이 무엇인가요?]]></title>
            <link>https://velog.io/@dev_seongjoo/Box-Model%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</link>
            <guid>https://velog.io/@dev_seongjoo/Box-Model%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</guid>
            <pubDate>Sun, 02 Jul 2023 23:05:38 GMT</pubDate>
            <description><![CDATA[<h1 id="box-model이-무엇인가요">Box-Model이 무엇인가요?</h1>
<p>박스 모델(Box Model)은 CSS에서 요소의 크기와 레이아웃을 정의하는 모델입니다. <strong>요소는 박스 형태로 간주되며, 이러한 박스는 콘텐츠 영역, 패딩 영역, 테두리 영역, 마진 영역으로 구성</strong>됩니다. 각 영역은 다음과 같은 역할을 합니다:</p>
<p><strong>1. 콘텐츠 영역(Content Area):</strong> 요소의 실제 내용이 표시되는 영역입니다. 텍스트, 이미지, 블록 요소 등이 이 영역에 표시됩니다. 콘텐츠 영역의 크기는 <code>width</code>와 <code>height</code> 속성으로 조정할 수 있습니다.</p>
<p><strong>2. 패딩 영역(Padding Area):</strong> 콘텐츠 영역 주위에 적용되는 패딩 영역입니다. 패딩은 콘텐츠와 테두리 사이의 공간을 의미하며, <code>padding</code> 속성을 사용하여 설정할 수 있습니다. 패딩은 콘텐츠 영역의 크기에 영향을 주지 않고, 콘텐츠와의 간격을 조정합니다.</p>
<p><strong>3. 테두리 영역(Border Area):</strong> 패딩 영역 주위에 적용되는 테두리 영역입니다. 요소의 테두리가 표시되는 영역이며, <code>border</code> 속성을 사용하여 스타일, 두께, 색상 등을 설정할 수 있습니다.</p>
<p><strong>4. 마진 영역(Margin Area):</strong> 테두리 영역 주위에 적용되는 마진 영역입니다. 마진은 요소와 주변 요소 간의 간격을 조정하는 데 사용됩니다. <code>margin</code> 속성을 사용하여 설정할 수 있으며, 마진은 다른 요소와의 간격을 제어하거나 레이아웃을 구성하는 데 사용됩니다.</p>
<p>박스 모델은 각 영역의 크기와 속성을 사용하여 요소의 전체 크기와 레이아웃을 결정합니다. 이를 통해 요소의 크기 조정, 간격 설정, 테두리 스타일 지정 등을 수행할 수 있습니다. 박스 모델을 이해하고 적절히 활용하면 웹 페이지의 레이아웃을 정확하게 제어하고 디자인을 구성하는 데 도움이 됩니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프론트엔드 개발자가 되고 싶은 이유]]></title>
            <link>https://velog.io/@dev_seongjoo/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EB%90%98%EA%B3%A0-%EC%8B%B6%EC%9D%80-%EC%9D%B4%EC%9C%A0</link>
            <guid>https://velog.io/@dev_seongjoo/%ED%94%84%EB%A1%A0%ED%8A%B8%EC%97%94%EB%93%9C-%EA%B0%9C%EB%B0%9C%EC%9E%90%EA%B0%80-%EB%90%98%EA%B3%A0-%EC%8B%B6%EC%9D%80-%EC%9D%B4%EC%9C%A0</guid>
            <pubDate>Sun, 02 Jul 2023 22:58:04 GMT</pubDate>
            <description><![CDATA[<h1 id="프론트엔드-개발자가-되고-싶은-이유">프론트엔드 개발자가 되고 싶은 이유</h1>
<p>제가 프론트엔드 개발자가 되고 싶은 이유는 창의성을 표현할 수 있는 영역이기 때문입니다. 직접적으로 사용자에게 영향을 주는 인터페이스를 다루기 때문에 사용자가 웹사이트나 앱을 이용함에 있어 즐겁게 사용하도록 창의성을 표현할 수 있습니다.</p>
<p>또한 빠르게 발전하고 변화하는 분야인만큼 계속해서 흥미롭게 다양한 기술들을 배우고 접목 시킬 수 있습니다.</p>
<p>백엔드와 비교했을 때 두드러지는 차이점으로는 결과물을 빠르게 확인할 수 있다는 점이 있습니다. 백엔드의 경우 완전히 로직을 마무리하기 전까지 결과물을 확인하기 어려운 경우가 많지만 프론트엔드의 경우는 한줄의 코드마다 바로바로 결과물을 확인할 수 있기에 상대적으로 작업 만족도가 높다고 생각합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[TCP와 UDP가 무엇인가요?]]></title>
            <link>https://velog.io/@dev_seongjoo/TCP%EC%99%80-UDP%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</link>
            <guid>https://velog.io/@dev_seongjoo/TCP%EC%99%80-UDP%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</guid>
            <pubDate>Sun, 02 Jul 2023 22:52:44 GMT</pubDate>
            <description><![CDATA[<h1 id="tcp와-udp가-무엇인가요">TCP와 UDP가 무엇인가요?</h1>
<p>TCP (Transmission Control Protocol)와 UDP (User Datagram Protocol)는 인터넷 프로토콜 스위트의 일부인 두 가지 주요 전송 프로토콜입니다. 이 두 프로토콜은 데이터를 네트워크를 통해 전송하는 방법을 정의합니다.</p>
<p><img src="https://velog.velcdn.com/images/dev_seongjoo/post/977568a9-0d89-4c7b-b9b0-896cd37139e2/image.png" alt=""></p>
<ol>
<li><strong>TCP (Transmission Control Protocol)</strong></li>
</ol>
<p>TCP는 <strong>연결 지향적</strong>이고 신뢰할 수 있는 프로토콜입니다. TCP는 <strong>데이터가 순서대로 전달되고 신뢰할 수 있는 전송</strong>이 이루어지도록 보장합니다. 이는 <strong>TCP가 패킷의 순서를 확인하고, 패킷이 손실되거나 지연되는 경우 다시 요청하는 메커니즘</strong>을 갖추고 있기 때문입니다. TCP는 이러한 메커니즘으로 인해 <strong>상대적으로 느릴</strong> 수 있습니다.</p>
<ol start="2">
<li><strong>UDP (User Datagram Protocol)</strong></li>
</ol>
<p>UDP는 <strong>연결이 없는</strong> 프로토콜로, <strong>TCP보다 빠르지만 신뢰성은 떨어</strong>집니다. UDP는 패킷의 <strong>순서를 보장하지 않으며, 패킷이 손실되어도 재전송하지 않습니다.</strong></p>
<p>TCP와 UDP는 각각 다른 사용 사례와 요구 사항에 맞게 선택되어야 합니다. TCP는 <strong>신뢰성이 필요한 애플리케이션(예: 웹 브라우저, 이메일, 파일 전송)</strong>에 주로 사용되며, <strong>UDP는 실시간 데이터 전송이 중요한 애플리케이션(예: 음성 통화, 비디오 스트리밍, 온라인 게임)</strong>에 주로 사용됩니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[display 속성이 무엇인가요?]]></title>
            <link>https://velog.io/@dev_seongjoo/display-%EC%86%8D%EC%84%B1%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</link>
            <guid>https://velog.io/@dev_seongjoo/display-%EC%86%8D%EC%84%B1%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</guid>
            <pubDate>Sun, 02 Jul 2023 22:49:31 GMT</pubDate>
            <description><![CDATA[<h1 id="display-속성이-무엇인가요">display 속성이 무엇인가요?</h1>
<h2 id="display-속성의-개념">display 속성의 개념</h2>
<p><code>display</code> 속성은 CSS에서 요소의 표시 방법을 지정하는 데 사용되는 속성입니다. <code>display</code> 속성은 요소를 블록(block), 인라인(inline), 인라인-블록(inline-block), 그리드(grid), 플렉스(flex) 등의 다양한 형태로 표시할 수 있도록 합니다.</p>
<h2 id="display-속성의-속성값">display 속성의 속성값</h2>
<p>가장 일반적으로 사용되는 <code>display</code> 속성 값은 다음과 같습니다:</p>
<ol>
<li><p><code>block</code>: 요소를 블록 수준 상자로 표시합니다. 요소는 새로운 줄에서 시작하며, 가능한 최대 가로 너비를 차지하고 수직으로 쌓입니다. 블록 요소는 width, height, margin, padding 등의 속성을 사용하여 크기와 간격을 조정할 수 있습니다. <code>&lt;div&gt;</code>, <code>&lt;p&gt;</code>, <code>&lt;h1&gt;</code>과 같은 요소들은 기본적으로 블록 요소입니다.</p>
</li>
<li><p><code>inline</code>: 요소를 인라인 수준 상자로 표시합니다. 요소는 새로운 줄에서 시작하지 않고, 필요한 만큼의 너비만 차지하며, 수평으로 나란히 배치됩니다. 인라인 요소는 width, height, margin-top, margin-bottom 등의 세로 방향 속성을 조정할 수 없습니다. <code>&lt;span&gt;</code>, <code>&lt;a&gt;</code>, <code>&lt;strong&gt;</code>과 같은 요소들은 기본적으로 인라인 요소입니다.</p>
</li>
<li><p><code>inline-block</code>: 요소를 인라인 수준 상자로 표시하지만, 블록 수준 요소처럼 width, height, margin, padding 등의 속성을 사용하여 크기와 간격을 조정할 수 있습니다. 즉, 인라인 요소와 유사한 수평 배치를 유지하면서 블록 요소의 특성을 가집니다.</p>
</li>
<li><p><code>none</code>: 요소를 화면에서 완전히 숨깁니다. 해당 요소는 레이아웃에 차지하는 공간이 없으며, 표시되지 않습니다. 주로 JavaScript를 통해 동적으로 요소를 숨기는 데 사용됩니다.</p>
</li>
<li><p><code>grid</code>, <code>flex</code>: 복잡한 레이아웃을 구성하기 위해 그리드나 플렉스 박스 모델을 사용할 수 있는 속성 값입니다. <code>display: grid</code>는 요소를 그리드 컨테이너로 설정하고, <code>display: flex</code>는 요소를 플렉스 컨테이너로 설정합니다. 이러한 값은 요소들을 유연하게 배치하고 정렬하는 데 사용됩니다.</p>
</li>
</ol>
<p><code>display</code> 속성은 요소의 표시 방법을 지정하여 웹 페이지의 레이아웃을 제어하는 데 중요한 역할을 합니다. 적절한 <code>display</code> 속성 값을 사용하여 요소를 올바르게 배치하고 웹 페이지의 디자인을 제어할 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[cascading이 무엇인가요?]]></title>
            <link>https://velog.io/@dev_seongjoo/cascading%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</link>
            <guid>https://velog.io/@dev_seongjoo/cascading%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</guid>
            <pubDate>Sun, 02 Jul 2023 22:47:10 GMT</pubDate>
            <description><![CDATA[<h1 id="cascading이-무엇인가요">cascading이 무엇인가요?</h1>
<h2 id="cascading의-개념">cascading의 개념</h2>
<p>&quot;Cascading&quot;은 CSS(Cascading Style Sheets)의 &#39;C&#39;에 해당하는 개념으로, <strong>스타일 규칙이 요소에 적용되는 방식</strong>을 정의합니다. Cascading은 스타일 규칙의 우선 순위 및 상속에 따라 스타일이 결정되는 방식을 의미합니다.</p>
<h2 id="cascading의-원칙">cascading의 원칙</h2>
<p>Cascading은 다음과 같은 원칙을 따릅니다:</p>
<ol>
<li><p><strong>우선 순위:</strong> 서로 다른 스타일 규칙이 동일한 요소에 적용되는 경우, 우선 순위에 따라 스타일이 적용됩니다. 일반적으로 우선 순위는 다음과 같이 결정됩니다:</p>
<ul>
<li>!important: <code>!important</code> 키워드가 적용된 스타일이 가장 높은 우선 순위를 갖습니다.</li>
<li>Inline 스타일: 요소에 직접 적용된 인라인 스타일이 그 다음 우선 순위를 갖습니다.</li>
<li>ID 선택자: ID 선택자로 지정된 스타일이 인라인 스타일보다 우선합니다.</li>
<li>클래스 선택자, 속성 선택자, 가상 클래스 선택자: ID 선택자보다는 우선합니다.</li>
<li>요소 선택자, 가상 요소 선택자: 클래스 선택자보다는 우선합니다.</li>
<li>전체 선택자: 가장 낮은 우선 순위를 갖습니다.</li>
</ul>
</li>
<li><p><strong>상속:</strong> 스타일 규칙이 요소에 적용되면, 해당 요소의 자식 요소들은 부모 요소로부터 스타일을 상속받습니다. 상속되는 속성은 폰트 스타일이나 텍스트 색상과 같은 일부 속성에 한정되며, 모든 속성이 상속되는 것은 아닙니다. 자식 요소에서 명시적으로 스타일을 지정하면 상속된 스타일이 덮어씌워집니다.</p>
</li>
</ol>
<p>Cascading은 CSS의 강력한 기능 중 하나로, 스타일 규칙을 유연하게 조합하고 조작할 수 있도록 합니다. 올바른 우선 순위와 상속을 이해하고 사용함으로써 원하는 스타일을 적용하고 요소 간의 일관성을 유지할 수 있습니다. 그러나 복잡한 스타일 규칙이나 우선 순위 충돌은 예기치 않은 결과를 초래할 수 있으므로 주의가 필요합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[float 속성이 무엇인가요?]]></title>
            <link>https://velog.io/@dev_seongjoo/float-%EC%86%8D%EC%84%B1%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</link>
            <guid>https://velog.io/@dev_seongjoo/float-%EC%86%8D%EC%84%B1%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94</guid>
            <pubDate>Sun, 02 Jul 2023 22:45:01 GMT</pubDate>
            <description><![CDATA[<h1 id="float-속성이-무엇인가요">float 속성이 무엇인가요?</h1>
<p><code>float</code> 속성은 CSS에서 사용되는 속성으로, <strong>요소의 배치를 지정</strong>하는 데 사용됩니다. <code>float</code> 속성은 해당 요소를 왼쪽이나 오른쪽으로 띄워서 <strong>텍스트나 다른 요소가 그 주위를 감싸도록</strong> 만듭니다.</p>
<h2 id="float-속성의-속성값">float 속성의 속성값</h2>
<p><code>float</code> 속성은 다음과 같은 값으로 설정할 수 있습니다:</p>
<ol>
<li><p><code>none</code>: 요소를 띄워지지 않도록 설정합니다. 이는 기본값입니다.</p>
</li>
<li><p><code>left</code>: 요소를 왼쪽으로 띄웁니다. 주변의 텍스트나 다른 요소가 왼쪽에 정렬되어 요소의 우측을 감싸게 됩니다.</p>
</li>
<li><p><code>right</code>: 요소를 오른쪽으로 띄웁니다. 주변의 텍스트나 다른 요소가 오른쪽에 정렬되어 요소의 좌측을 감싸게 됩니다.</p>
</li>
</ol>
<p><code>float</code> 속성을 사용하면 요소가 일반적인 문서 흐름에서 벗어나게 되고, 주변 요소와의 상호작용이 변경됩니다. 주로 이미지나 텍스트 주위에 텍스트를 감싸는 레이아웃을 만들거나, 다단(multi-column) 레이아웃 등을 구현하는 데 사용됩니다.</p>
<p><code>float</code> 속성을 사용한 요소의 부모 요소는 해당 요소의 크기를 고려하지 않게 되므로, 부모 요소의 높이가 사라지는 문제가 발생할 수 있습니다. 이러한 경우에는 부모 요소에 <code>overflow: auto</code> 또는 <code>overflow: hidden</code> 속성을 추가하여 해결할 수 있습니다.</p>
<p>그러나 <code>float</code> 속성은 레이아웃 구성을 위해 사용되는 고전적인 방식이며, 최신의 CSS 레이아웃 기술인 Flexbox나 CSS Grid를 사용하는 것이 권장됩니다.</p>
]]></description>
        </item>
    </channel>
</rss>