<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>no_sleep.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Fri, 04 Oct 2024 13:51:39 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>no_sleep.log</title>
            <url>https://velog.velcdn.com/images/no_sleep/profile/f90b7a4a-561c-4620-87d7-0203166143aa/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. no_sleep.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/no_sleep" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[자바스크립트 실행 컨텍스트(Execution context)]]></title>
            <link>https://velog.io/@no_sleep/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%8B%A4%ED%96%89-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8Execution-context</link>
            <guid>https://velog.io/@no_sleep/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%8B%A4%ED%96%89-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8Execution-context</guid>
            <pubDate>Fri, 04 Oct 2024 13:51:39 GMT</pubDate>
            <description><![CDATA[<h2 id="실행-컨텍스트란">실행 컨텍스트란?</h2>
<ul>
<li>실행할 코드에 제공할 환경 정보들을 모아놓은 객체</li>
<li>자바스크립트의 동적 언어로서 성격을 가장 잘 파악할 수 있는 개념</li>
</ul>
<br>
<br>


<h5 id="실행-컨텍스트의-종류">실행 컨텍스트의 종류</h5>
<ul>
<li>전역 실행 콘텍스트 
: 어떤 함수에도 포함되지 않는 코드는 전역 실행 컨텍스트에 속함.
자바스크립트 기본이 되는 컨텍스트</li>
<li>함수 실행 컨텍스트 
: 함수 내에 존재하는 코드</li>
<li>eval 함수 실행 컨텍스트 
: eval 함수내에서 실행된 코드</li>
</ul>
<h5 id="콜-스택call-stack">콜 스택(call stack)</h5>
<p>: 자바스크립트 엔진이 원시타입 값과 함수 호출의 실행 컨텍스트를 저장하는 곳 
<br>
<br></p>
<h2 id="실행-컨텍스트는-언제-만들어지나">실행 컨텍스트는 언제 만들어지나?</h2>
<p>: 함수가 호출될 때 만들어진다.
함수를 호출하면 그 함수 안에 변수를 관리하고, 코드를 실행하는 환경이 필요한데 이때 새로운 실행 컨텍스트를 만든다.</p>
<pre><code>function greeting() {
    let name = &#39;조&#39;;
    console.log(&#39;안녕&#39; + name);
}

greeting(); // 이 함수 호출시 실행 컨텍스트가 만들어짐</code></pre><br>
<br>

<h2 id="실행-컨텍스트의-역할">실행 컨텍스트의 역할</h2>
<ol>
<li>전체 코드의 환경 순서를 보장
: 동일한 환경에 있는 코드를 실행할 때 필요한 환경 정보를 모아 객체를 구성&amp; 이를 콜스택에 쌓아올림 &amp; 가장 위에 쌓여있는 컨텍스트와 관련 있는 코드를 실행</li>
<li>실행 컨텍스트가 활성화되는 시점에 선언된 변수를 hoisting </li>
<li>외부 환경 정보 구성
: 현재 실행 중인 함수가 외부의 어떤 변수에 접근할 수 있는지 체크</li>
<li>this 값 설정
: this가 가리키는 객체가 무엇인지 정의</li>
</ol>
<br>
<br>


<h2 id="스택-구조">스택 구조</h2>
<p>함수를 호출할 때 실행 컨텍스트 스택에 실행 컨텍스트를 차곡차곡 쌓는다. 순서대로 함수를 실행하는 구조를 갖는다.</p>
<pre><code>function first() {
  console.log(&quot;First 함수&quot;);
  second();
}

function second() {
  console.log(&quot;Second 함수&quot;);
  third();
}

function third() {
  console.log(&quot;Third 함수&quot;);
}

first();</code></pre><ol>
<li>first()가 호출되면 first 함수의 실행 컨텍스트가 스택에 쌓인다.</li>
<li>second()가 호출되면 second 함수의 실행 컨텍스트가 그 위에 쌓인다.</li>
<li>third()가 호출되면 third 함수의 실행 컨텍스트가 그 위에 또 쌓인다.</li>
</ol>
<p>이렇게 함수가 호출될 때마다 스택에 쌓였다가, 종료되면 스택에서 제거되는 방식으로 작동</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Ajax란 무엇인가?]]></title>
            <link>https://velog.io/@no_sleep/Ajax%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80</link>
            <guid>https://velog.io/@no_sleep/Ajax%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80</guid>
            <pubDate>Fri, 04 Oct 2024 12:40:13 GMT</pubDate>
            <description><![CDATA[<h2 id="ajax란">Ajax란?</h2>
<ul>
<li>JavasScrip의 라이브러리 중 하나이며,  Asynchronous JavasScript And Xml(비동기식 자바스크립트와 xml)의 약자</li>
<li>브라우저가 가지고 있는 XMLHttpReauest 객체를 이용해 <strong>전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드</strong>하는 기법</li>
<li><strong>비동기</strong> 방식으로 JavasScript를 통해서 서버에 데이터를 요청하는 것<br>

</li>
</ul>
<h4 id="비동기-방식">비동기 방식?</h4>
<p>: 웹 페이지를 리로드하지 않고 데이터를 불러오는 방식으로 필요한 부분만 불러와 사용할 수 있어 매우 큰 장점이 있다.
Ajax를 통해서 서버에 요청을 한 후 멈추어 있지 않고 그 프로그램은 계속 돌아간다는 의미를 내포한다.</p>
<ul>
<li>비동기 != ajax</li>
</ul>
<br>
<br>

<h3 id="ajax를-왜-사용할까">Ajax를 왜 사용할까?</h3>
<ul>
<li>단순하게 웹에서 무언가를 부르거나 데이터를 조회하고 싶은 경우, 페이지 전체를 새로 고침하지 않기 위해서 사용
=&gt; 이를 통해서 자원낭비와 시간낭비를 줄일수 있어 웹 페이지 속도 향상 </li>
<li>비동기적 특징을 가지고 있어 서버의 처리가 완료 될때까지 기다리지 않고 처리 가능</li>
<li>서버에서 데이터만 전송하면 된다
=&gt; 전체적인 코딩의 양 감소</li>
</ul>
<p><img src="https://velog.velcdn.com/images/no_sleep/post/57e95a59-2c69-4c37-92d7-4c4aac7d8baf/image.png" alt=""></p>
<br>
<br>

<h3 id="ajax의-단점">Ajax의 단점?</h3>
<ul>
<li>SEO 문제
: 서버에서 비동기적으로 로드되기 때문에, 검색 엔진 봇이 데이터를 쉽게 인식하지 못해 검색 엔진 최적화에 불리할 수 있다.</li>
<li>보안 문제
: Ajax는 클라이언트 측에서 서버와 데이터를 주고받기 때문에, 보안에 신경써야 한다.</li>
<li>디버깅이 어렵다
: 서버와의 비동기 요청, 네트워크 통신 오류, 데이터 처리 등 여러 비동기 작업이 일어나기 때문에 오류를 추적하고 디버깅하는 데 어려움이 있을 수 있다.</li>
<li>서버 과부하 발생 </li>
<li>XMLHttpRequest를 통해 통신하는 경우, 사용자에게 아무런 진행 정보가 주어지지 않는다.
(요청이 완료되지 않았는데 사용자가 페이지를 떠나거나 오작동할 우려가 발생될 수 있다.)</li>
</ul>
<br>
<br>

<p>출처:
<a href="https://velog.io/@hahan/Ajax%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C">https://velog.io/@hahan/Ajax%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</a><br>
<a href="https://yunamom.tistory.com/98">https://yunamom.tistory.com/98</a><br>
<a href="https://azderica.github.io/00-javascript-ajax/">https://azderica.github.io/00-javascript-ajax/</a><br>
<a href="https://coding-factory.tistory.com/143">https://coding-factory.tistory.com/143</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ HTTP 메소드]]></title>
            <link>https://velog.io/@no_sleep/HTTP-%EB%A9%94%EC%86%8C%EB%93%9C</link>
            <guid>https://velog.io/@no_sleep/HTTP-%EB%A9%94%EC%86%8C%EB%93%9C</guid>
            <pubDate>Fri, 27 Sep 2024 13:46:08 GMT</pubDate>
            <description><![CDATA[<h2 id="http-메소드란">HTTP 메소드란?</h2>
<ul>
<li>클라이언트와 서버 사이에 이루어지는 요청(Request)과 응답(Response) 데이터를 전송하는 방식</li>
<li>서버가 주어진 리소스에 수행하길 원하는 행동, <strong>클라이언트가 웹서버에게 어떤 종류의 동작을 원하는지 나타내는 방법</strong></li>
</ul>
<p><img src="https://velog.velcdn.com/images/no_sleep/post/f1b60e67-bac7-4970-8763-7845a0396b3c/image.png" alt=""></p>
<h3 id="get★">GET(★)</h3>
<ul>
<li>리소스(데이터)를 가져와서 조회하는 메서드</li>
<li>서버의 데이터 변경이나 생성하는데 사용되지 않고, <strong>오직 데이터를 읽는 데만 사용</strong></li>
<li>서버에 데이터 전달할 경우 쿼리스트링을 통해서 전달
(하지만, URL 맨마지막 query=&quot;개발~&quot;이 그대로 노출되므로 유의)
<img src="https://velog.velcdn.com/images/no_sleep/post/426b9b2a-4f12-44b4-9828-5795ae126c3e/image.png" alt=""></li>
</ul>
<h3 id="post★">POST(★)</h3>
<ul>
<li>새로운 리소스를 생성(create)하는데 사용</li>
<li>이미 리소스가 있는 상태에서 POST 할 경우 새로운 리소스를 생성</li>
<li>GET 방식과 다르게 데이터가 외부로 노출되지 않아 보안상의 이점 존재</li>
<li>성공하면 201 HTTP 응답을 반환</li>
</ul>
<h3 id="put★">PUT(★)</h3>
<ul>
<li><strong>기존 리소스가 존재한다면 리소스를 완전히 대체해서 덮어씌우고</strong>  서버에 리소스가 없다면 생성함</li>
<li>부분 수정은 불가능</li>
</ul>
<h3 id="patch">PATCH</h3>
<ul>
<li>(PUT과 같이 리소스를 수정하는 역할을 수행하나) <strong>리소스를 부분 변경</strong></li>
</ul>
<h3 id="delete-★">DELETE (★)</h3>
<ul>
<li>특정 리소스를 제거할 때 사용</li>
</ul>
<h3 id="head">HEAD</h3>
<ul>
<li>(GET과 동일한 역할을 수행하나) HEAD만 Return </li>
<li>Body 부분을 넣지 않기에 실제 데이터가 아닌 데이터에 관한 정보만 얻으려고 할때 사용 </li>
</ul>
<h4 id="멱동성은">멱동성은?</h4>
<ul>
<li>어떤 작업을 한 번 실행한 결과와 여러 번 실행한 결과가 똑같은 경우 멱동성이 있다고 한다.</li>
<li><strong>같은 요청을 여러 번 보내도 <span style="color:red">서버</span>의 상태가 변하지 않고 같은 응답이 돌아오면 그 요청은 멱동성을 가진다</strong>고 말함</li>
</ul>
<p>GET, PUT, DELETE: 멱동성 O
(PUT으로 여러 번 리소스가 수정이 되더라도 요청한 값은 이미 수정된 상태이기 때문에 서버에 변화 없음)
<br>
POST, PATCH:멱동성 X
(리소스를 생성하거나 부분 수정하게 된다면 데이터들은 계속 변화할 것이고, 그 때마다 서버의 응답은 다른 응답을 나타내게 되고 결국 서버에 변화가 생김)</p>
<br>
<br>
<br>
출처:
https://youwjune.tistory.com/42<br>
https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-HTTP-%EB%A9%94%EC%84%9C%EB%93%9C-%EC%A2%85%EB%A5%98-%ED%86%B5%EC%8B%A0-%EA%B3%BC%EC%A0%95-%F0%9F%92%AF-%EC%B4%9D%EC%A0%95%EB%A6%AC<br>
https://infjin.tistory.com/165



]]></description>
        </item>
        <item>
            <title><![CDATA[렉시컬 스코프(Lexical Scope)]]></title>
            <link>https://velog.io/@no_sleep/%EB%A0%89%EC%8B%9C%EC%BB%AC-%EC%8A%A4%EC%BD%94%ED%94%84Lexical-Scope</link>
            <guid>https://velog.io/@no_sleep/%EB%A0%89%EC%8B%9C%EC%BB%AC-%EC%8A%A4%EC%BD%94%ED%94%84Lexical-Scope</guid>
            <pubDate>Fri, 27 Sep 2024 12:03:38 GMT</pubDate>
            <description><![CDATA[<h2 id="lexical-scope">Lexical Scope?</h2>
<ul>
<li>자바스크립트에서는 렉시컬 스코프(Lexical Scope)라는 스코핑 방식을 이용</li>
<li>정적 스코프(Static Scope)라고도 불림</li>
<li>함수가 호출될 때가 아닌,<strong>함수가 선언될 때 스코프가 결정된다</strong>는 개념<br>
### ex)

</li>
</ul>
<p><img src="https://velog.velcdn.com/images/no_sleep/post/f728b7f2-9099-4af0-a9c0-5245fca01e6f/image.png" alt=""></p>
<ol>
<li>name 변수를 선언</li>
<li>함수 doo는 변수 name을 출력하는 함수이므로, 전역 변수인 name을 참조</li>
<li>함수doo 내부에서 변수 name을 다시 선언하고 kim으로 할당하지만, 재선언 재할당된 name 변수는 함수 doo에서만 유효한 지역 변수이다.
doo 함수는 boo함수 내부의 스코프 영향을 받지 않고 변수 전역에서 정의된 name = &#39;jo&#39;를 참조한다.</li>
<li>boo();// jo출력<br>
위에서 보이는 예시처럼 함수를 어느위치에서 호출하는지에 상관없이, 무조건 자기 자신의 스코프를 찾아보고 그 후에는 전역 스코프를 찾는것을 볼수있다.




</li>
</ol>
<p><br><br></p>
<h4 id="왜-lexical-scope인가">왜 Lexical Scope인가?</h4>
<ul>
<li>Lexical과 연관된 단어중 Lexicon 단어가 존재</li>
<li>Lexicon: (특정 언어·분야·개인·집단에서 사용하는 모든) 어휘</li>
</ul>
<p>전체가 쓴다기보단 특정, 개인, 집단에서 
즉, 어떤 한정된 블록 내에서 사용한다는 뜻으로 Lexical Scope는 정의된 특정한 구역 내에서 사용하는 스코핑 방식으로 해석</p>
<p>출처:
<a href="https://www.zerocho.com/category/JavaScript/post/5740531574288ebc5f2ba97e">https://www.zerocho.com/category/JavaScript/post/5740531574288ebc5f2ba97e</a>
<a href="https://ljtaek2.tistory.com/145">https://ljtaek2.tistory.com/145</a>
<a href="https://jake-seo-dev.tistory.com/180#Dynamic%--Scope">https://jake-seo-dev.tistory.com/180#Dynamic%--Scope</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[위클리 페이퍼] 이벤트 버블링, 캡쳐링, 위임]]></title>
            <link>https://velog.io/@no_sleep/%EC%9C%84%ED%81%B4%EB%A6%AC-%ED%8E%98%EC%9D%B4%ED%8D%BC-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%B2%84%EB%B8%94%EB%A7%81-%EC%BA%A1%EC%B3%90%EB%A7%81-%EC%9C%84%EC%9E%84</link>
            <guid>https://velog.io/@no_sleep/%EC%9C%84%ED%81%B4%EB%A6%AC-%ED%8E%98%EC%9D%B4%ED%8D%BC-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%B2%84%EB%B8%94%EB%A7%81-%EC%BA%A1%EC%B3%90%EB%A7%81-%EC%9C%84%EC%9E%84</guid>
            <pubDate>Fri, 20 Sep 2024 16:32:36 GMT</pubDate>
            <description><![CDATA[<h4 id="이벤트-개념과-종류">이벤트 개념과 종류</h4>
<ul>
<li>이벤트는 웹페이지에서 발생하는 사건을 의미하며</li>
<li>마우스 클릭, 더블 클릭, 키보드 입력, 스크롤 등 유저가 웹페이지에서 어떤 사건을 발생시키는 것</li>
</ul>
<h4 id="이벤트-흐름">이벤트 흐름</h4>
<p><img src="https://velog.velcdn.com/images/no_sleep/post/0a2ff302-17d5-4b76-ab83-63dfba6f18e4/image.png" alt=""></p>
<br>
<br>
<br>
<br>


<h2 id="1-이벤트-버블링bubbling">1. 이벤트 버블링(Bubbling)</h2>
<p><img src="https://velog.velcdn.com/images/no_sleep/post/c286e0e6-968c-4714-859d-942362bfce1d/image.png" alt=""></p>
<ul>
<li>이벤트가 발생한 요소부터 상위 요소로 순차적으로 전파되는 방식<pre><code>//html
</code></pre></li>
</ul>
<div class="div">
    <button class="button">이벤트 버블링</button>
<div>


<p>//javascript</p>
<p>const div= document.querySelector(&quot;.div&quot;);
const button = document.querySelector(&quot;.button&quot;);</p>
<p>div.addEventListener(&#39;click&#39;, function (){
    console.log(&quot;div 클릭함&quot;);
});</p>
<p>button.addEventListener(&#39;click&#39;, function (){
    console.log(&quot;button 클릭함&quot;);
});</p>
<pre><code>button을 클릭하면 콘솔창에 &quot;button 클림함&quot; 과 &quot;div 클림함&quot; 이 순차적으로 출력된다.



- focus 같은 일부 이벤트는 버블링되지 않지만 거의 모든 이벤트는 버블링과 캡처링이 된다.
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

## 2. 이벤트 캡처링(Capturing)
- 이벤트 버블링과 반대 방향으로 진행됨
- 조상 요소로부터 이벤트가 발동된 하위 요소로 이벤트가 순차적으로 전파되는 방식
- addEventListener(&#39; &#39;, function, □) 3번째 프로퍼티에 {capture: true} or true값 전달
- 이벤트 캡처링은 사용 빈도가 극히 드물어 실제 코드에서 보기 힘들며, 이벤트 버블링으로도 충분히 처리할 수 있기때문에 최신 브라우저에서는 점차 지원하지 않는 추세
</code></pre><p>//html</p>
<div class="div">
    <button class="button">이벤트 캡처링</button>
</div>


<p>//javascript
const div= document.querySelector(&#39;.div&#39;)
const button= document.querySelector(&#39;.button&#39;)</p>
<p>div.addEventListener(&#39;click&#39;, function(){
    console.log(&quot;div 클릭함&quot;);
    } ,true);
button.addEventListener(&#39;click&#39;, function(){
    console.log(&quot;button 클릭함&quot;);
    } ,true);</p>
<pre><code>
button을 클릭하면 콘솔창에 &quot;div 클림함&quot; 과 &quot;button 클림함&quot; 이 순차적으로 출력된다.
&lt;br&gt;
&lt;br&gt;

### 추가)이벤트가 전파되는것을 막고 싶다면 event.stopPropagation()</code></pre><p>function logEvent(event) {
    event.stopPropagation();
}</p>
<pre><code>- 이벤트 버블의 경우 클릭한 요소의 이벤트만 발생시키고 상위 요소로 이벤트 전달하는 것을 방해한다.
- 이벤트 캡처의 경우 클릭한 요소의 최상위 요소 이벤트만 동작시키고 하위 요소들로 이벤트를 전달하지 않는다.
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
## 3. 이벤트 위임(Delegation)
- 하위 요소에 각각 이벤트를 붙이지 않고 상위 요소에서 하위 요소의 이벤트들을 제어하는 방식
</code></pre><p>//html</p>
<ul class="parent">부모
    <li>자식1</li>
    <li>자식2</li>
    <li>자식3</li>
</ul>

<p>자식1, 2, 3의 li요소에 클릭 이벤트를 주려면 각각 이벤트리스너를 붙여야하는 비효율 작업이 발생한다.
-&gt; 부모태그에 이벤트리스너를 걸어서 해결하자.</p>
<pre><code></code></pre><p>//html</p>
<ul class="parent">부모
    <li class=child>자식1</li>
    <li class=child>자식2</li>
    <li class=child>자식3</li>
</ul>

<p>//javascript</p>
<p>document.querySelector(&#39;.parent&#39;).addEventListener(&#39;click&#39;,
    function(){
    if(event.target.classList.contains(&#39;.child&#39;)
    {console.log(event.target.textContent + &quot;선택함&quot;);
    }
  });</p>
<pre><code>
####  위임을 사용하면 왜 좋나?
- 효율성과 성능절약(이벤트리스너를 한번만 등록하면 되기에)
- 동적 요소 처리: li 자식요소가 추가되거나 삭제되더라도 수정없이 이벤트 적용 가능하다.





&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;

출처: 
https://jjang-j.tistory.com/76
https://velog.io/@soulee__/JavaScript-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%B2%84%EB%B8%94%EB%A7%81-%EC%BA%A1%EC%B3%90-%EC%9C%84%EC%9E%84
https://velog.io/@rookieand/%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%B2%84%EB%B8%94%EB%A7%81-%EC%BA%A1%EC%B2%98%EB%A7%81-%EC%9C%84%EC%9E%84%EC%9D%84-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90
https://vc972.tistory.com/18
https://velog.io/@jeris/%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%B2%84%EB%B8%94%EB%A7%81-%EC%BA%A1%EC%B3%90%EB%A7%81-%EC%9C%84%EC%9E%84


</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[Git] Git Flow 브랜치 전략]]></title>
            <link>https://velog.io/@no_sleep/Git-Git-Flow-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EC%A0%84%EB%9E%B5</link>
            <guid>https://velog.io/@no_sleep/Git-Git-Flow-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EC%A0%84%EB%9E%B5</guid>
            <pubDate>Fri, 13 Sep 2024 14:41:36 GMT</pubDate>
            <description><![CDATA[<h1 id="git-flow-브랜치-란">Git Flow 브랜치 란?</h1>
<p>여러 개발자가 하나의 저장소를 사용하는 환경에서 저장소를 효과적으로 사용하기 위해 효율적인 브랜치 관리를 돕고, 협업의 복잡성을 줄이며, 코드의 안정성을 유지하는 데 중요한 역할을 한다.</p>
<p>브랜치 생성에 규칙을 만들어서 협업을 유연하게 하는 방법론을 말한다.</p>
<p>신입 개발자로 회사에 입사해 실무를 들어가면 
&quot;어떤 브랜치가 최신 브랜치인지&quot;
&quot;배포 버전은 어떤 걸 골라야하지&quot;
&quot;완성된 작업물을 어디에 push 해야하지&quot; 당황스러울 것입니다.
바로 이런 상황을 최소화하기 위해 만들어진 방법론이 git flow 브랜치 전략이다.
<br>
<br></p>
<h2 id="특징">특징</h2>
<ol>
<li>용도에 맞게 브랜치를 분리해서 사용
 단, master, develop 브랜치는 중심이 되는 브랜치라서 무조건 존재해야한다.</li>
<li>명확한 릴리즈 버전 관리를 위한 브랜치를 따로 관리하기 때문에 한 버전에 대한 유지보수가 용이하다.<br>
<br>

</li>
</ol>
<h2 id="각-브랜치-설명">각 브랜치 설명</h2>
<p>master(main): 배포 가능한 상태만을 관리하는 브랜치
develop: 다음에 배포할 것을 개발하는 브랜치
feature: 추가 기능을 개발하기 위한 브랜치
release: 다음 버전 출시를 준비하는 브랜치 
hotfix: master 브랜치에서 발생한 버그를 수정하는 브랜치 </p>
<br>
<br>

<h2 id="git-flow-흐름">git flow 흐름</h2>
<p><img src="https://velog.velcdn.com/images/no_sleep/post/ed70c1b4-41be-446b-884a-d41fc4d7d5c2/image.png" alt="">
실제 git 브랜치 전략의 흐름을 크게 3가지 경우로 정리하면 아래와 같다.</p>
<p>*5가지 중 항상 유지되는 메인 브랜치(2) : master(main), develop</p>
<h4 id="1-기능-개발">1. 기능 개발</h4>
<p><img src="https://velog.velcdn.com/images/no_sleep/post/48029b54-b53e-4f98-bba3-5b85a255e310/image.png" alt=""></p>
<p>(1). 새로운 기능을 구현하기 위해 Develop 브랜치로부터 Feature 브랜치를 생성한다. 
(2). Feature 브랜치에서 기능을 개발한다.
(3). Feature 브랜치의 기능 구현이 완료되면 Develop 브랜치에 병합하기 위한 PR을 작성한다.</p>
<h4 id="2-라이브-서버로-배포">2. 라이브 서버로 배포</h4>
<p><img src="https://velog.velcdn.com/images/no_sleep/post/d2c2ed8f-e39d-40ba-8b87-bf70915775b0/image.png" alt=""></p>
<p>(1). Dvelop 브랜치에 Feature 브랜치가 병합되었다면, QA를 위해 Develop 브랜치로 부터 Release 브랜치를 생성한다.
(2). QA 테스트를 통과했다면 Release 브랜치를 Develop, master 브랜치에 병합한다.
<br></p>
<h4 id="3-배포-후-발생한-오류-대처">3. 배포 후 발생한 오류 대처</h4>
<p><img src="https://velog.velcdn.com/images/no_sleep/post/112d03ce-94cc-4f02-b939-e4b8d7ecf53f/image.png" alt=""></p>
<p>(1). 만약 master 브랜치에서 버그가 발견된다면, master 브랜치에서 Hotfix 브랜치를 생성한다.
(2). 버그를 해결하고 Hotfix 브랜치를 Develop, master 브랜치에 병합한다.</p>
<br>
<br>

<p>(출처)
<a href="https://amaran-th.github.io/Github/%5BGithub%5D%20Git%20%EB%B8%8C%EB%9E%9C%EC%B9%98%20%EC%A0%84%EB%9E%B5/">https://amaran-th.github.io/Github/[Github]%20Git%20%EB%B8%8C%EB%9E%9C%EC%B9%98%20%EC%A0%84%EB%9E%B5/</a>
<br>
<a href="https://parkstate.tistory.com/33">https://parkstate.tistory.com/33</a>
<br>
<a href="https://inpa.tistory.com/entry/GIT-%E2%9A%A1%EF%B8%8F-github-flow-git-flow-%F0%9F%93%88-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EC%A0%84%EB%9E%B5">https://inpa.tistory.com/entry/GIT-%E2%9A%A1%EF%B8%8F-github-flow-git-flow-%F0%9F%93%88-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EC%A0%84%EB%9E%B5</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Git] branch merge 방법들과 각 방법의 특징]]></title>
            <link>https://velog.io/@no_sleep/Git-branch-merge-%EB%B0%A9%EB%B2%95%EB%93%A4%EA%B3%BC-%EA%B0%81-%EB%B0%A9%EB%B2%95%EC%9D%98-%ED%8A%B9%EC%A7%95</link>
            <guid>https://velog.io/@no_sleep/Git-branch-merge-%EB%B0%A9%EB%B2%95%EB%93%A4%EA%B3%BC-%EA%B0%81-%EB%B0%A9%EB%B2%95%EC%9D%98-%ED%8A%B9%EC%A7%95</guid>
            <pubDate>Fri, 13 Sep 2024 13:17:31 GMT</pubDate>
            <description><![CDATA[<h1 id="branch-merge란">branch merge란</h1>
<p>하나의 branch를 이용하면 편리하지만, 정상 서비스 운영중인 main branch에서 새로운 기능 추가나 버그 수정을 할수없다. </p>
<p>그래서 해결방안으로 각각의 브랜치에서 개발한 후, 현재 브랜치를 다른 브랜치로 합칠 때 사용한다.
특정 브랜치로 합치게 해달라고 요청하는 pr(pull request)에도 세가지 merge 방법이있다.
<img src="https://velog.velcdn.com/images/no_sleep/post/dd718240-13c5-4933-adf1-9dc6bebd4305/image.png" alt=""></p>
<br>
<br>

<h2 id="create-a-merge-commit">Create a merge commit</h2>
<p><img src="https://velog.velcdn.com/images/no_sleep/post/022effb7-62ce-478a-b1dc-cfc6ec78ae15/image.png" alt=""></p>
<p>일반적인 merge commit을 만들며, 각각 브랜치에 남은 커밋을 히스토리에 그대로 남겨서 상세한 작업파악이 가능하다.</p>
<p>모든 commit과 분기했던 브랜치 히스토리가 굉장히 자세히 남아서 다소 보기 어려울 수 있다는 단점이 있다.</p>
<p>명령어: git merge [머지할 브랜치]</p>
<br>
<br>



<h2 id="squash-and-merge">Squash and merge</h2>
<p><img src="https://velog.velcdn.com/images/no_sleep/post/e3c13633-b68e-4cad-8cda-50d283213918/image.png" alt="">
squash: 짓누르다, 으깨다</p>
<p>선택한 브랜치의 모든 커밋을 하나의 커밋으로 합쳐서 중앙 브랜치에 하나의 커밋으로 저장하는 전략이다.</p>
<p>앞선 Create a merge commit의 모든 기록이 남아 기존 변경사항들이 어떻게 변했는가를 집중적으로 보여주기 보다 merge 되었다에 집중해 commit 히스토리가 간결하다는 장점이 있다.</p>
<p>하지만, 개별 커밋들이 사라져서 언제 어떤 코드를 바꿨는지에 대한 정보를 잃을 수 있다는 단점이 있다.</p>
<p>명령어: git merge -squash[머지할 브랜치]</p>
<br>
<br>

<h2 id="rebase-and-merge">Rebase and merge</h2>
<p><img src="https://velog.velcdn.com/images/no_sleep/post/542bb260-4124-4828-83bd-a336078b1e96/image.png" alt=""></p>
<p>선택한 브랜치의 commit들이 main 브랜치 위로 위치를 직접 옮겨서 처리하는 방식이다.</p>
<p>다른 브랜치에서 변경한 내용을 main 브랜치에서 변경한 것처럼 바꿔서 병합 commit이 생성되지 않아 commit 히스토리가 깔끔하고 일직선으로 이어진다.
팀 내에서 병합 기록을 최소화하고자 할 때 유용하다.</p>
<p>하지만, merge commit 기록되지 않기에 어느 시점에서 merge 되었는지 판단하기 어렵고 충돌이 발생한다면 충돌 해결 과정이 복잡해질수 있다.</p>
<p>rebase는 다른 브랜치의 커밋을 가져와서 현재 브랜치 위에서 다시 적용할때 커밋 히스토리가 재작성되므로, 원래 커밋 순서가 변경된다.
또한 각 커밋을 차례대로 재적용하는 방식이기 때문에 중간 중간 커밋마다 충돌이 발생할 수 있는데 각 커밋의 충돌을 해결해야 하므로 시간이 오래 걸릴수 있다 </p>
<p>명령어: git rebase -i HEAD~<n></p>
<br>
<br>



<p> (출처) 
<a href="https://velog.io/@jeris/Git%EC%97%90%EC%84%9C-branch-merge-%EB%B0%A9%EB%B2%95%EB%93%A4%EA%B3%BC-%EA%B0%81-%EB%B0%A9%EB%B2%95%EC%9D%98-%ED%8A%B9%EC%A7%95">https://velog.io/@jeris/Git%EC%97%90%EC%84%9C-branch-merge-%EB%B0%A9%EB%B2%95%EB%93%A4%EA%B3%BC-%EA%B0%81-%EB%B0%A9%EB%B2%95%EC%9D%98-%ED%8A%B9%EC%A7%95</a>
  <br>
<a href="https://ssocoit.tistory.com/273">https://ssocoit.tistory.com/273</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[위클리 페이퍼 2주차] font-size 변경시 스타일링 방법]]></title>
            <link>https://velog.io/@no_sleep/%EC%9C%84%ED%81%B4%EB%A6%AC-%ED%8E%98%EC%9D%B4%ED%8D%BC-2%EC%A3%BC%EC%B0%A8-font-size-%EB%B3%80%EA%B2%BD%EC%8B%9C-%EC%8A%A4%ED%83%80%EC%9D%BC%EB%A7%81-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@no_sleep/%EC%9C%84%ED%81%B4%EB%A6%AC-%ED%8E%98%EC%9D%B4%ED%8D%BC-2%EC%A3%BC%EC%B0%A8-font-size-%EB%B3%80%EA%B2%BD%EC%8B%9C-%EC%8A%A4%ED%83%80%EC%9D%BC%EB%A7%81-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Fri, 06 Sep 2024 15:41:55 GMT</pubDate>
            <description><![CDATA[<p>-왜? 다양한 사람들이 다양한 디바이스를 가지고 웹을 이용한다. 그렇기에 어떤 디바이스에서도 문제없이 정상적으로 작동할수 있게 만들어야 한다.</p>
<pre><code>1. 상대적인 단위 사용(em, rem)
em: 부모 요소의 폰트 크기를 기준으로 설정
rem: 최상위 HTML 요소의 폰트 크기를 기준으로 설정


html { 
    font-size: 16px;}

.box {
    width: 10rem; //HTML 폰트 크기의 10배로 지정 }




2. 미디어 쿼리 활용
폰트 크기가 변경되었을 때 레이아웃이나 요소 크기를 다르게 설정하고 싶다면 미디어 쿼리 사용

@media screen and (min-width: 600px) {
.box {
  font-size: 1.2rem;
      }}


해석)화면 너비가 600px 이상일 때, .box의 요소 폰트 크기를 1.2 rem으로 설정한다.
    600px 미만일 때는 쿼리 내부의 스타일 적용이 아닌 기본 폰트 크기가 적용된다.


 3.Flexbox 또는 css grid 레이아웃 사용

(1) flexbox는 1차원 레이아웃 시스템으로, 가로 or 세로로 배치하는 데 적합하다.
(2) css grid는 2차원 레이아웃 시스템으로, 행과 열을 배치하는 데 적합하다
    복잡한 레이아웃에서 더욱 강력한 제어를 할수 있다.</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[위클리 페이퍼 2주차] 시맨틱 태그]]></title>
            <link>https://velog.io/@no_sleep/%EC%9C%84%ED%81%B4%EB%A6%AC-%ED%8E%98%EC%9D%B4%ED%8D%BC-2%EC%A3%BC%EC%B0%A8-%EC%8B%9C%EB%A7%A8%ED%8B%B1-%ED%83%9C%EA%B7%B8-%EB%B0%98%EC%9D%91%ED%98%95-%EC%9B%B9-%ED%8E%98%EC%9D%B4%EC%A7%80</link>
            <guid>https://velog.io/@no_sleep/%EC%9C%84%ED%81%B4%EB%A6%AC-%ED%8E%98%EC%9D%B4%ED%8D%BC-2%EC%A3%BC%EC%B0%A8-%EC%8B%9C%EB%A7%A8%ED%8B%B1-%ED%83%9C%EA%B7%B8-%EB%B0%98%EC%9D%91%ED%98%95-%EC%9B%B9-%ED%8E%98%EC%9D%B4%EC%A7%80</guid>
            <pubDate>Fri, 06 Sep 2024 15:23:51 GMT</pubDate>
            <description><![CDATA[<h2 id="시맨틱-semantic이란">시맨틱 (Semantic)이란?</h2>
<pre><code>-semantic: 의미의, 의미론적인 
-웹 기술이 발전함에 방대한 웹 문서가 생기면서 우리는 원하는 정보를 찾을때 어려움을 겪고있다.
이에 따라서 태그의 내용은 정보로서 높은 가치를 포함하기위해 노력해야 한다.
-시맨틱 태그란 포함된 콘텐츠의 특정 의미를 정의하고 목적을 갖는 태그
-태그의 의미를 부여함으로서 웹사이트의 구조를 파악하기 쉽게 도와줘서 
 명시적이면서 직관적인 구조의 설계가 가능해진다. 
-시맨틱 태그를 사용함으로서 사람들은 코드를 읽는 것이 쉬워지고 컴퓨터 입장에서는 콘텐츠를 더 쉽게 이해할 수 있다. 
-궁긍적으로 SEO (검색엔진 최적화)성능과 코드를 읽는 사람의 가독성 향상, 유지보수 용이하다.



*SEO(Search Engine Optimization)의 약자로 검색 결과 페이지에서 
잘 노출 되도록 웹페이지의 태그와 링크 구조를 개선하여 오가닉트래픽(Organic Traffic)을 늘리는 방법론

</code></pre><p><img src="https://velog.velcdn.com/images/no_sleep/post/ba00a2a5-5520-41ef-a1a4-fd0cb5ca4839/image.png" alt=""></p>
<pre><code>
&lt;nav&gt;
같은 사이트 안의 문서나 다른 사이트로 연결하는 링크를 나타낸다.
&lt;section&gt;
기본 콘텐츠 내의 특정 주제 또는 부제목과 관련된 주제별 콘텐츠 그룹을 정의한다.
&lt;article&gt;
독립적인 글을 다루는 데 사용한다.
ex) 블로그 게시물, 뉴스 기사, 제품 리뷰 등 
&lt;aside&gt;
본문 내용 외에 주변에 표시되는 기타 내용들 필수요소가 아니기에 영향을 미치지 않는 것들을 넣을때 사용한다.</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[위클리 페이퍼 1주차] CSS의 Cascading]]></title>
            <link>https://velog.io/@no_sleep/CSS%EC%9D%98-Cascading</link>
            <guid>https://velog.io/@no_sleep/CSS%EC%9D%98-Cascading</guid>
            <pubDate>Fri, 30 Aug 2024 13:05:53 GMT</pubDate>
            <description><![CDATA[<h1 id="cascading-의미">cascading 의미</h1>
<p>CSS  : 
-Cascading style sheet의 약자로 웹 페이지의 디자인, 레이아웃, 스타일링을 정의하기 위해 사용하는 스타일     시트 언어.
-여기서 첫번째 단어 Cascading은 &#39;폭포, 위에서 아래로 쏟아지는&#39;이라는 단어 뜻을 가짐
-언어 특성 상 하나의 tag에 중첩해서 동일한 속성 적용되어야 할때 <strong>어떤 속성을 우선순위로 보여줄지</strong>를 표현</p>
<h1 id="우선순위">우선순위</h1>
<p>:3가지에 의해 결정된다.</p>
<p>1.중요도(Important)
2.명시도(Specificity)
3.코드 순서</p>
<h3 id="1중요도important">1.중요도(Important)</h3>
<p>스타일이 선언된 위치에 따라 우선순위 결정
기본적으로 프로그래머의 스타일 시트에 우선권을 부여하고 사용자와 브라우저의 스타일 시트 우선순위 낮음</p>
<p>[브라우저 CSS &lt; 사용자 CSS &lt; 프로그래머 CSS]</p>
<br>
<br>


<p>** !important</p>
<pre><code>동일 &lt;h1&gt; 이라고 가정시
&lt;head&gt;
  &lt;style&gt;
  h1 {
  color:blue !important;
  }

  h1 {
  color:red;
  }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt; cascading은 우선순위를 결정한다. &lt;/h1&gt;
&lt;/body&gt;

=&gt; 해당하는 h1 부분 글 색상 : blue 적용
=&gt; 의도적으로 중요도를 끌어올리지만 스타일 시트 내 정해진 우선순위를 깨버려 디버깅을 어렵게 하기에 좋지 않은 습관


</code></pre><h3 id="2명시도specificity">2.명시도(Specificity)</h3>
<p>선택자(selector)에 따라 우선순위 다름
포괄적일수록 우선순위가 낮아지고 명시적이고 구체적인 속성일수록 우선순위가 높아짐.</p>
<p>[태그 &lt; class &lt; id &lt; 인라인(style 내부 존재)]
<br>
*인라인은 하나의 태그 안에서만 적용되므로 가장 높은 순위</p>
<pre><code></code></pre><pre><code>&lt;a href=&quot;    &quot; style=&quot;color:gray&quot;&gt;  </code></pre><h3 id="3-코드순서">3. 코드순서</h3>
<p>같은 속성이 선언된다면 마지막에 나온 코드를 최우선으로 적용</p>
<pre><code>&lt;style&gt;
    p {
      color: blue;
      color: red;  
  &lt;/style&gt;
</code></pre><p>=&gt;글 색상 : red 적용</p>
]]></description>
        </item>
    </channel>
</rss>