<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>roong-z.log</title>
        <link>https://velog.io/</link>
        <description>개발하는 고양이 룽지 개룽지</description>
        <lastBuildDate>Tue, 23 Aug 2022 06:16:48 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>roong-z.log</title>
            <url>https://velog.velcdn.com/images/roong-z/profile/c8b61d5b-3dd3-4da8-8cc7-af1d6eb6730d/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. roong-z.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/roong-z" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Dom이란?(Document Object Model)]]></title>
            <link>https://velog.io/@roong-z/Dom%EC%9D%B4%EB%9E%80Document-Object-Model</link>
            <guid>https://velog.io/@roong-z/Dom%EC%9D%B4%EB%9E%80Document-Object-Model</guid>
            <pubDate>Tue, 23 Aug 2022 06:16:48 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="1문서-객체-모델dom이란">1.문서 객체 모델(DOM)이란?</h1>
<p>문서 객체 모델(DOM, Document Object Model)은 XML이나 HTML 문서에 접근하기 위한 일종의 인터페이스입니다.
이 객체 모델은 문서 내의 모든 요소를 정의하고, 각각의 요소에 접근하는 방법을 제공합니다.
<a href="http://www.tcpschool.com/javascript/js_dom_concept">출처</a>
<img src="https://velog.velcdn.com/images/roong-z/post/ef93ff98-0cb1-44a5-8a56-8e425622dba9/image.png" alt="">
쉽게 생각하면
자바스크립트에선 html언어를 직접 해석하고 조작할 수 &quot;없다&quot;
따라서
자바스크립트가 html을 해석 할 수 있는 문법으로 변환을 한다면?
(array나 object 형식으로 담아서 전달해주거나?)
원하는 자료들을 html에서 조작할 수 있을듯?
즉
자바스크립트가 HTML에 대한 정보들 (id, class, name, style, innerHTML 등)을
object 자료로 정리한걸 DOM이라고 한다.</p>
</blockquote>
<blockquote>
<h1 id="2-특징">2. 특징</h1>
</blockquote>
<ul>
<li>브라우저는 HTML 문서를 위에서 부터 읽으며 DOM을 생성</li>
<li>자바스크립트는 DOM이 생성된 경우에만 HTML을 변경할 수 있다.
   -혹은 html코드를 먼저 읽게하고 js를 실행하도록 하게 할 수 있다.
   &quot;addEventListener(&#39;DOMContentLoaded&#39;)&quot;같은걸로
   -요즘은 그냥 자바스크립트를 <body>태그 끝나기 전에 전부 작성하기 때문에 안해도..</li>
</ul>
<blockquote>
<h1 id="3-요약정리">3. 요약정리</h1>
<p>DOM은 HTML 문서에 대한 인터페이스 
첫째로 뷰 포트에 무엇을 렌더링 할지 결정하기 위해 사용되며,
둘째로는 페이지의 콘텐츠 및 구조, 그리고 스타일이 자바스크립트 프로그램에 의해 수정되기 위해 사용
DOM은 원본 HTML 문서 형태와 비슷하지만 몇 가지 차이점이 있습니다.</p>
</blockquote>
<ul>
<li>항상 유효한 HTML 형식입니다.</li>
<li>자바스크립트에 수정될 수 있는 동적 모델이어야 합니다.</li>
<li>가상 요소를 포함하지 않습니다. (Ex. ::after)</li>
<li>보이지 않는 요소를 포함합니다. (Ex. display: none)
<a href="https://wit.nts-corp.com/2019/02/14/5522">참고자료</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Webpack?(#4 Output&PlugIn)]]></title>
            <link>https://velog.io/@roong-z/Webpack4-OutputPlugIn</link>
            <guid>https://velog.io/@roong-z/Webpack4-OutputPlugIn</guid>
            <pubDate>Mon, 22 Aug 2022 11:17:36 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="1-output">1. Output</h1>
<p>여러개의 entry 파일을 한번에 output 하고 싶을때
<a href="https://webpack.js.org/configuration/output/">Output가이드</a></p>
</blockquote>
<ol>
<li><p>entry안에 이름을 붙여서 각각 지정해준다. </p>
<pre><code>entry: {
 index: &quot;./source/index.js&quot;,
 about: &quot;./source/about.js&quot;,
},</code></pre></li>
<li><p>output에는 각 이름이 들어갈 수 있는 함수를 넣어준다.</p>
<pre><code>output: {
 path: path.resolve(__dirname, &quot;public&quot;),
 filename: &quot;[name]_bundle.js&quot;,
},</code></pre></li>
<li><p>npx webpack &gt;&gt; 각 파일이 번들링 된것을 볼 수 있다.</p>
</li>
</ol>
<blockquote>
<h1 id="2-plug-in">2. Plug In</h1>
</blockquote>
<h4 id="loader는-가지고있는-모듈들을-최종적인-output으로-만들어가는-과정에서-사용">loader는 가지고있는 모듈들을 최종적인 output으로 만들어가는 과정에서 사용</h4>
<p>규정되어있는 형태</p>
<h4 id="plugin은-만들어진-최종결과물output을-변형하는것">plugin은 만들어진 최종결과물(output)을 변형하는것</h4>
<p>복합적+자유로운 형태
<a href="https://webpack.js.org/plugins/">PlugIn가이드</a></p>
<blockquote>
<h1 id="2-1-htmlwebpackplugin">2-1 HtmlWebpackPlugin</h1>
<p>여러 html 파일들을 탬플릿화 시키고 싶거나,
의존성을 가지고 있는 js파일들을 직접 삽입시켜주고 있으니
html파일들을 자동으로 만들어 주고 싶거나,
사용하는 plugin
<img src="https://velog.velcdn.com/images/roong-z/post/0782ac80-10fc-47a4-8123-6d83da064472/image.png" alt="">
<img src="https://velog.velcdn.com/images/roong-z/post/c2738238-b830-4856-a3b0-56395af3b99c/image.png" alt=""></p>
</blockquote>
<pre><code>&lt;!--설치--&gt;
npm install -D html-webpack-plugin

&lt;!--webpack.config.js파일에 삽입--&gt;
plugins: [new HtmlWebpackPlugin()],

&lt;!--plugins 안에 인자값 넣어줘야함 Options참고--&gt;
plugins: [
new HtmlWebpackPlugin({
  template: &quot;./source/index.html&quot;,
  filename: &quot;./index.html&quot;,
}),],

&lt;!--&quot;chunks&quot; 활용 Options참고--&gt;
plugins: [
new HtmlWebpackPlugin({
  template: &quot;./source/index.html&quot;,
  filename: &quot;./index.html&quot;,
  chunks: [&quot;index&quot;],
}),
new HtmlWebpackPlugin({
  template: &quot;./source/about.html&quot;,
  filename: &quot;./about.html&quot;,
  chunks: [&quot;about&quot;],
}),],

&lt;!--기존 public디렉토리에 있는 파일 지우고 새로 생성(Mac)--&gt;
rm ./public/*.*; npx webpack

&lt;!--꿀팁 : 변경사항있을때 감지하면서 자동으로 컴파일 해줌--&gt;
npx webpack --watch</code></pre><p><a href="https://www.youtube.com/watch?v=dt2xU71pX88&amp;list=PLuHgQVnccGMChcT9IKopFDoAIoTA-03DA&amp;index=7">출처: 생활코딩</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Webpack?(#3 Mode&Loader)]]></title>
            <link>https://velog.io/@roong-z/Webpack3-ModeLoader</link>
            <guid>https://velog.io/@roong-z/Webpack3-ModeLoader</guid>
            <pubDate>Mon, 22 Aug 2022 10:41:37 GMT</pubDate>
            <description><![CDATA[<p><a href="https://webpack.js.org/configuration/mode/">참고사이트 : webpack</a></p>
<blockquote>
<h1 id="1-mode">1. Mode?</h1>
<p><img src="https://velog.velcdn.com/images/roong-z/post/75fb8224-15e5-4465-af4f-498b61c89931/image.png" alt=""></p>
</blockquote>
<ul>
<li>기본값모드(개발자모드) development</li>
<li>배포되는모드 production</li>
<li>아무것도 세팅하지않은 모드 none
방향성에 따라 모드를 선택할 필요가 있다.</li>
</ul>
<pre><code>&lt;!--webpack.config.js 파일 안에서 모드 선택 가능--&gt;
module.exports = {
mode: &quot;development&quot;
}</code></pre><p>webpack.config.prod.js 같이 배포용 파일을 하나 더 만들어서
개발용,배포용 선택해서 작업 가능</p>
<blockquote>
<h1 id="2-loader">2. Loader?</h1>
<p><em>로더는 모듈의 소스 코드에서 적용되는 변환이다. import나 로드를 통해 파일들을 전처리 할 수 있다. 그러므로 로더는 다른 빌드 툴들의 &quot;tasks&quot; 와 유사하며, 프론트엔드 빌드 과정을 처리하는 강력한 방법을 제공한다. 로더는 (TypeScript 같은) 다른 언어를 자바스크립트로 변경하거나 인라인 이미지를 data URL로 변경할 수 있다. 심지어 로더는 CSS파일을 자바스크립트 모듈에서 직접 import 할 수 있는 방법도 제공한다. 
출처: <a href="https://ibrahimovic.tistory.com/52">https://ibrahimovic.tistory.com/52</a> [Web Standard:티스토리]</em>
<br>
여러가지 파일들을 번들링해서 간단하게 만들어주는것 : 번들러
웹팩은 js파일뿐만이 아닌 css나 여러 파일들을 번들링 해주는 여러 loader가 존재</p>
</blockquote>
<blockquote>
<h3 id="css-loader--style-loader">css-loader / style-loader</h3>
<p><img src="https://velog.velcdn.com/images/roong-z/post/3c218841-8430-454a-9f55-518746c1f34f/image.png" alt=""></p>
</blockquote>
<ul>
<li><p>css-loader : css파일을 읽어와서 webpack으로 가져오는 loader</p>
</li>
<li><p>style-loader : 가져온 css코드를 웹페이지 안에 style태그안에 주입하는 loader
뒤쪽에 있는 loader가 먼저 동작함( chaining )
<a href="https://webpack.js.org/loaders/">수많은 로더들</a></p>
  <!--css-loader/style-loader설치-->
<p>  npm install -D css-loader style-loader</p>
  <!--webpack.config.js 모듈추가
  style-loader와 css-loader 순서에 주의-->
<p>  module: {
  rules: [</p>
<pre><code>{
  test: /\.css$/,
  use: [&quot;style-loader&quot;, &quot;css-loader&quot;],
},</code></pre><p>  ],}</p>
  <!--index.js 파일에 import
  주의! 번들링 할떄 index.js 파일과 같은 폴더로 이동-->
<p>  import css from &quot;./style.css&quot;;</p>
</li>
</ul>
<p><a href="https://www.youtube.com/watch?v=yO_nc7A2qpo&amp;list=PLuHgQVnccGMChcT9IKopFDoAIoTA-03DA&amp;index=5">출처 : 생활코딩</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Webpack?(#2 설치 및 config)]]></title>
            <link>https://velog.io/@roong-z/Webpack2</link>
            <guid>https://velog.io/@roong-z/Webpack2</guid>
            <pubDate>Mon, 22 Aug 2022 10:07:51 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="1-기본적인-설치를-위해서">1. 기본적인 설치를 위해서</h1>
<p>웹팩을 설치하기 위해서
해당 프로젝트를 node.js의 패키지 프로젝트로 만들어보자
npm 설치
<img src="https://velog.velcdn.com/images/roong-z/post/c4dcc869-e9d2-445b-922d-68d9877d1376/image.png" alt=""></p>
</blockquote>
<pre><code>&lt;!--현재 디렉토리를 node.js의 프로젝트 폴더로 선언--&gt;
&lt;!--package.js 설치됨. 중요--&gt;
npm init

&lt;!--&quot;-D&quot;는 devDependencies 에 설치되는것 = &quot;--save-dev&quot;
개발을 하기위한 옵션을 설치할때 사용 --&gt;
npm install -D webpack webpack-cli

&lt;!--Webpack으로 
source폴더의 index.js 를 entry(시작점)으로 삼아서 
public폴더의 index_bundel.js의 파일이름으로
output(출력) 하고싶을때--&gt;
npx webpack --entry ./source/index.js --output-path ./public/ --output-filename index_bundle.js

&lt;!--그냥 &quot;--output&quot; 으로 했을땐 오류가 났었다. 버전이슈인듯--&gt;</code></pre><p>파일 생성이 된걸 확인해 보자
추가로 출력할 html 파일에서 script 안에 index_bundle.js를 불러와주면 완성!</p>
<blockquote>
<h1 id="2-webpack의-흐름">2. Webpack의 흐름</h1>
<p><a href="https://www.youtube.com/watch?v=gj9RKSXW_vc&amp;list=PLuHgQVnccGMChcT9IKopFDoAIoTA-03DA&amp;index=4">출처 : 생활코딩</a>
<img src="https://velog.velcdn.com/images/roong-z/post/7afc1e0d-02d8-43f4-b7c0-8be8aad4c7b5/image.png" alt="">
왼쪽에 있는 여러가지 자원들(실제 코딩할때 만들어지는) : INPUT
을 어떻게 가공해서(Webpack으로) : PROCESS
단순한 형태의 몇몇파일로 만들어지는 : OUTPUT</p>
</blockquote>
<blockquote>
<h1 id="3-webpackconfigjs">3. Webpack.config.js</h1>
<p><a href="https://webpack.js.org/">참고사이트:webpack</a>
<img src="https://velog.velcdn.com/images/roong-z/post/b58e5dce-cbfb-4aef-99ee-b29b3c0dea7e/image.png" alt=""></p>
</blockquote>
<p>webpack.config.js 파일을 만들어서 관리해보자</p>
<pre><code>const path = require(&quot;path&quot;);

module.exports = {
  entry: &quot;./source/index.js&quot;,
  output: {
    path: path.resolve(__dirname, &quot;public&quot;),
    filename: &quot;index_bundle.js&quot;,
  },
};</code></pre><p>webpack.config.js 파일안에 위의 내용은</p>
<pre><code>npx webpack --entry ./source/index.js --output-path ./public/ --output-filename index_bundle.js</code></pre><p>터미널에서의 해당 명령어와 동일하다.</p>
<pre><code>&lt;!--webpack.config.js 실행--&gt;
npx webpack --config webpack.config.js
&lt;!--파일 이름이 webpack.config.js라면 --config~~생략가능--&gt;
npx webpack</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Webpack?(#1 개념과 왜 써야하는지)]]></title>
            <link>https://velog.io/@roong-z/Webpack1-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%99%9C-%EC%8D%A8%EC%95%BC%ED%95%98%EB%8A%94%EC%A7%80</link>
            <guid>https://velog.io/@roong-z/Webpack1-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%99%9C-%EC%8D%A8%EC%95%BC%ED%95%98%EB%8A%94%EC%A7%80</guid>
            <pubDate>Mon, 22 Aug 2022 09:07:39 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h1 id="1-webpack">1. Webpack?</h1>
<p><a href="https://webpack.js.org/">출처:webpack공식</a>
<img src="https://velog.velcdn.com/images/roong-z/post/343a6a9d-2d82-4ac4-9b4e-0351ca849710/image.png" alt="">
웹팩은 무엇일까?
그전에 Bundler는 무엇일까?</p>
</blockquote>
<blockquote>
<h1 id="2-bundler">2. Bundler?</h1>
<p>(Bundler없이)완성된 웹사이트를 로딩을 하면 만드는데 필요했던 js나 이미지 등 여러 파일들을 전부 하나씩 로드를 해온다..
즉, 서버와의 로딩이 많을 수록 앱은 느리게 작동
추가로 수많은 js파일들이 서로같은 변수나 함수의 이름을 사용할때 ! 충돌!
요런 문제들을 해결하기 위해 등장한것이 바로 Bundler!
(여러개의 파일들을 묶어주는 도구)</p>
<blockquote>
<ul>
<li>Webpack</li>
</ul>
</blockquote>
</blockquote>
<ul>
<li>Broserify</li>
<li>Parcel</li>
<li>Rollup
등등</li>
</ul>
<blockquote>
<h1 id="다시-webpack">다시 Webpack!</h1>
<p>그중 웹팩을 공부해볼것이고, 웹팩을 이용하면 하나의 js파일에 js파일 뿐만이 아니라, css나 여러 이미지 등 모든걸 하나로 합치고! 자동화 할 수 있다.
(믹서기..?)</p>
</blockquote>
<blockquote>
<h1 id="3-module">3. Module?</h1>
<p><a href="https://ko.javascript.info/modules-intro">출처:js.info</a>
<em>개발하는 애플리케이션의 크기가 커지면 언젠간 파일을 여러 개로 분리해야 하는 시점이 옵니다. 이때 분리된 파일 각각을 &#39;모듈(module)&#39;이라고 부르는데, 모듈은 대개 클래스 하나 혹은 특정한 목적을 가진 복수의 함수로 구성된 라이브러리 하나로 구성됩니다.</em>
<br>
즉 모듈이란? 자바스크립트를 이용하여 만들게 되는 app의 규모가 커지게되면서 여러 충돌도 일어나게 되었고
즉 파일을 분할해야할 필요성이 생기며 탄생한 분할파일 그자체이다.
또한 모듈은 대개 클래스 하나 혹은 특정 목적을 가진 복수의 함수로 구성된 라이브러리이다.
추가+ JavaScript에서의 모듈이란, ES2015(ES6) 이후부터 제공하는 import / export 키워드를 통해 스크립트의 변수나 함수를 타 스크립트에서 이용할 수 있도록 기능을 공유하는 것이다.</p>
</blockquote>
<p>module을 이용한 번들링
hello.js 와 world.js는 export 해주었다.</p>
<pre><code>&lt;html&gt;
  &lt;head&gt; &lt;/head&gt;
  &lt;body&gt;
    &lt;h1&gt;Hello, Webpack!&lt;/h1&gt;
    &lt;div id=&quot;root&quot;&gt;&lt;/div&gt;
    &lt;script type=&quot;module&quot;&gt;
      import hello_word from &quot;./source/hello.js&quot;;
      import world_word from &quot;./source/world.js&quot;;
      document.querySelector(&quot;#root&quot;).innerHTML = hello_word + &quot; &quot; + world_word;
    &lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><blockquote>
<p>🛠단점 
여러 파일을 다 받아와야하니 파일 개수가 많아지면...
네트워크 커넥션이 많아질수록 사용자,제공자 입장에서 더많은 컴퓨팅 파워 사용
서비스 이용자 입장 : 서비스 속도 down 
서비스 제공자입장 : 컴퓨터 자원 up &gt;&gt; money up
<img src="https://velog.velcdn.com/images/roong-z/post/a729789a-0475-4695-894d-b59136ec601f/image.png" alt=""></p>
</blockquote>
<blockquote>
<h1 id="4-webpack을-사용하면">4. Webpack을 사용하면?</h1>
</blockquote>
<h3 id="refactoring">Refactoring</h3>
<p> <em>리팩터링(refactoring)은 소프트웨어 공학에서 &#39;결과의 변경 없이 코드의 구조를 재조정함&#39;을 뜻한다. 주로 가독성을 높이고 유지보수를 편하게 한다. 버그를 없애거나 새로운 기능을 추가하는 행위는 아니다. 사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위이다.</em>
 <br>
 <em>리팩터링의 잠재적인 목표는 소프트웨어의 설계, 구조 및 구현을 개선하는 동시에 소프트웨어의 기능을 보존하는 것이다. 리펙터링은 코드의 가독성을 향상시키고 복잡성을 감소시키는 효과를 가지며, 이러한 이점은 소스 코드의 유지 보수성을 개선하고 확장성을 개선하기 위해 더 단순하고, 깔끔하거나, 표현력이 뛰어난 내부 아키텍처 또는 객체 모델을 만들 수 있게 한다. 그리고 소프트웨어 엔지니어는 더 빠르게 수행되거나 더 적은 메모리를 사용하는 프로그램을 작성해야 하는 지속적인 과제에 직면해 있기에 성능 향상이 리팩터링의 또다른 목표가 된다.</em></p>
<blockquote>
<p>웹팩을 사용하면 얻을 수 있는 효과는?
구동되는 방법은 그대로 유지하면서 내부의 코드를 더욱 효율적으로 바꿀 수 있다.
코드의 모습은 유지하되 구형 브라우저에서 사용가능
여러개의 파일을 하나로 묶어주는 bundelr기능</p>
</blockquote>
<p><a href="https://www.youtube.com/watch?v=1V6XiP16D28&amp;list=PLuHgQVnccGMChcT9IKopFDoAIoTA-03DA&amp;index=2">출처 : 생활코딩</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[(Mac버전)git에 대해 알아보자 A-Z (git의 branch 전략들)]]></title>
            <link>https://velog.io/@roong-z/Mac%EB%B2%84%EC%A0%84git%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-A-Z-git%EC%9D%98-branch-%EC%A0%84%EB%9E%B5%EB%93%A4</link>
            <guid>https://velog.io/@roong-z/Mac%EB%B2%84%EC%A0%84git%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-A-Z-git%EC%9D%98-branch-%EC%A0%84%EB%9E%B5%EB%93%A4</guid>
            <pubDate>Mon, 15 Aug 2022 07:48:21 GMT</pubDate>
            <description><![CDATA[<p><a href="https://codingapple.com/">출처 : 코딩애플</a></p>
<h1 id="1-why">1. Why?</h1>
<blockquote>
<p><img src="https://velog.velcdn.com/images/roong-z/post/40758e1f-ac8f-46f1-960e-11222f866fc8/image.png" alt="">
협업시 마구잡이로 브랜치를 만들어 쓸 경우 가시성이 떨어지고 꼬일 가능성이 높다.</p>
</blockquote>
<h1 id="2-1-how-gitflow">2-1. How? (GitFlow)</h1>
<blockquote>
<p>GitFlow 전략은 크게 5개의 브랜치로 나눠서 작업할 수 있다.<br></p>
</blockquote>
<ul>
<li>main</li>
<li>develop (개발용 branch)</li>
<li>feature (develop에 기능추가 branch)</li>
<li>release (develop branch를 main branch에 합치기 전에 최종 테스트용)</li>
<li>hotfix (main branch 버그 해결용)<h2 id="step1br">Step.1<br></h2>
main 브랜치의 사본을 develop브랜치로 만들어 개발은 
develop브랜치에서만 할 수 있게 한다. (main 브랜치 날라가면..어휴..)
<img src="https://velog.velcdn.com/images/roong-z/post/438fc434-644d-482c-9df9-501186fb533e/image.png" alt=""><h2 id="step2br">Step.2<br></h2>
신기능은 feature/뭐뭐~ 로 나눠서 기능개발하고 develop에 합친다.
<img src="https://velog.velcdn.com/images/roong-z/post/e7ee3571-01b5-4e46-a3cd-cff68893d3a2/image.png" alt=""><h2 id="step3br">Step.3<br></h2>
기능들이 완성된것 같으면 main에다 바로 합치기전(상남자면 합쳐도된다고 코딩애플센세님께서 말씀하셨지만..) 유저 테스트를 받거나 여러 버그를 대처한다.
출시 준비 단계 / 완성되면 main에다 merge한다.
<img src="https://velog.velcdn.com/images/roong-z/post/570f307c-8aab-4a1a-b584-63d52acb6a8a/image.png" alt=""><h2 id="step4br">Step.4<br></h2>
배포 이후 버그를 발견하였을때, main에서 branch해서 버그 수정 가능</li>
<li>수정이 완료되면 main 브랜치에 직접 merge</li>
<li>당연히 develop 브랜치에도 merge 필수 
<img src="https://velog.velcdn.com/images/roong-z/post/6da6b3d7-9797-4981-8355-d567dd8f4f8f/image.png" alt=""><h2 id="fin">Fin.</h2>
<img src="https://velog.velcdn.com/images/roong-z/post/5a750918-179e-40b5-bc04-6dbb6ce61781/image.png" alt="">
특징 
출시된 버전의 안정성이 중요한 프로그램들, 
아직 뼈대가 확실하지 않아 연구식으로 개발하는 프로그램들은 git flow가 적절</li>
</ul>
<h1 id="2-2howtrunk-based">2-2.How?(Trunk-Based)</h1>
<blockquote>
<p>Trunk-Based 전략은?
main 브랜치 하나만 운영 하면서 수정이 필요할때마다 브랜치를 메인에서 뽑아다 수정후 main으로 merge 해주는 방식 = github flow랑 유사
<img src="https://velog.velcdn.com/images/roong-z/post/59042ba6-7d9b-48a4-9d42-949f21067c67/image.png" alt=""></p>
</blockquote>
<ul>
<li>브랜치 마다 작명을 잘해주는것이 좋다.</li>
<li>브랜치의 기능을 main에다 merge 완료하면 브랜치 삭제가능</li>
<li>main 브랜치의 수정본을 필요할때마다 유저들에게 배포<br>
특징
코드를 한 브랜치에서만 관리하기때문에 편리함
main 브랜치에서 실수하면 큰일나기 때문에 빡세게 테스트 필요


</li>
</ul>
<p><a href="https://codingapple.com/">출처 : 코딩애플</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[(Mac버전)git에 대해 알아보자 A-Z
#Git hub 사용법]]></title>
            <link>https://velog.io/@roong-z/Mac%EB%B2%84%EC%A0%84git%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-A-ZGit-hub-%EC%82%AC%EC%9A%A9%EB%B2%95</link>
            <guid>https://velog.io/@roong-z/Mac%EB%B2%84%EC%A0%84git%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-A-ZGit-hub-%EC%82%AC%EC%9A%A9%EB%B2%95</guid>
            <pubDate>Mon, 15 Aug 2022 06:46:35 GMT</pubDate>
            <description><![CDATA[<p><a href="https://codingapple.com/">출처 : 코딩애플</a></p>
<h1 id="1-git-hub란repository">1. Git hub란?(+repository)</h1>
<blockquote>
<p><img src="https://velog.velcdn.com/images/roong-z/post/8f02939a-b521-4f3e-9fcc-1d2d0f07c048/image.png" alt="">
로컬에서 작업할때는 .git 같은 폴더에 git 파일들이 저장되지만
(컴퓨터 날라가면 같이 날라가겠..죠??)
git hub에 repository를 &quot;원격&quot;으로 &quot;저장&quot;할 수 있게 제공해주는 &quot;hub&quot;
즉 로컬에서의 repository 는 .git이고
git hub에선 repository를 생성하여 &quot;원격저장소&quot;로 활용 할 수 있다.</p>
</blockquote>
<h1 id="2-repository-생성연결">2. Repository 생성,연결</h1>
<blockquote>
<p><img src="https://velog.velcdn.com/images/roong-z/post/22f5db7e-bd9c-4e3f-8a02-85e3c2fe5f93/image.png" alt="">
<img src="https://velog.velcdn.com/images/roong-z/post/a5a8ab59-6848-40c4-8aaa-9151f2bd027d/image.png" alt="">
<img src="https://velog.velcdn.com/images/roong-z/post/e154cddf-634e-4026-b6bf-405dd338d024/image.png" alt=""></p>
</blockquote>
<p>생성 후 작업폴더로 이동
깃헙에 만든 원격저장소(repository)연결하기</p>
<pre><code>&lt;!--처음 실행--&gt;
git init
&lt;!--commit--&gt;
git commit -m 커밋메세지
&lt;!--메인 브랜치 생성(main or master)--&gt;
git branch master
&lt;!--git hub에서 만든 repository 연결--&gt;
git remote add origin https://~~~
&lt;!--메인 브랜치 push로 최신화--&gt;
git push -u origin master</code></pre><p>git에서 변수생성가능(길고 복잡한것=주소 를 변수에 저장해서 사용하자)</p>
<pre><code>git remote add 변수명 (변수에 담을것=주소)</code></pre><p>git push &quot;-u&quot; 를 사용하면 주소를 기억하라는 뜻이기에 한번 사용하면
그냥 git push로 사용해도 바로 push 가능</p>
<h1 id="3-1-협업하기git-clonepull">3-1. 협업하기(git clone,pull)</h1>
<p>단순히 깃헙에서 .zip파일로 받아오는 방법도 있지만,git clone을 사용하면 좀더 간편하다.
추가로 세팅에서 공동협업자(collaborators)로 등록을 해줘야 push가능
    <!--복사할 폴더주소에서 터미널로-->
    git clone 복사할저장소의 주소</p>
<blockquote>
<p>팀원이 push를 한 상태라면, 본인이 또 push를 바로 할 수 없다.
<img src="https://velog.velcdn.com/images/roong-z/post/70387ae8-5577-43b1-b69a-0ea938d036b4/image.png" alt=""></p>
</blockquote>
<p>해당 상황이라면 git pull로 팀원이 올려둔 상황을 먼저 맞춰서 받아줘야한다.
<em>원격 저장소 최신 내용이 로컬 저장소에 있을때만 git push가능</em></p>
<pre><code>git pull (origin=주소/-u해놨으면 생략가능) 특정 브랜치명(특정 브랜치만 가져올 수 있음)

&lt;!--원격저장소 신규 commit 가져오기--&gt;
git fetch

git pull = git fetch+ git merge동시에 해주는 명령어</code></pre><h1 id="3-2-브랜치로-협업하기pull-request">3-2. 브랜치로 협업하기(pull request)</h1>
<blockquote>
<p><img src="https://velog.velcdn.com/images/roong-z/post/caed3e16-da5a-4592-ac06-e702282a33cd/image.png" alt="">
깃헙 온라인에서도 브랜치 생성 가능</p>
</blockquote>
<pre><code>    &lt;!--로컬에서 브랜치 생성--&gt;
    git branch 브랜치명

    &lt;!--브랜치 이동--&gt;
    git switch 브랜치명

    &lt;!--브랜치에서 작업한내용들 커밋하고 푸쉬할때--&gt;
    git push origin 올릴브랜치명</code></pre><blockquote>
<p><img src="https://velog.velcdn.com/images/roong-z/post/3efdd7b9-d4fb-4fc5-b263-04065bb9fed3/image.png" alt="">
git hub에서 브랜치가 push한거 볼 수 있음
(브랜치 이름 안겹치게 주의!)
브랜치를 merge하기전에 의견을 충분히 나누고 합쳐야하기때문에,
git hub온라인에서 다같이 의견조율 후 merge를 한다.</p>
</blockquote>
<blockquote>
<p>pull request = merge 하는곳
<img src="https://velog.velcdn.com/images/roong-z/post/3fc97a9f-9639-4499-96fd-2787758b9491/image.png" alt="">
어떤 브랜치를 어디로 합칠것인지 선택가능
<img src="https://velog.velcdn.com/images/roong-z/post/f8f9c038-bb56-41e3-8c66-80f293cf92c0/image.png" alt="">
의견(코멘트)를 남길 수 있고, 어떤 브랜치방식으로 합칠지 정할 수 있다.
<img src="https://velog.velcdn.com/images/roong-z/post/a4dc7310-d27e-4945-a62b-9c4b7cc2136a/image.png" alt=""></p>
</blockquote>
<blockquote>
<p>추가*conflict(충돌) 날때 vscode내에서 보면 좀 더 수정하기 편한듯요
<img src="https://velog.velcdn.com/images/roong-z/post/df7272f5-3abc-44ff-9acc-c218b7780614/image.png" alt=""></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[(Mac버전)git에 대해 알아보자 A-Z
(설치부터 여러 명령어까지)]]></title>
            <link>https://velog.io/@roong-z/Mac%EB%B2%84%EC%A0%84git%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-A-Z</link>
            <guid>https://velog.io/@roong-z/Mac%EB%B2%84%EC%A0%84git%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90-A-Z</guid>
            <pubDate>Sat, 13 Aug 2022 13:18:51 GMT</pubDate>
            <description><![CDATA[<p><a href="https://codingapple.com/">출처 : 코딩애플</a></p>
<h1 id="1-mac-os-git-설치법">1. mac os git 설치법</h1>
<p>homebrew 설치</p>
<blockquote>
<p>🍺 homebrew
<a href="https://brew.sh/index_ko">https://brew.sh/index_ko</a>
<img src="https://velog.velcdn.com/images/roong-z/post/84c09557-1d6d-4806-8438-9c622d6076b4/image.png" alt=""></p>
</blockquote>
<p>homebrew가 설치되었다면</p>
<pre><code>brew install git</code></pre><p>설치되었는지+버전확인</p>
<pre><code>git --version</code></pre><h1 id="2-git-add-commit">2. git add, commit</h1>
<pre><code>git add 파일명
&lt;!--해당 파일을 스테이징상태로 만든다.(커밋전단계)--&gt;

git add .
&lt;!--모든 파일을 스테이징상태로 만든다.--&gt;

git commit -m &#39;작명&#39;</code></pre><p>🤔스테이징이란?
현재 작업폴더에서 repository(저장소)로 이동하기 전에 대기장소</p>
<h1 id="3-상태-확인">3. 상태 확인</h1>
<pre><code>git status</code></pre><p>현재 작업중인 branch 확인가능
사실 VScode 사용하면 <em>gitLens*나 *gitGraph</em> 쓰면 더 편함</p>
<pre><code>git log --all --oneline --graph</code></pre><p>커밋내역 그래프로 확인가능 (이역시 <em>gitGrapch</em>가 좀더 보기 편한듯)</p>
<pre><code>git diff 
&lt;!--commit번호끼리 비교 가능--&gt;
git difftool 
&lt;!--commit번호끼리 비교 가능--&gt;</code></pre><p>커밋끼리 비교가능</p>
<h1 id="4-branch">4. branch</h1>
<pre><code>git branch 브랜치이름
&lt;!--브랜치 생성--&gt;
git switch 브랜치이름
&lt;!--해당 브랜치로 이동--&gt;
git branch -d 브랜치이름
&lt;!--merge완료된 브랜치 삭제--&gt;
git branch -D 브랜치이름
&lt;!--merge안된 브랜치도 그냥 삭제해버리기--&gt;</code></pre><p>브랜치는 기존코드의 복사본
<img src="https://velog.velcdn.com/images/roong-z/post/dfc34828-2a41-40f4-a081-0af3c4e8a76b/image.png" alt=""></p>
<h1 id="5-merge">5. merge</h1>
<pre><code>&lt;!--합치고 싶은 브랜치에서 작업--&gt;
git merge 합칠브랜치이름

&lt;!--rebase and merge--&gt;
git switch 새로운브랜치
git rebase main
git switch main
git merge 새로운브랜치

&lt;!--squash and merge--&gt;
git switch master
git merge --squash 브랜치명
git commit -m 작명</code></pre><p>브랜치끼리 수정된 파일이 겹치지 않으면 그대로 성고
겹치는 파일이 있으면 충돌(conflict)발생
충돌된 파일에서 적용할 코드를 선택하여 저장하면 브랜치 완료</p>
<h4 id="merge의-여러종류들">merge의 여러종류들</h4>
<ul>
<li>3-way merge</li>
<li>fast-forward merge</li>
<li>rebase and merge</li>
<li>squash and merge</li>
</ul>
<h3 id="p-style--colordarkseagreen3-way-mergep"><p style = "color:DarkSeaGreen">3-way merge<p></h3>
<p>각 브랜치에 신규 커밋이 1회 이상 있을때 두 브랜치를 합쳐 새로운 커밋을 생성하는 merge의 기본 작동방식
<img src="https://velog.velcdn.com/images/roong-z/post/66bf3538-4f2b-419b-b1cd-4babaaea5932/image.png" alt=""></p>
<h3 id="p-style--colordodgerbluefast-forward-mergep"><p style = "color:DodgerBlue">fast-forward merge<p></h3>
<p>새로운 브랜치에만 커밋이 있고 기존 브랜치에 커밋이 없어서 새로운 브랜치가 메인이 되는 브랜치
<img src="https://velog.velcdn.com/images/roong-z/post/63c637bd-8cc7-47d4-b954-3560a0f8c205/image.png" alt=""></p>
<h3 id="p-style--colordarkvioletrebase-and-mergep"><p style = "color:DarkViolet">rebase and merge<p></h3>
<p>브랜치의 시작점을 다른 커밋으로 옮겨주는것.
3-way merge를 강제로 fast-forward merge로 하고싶을때
(간단하고 짧은 브랜치들을 rebase하면 깔끔)
(conflict 주의)
<img src="https://velog.velcdn.com/images/roong-z/post/da7cc4f4-74ac-4e04-bdc7-266cdd395326/image.png" alt=""></p>
<h3 id="p-style--colordarkslategraysquash-and-mergep"><p style = "color:DarkSlateGray">squash and merge<p></h3>
<p>3-way merge는 양이 많아지면 복잡하고 더러워보임
(git log에 3-way merge된 브랜치들의 commit 내역도 같이 출력)
그래프로 보면 연결된 선을 끊어버리고 메인에서 이어지는걸로 보임
rebase는 시작점 자체를 다른 브랜치에서 이어지도록 하게함
  <img src="https://velog.velcdn.com/images/roong-z/post/f312dbb8-de05-46b8-9ced-777d76cbcf14/image.png" alt=""></p>
<h1 id="6--실수를-되돌리고-싶을때">6.  실수를 되돌리고 싶을때</h1>
<pre><code>    &lt;!--파일의 상태를 마지막 commit으로 돌리고 싶을때--&gt;
    git restore 파일명

    &lt;!--입력한 commit아이디 시점으로 복구--&gt;
    git restore --source 커밋아이디 파일명

    &lt;!--특정 파일을 staging 취소--&gt;
    git restore --staged 파일명

    &lt;!--commit 취소하는법(여러개 취소가능)--&gt;
    git revert 커밋아이디

    &lt;!--최근 commit취소하는법--&gt;
    git revert HEAD

    &lt;!--과거로 모든걸 되돌리기
    !!협업시 사용주의 요망!!--&gt;
    git reset --hard 커밋아이디

    &lt;!--reset인데 변동사항 지우지 말고 스테이징해놓기--&gt;
    git reset --soft 커밋아이디

    &lt;!--reset인데 변동사항 지우지 말고 스테이징 X--&gt;
    git reset --mixed 커밋아이디

    &lt;!--최근 작성한 코드가 마음에 안들어서 보관함으로 보내기--&gt;
      git stash

      &lt;!--stash로 보관중인 리스트 확인하기--&gt;
      git stash list

      &lt;!--stash 할때 메모 작성가능--&gt;
      git stash save &#39;메모&#39;

      &lt;!--stash 불러오기(가장 최근것부터) 지정가능--&gt;
      git stash pop

      &lt;!--stash 삭제하기--&gt;
      git stash drop 스태쉬번호
      &lt;!--stash 전부삭제하기--&gt;
      git stash clear 

</code></pre><p>  <a href="https://codingapple.com/">출처 : 코딩애플</a></p>
]]></description>
        </item>
    </channel>
</rss>