<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dubi_ju.log</title>
        <link>https://velog.io/</link>
        <description>Backend Developer</description>
        <lastBuildDate>Mon, 21 Nov 2022 05:55:24 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>dubi_ju.log</title>
            <url>https://velog.velcdn.com/images/ju_haze/profile/a8fd3702-b892-4729-9ac5-5b2b9b38ed06/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. dubi_ju.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/ju_haze" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[자료구조 - Stack, Queue]]></title>
            <link>https://velog.io/@ju_haze/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%8A%A4%ED%83%9D%EA%B3%BC-%ED%81%90</link>
            <guid>https://velog.io/@ju_haze/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%8A%A4%ED%83%9D%EA%B3%BC-%ED%81%90</guid>
            <pubDate>Mon, 21 Nov 2022 05:55:24 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/ju_haze/post/b5c0d15e-d38f-4440-9540-f66a2faa4e96/image.png" alt=""></p>
<h1 id="자료구조">자료구조</h1>
<blockquote>
<p><strong>여러 데이터의 묶음을 저장하고, 사용하는 방법을 정의하는 것</strong></p>
</blockquote>
<ul>
<li><strong>특정한 상황에 놓인 문제를 해결</strong>하는데 특화</li>
</ul>
<p><strong><code>data</code></strong>: 문자, 숫자, 소리, 그림, 영상 등 실생활을 구성하고 있는 모든 값</p>
<ul>
<li>분석하고 정리하여 활용해야 의미를 가짐</li>
<li><strong>필요에 따라 데이터의 특징을 잘 파악(분석)하여 정리하고, 활용</strong>
  ex) 번호를 다 알지 않아도, 이름을 아는 것만으로 전화를 할 수 있는 방법은 무엇이 있을까?
웹 브라우저에서 뒤로 / 앞으로 가는 방법은 무엇이 있을까?
게임 매칭을 잡을 때, 수많은 사람을 통제하는 방법엔 무엇이 있을까? ...등등</li>
</ul>
<h1 id="stack-스택">Stack (스택)</h1>
<blockquote>
<p>데이터를 <strong>순서대로</strong> 쌓는 구조
<img src="https://velog.velcdn.com/images/ju_haze/post/f7eef15f-c515-4acb-9bc1-273de9593833/image.png" alt=""></p>
</blockquote>
<ol>
<li><strong><code>LIFO</code></strong>: Last In First Out ( == <strong><code>FILO</code></strong>: First In Last Out)<ul>
<li>먼저 들어간 데이터는 제일 나중에 나오는 *<em>후입선출 구조 *</em></li>
</ul>
</li>
<li>데이터는 하나씩 넣고 뺄 수 있다.<ul>
<li><strong>데이터 넣기 <code>PUSH</code>, 데이터 꺼내기 <code>POP</code></strong></li>
</ul>
</li>
<li><strong>하나의 입출력 방향</strong></li>
</ol>
<h2 id="사용-사례">사용 사례</h2>
<p>재귀 알고리즘을 사용하는 경우 스택이 유용</p>
<ul>
<li><strong>재귀 알고리즘</strong><ul>
<li>재귀적으로 함수를 호출해야 하는 경우에 임시 데이터를 스택에 넣어준다.</li>
<li>재귀함수를 빠져 나와 퇴각 검색(backtrack)을 할 때는 스택에 넣어 두었던 임시 데이터를 빼 줘야 한다.</li>
<li>스택은 이런 일련의 행위를 직관적으로 가능하게 해 준다.</li>
<li>또한 스택은 재귀 알고리즘을 반복적 형태(iterative)를 통해서 구현할 수 있게 해준다.</li>
</ul>
</li>
<li><strong>웹 브라우저 방문기록 (뒤로가기)</strong></li>
<li><strong>실행 취소 (undo)</strong></li>
<li><strong>역순 문자열 만들기</strong></li>
<li><strong>수식의 괄호 검사 (연산자 우선순위 표현을 위한 괄호 검사)</strong><ul>
<li>Ex) 올바른 괄호 문자열(VPS, Valid Parenthesis String) 판단하기</li>
</ul>
</li>
<li><strong>후위 표기법 계산</strong>
<img src="https://velog.velcdn.com/images/ju_haze/post/9e56861e-e1fc-49ef-8f1c-b4f59062d0ca/image.png" alt=""><h2 id="method">method</h2>
</li>
<li><strong><code>push(E item)</code></strong>
해당 item을 Stack의 top에 삽입
Vector의 addElement(item)과 동일</li>
<li><strong><code>pop()</code></strong>
Stack의 top에 있는 item을 삭제하고 해당 item을 반환</li>
<li><strong><code>size()</code></strong> 
Stack에 추가된 데이터의 크기를 리턴</li>
<li><strong><code>peek()</code></strong>
Stack의 top에 있는 item을 삭제하지않고 해당 item을 반환</li>
<li><strong><code>empty()</code></strong>
Stack이 비어있으면 true를 반환 그렇지않으면 false를 반환</li>
<li><strong><code>show()</code></strong>
현재 Stack에 포함되어 있는 모든 데이터를 String 타입으로 변환하여 리턴합니다.</li>
<li><strong><code>clear()</code></strong>
현재 Stack에 포함되어 있는 모든 데이터 삭제합니다.</li>
<li><strong><code>search(Object o)</code></strong>
해당 Object의 위치를 반환</li>
</ul>
<hr>
<h1 id="queue-큐">Queue (큐)</h1>
<blockquote>
<p>한쪽 끝에서는 삽입 작업이 이루어지고, 반대쪽 끝에서는 삭제 작업이 이루어 지는 자료구조 
<img src="https://velog.velcdn.com/images/ju_haze/post/76166507-7a39-4f19-9e30-a3183ad416bb/image.png" alt=""></p>
</blockquote>
<ol>
<li><strong><code>FIFO</code></strong>: First In First Out (== <code>LILO</code>: Last In Last Out)<ul>
<li>먼저 들어간 데이터가 제일 처음에 나오는** 선입선출**의 구조</li>
</ul>
</li>
<li>데이터는 하나씩 넣고 뺄 수 있음<ul>
<li><strong>데이터 넣기 <code>enqueue</code>, 데이터 꺼내기 <code>dequeue</code></strong></li>
</ul>
</li>
<li>*<em>두 개의 입출력 방향 *</em><ul>
<li>입력과 출력의 방향이 고정되어 있으며, 두 곳으로 접근 가능</li>
</ul>
</li>
</ol>
<p>데이터가 입력된 순서대로 처리할 때 주로 사용</p>
<h2 id="사용-사례-1">사용 사례</h2>
<p>데이터가 입력된 시간 순서대로 처리해야 할 필요가 있는 상황에 이용</p>
<ul>
<li><strong>너비 우선 탐색(BFS, Breadth-First Search) 구현</strong><ul>
<li>처리해야 할 노드의 리스트를 저장하는 용도로 큐(Queue)를 사용한다.</li>
<li>노드를 하나 처리할 때마다 해당 노드와 인접한 노드들을 큐에 다시 저장한다.</li>
<li>노드를 접근한 순서대로 처리할 수 있다.</li>
</ul>
</li>
<li><strong>캐시(Cache) 구현</strong></li>
<li><strong>우선순위가 같은 작업 예약 (인쇄 대기열)</strong></li>
<li><strong>선입선출이 필요한 대기열 (티켓 카운터)</strong></li>
<li><strong>콜센터 고객 대기시간</strong></li>
<li><strong>프린터의 출력 처리</strong></li>
<li><strong>윈도 시스템의 메시지 처리기</strong></li>
<li><strong>프로세스 관리</strong></li>
</ul>
<h2 id="method-1">method</h2>
<ul>
<li><strong><code>add()</code></strong>
큐에 데이터를 추가</li>
<li><strong><code>poll()</code></strong>
가장 먼저 추가된 데이터를 큐에서 삭제하고 삭제한 데이터를 리턴</li>
<li><strong><code>size()</code></strong>
큐에 추가된 데이터의 크기를 리턴</li>
<li><strong><code>peek()</code></strong>
큐에 가장 먼저 추가된 데이터를 리턴
큐에서 가장 위에 있는 항목을 리턴</li>
<li><strong><code>show()</code></strong>
큐에 들어있는 모든 데이터를 String 타입으로 변환하여 리턴</li>
<li><strong><code>clear()</code></strong>
큐에 들어있는 모든 데이터를 삭제</li>
<li><strong><code>remove()</code></strong>
리스트의 첫 번째 항목을 제거</li>
<li><strong><code>isEmpty()</code></strong>
큐가 비어 있을 때에 true를 반환</li>
</ul>
<p><strong>ref.</strong>
<a href="https://gmlwjd9405.github.io/2018/08/03/data-structure-stack.html">https://gmlwjd9405.github.io/2018/08/03/data-structure-stack.html</a>
<a href="https://gmlwjd9405.github.io/2018/08/02/data-structure-queue.html">https://gmlwjd9405.github.io/2018/08/02/data-structure-queue.html</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[자료구조&알고리즘] 재귀]]></title>
            <link>https://velog.io/@ju_haze/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9E%AC%EA%B7%80</link>
            <guid>https://velog.io/@ju_haze/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%9E%AC%EA%B7%80</guid>
            <pubDate>Thu, 17 Nov 2022 03:59:02 GMT</pubDate>
            <description><![CDATA[<h1 id="재귀">재귀</h1>
<blockquote>
<p><strong>재귀(再歸)</strong> | 원래의 자리로 되돌아가거나 되돌아옴. [표준국어대사전]</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/ju_haze/post/f827853b-6a42-4447-8604-da46c2a9ac81/image.png" alt=""></p>
<pre><code>public void recursion() {
    System.out.print(&quot;재귀가 &quot;);
    System.out.print(&quot;궁금하니..?&quot;);
    recursion();
}</code></pre><p><img src="https://velog.velcdn.com/images/ju_haze/post/8d1a6033-d177-46a6-87f1-c3cda4b401ea/image.png" alt=""></p>
<h2 id="재귀함수란">재귀함수란?</h2>
<blockquote>
<p>자기 자신을 끝없이 호출하면서 같은 코드가 계속해서 실행하도록 <strong>자기 자신을 호출</strong>하는 함수</p>
</blockquote>
<h2 id="재귀를-사용하기-적합한-상황">재귀를 사용하기 적합한 상황</h2>
<ol>
<li>주어진 문제를 비슷한 구조의 더 작은 문제로 나눌 수 있는 경우</li>
<li>중첩된 반복문이 많거나 반목문의 중첩 횟수를 예측하기 어려운 경우</li>
</ol>
<h2 id="특징">특징</h2>
<p>모든 재귀 함수는 반복문으로 표현 가능</p>
<h3 id="장점">장점</h3>
<ul>
<li>여러개의 반복문을 사용하지 않기 때문에, <strong>코드가 간결</strong>해지고, <strong>수정이 용이</strong></li>
<li>변수를 여러개 사용할 필요 없음</li>
</ul>
<h3 id="단점">단점</h3>
<ul>
<li>코드의 흐름을 직관적으로 파악 어려움</li>
<li>반복문에 비해 메모리를 더 많이 사용</li>
<li>메서드를 호출하고 메서드가 종료된 이후에 복귀를 위한 <strong>컨텍스트 스위칭 비용 발생</strong></li>
</ul>
<h2 id="사용-조건">사용 조건</h2>
<ul>
<li>문제의 크기를 점점 작은 단위로 쪼갤 수 있어야 함</li>
<li>재취 호출이 종료되는 시점이 존재해야 함</li>
</ul>
<h2 id="til">TIL</h2>
<p>재귀의 개념은 알겠는데 막상 사용하기 위해 문제를 쪼개고 경우의 수를 나누는 게 쉽지 않다. 수 더하기나 팩토리얼 같은 것은 괜찮은 데 배열을 사용하는 등의 문제를 만나니 구현하기 너무 어려운 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[자바로 프로그램 작성하기]]></title>
            <link>https://velog.io/@ju_haze/%EC%9E%90%EB%B0%94%EB%A1%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@ju_haze/%EC%9E%90%EB%B0%94%EB%A1%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%9E%91%EC%84%B1%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 08 Nov 2022 08:12:37 GMT</pubDate>
            <description><![CDATA[<h1 id="문자열-출력">문자열 출력</h1>
<p>java 파일을 <code>javac.exe</code>가 컴파일 -&gt; 생성된 class 파일을 <code>java.exe</code>가 실행 -&gt; 문자열 출력
<img src="https://velog.velcdn.com/images/ju_haze/post/26715347-34a7-4ff4-8b69-92939745d7a5/image.png" alt=""></p>
<pre><code>public class Hello {  
    public static void main(String[] args) {  
        System.out.println(&quot;Hello, world!&quot;);  
    }  
}</code></pre><ul>
<li><strong>자바의 모든 코드는 반드시 클래스 안에 존재해야 함</strong><ul>
<li>서로 관련된 코드들은 그룹으로 나누어 별도의 클래스를 구성</li>
<li>이 클래스들이 모여 하나의 Java 애플리케이션을 이룸</li>
</ul>
</li>
<li>모든 클래스가 main 메서드를 갖고 있어야 하는 것은 아니지만, <strong>하나의 Java 프로그램에서는 main 메서드를 포함한 클래스가 반드시 하나는 있어야 함</strong></li>
<li>하나의 소스코드에 둘 이상의 클래스를 정의하는 것도 가능<ul>
<li>그러나 <strong>소스파일의 이름은 public class의 이름과 일치</strong>해야 함</li>
<li>소스코드 내에 public class가 없다면 소스코드의 이름은 소스코드 내의 어떤 클래스의 이름으로 해도 상관없음<ul>
<li>하나의 소스코드에 둘 이상의 public class가 존재하면 안 됨</li>
</ul>
</li>
</ul>
</li>
<li>소스코드인 java파일과 달리 class 파일은 클래스마다 하나씩 만들어짐</li>
</ul>
<hr>
<h1 id="메서드">메서드</h1>
<p><code>A main(B C) { D }</code> ☞ <strong>메서드</strong>를 정의하는 문법 </p>
<ul>
<li>어떠한 기능을 수행하기 위한 일련의 코드들의 집합체</li>
</ul>
<p><strong><code>함수</code></strong>: 특정 기능을 수행하는 코드들을 묶은 것
<strong><code>메서드</code></strong>: 클래스 내에 포함되어 있는 함수</p>
<p>자바는 객체지향 언어이며, 모든 코드를 클래스 내에 작성하기 때문에 보통 함수라는 용어보다 메서드라는 용어를 사용 ( <strong><code>메서드</code></strong> &gt; 함수)</p>
<p>어떤 기능을 수행한다 ▶️ 데이터를 입력 받아 해당 데이터에 일련의 처리를 가함으로써 만들어낸 결과값을 반환</p>
<h2 id="메서드-정의">메서드 정의</h2>
<ul>
<li><strong><code>‘어떤 기능을 수행하기 위한 코드들을 묶어놓은 것’</code></strong></li>
<li><blockquote>
<p>‘<strong>어떤 기능을 수행한다</strong>’는 것: 데이터를 입력받아 입력 받은 데이터에 일련의 처리를 가한 후, 그 결과값을 반환하는 것을 의미</p>
</blockquote>
<pre><code>A main (B C) {
   D
}
</code></pre></li>
</ul>
<p>A: 반환타입, B: 매개변수 타입, C: 매개변수 이름, D:메서드 바디</p>
<pre><code>
## 메서드 호출
- 메서드를 정의한다는 것은 그저 어떤 메서드가 어떻게 동작해야 하는지를 기술한 것에 불과함
- 메서드를 실행하기 위해서는 메서드를 호출해줘야 함 &gt; 메서드_이름 호출연산자();</code></pre><p>add(1,2);</p>
<pre><code>

## main 메서드</code></pre><p>public static void main(String[] args){</p>
<p>}</p>
<p>```</p>
<ul>
<li><p>가장 먼저 실행되는 메서드</p>
</li>
<li><p>자바에서 <code>main</code>메서드는 <strong>진입점 함수</strong>이며, 자바로 어떤 소스 코드를 작성할 때 반드시 <code>main</code> 메서드가 있어야 하고, <code>main</code>메서드로부터 코드의 흐름이 시작</p>
<p>  진입점 함수: 프로그램이 실행될 때 가장 먼저 실행되는 메서드 또는 함수</p>
</li>
</ul>
<hr>
<h1 id="자바-프로그램-실행과정">자바 프로그램 실행과정</h1>
<blockquote>
<ol>
<li>프로그램의 실행에 필요한 클래스를 로드한다.(*.class file)</li>
<li>클래스 파일을 검사한다.(파일 형식, 악성 코드 체크)</li>
<li>지정된 클래스에서 main(String[] args)를 호출한다.</li>
</ol>
</blockquote>
<p>main메서드의 첫 줄부터 코드가 실행되기 시작하여 마지막 코드까지 모두 실행되면 프로그램이 종료되고, 프로그램에서 사용했던 자원들은 모두 반환 됨</p>
<hr>
<h1 id="주석">주석</h1>
<ul>
<li>컴파일러는 주석을 무시</li>
<li>프로그램 코드에 대한 설명</li>
<li>프로그램의 작성자, 작성일시, 버전과 그에 따른 변경 이력 등의 정보를 제공</li>
</ul>
<p><strong><code>범위 주석</code></strong>:  &#39;/* &#39; 이 사이의 내용은 주석으로 처리&#39; */ &#39; 
<strong><code>한 줄 주석</code></strong>: &#39;//&#39; 부터 라인 끝까지의 내용은 주석으로 간주
<strong><code>문서 주석</code></strong>: &#39;/** ~ */&#39;, Java API문서와 같은 형식의 문서를 자동으로 만들어주는 주석</p>
<hr>
<h1 id="자주-발생하는-에러와-해결방법">자주 발생하는 에러와 해결방법</h1>
<p>→ 자바는 <strong>대소문자를 구별</strong>하므로 대소문자의 일치여부 확인하기</p>
<p><strong><code>💡 에러 메시지를 잘 읽고 해당 부분과 주위의 코드를 살펴보기!!</code></strong></p>
<blockquote>
<p>⚠️ cannot find symbol , cannot resolve symbol</p>
</blockquote>
<p>→  지정된 변수나 메서드를 찾을 수 없음</p>
<blockquote>
<p>⚠️ ‘;’ expected</p>
</blockquote>
<p>→ 자바의 모든 문장 끝에는 ‘;’ 을 붙이기!</p>
<blockquote>
<p>⚠️ Exception in thread “main”java.lang.NoSuchMethodError:main</p>
</blockquote>
<p>→ main 메서드를 찾을 수 없음</p>
<p>→ main 메서드가 클래스에 정의되어 있는지, 오타는 없는지 확인하자</p>
<blockquote>
<p>⚠️ Exception in thread “main” java.lang.NoClassDefFoundError:Hello</p>
</blockquote>
<p>→ 클래스를 찾을 수 없다.</p>
<blockquote>
<p>⚠️ illegal start of expression</p>
</blockquote>
<p>→  문법 오류, 에러가 발생한 곳이 문법적으로 옳은지 확인</p>
<blockquote>
<p>⚠️ class, interface, or enum expected</p>
</blockquote>
<p>→ 클래스, 인터페이스, 이넘이 없다.</p>
<p>→ ( ), { } 를 잘 확인해보자</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Java Intro]]></title>
            <link>https://velog.io/@ju_haze/Java-Intro</link>
            <guid>https://velog.io/@ju_haze/Java-Intro</guid>
            <pubDate>Mon, 31 Oct 2022 00:03:01 GMT</pubDate>
            <description><![CDATA[<h1 id="java">JAVA</h1>
<h2 id="개요">개요</h2>
<p><a href="https://www.tiobe.com/tiobe-index/">https://www.tiobe.com/tiobe-index/</a>
<img src="https://velog.velcdn.com/images/ju_haze/post/c49655fb-598a-4e7b-9ca2-d8c61fe88e19/image.png" alt=""></p>
<ul>
<li>썬 마이크로시스템즈(Sun Microsystems, Inc. 이하 썬)에서 개발하여 1996년 1월 공식 발표</li>
<li><strong>객체지향 프로그래밍 언어</strong></li>
<li>풍부한 클래스 라이브러리 (Java API)</li>
<li>다양한 운영체제가 공존하는 웹 환경에 적합한, 전 세계에서 많이 쓰이는 언어
<img src="https://velog.velcdn.com/images/ju_haze/post/8e468f27-5173-431b-9f96-fba39c2817ad/image.png" alt=""></li>
</ul>
<h2 id="특징">특징</h2>
<blockquote>
</blockquote>
<p>✔️ <strong>운영체제에 독립적</strong>으로 실행 가능
✔️ <strong>객체지향 프로그래밍</strong>(Object Oriented Programming,** OOP<strong>) 언어
✔️  **함수형 프로그래밍 지원</strong>
✔️ <strong>자동 메모리 관리(Garbage Collection)</strong>
✔️ <strong>네트워크와 분산처리 지원</strong>
✔️ <strong>동적 로딩 지원</strong></p>
<h3 id="1-os에-독립적">1. OS에 독립적</h3>
<ul>
<li><strong><code>Write Once, Run Anywhere</code></strong> <strong>(&#39;한번 작성하면, 어디서나 실행된다&#39;)</strong>
: 자바로 작성된 프로그램은 <strong>운영체제와 하드웨어에 관계없이</strong> 실행 가능</li>
</ul>
<blockquote>
<h4 id="jvmjava-virtual-machine"><code>JVM(Java Virtual Machine)</code></h4>
</blockquote>
<ul>
<li>자바를 실행하기 위한 가상 컴퓨터</li>
<li>자바로 작성된 애플리케이션은 모두 JVM에서만 실행되기 때문에, 자바 애플리케이션이 실행되기 위해서는 반드시 JVM이 필요
<img src="https://velog.velcdn.com/images/ju_haze/post/7ce0e586-5fb2-4821-a5a4-5cfb79a8ae27/image.png" alt=""></li>
<li>일반 애플리케이션의 코드는 OS만 거치고 하드웨어로 전달되는데 비해 Java 애플리케이션은 JVM을 한 번 더 거치기 때문에, 그리고 하드웨어에 맞게 완전히 컴파일된 상태가 아니고 실행 시에 해석(interpret)되기 때문에 속도가 느리다. (최근에는 JVM의 기능 향상되면서 속도의 격차를 많이 줄였다) </li>
<li>일반 애플리케이션은 OS와 바로 맞붙어 있기 때문에 다른 OS에서 실행시키기 위해서는 애플리케이션을 그 OS에 맞게 변경해야 하지만,  Java 애플리케이션은 JVM하고만 상호작용을 하기 때문에 <strong>OS와 하드웨어에 독립적</strong>이라 다른 OS에서도 프로그램의 변경없이 실행이 가능하다. </li>
</ul>
<ul>
<li>Java 응용프로그램은 <strong>JVM하고만 통신</strong></li>
<li>JVM이 자바 응용프로그램으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달</li>
<li><strong>자바로 작성된 프로그램</strong>: 운영체제에 <strong><code>독립적</code></strong></li>
<li><strong>JVM</strong>: 운영체제에 <strong><code>종속적</code></strong>
➡️ 썬에서는 여러 운영체제에 설치할 수 있는 서로 다른 버전의 JVM을 제공 </li>
</ul>
<h3 id="2-oop-object-oriented-programming-객체-지향-언어">2. OOP (Object Oriented Programming, 객체 지향 언어)</h3>
<blockquote>
<h4 id="객체object--세상에-존재하는-모든-것"><code>객체(Object)</code> : 세상에 존재하는 모든 것</h4>
<p><strong>프로그래밍에서의 객체:</strong> 데이터의 분산을 막기 위해 데이터와 기능을 하나로 묶은 그룹
ex) 컴퓨터(PC) = 데이터(본체, 모니터, 키보드, 마우스 ... 등) + 기능(화면, 소리, 입력, 출력 ... 등)</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/ju_haze/post/f866ab1b-f6fc-42a3-860c-20aad33d45d6/image.png" alt=""></p>
<blockquote>
<h4 id="객체지향언어oop-object-oriented-programming"><code>객체지향언어(OOP, Object Oriented Programming)</code></h4>
<p>컴퓨터 프로그래밍의 한가지 기법으로 객체를 만들고 객체를 사용하는 프로그래밍 기법</p>
</blockquote>
<h4 id="객체지향언어-특징">객체지향언어 특징</h4>
<p>객체지향언어의 특징은 크게 <strong><code>캡슐화</code>, <code>상속</code>, <code>다형성</code>, <code>추상화</code></strong> 4가지로 나눌 수 있다.</p>
<p><strong>1. 캡슐화</strong>
: 하나의 객체에 대해 그 객체가 특정한 목적을 위해 필요한 변수나 메소드를 하나로 묶는 것
<strong>2. 상속</strong>
: 상위 클래스의 모든 것을 하위 클래스가 모두 이어 받는 것
즉, 부모가 자식에게 유전자를 물려주듯이 부모의 특징을 자식에게 물려줌
<strong>3. 다형성</strong>
: 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해줌
형태가 같은데 다른 기능을 함</p>
<blockquote>
<p><strong>오버로딩(Overloading)</strong>: 메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것
<strong>오버라이딩(Overriding)</strong>: 상속받은 하위 클래스가 메서드의 내용만 변경(재정의)하는 것</p>
</blockquote>
<p><strong>4. 추상화</strong>
: 객체의 공통적인 속성과 기능을 추출하여 정의하는 것
실제로 존재하는 객체들을 프로그램으로 만들기 위한 공통적인 특성을 파악해서 필요 없는 특성을 제거하는 과정 </p>
<h4 id="객체지향언어-장점">객체지향언어 장점</h4>
<p><strong>1. 재사용성</strong>
: 상속을 통해 프로그래밍 시 코드의 재사용을 높일 수 있음
<strong>2. 생산성 향상</strong>
: 잘 설계된 클래스를 만들어서 독립적인 객체를 사용함으로써, 개발의 생산성을 향상할 수 있음.
<strong>3. 자연적인 모델링</strong>
: 생각하고 있는 것을 그대로 자연스럽게 구현 가능
<strong>4. 유지보수의 우수성</strong>
: 프로그램 수정 시 추가, 수정을 하더라도 캡슐화를 통해 주변 영향이 적기에 쉬운 유지보수 가능 </p>
<h4 id="객체지향언어-단점">객체지향언어 단점</h4>
<p><strong>1. 개발 속도 느림</strong>
: 모든 객체의 역할과 기능을 이해해야 하기 때문에 프로그래밍에 많은 시간이 소요
<strong>2. 실행 속도 느림</strong>
: 객체지향언어의 처리 속도는 절차지향언어보다 느림
<strong>3. 코딩 난이도 상승</strong>
: 객체지향언어는 대체로 난이도가 높음(특히 C++)</p>
<ul>
<li>다중 상속의 경우, 상속을 통해 중복을 없앨 수 있지만, 상위 클래스와 하위 클래스간의 관례를 인지하고 있어야 함</li>
</ul>
<h4 id="객체지향언어">객체지향언어</h4>
<p>: JAVA, Objective-C, Swift, C++, Python, etc.</p>
<h3 id="📌-절차지향언어pp-procedural-programming">📌 절차지향언어(PP, Procedural Programming)</h3>
<blockquote>
<h4 id="절차지향언어pp-procedural-programming"><code>절차지향언어(PP, Procedural Programming)</code></h4>
<p>개체를 순차적인 처리하여 프로그램 전체가 유기적으로 연결</p>
</blockquote>
<h4 id="절차지향언어-단점">절차지향언어 단점</h4>
<ul>
<li>빠른 실행 속도: 초기 프로그래밍 언어로, 컴퓨터 처리구조와 비슷해 실행속도가 빠름</li>
</ul>
<h4 id="절차지향언어-단점-1">절차지향언어 단점</h4>
<p><strong>1. 유지보수 어려움</strong>
: 모든 구성요소가 유기적으로 연결되어 있어, 하나가 고장날 경우 시스템 전체가 고장. 유지 보수가 매우 까다로움.
<strong>2. 엄격하게 순서가 정해져 있어 비효율적</strong>
: 실행순서가 정해져 있기 때문에 코드의 순서가 바뀌면 결과가 달라짐. 
즉, 언어의 융통성 부족하여 생산 효율 떨어짐
<strong>3. 과도한 전역변수 사용</strong>
: 모든 함수에 개방되어 있어 값을 잘못 설정하게 될 수 있음
<strong>4. 프로그램 이해가 어려워짐</strong>
: 함수가 많아지면 어떻게 상호 작용하는지 이해하기 어려워짐</p>
<h4 id="절차지향언어">절차지향언어</h4>
<ul>
<li>FORTRAN, COBOL, PASCAL, C, BASIC</li>
</ul>
<h3 id="3-자동-메모리-관리-garbage-collection">3. 자동 메모리 관리 (Garbage Collection)</h3>
<ul>
<li>자바로 작성된 프로그램 실행 시, Garbage Collection이 자동적으로 메모리를 관리해주기 때문에 프로그래머는 메모리를 따로 관리하지 않아도 됨.</li>
<li>프로그래머가 보다 프로그래밍에 집중할 수 있도록 도움 <h3 id="4-네트워크와-분산처리-지원">4. 네트워크와 분산처리 지원</h3>
</li>
<li>풍부하고 다양한 네트워크 프로그래밍 라이브러리<strong>(Java API)</strong>를 통해 비교적 짧은 시간에 네트워크 관련 프로그램을 쉽게 개발할 수 있도록 지원</li>
</ul>
<h3 id="5-멀티쓰레드-지원">5. 멀티쓰레드 지원</h3>
<ul>
<li>multi-thread의 지원은 사용되는 운영체제에 다라 구현 방법도 상이하며, 처리방식도 다름</li>
<li>Java에서 개발되는 multi-thread program은 <strong>시스템과 관계없이 구현</strong>가능, <strong>관련된 라이브러리(Java API)</strong> 제공되어 <strong>구현이 쉬움</strong></li>
<li>여러 thread에 대한 스케쥴링(scheduling)을 자바 인터프리터가 담당<h3 id="6-동적-로딩-지원">6. 동적 로딩 지원</h3>
</li>
<li><strong>실행 시 모든 클래스가 로딩되지 않고, 필요한 시점에 클래스를 로딩하여 사용 가능</strong></li>
<li>일부 클래스가 변경되어도 전체 애플리케이션을 다시 컴파일하지 않아도 되며, 애플리케이션의 변경사항이 발생해도 비교적 적은 작업만으로도 처리할 수 있는 유연한 애플리케이션을 작성 가능 </li>
</ul>
<h1 id="개발환경">개발환경</h1>
<h2 id="ide-설치하기">IDE 설치하기</h2>
<p><strong><code>통합개발환경</code> Intergrated Development Environment</strong>의 약자</p>
<p>자바 프로그래밍을 도와주는 IDE 중 가장 많이 추천되는 툴</p>
<ul>
<li><strong><code>Intellij(인텔리제이)</code></strong> ✨✨ </li>
<li><strong><code>eclipse(이클립스)</code></strong></li>
</ul>
<h2 id="jdkjava-develoment-kit-설치하기">JDK(Java Develoment Kit) 설치하기</h2>
<p>★ 본인의 JDK 설치 디렉토리를 기억해 놓자.    </p>
<ul>
<li><p>자바로 프로그래밍 하기 위해 필요한 도구 (자바 프로그램을 만들기 위해서는 누구나 이것을 설치해야 함)</p>
<ul>
<li>JDK를 설치했다면 JDK가 설치된 디렉토리의 bin이라는 하위 디렉토리에 <code>javac.exe</code>와 <code>java.exe</code> 파일이 저장되어 있을 것이다. 
※ 혹시라도 java.exe 만 있고 javac.exe 가 없다면 JDK가 아닌 JRE를 설치한 것이므로 JDK를 다시 설치하자</li>
</ul>
</li>
</ul>
<h4 id="jdk의-bin-디렉토리에-있는-주요-실행파일"><strong>JDK의 bin 디렉토리에 있는 주요 실행파일</strong></h4>
<blockquote>
<p><strong><code>javac.exe</code></strong>:  자바 컴파일러, 자바 소스코드를 byte code로 컴파일
 <strong><code>java.exe</code></strong>: 자바 인터프리터, 컴파일러가 생성한 byte code를 해석하고 실행
 <strong><code>javap.exe</code></strong>: 역어셈블러, 컴파일된 클래스파일을 원래의 소스로 변환 </p>
<ul>
<li>‘-c’ 옵션을 이용해 바이트코드로 컴파일 된 내용도 볼 수 있음
<strong><code>javadoc.exe</code></strong>: 자동문서생성기, 소스파일에 있는 주석을 이용하여 Java API 문서와 같은 형식의 문서를 자동으로 생성
<strong><code>jar.exe</code></strong>: 압축프로그램, 클래스 파일과 프로그램의 실행에 관련된 파일을 하나의 jar 파일(.jar)로 압축하거나 압축해제<pre><code>   - 압축 : jar cvf Hello.jar Hello1.class Hello2.class
   - 압축해제: jar xvf Hello.jar</code></pre></li>
</ul>
</blockquote>
<ul>
<li><strong>JRE (</strong>Java Runtime Environment)<ul>
<li>JDK보다는 작은 개념으로, 자바가 실행될 수 있는 최소한의 파일들이 설치되어있는 환경</li>
<li>JRE에는 javac.exe와 같은 자바소스를 컴파일하기 위한 도구는 설치되지 않음</li>
<li>JVM과 Java API 외에 자바를 개발하는데 필요한 프로그램들이 설치</li>
</ul>
</li>
</ul>
<blockquote>
<p><strong><code>JDK</code></strong> - 자바 개발 도구 (Java Developement Kit)
<strong><code>JRE</code></strong> - 자바 실행 환경 (Java Runtime Environment), 자바로 작성된 응용프로그램이 실행되기 위한 최소환경
<strong><code>JDK</code></strong> = JRE + 개발에 필요한 실행파일 (javac.exe 등)
<strong><code>JRE</code></strong> = JVM + 클래스 라이브러리(Java API)</p>
</blockquote>
<h2 id="java-api-문서-설치">Java API 문서 설치</h2>
<p>: 자바에서 제공하는 클래스 라이브러리(Java API)를 잘 사용하기 위해서는 Java API 문서가 필수적이지만 다 외울 필요 없이 필요한 거 있으면 그때마다 보면 된다. 
<code>Java 8 API</code>  <a href="https://docs.oracle.com/javase/8/docs/api/">Java Platform SE 8</a></p>
<p><code>Java 11 API</code> <a href="https://docs.oracle.com/en/java/javase/11/docs/api/">Overview (Java SE 11 &amp; JDK 11 )</a></p>
<h4 id="📚-ref">📚 Ref.</h4>
<ul>
<li>자바의 정석</li>
<li><a href="https://lxxyeon.tistory.com/86">https://lxxyeon.tistory.com/86</a> </li>
<li><a href="https://radait.tistory.com/4">https://radait.tistory.com/4</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Linux]]></title>
            <link>https://velog.io/@ju_haze/Linux</link>
            <guid>https://velog.io/@ju_haze/Linux</guid>
            <pubDate>Fri, 28 Oct 2022 03:23:08 GMT</pubDate>
            <description><![CDATA[<h2 id="용어-정리">용어 정리</h2>
<p>✔️ <strong><code>CLI</code></strong> (Command-Line Interface, 명령줄 인터페이스)
: <strong>명령어로 컴퓨터를 제어</strong>하는 방식</p>
<blockquote>
<ul>
<li>상대적으로 높은 안정성과 빠른 속도</li>
</ul>
</blockquote>
<p>✔️ <strong><code>GUI</code></strong> (Graphic User Interface, 그래픽 사용자 인터페이스)</p>
<blockquote>
<ul>
<li>사용자가 쉽게 화면 제어 가능</li>
</ul>
</blockquote>
<p>✔️ <code>I/O</code>(Input/Output)
: 컴퓨터를 조작하기 위한 <strong>입력과 출력</strong>
: &#39;아이오&#39;라 읽음 </p>
<p>✔️ <code>Prompt</code>(프롬프트)
: 키보드의 입력을 확인하고 편집할 수 있는 한 줄의 공간</p>
<h2 id="💻-명령어-정리">💻 명령어 정리</h2>
<h4 id="옵션">옵션</h4>
<ul>
<li>CLI에서 특정 명령어의 옵션을 사용하는 경우 <code>-</code>(dash, 대쉬)를 이요해 옵션을 입력했다고 컴퓨터에 전달함</li>
<li>Dash 뒤에 오는 옵션의 순서는 기능에 영향❌</li>
<li>각 명령어에 포함된 옵션은 명령어의 이름만 입력 or <code>-h</code> or<code>--help</code>와 같은 옵션을 통해 확인</li>
</ul>
<hr>
<p><strong><code>/</code></strong> : 폴더 내부. 절대 경로 (또는 <strong>루트 폴더</strong> - 일반 사용자는 생성, 변경, 삭제 불가)</p>
<blockquote>
<p>어떠한 일이 있더라고 일반 사용자에게 관리자 권한(루트 권한)을 완전히 넘기지 않음</p>
</blockquote>
<p>사용자가 관리자 권한을 필요로 하는 경우</p>
<blockquote>
<ul>
<li>새로운 프로그램 설치</li>
</ul>
</blockquote>
<ul>
<li>프로그램 변경 또는 삭제</li>
</ul>
<p>=&gt; 해당 프로그램을 설치, 변경 또는 삭제할 수 있는 관리자 권한만 전달 </p>
<p>🧑 <strong><code>whoami</code></strong>: 현재 로그인 된 사용자 확인 명령어 
🧑 <strong><code>sudo</code></strong>: 관리자 권한을 (일시적으로) 획득하는 명령어 </p>
<p><strong><code>.</code></strong> : 현재 폴더. 상대 경로 (현 디렉토리)
<strong><code>..</code></strong> : 현재 폴더의 부모 폴더. 상위 폴더</p>
<p><strong><code>/</code></strong> : 루트 디렉토리
<strong><code>~</code></strong> : 홈 디렉토리. <code>/</code>루트폴더로부터 사용자 폴더까지의 경로를 축약한 형태</p>
<p><strong><code>./</code></strong> : 현재 폴더 아래
<strong><code>./폴더명</code></strong> : 현재 폴더 아래의 폴더명</p>
<hr>
<p>🧑‍💻 <strong><code>echo</code></strong>: echo 뒤의 내용을 화면에 출력해주는 역할</p>
<pre><code>echo Hello World &gt; hi.txt :  Hello World가 hi.txt 파일에 저장 </code></pre><p>🧑‍💻<strong><code>cat</code></strong>: 파일의 내용을 터미널에 출력</p>
<p>📁 <strong><code>pwd</code></strong> : 현재 위치 확인하기 (print working directory)
📁 <strong><code>mkdir</code></strong>: 새로운 폴더 생성 (make directories)</p>
<pre><code>mkdir 생성할_폴더명</code></pre><p>📁** <code>ls</code>**: 특정 폴더에 포함된 파일이나 폴더 확인하기 (list)</p>
<pre><code>ls -l : 폴더나 파일의 포맷을 전부 표현
ls -a : a는 all의 약자, 숨어있는 폴더나 파일을 포함한 모든 항목을 터미널에 출력
ls -al or ls -la

drwxr-xr-x  : 맨 앞이 d로 출력된 경우 디렉토리를 의미
-rw-r--r--  : 맨 앞이 -로 출력된 경우 파일을 의미</code></pre><p>📁 <strong><code>cd</code></strong>: 다른 폴더로 변경(change directory)
📁 <strong><code>touch</code></strong>: 파일 생성하기 </p>
<pre><code>touch 파일명.txt</code></pre><p>📁 <strong><code>&gt;</code></strong>: 실행 결과를 파일로 저장하기</p>
<pre><code>ls &gt; ls.txt : ls.txt에 ls 명령어의 실행 결과가 저장</code></pre><p>📁 <strong><code>rm</code></strong>: 폴더나 파일 삭제하기 (remove)</p>
<blockquote>
<p>명령어 <code>rm</code>으로 삭제한 폴더나 파일은 <strong>휴지통으로 거치지 않고 삭제</strong></p>
</blockquote>
<pre><code>rm: 단일 파일만 삭제 가능

# 폴더 삭제 옵션
rm -rf 폴더명

옵션 r: &#39;recursive&#39;, 폴더를 지울 때 사용
옵션 f: &#39;force&#39;, 질문을 받지 않고 지울 때 사용</code></pre><p>📁 <strong><code>mv</code></strong>: 폴더나 파일 이름 변경 or 위치 변경 (move)</p>
<pre><code>1. 위치 변경
mv [폴더나 파일의 이름] [도착 폴더의 이름]

2. 이름 변경
mv [변경할 폴더나 파일의 이름] [변경하고자 하는 파일의 이름] </code></pre><p>📁 <strong><code>cp</code></strong>: 폴더나 파일 복사하기 (copy)</p>
<pre><code>cp [원본 파일 이름] [복사할 파일 이름]
cp -rf [원본 폴더 이름] [복사할 폴더 이름]</code></pre><hr>
<h3 id="텍스트-에디터">텍스트 에디터</h3>
<p><code>nano</code>, <code>vim(vi)</code>, <code>emacs</code> 등 존재. 
가장 쉬운 건 <code>nano</code></p>
<pre><code>nano 또는 nano [파일명.확장자] </code></pre><p>파일 편집 후 종료 : ^X (ctrl X)
종료하지 않고 저장 : ^O (ctrl O)</p>
<hr>
<h3 id="패키지-매니저">패키지 매니저</h3>
<h4 id="apt-패키지-매니저-주요-명령어">apt 패키지 매니저 주요 명령어</h4>
<ul>
<li><p>패키지 목록 갱신: <strong><code>apt update</code></strong> (관리자 권한 필요)</p>
<ul>
<li>패키지를 다운로드할 수 있는 여러 저장소의 <strong>최신 정보를 업데이트</strong>합니다.</li>
<li>새로운 저장소를 추가하거나, 패키지를 설치하기 전, 최신 정보를 갱신합니다.</li>
<li><strong>설치된 프로그램이 새로운 버전으로 변경되지 않습니다.</strong></li>
</ul>
</li>
</ul>
<ul>
<li>업그레이드 가능한 패키지 목록을 출력: <strong><code>apt list -—upgradable</code></strong></li>
<li>전체 패키지 업그레이드(버전 업):<strong><code>apt upgrade</code></strong> (관리자 권한 필요)</li>
<li>특정 패키지만 업그레이드(버전 업): <strong><code>apt --only-upgrade install 패키지 이름</code></strong> (관리자 권한 필요)</li>
<li>패키지 설치: <strong><code>apt install 패키지 이름</code></strong> (관리자 권한 필요)</li>
<li>설치된 패키지 보기: <strong><code>apt list --installed</code></strong></li>
<li>패키지 검색: <strong><code>apt search 검색어</code></strong></li>
<li>패키지 정보 확인: <strong><code>apt show 패키지 이름</code></strong></li>
<li>패키지 삭제: <strong><code>apt remove 패키지 이름</code></strong> (관리자 권한 필요)</li>
</ul>
<h4 id="📌-너무-시간이-오래-걸리거나-뭔가-과정-중에-예상치-못하게-멈춰있는-경우">📌 너무 시간이 오래 걸리거나, 뭔가 과정 중에 예상치 못하게 멈춰있는 경우</h4>
<p>=&gt; (Unix 기반 운영체제) <code>Ctrl + C</code> 키:  <strong>작업을 취소</strong>하고, 터미널의 사용자 입력을 다시 되찾아오는 역할 (강제 종료)</p>
<p>복사: (Ubuntu) <code>Ctrl + Shift + C</code></p>
<p>붙여넣기: (Ubuntu) <code>Ctrl + Shift + V</code></p>
<hr>
<h3 id="사용자와-관리자">사용자와 관리자</h3>
<p><strong>(읽기, 쓰기, 실행 권한)</strong>
<code>r</code>: read permission
<code>w</code>: write permission
<code>x</code>: execute permission </p>
<p>세번으로 나눠져서 나오는 이유 : <code>user</code>, <code>group</code>, <code>other</code> (사용자, 그룹, 나머지) 에 대한 권한 표시
ex. -rw-r--r-- : 파일 / 소유자 읽기, 쓰기 / 다른 사용자 읽기 / 나머지 읽기</p>
<p><code>chmod</code> : 권한 변경하는 명령어</p>
<table>
<thead>
<tr>
<th align="center">Access class</th>
<th>Operator</th>
<th align="center">Access Type</th>
</tr>
</thead>
<tbody><tr>
<td align="center">u (user)</td>
<td>+ (add class)</td>
<td align="center">r (read)</td>
</tr>
<tr>
<td align="center">g (group)</td>
<td>- (remove access)</td>
<td align="center">w (write)</td>
</tr>
<tr>
<td align="center">o (other)</td>
<td>= (set exact access)</td>
<td align="center">x (execute)</td>
</tr>
<tr>
<td align="center">a (all: u,g,o)</td>
<td></td>
<td align="center"></td>
</tr>
</tbody></table>
<h4 id="absolute-form">Absolute form</h4>
<ul>
<li><code>read</code>: 4, <code>write</code>: 2, <code>execute</code>:1</li>
</ul>
<table>
<thead>
<tr>
<th>#</th>
<th>Sum</th>
<th>rwx</th>
<th>Permission</th>
</tr>
</thead>
<tbody><tr>
<td>7</td>
<td>4(r) + 2(w) + 1(x)</td>
<td>rwx</td>
<td>read, write, execute</td>
</tr>
<tr>
<td>6</td>
<td>4(r) + 2(w) + 0(-)</td>
<td>rw-</td>
<td>read, write</td>
</tr>
<tr>
<td>5</td>
<td>4(r) + 0(-) + 1(x)</td>
<td>r-x</td>
<td>read and execute</td>
</tr>
<tr>
<td>4</td>
<td>4(r) + 0(-) + 0(-)</td>
<td>r—</td>
<td>read only</td>
</tr>
<tr>
<td>3</td>
<td>0(-) + 2(w) + 1(x)</td>
<td>-wx</td>
<td>write, execute</td>
</tr>
<tr>
<td>2</td>
<td>0(-) + 2(w) + 0(-)</td>
<td>-w-</td>
<td>write only</td>
</tr>
<tr>
<td>1</td>
<td>0(-) + 0(-) + 1(x)</td>
<td>—x</td>
<td>execute only</td>
</tr>
<tr>
<td>0</td>
<td>0(-) + 0(-) + 0(-)</td>
<td>—-</td>
<td>none</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[Git과 Github]]></title>
            <link>https://velog.io/@ju_haze/Git</link>
            <guid>https://velog.io/@ju_haze/Git</guid>
            <pubDate>Fri, 28 Oct 2022 01:47:44 GMT</pubDate>
            <description><![CDATA[<h1 id="git">Git</h1>
<p>: 개발자의 코드를 효율적으로 관리하기 위해서 개발된 &#39;분산형 버전 관리 시스템&#39;</p>
<blockquote>
<ul>
<li>파일의 변경 사항 추적, 사용자가 각 파일의 <strong>버전을 관리</strong>할 수 있게 도움</li>
</ul>
</blockquote>
<ul>
<li><strong>파일 백업</strong></li>
<li>파일 공유 및 취합 가능 =&gt; <strong>협업 가능</strong></li>
</ul>
<h1 id="github">Github</h1>
<p>: Git Repository를 관리할 수 있는 클라우드 기반 서비스 </p>
<h4 id="영역">영역</h4>
<p><img src="https://velog.velcdn.com/images/ju_haze/post/37a0c592-b1a7-4145-811b-9ffb58043607/image.png" alt=""></p>
<blockquote>
<ul>
<li>Online: <code>Remote Repository</code>(원격 저장소)</li>
</ul>
</blockquote>
<ul>
<li>Local<pre><code>- `Work space`(작업 공간)</code></pre><ul>
<li><code>Staging area</code>(스테이징 영역): Local에 저장할 파일 임시 대기 영역 </li>
<li><code>Local repository</code>(지역 저장소)</li>
</ul>
</li>
</ul>
<h2 id="git-repository">Git Repository</h2>
<p>: 파일이나 폴더를 저장해두는 저장소</p>
<h3 id="✔️-remote-repository">✔️ Remote Repository</h3>
<p>: 원격 온라인 서버 상의 저장소</p>
<ul>
<li>여러 사람이 함께 공유 가능</li>
</ul>
<h3 id="✔️-local-repository">✔️ Local Repository</h3>
<p>: 내 컴퓨터의 저장소</p>
<ul>
<li>내 개인 전용 저장소</li>
</ul>
<blockquote>
<p>Git으로 버전을 관리하는 폴더에 대해 Github을 통해 여러 사람들이 공유하고 접근 가능</p>
</blockquote>
<ul>
<li>Git: 로컬에서 버전 관리해주는 프로그램</li>
<li>Github: Git을 클라우드 방식으로 구현한 서비스 </li>
</ul>
<h2 id="버전-관리를-사용하는-이유">버전 관리를 사용하는 이유</h2>
<ol>
<li>파일이 변경되면 변경 이력을 저장할 수 있다.</li>
<li>이전 버전으로 돌아갈 수 있다.</li>
<li>어떤 변경 사항이 발생했는지 알아보기 쉽다. </li>
<li>협업하기 좋다.</li>
<li>백업용</li>
</ol>
<h2 id="오픈소스">오픈소스</h2>
<p>: 소스 코드가 공개된 소프트웨어</p>
<ul>
<li>누구나 자유롭게 해당 기능을 추가하고 개선할 수 있음(Contribute_기여하다)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/ju_haze/post/205190ed-a44e-4a56-9f28-9a3fb34d7461/image.png" alt="">
출처: designless.net</p>
<ul>
<li><code>init</code>: Git 초기화</li>
<li><code>add</code>, <code>commit</code>, <code>push</code> : 온라인 원격 저장소에 업로드</li>
<li><code>fork</code>, <code>clone</code>: 협업자의 작업물을 나의 로컬에 다운로드 받는 과정</li>
<li><code>pull request</code>: 상대 협업자에게 나의 작업 완성물을 취합해달라고 요청하는 과정</li>
<li><code>merge</code>: 상대방의 작업물과 나의 작업물을 취합하는 과정 </li>
</ul>
<h3 id="ssh-secure-shell">SSH (Secure Shell)</h3>
<p>: 보안이 강화된 shell 접속</p>
<ul>
<li>CLI 환경(터미널)에서 다른 pc에 접속하거나 요청할 때 사용하며, 비대칭키를 이용해 사용자 인증 </li>
</ul>
<pre><code>$ ssh-keygen //ssh key 생성

$ cat ~/ .ssh/id_rsa.pub //공개키를 텅헤 CLI 사용자 인증 가능 </code></pre><hr>
<h3 id="git-환경설정">Git 환경설정</h3>
<pre><code>$ git config --global user.name &quot;나의 사용자 이름&quot;
$ git config --global user.email &quot;내 이메일 주소&quot;

$ git config --global core.editor nano</code></pre><h3 id="git-기본-명령어">Git 기본 명령어</h3>
<pre><code>$ git init

$ git config --global init.defaultBranch 변경할_브랜치_이름
- git config --global init.defaultBranch main
$ git branch -m 변경할_브랜치_이름
- git branch -m main

$ git add .
$ git status
$ git commit -m &quot;Commit message&quot;
$ git restore .
$ git push origin main
$ git log 

$ git remote --v

$ git remote add origin 복사한_원격_저장소_URL

$ git clone 복사한_URL
</code></pre><h3 id="git-status">Git Status</h3>
<ul>
<li><p><code>On branch main</code>: 현재 브랜치는 main 브랜치 입니다.</p>
</li>
<li><p><code>No commit yet</code>: 아직 커밋을 하지 않았습니다.</p>
</li>
<li><p><strong><code>Untracked files</code></strong>: Git의 관리 하에 있는 파일이 가질 수 있는 상태 중 하나</p>
</li>
<li><p><code>(use “git add &lt;file&gt;…” to include in what will be committed)</code>: <code>git add file_name</code> 을 입력하면 commit될 것들에 해당 파일을 포함시킬 수 있다.</p>
</li>
<li><p><code>nothing added to commit but untracked files present (use &quot;git add&quot; to track)</code>: 아직 add된 파일이 없으며, Untracked 상태의 파일이 존재하니, git add 명령을 사용하세요.</p>
</li>
<li><p><strong><code>Unmodified</code></strong> : 파일의 수정이 Git에 의해 <strong>감지되지 않은 상태</strong></p>
</li>
<li><p><strong><code>Modified</code> *<em>: 파일의 수정이 Git에 의해 *</em>감지된 상태</strong></p>
</li>
<li><p><strong><code>Staged</code></strong> : 파일이** Staging area에 존재**하는 상태</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[페이지 레이아웃]]></title>
            <link>https://velog.io/@ju_haze/%ED%8E%98%EC%9D%B4%EC%A7%80-%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83</link>
            <guid>https://velog.io/@ju_haze/%ED%8E%98%EC%9D%B4%EC%A7%80-%EB%A0%88%EC%9D%B4%EC%95%84%EC%9B%83</guid>
            <pubDate>Tue, 25 Oct 2022 07:47:32 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>VSCode에서 html 기본 코드 빠르게 작성하기: ! + enter</p>
</blockquote>
<h1 id="html-구성하기">HTML 구성하기</h1>
<p>주로 콘텐츠의 흐름:  <strong><code>좌-&gt;우</code>, <code>위-&gt;아래</code></strong></p>
<p>CSS로 화면을 구분할 경우</p>
<ol>
<li><strong><code>수직 분할</code></strong>: 화면을 수직으로 구분, 콘텐츠가 가로로 배치될 수 있도록 요소 배치</li>
<li><strong><code>수평 분할</code></strong>: 분할된 각각의 요소를 수평으로 구분, 내부 콘텐츠가 세로로 배치될 수 있도록 요소 배치</li>
</ol>
<ul>
<li>수평으로 구분된 요소에 <code>height</code> 속성을 추가하면, 수평분할을 보다 직관적으로 할 수 있음</li>
</ul>
<h3 id="레이아웃-리셋">레이아웃 리셋</h3>
<p>👾 기본 스타일링을 제거하는 CSS 코드의 예시</p>
<pre><code>* {
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
}</code></pre><hr>
<h2 id="flexbox로-레이아웃-잡기">Flexbox로 레이아웃 잡기</h2>
<p>✔️ 박스를 유연하게 늘리거나 줄여서 레이아웃을 잡는 방법
✔️ Flexbox 속성 활용 시 요소의 <code>정렬</code>, 요소가 <code>차지하는 공간</code> 설정</p>
<h3 id="📌-displayflex">📌 display:flex</h3>
<ul>
<li><code>부모 박스</code> 요소에 적용</li>
<li><code>자식 박스</code>의 <strong>방향과 크기</strong>를 결정하는 레이아웃 구성</li>
</ul>
<blockquote>
<p><code>div</code> 요소들은 별다른 설정X
=&gt; <strong><code>위쪽</code></strong>에서부터 <strong><code>세로</code></strong>로 정렬되며, <strong><code>가로</code></strong>로 넓게 공간을 차지</p>
</blockquote>
<blockquote>
<p>부모 요소 <code>main</code> 요소 에 <code>display: flex</code> 속성 적용하기
=&gt; <code>div</code> 요소들이 <strong><code>왼쪽</code></strong>부터 <strong><code>가로</code></strong>로 정렬, <strong>내용만큼의 공간 차지</strong></p>
</blockquote>
<h3 id="📌-부모-요소에-적용해야하는-flexbox-속성들">📌 부모 요소에 적용해야하는 Flexbox 속성들</h3>
<p>🛠️ 적절한 위치에 속성을 지정해주지 않으면 요소들이 원하는대로 정렬되지 않음</p>
<ol>
<li><p><strong><code>flex-direction</code>: 정렬 축 정하기</strong>
✔️ <code>부모 요소</code>에 설정해주는 속성
✔️ <code>자식 요소</code>들을 정렬한 정렬 축 정하기
✔️ default:  <code>가로 정렬</code></p>
<p>➡️ <code>row(default)</code> ⬇️<code>column</code> ⬅️<code>row-reverse</code> ⬆️<code>column-reverse</code></p>
</li>
</ol>
<ol start="2">
<li><p><strong><code>flex-wrap</code> : 줄 바꿈 설정하기</strong>
✔️ <code>하위 요소들의 크기 &gt;  상위 요소의 크기</code> =&gt; 자동 줄 바꿈을 할 것인가
✔️ default: 줄 바꿈 X</p>
<p><code>nowrap(default)</code> <code>wrap</code>  <code>wrap-reverse</code></p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTML CSS 박스]]></title>
            <link>https://velog.io/@ju_haze/HTML-CSS-%EB%B0%95%EC%8A%A4</link>
            <guid>https://velog.io/@ju_haze/HTML-CSS-%EB%B0%95%EC%8A%A4</guid>
            <pubDate>Tue, 25 Oct 2022 06:18:21 GMT</pubDate>
            <description><![CDATA[<h2 id="모든-콘텐츠는-고유한-영역이-있다">모든 콘텐츠는 고유한 영역이 있다.</h2>
<p><img src="https://velog.velcdn.com/images/ju_haze/post/12af09cc-964f-4d67-ab25-2d942b853b29/image.png" alt=""></p>
<p>하나의 웹 페이지 내의 모든 콘텐츠는 고유의 영역을 가지고 있다.
그 영역은 항상 직사각형으로 이루어져 있기 때문에, 박스(box)라고 부른다.</p>
<p>모든 콘텐츠는 각자의 영역을 가지며, 일반적으로 하나의 콘텐츠로 묶이는 엘리먼트(요소)들이 하나의 박스가 된다.</p>
<p><strong>박스는 항상 직사각형이고, <code>너비(width)</code>와 <code>높이(height)</code>를 가진다.</strong></p>
<p>CSS를 이용해 속성과 값으로 그 크기를 설정한다.</p>
<p><strong>[HTML 예시]</strong></p>
<pre><code>&lt;h1&gt;Basic document flow&lt;/h1&gt;
    &lt;p&gt;test1&lt;/p&gt;
    &lt;p&gt;test2&lt;/p&gt;
    &lt;p&gt;Hello &lt;span&gt;like this one&lt;/span&gt; and &lt;span&gt;this one&lt;/span&gt; Hi &lt;span&gt;wow&lt;/span&gt;, Bye&lt;/p&gt;</code></pre><p><strong>[CSS 예시]</strong></p>
<pre><code>h1 {
  background: gray;
  width: 60%;
}

p {
  background: rgba(255,84,104,0.3);
  width: 80%;
  height: 200px;
}

span {
  background: yellow;
  width: 100px;
  height: 100px;
}</code></pre><h3 id="📌-block과-inline">📌 Block과 inline</h3>
<p>줄바꿈이 되는 박스(block) vs. 옆으로 붙는 박스(inline, inline-block)</p>
<p>박스의 종류는 줄바꿈이 되는 박스와 줄바꿈이 없이 옆으로 붙는 박스로 구분할 수 있다.</p>
<ul>
<li>줄바꿈이 되는 박스는 <strong><code>block 박스</code></strong></li>
<li>줄바꿈이 일어나지 않고, 크기 지정을 할 수 없는 박스는<strong><code>inline 박스</code></strong></li>
<li>이 두 가지 박스 종류의 특징이 섞인, 줄바꿈이 일어나지 않는 동시에 block 박스의 특징을 가지는 <strong><code>inline-block 박스</code></strong></li>
</ul>
<blockquote>
<p>줄바꿈이 되는 태그: <code>h1</code>, <code>p</code>  =&gt; block box
줄바꿈이 되지 않는 태그: <code>span</code> =&gt; inline box</p>
</blockquote>
<blockquote>
<p>Block 요소의 대표적인 예: <code>div</code>, <code>p</code>
Inline 요소의 대표적인 예: <code>span</code></p>
</blockquote>
<blockquote>
<p><code>span</code> 태그, <code>inline 박스</code>의 경우는 <code>width</code>, <code>height</code> 속성이 적용되지 않는다. </p>
</blockquote>
<p><strong>inline-block 박스</strong>는 inline 박스처럼 다른 요소의 옆으로 붙으면서, 자체적으로 고유의 크기를 가진다.</p>
<pre><code>#span 태그에 display 속성을 추가하고, 값으로 inline-block을 지정

span {
  background: yellow;
  display: inline-block;
  width: 100px;
  height: 100px;
}</code></pre><table>
<thead>
<tr>
<th></th>
<th>block</th>
<th>inline-block</th>
<th>inline</th>
</tr>
</thead>
<tbody><tr>
<td>줄바꿈 여부</td>
<td>O</td>
<td>X</td>
<td>X</td>
</tr>
<tr>
<td>기본적으로 갖는 너비(width)</td>
<td>100%</td>
<td>글자가 차지하는 만큼</td>
<td>글자가 차지하는 만큼</td>
</tr>
<tr>
<td>width, height 사용 가능 여부</td>
<td>O</td>
<td>O</td>
<td>X</td>
</tr>
</tbody></table>
<hr>
<h2 id="박스를-구성하는-요소">박스를 구성하는 요소</h2>
<p>border(테두리)를 기준으로 padding(안쪽 여백)과 margin(바깥 여백)이 있다.
<img src="https://velog.velcdn.com/images/ju_haze/post/1c7a1a15-f95b-4c1b-bbc7-d81f7a5dc9f4/image.png" alt=""></p>
<h3 id="📌--border-테두리">📌  border (테두리)</h3>
<p>테두리는 각 영역이 차지하는 크기를 파악하기 위해, 레이아웃을 만들면서 그 크기를 시각적으로 확인할 수 있도록 만든다.</p>
<pre><code>p {
  border: 1px solid red;
}</code></pre><p>border 속성에 적용된 각각의 값
<strong><code>테두리 두께(border-width)</code></strong>, <strong><code>테두리 스타일(border-style)</code></strong>, <strong><code>테두리 색상(border-color)</code></strong></p>
<h3 id="📌-margin-바깥-여백">📌 margin (바깥 여백)</h3>
<blockquote>
<p>각각의 값은 <code>top</code>, <code>right</code>, <code>bottom</code>, <code>left</code>로 시계방향</p>
</blockquote>
<pre><code>p {
  margin: 10px(상) 20px(우) 30px(하) 40px(좌);
}</code></pre><blockquote>
<p>값을 두 개만 넣으면 <code>top과 bottom</code>이 10px, <code>left 및 right</code>가 20px</p>
</blockquote>
<pre><code>p {
  margin: 10px 20px;
}</code></pre><blockquote>
<p>값을 하나만 넣으면 모든 방향의 바깥 여백에 적용</p>
</blockquote>
<pre><code>p {
  margin: 10px;
}</code></pre><blockquote>
<p>혹은 위치를 특정해 여백 추가하기</p>
</blockquote>
<pre><code>p {
  margin-top: 10px;
  margin-right: 20px;
  margin-bottom: 30px;
  margin-left: 40px;
}</code></pre><ul>
<li>위 규칙은 padding에도 동일하게 적용 가능<pre><code>p {
padding: 10px 20px 30px 40px;
border: 1px solid red;
background-color: lightyellow;
}</code></pre></li>
</ul>
<blockquote>
<p>바깥 여백에 <strong>음수 값</strong>을 지정 시 다른 요소와의 간격이 줄어든다.</p>
</blockquote>
<p>극단적으로 적용하면 화면에서 아예 사라지게 하거나, 다른 엘리먼트와 겹치게 만들 수도 있다.</p>
<pre><code>p {
  margin-top: -2rem;
}</code></pre><hr>
<h2 id="박스-크기-계산하기">박스 크기 계산하기</h2>
<h3 id="📌-박스-크기">📌 박스 크기</h3>
<p>박스 크기보다 콘테츠 크기다 더 큰 경우에는 콘텐츠가 박스 바깥으로 빠져나온다.
이 경우에는 박스 크기에 맞게 콘텐츠를 더 이상 표시하지 않거나, 혹은 박스 안에 스크롤을 추가하여 콘텐츠를 확인할 수 있게 만든다.</p>
<p><code>p 태그에</code> <code>overflow</code> 속성을 지정해 박스보다 큰 콘텐츠에는 스크롤을 표시</p>
<pre><code>p {
  height: 40px;
  overflow: auto;
}</code></pre><p><code>overflow</code> 속성의 <code>auto</code> 값은, 콘텐츠가 넘치는 경우 스크롤을 생성하도록 한다. </p>
<p>넘치는 콘텐츠의 내용을 보여주고 싶지 않을 때에는 <code>overflow</code> 속성에 <code>hidden</code> 값을 사용하자. </p>
<p><code>overflow</code> 속성은 <code>x축</code>과 <code>y축</code>을 지정해 <code>가로 방향</code>으로 스크롤 하거나 <code>세로 방향</code>으로 스크롤 할 수 있게끔 지정할 수 있다. </p>
<p><code>overflow-x</code> 속성과 <code>overflow-y</code> 속성을 이용하면 두 방향을 모두 지정할 수 있다.</p>
<hr>
<p>📌 <strong>처음 레이아웃을 디자인 할 때 가장 많이 하는 실수</strong>
: <strong>박스에 적용할 여백을 고려하지 않고 박스의 크기를 디자인 하는 경우</strong></p>
<p>박스의 크기를 디자인할 때 콘텐츠 영역만 고려하면, 개발 과정에서 처음 생각한 레이아웃을 벗어날 수 있다. 여백을 고려하지 않은 계산 방식은 레이아웃 디자인을 어렵게 만든다.</p>
<h3 id="레이아웃-디자인을-조금-더-쉽게-하는-방법">레이아웃 디자인을 조금 더 쉽게 하는 방법</h3>
<p><strong>여백과 테두리 두께를 포함한 박스 계산법</strong></p>
<p>*은 모든 요소를 선택하는 셀렉터다. 
모든 요소를 선택해 box-sizing 속성을 추가하고, border-box라는 값을 추가한다.</p>
<pre><code>* {
  box-sizing: border-box;
}</code></pre><p>이렇게 모든 요소에 box-sizing: border-box를 적용하면, 모든 박스에서 여백과 테두리를 포함한 크기로 계산된다.</p>
<blockquote>
<p><code>content-box</code>는 박스의 크기를 측정하는 기본값이다. 
그러나 대부분의 레이아웃 디자인에서 여백과 테두리를 포함하는 박스 크기 계산법인 <code>border-box</code>를 권장한다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTML과 CSS]]></title>
            <link>https://velog.io/@ju_haze/HTMLCSS</link>
            <guid>https://velog.io/@ju_haze/HTMLCSS</guid>
            <pubDate>Mon, 24 Oct 2022 00:32:15 GMT</pubDate>
            <description><![CDATA[<h1 id="html--css">HTML &amp; CSS</h1>
<h2 id="🧐-be-개발자가-되고-싶으면서-왜-htmlcss를-알아야-해">🧐 BE 개발자가 되고 싶으면서 왜 HTML&amp;CSS를 알아야 해?</h2>
<p>기본적인 기술의 맥락과 내용을 이해하는 것은 협업이나 개인 프로젝트를 만들어야 하는 경우 매우 중요하다. </p>
<p>웹 개발의 역사를 살펴보면, 초창기에는 FE과 BE가 구분되어 있지 않았다.
하지만 웹 개발 관련 기술이 발전함에 따라 각 기술들의 내용이 점차 세분화되었고, 점차 복잡해지는 웹 개발의 영역을 구분해야 할 필요성이 생겼다.</p>
<p>이런 배경에서 모던 웹 개발은 그 기능과 역할에 따라 <strong><em>보여지는 부분을 담당</em></strong>하는 <strong>프론트엔드</strong>와 <strong><em>보여지지 않는 부분을 담당</em></strong>하는 <strong>백엔드</strong>로 나뉘어졌다.</p>
<p>그럼에도 각 영역의 개발자는 상대 영역의 기본적인 내용에 대해 필수적으로 이해해야 한다.</p>
<p>결국 하나의 웹 서비스는 FE개발자와 BE개발자의 <strong>협업</strong>을 통해 만들어지는 것이기 때문에, 협업의 과정에서 상대가 할 수 있는 것과 없는 것을 전혀 이해할 수 없다면, 원활하게 협업을 하기 어려울 것이다.</p>
<h2 id="htmlhypertext-markup-language">HTML(HyperText Markup Language)</h2>
<p>: 웹 페이지를 구성하는 <strong>마크업 언어</strong></p>
<blockquote>
<h4 id="마크업-언어markup-language">마크업 언어(markup language)</h4>
<p>: 태그 등을 이용하여 문서나 데어터의 구조를 명기하는 언어의 한가지
: 일반적으로 데이터를 기술하는 정도로만 사용되기에 프로그래밍 언어와 구분</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/ju_haze/post/df95461f-9fad-499e-97f1-59bbd584f508/image.png" alt=""></p>
<ul>
<li>웹 페이지의 내용과 뼈대를 정해진 규칙대로 기술하는 언어</li>
<li><strong>프로그래밍 언어 X</strong></li>
</ul>
<blockquote>
<ul>
<li>tag들의 집합<ul>
<li>Tag: 부등호(&lt;&gt;)로 묶인 HTML의 기본 구성 요소</li>
</ul>
</li>
</ul>
</blockquote>
<ul>
<li>html 확장자를 사용</li>
</ul>
<p>태그 내부에 내용이 없다면 즉, <tag></tag>와 같이 표현되는 경우 &lt; tag /&gt;와 같이 표현 가능하다.</p>
<p><strong>주요 범위</strong></p>
<p><code>html</code>: 문서의 <strong>범위</strong>를 설정
<code>head</code>: 문서의 <strong>정보</strong>를 설정
<code>body</code>: 문서의 <strong>구조</strong>를 설정</p>
<h4 id="📌-html에서-자주-사용하는-tags">📌 HTML에서 자주 사용하는 TAGS</h4>
<p>| 태그 | 설명 |
|:----------:|:----------:|:----------:|
| div | Division | 한 줄을 차지한다. |
| span | Span | 컨텐츠 크기만큼 공간을 차지한다.|
| img | Image |이미지 삽입|
| a | Link |링크 삽입|
| ol &amp; ul &amp; li | Unordered List &amp; List Item |각 항목(li)의 정렬된 목록(ol, 순서 O)이나 정렬되지 않은 목록(ul, 순서 X)을 설정|
| input | Input(Text, Radio, Checkbox) |다양한 입력 폼|
| textarea | Multi-line Text Input |다양한 입력 폼|
| button | Button |버튼|</p>
<hr>
<h2 id="ui--ux">UI &amp; UX</h2>
<h3 id="📌-uiuser-interface-사용자-인터페이스">📌 UI(User Interface, 사용자 인터페이스)</h3>
<p>: 컴퓨터와 사용자를 연결하는 상호소통 매개체의 모양과 동작
: SW 화면 등 사람과 접히는 면을 설계</p>
<h3 id="📌-uxuser-experience">📌 UX(User Experience)</h3>
<p>: UI를 포함해서 사용자가 특정 서비스를 사용하면서 직/간접적으로 경험하면서 느끼는 종합적인 만족도(느낌, 태도, 행동)</p>
<blockquote>
<p>*<em>웹페이지를 위한 UI/UX를 고려하여 웹 서비스를 만든다. *</em>
= 사용자의 입장에서 편리하게 해당 서비스를 이용하고 조작할 수 있도록 하는 시각적인 도구를 만들고, 사용자의 입장에서 편의를 생각한다</p>
</blockquote>
<hr>
<h2 id="csscascading-style-sheets">CSS(Cascading Style Sheets)</h2>
<p>: 웹 페이지 스타일 및 레이아웃을 정의하는 스타일시트 언어</p>
<blockquote>
<ul>
<li>웹 사이트 사용자가 HTML 문서에 작성된 콘텐츠를 잘 이해할 수 있도록 도움</li>
</ul>
</blockquote>
<ul>
<li>CSS는 스타일링 도구이므로, 독립적으로 기능X (반드시 HTML이 있어야만 동작)</li>
</ul>
<p>사용법 자체는 그렇게 어렵지 않고 직관적이지만, 프로젝트의 규모가 조금만 커져도 레이아웃이 깨지거나 CSS값이 서로 충돌하는 등 <strong>CSS를 의미있게 구성하는 일이 어렵고 복잡</strong>해진다.</p>
<h3 id="📌-웹-페이지-만들기">📌 <strong>웹 페이지 만들기</strong></h3>
<blockquote>
<ol>
<li>HTML로 웹 페이지의 구조 세우기</li>
<li>더 나은 UX를 제공하기 위해 CSS로 UI와 레이아웃을 적절히 구성</li>
</ol>
</blockquote>
<pre><code>body {
        color : red;
        font-size: 30px;
}</code></pre><p><code>select</code>는 특정 태그의 이름,<code>id</code>, <code>class</code>를 선택한다는 의미를 가지고 있다.</p>
<p>셀렉터로 특정 요소를 선택한 이후에는, 이어지는 선언 블록(중괄호) 안에서 해당 요소에 적용할 내용을 작성할 수 있다.</p>
<p>여기서 요소에 적용할 수 있는 내용을 우리는 <strong><code>속성</code></strong>이라 부르고, <strong><code>속성명(property name)</code></strong>과 <strong><code>속성값(property value)</code></strong>을 사용하여 속성을 변경할 수 있다.</p>
<p>속성과 값의 끝에는 <code>세미콜론(;)</code>을 붙여 각 속성의 내용을 구분할 수 있으며, 하나의 속성만 존재할 때에는 세미콜론을 붙이지 않아도 무방하다.</p>
<p>다만, 좀 더 명료한 구분을 위해 속성과 값을 작성한 다음에는 세미콜론을 적는 습관을 들이는 것이 좋다.</p>
<pre><code>&lt;link rel = &quot;stylesheet&quot; href=&quot;index.css&quot; /&gt;</code></pre><p><code>link 태그</code>는 HTML 파일과 다른 파일을 연결하는 목적으로 사용한다.</p>
<p>link 태그의 <code>rel</code>은 연결하고자 하는 파일의 역할이나 특징을 나타낸다.
CSS는 이름처럼 기본적으로 stylesheet이므로 rel 속성에 stylesheet을 추가한다.
<code>href</code> 속성에는 파일의 위치를 추가해야 한다. </p>
<hr>
<p>CSS를 별도의 파일로 분리하지 않고, HTML 태그에 직접 CSS 속성을 추가할 수 있다.
하지만 관심사 분리 측면에서 권장되지 않는다.</p>
<p><strong>관심사 분리</strong>는 HTML은 웹 페이지의 구조와 내용만 담당하고, CSS는 디자인만 담당하도록 하여 HTML과 CSS의 역할을 분리하는 것을 의미한다.</p>
<p>CSS 스타일을 적용할 수 있는 방법에는 3가지가 있다.</p>
<blockquote>
<ol>
<li>같은 줄에서 스타일을 적용하는 <strong>인라인 스타일</strong></li>
<li>CSS 파일 내에 작성하는 내용을 별도의 파일로 구분하지 않고 style 태그 내에 작성하는 <strong>내부 스타일 시트</strong></li>
<li><strong>외부 스타일 시트</strong></li>
</ol>
</blockquote>
<p>인라인 스타일 </p>
<pre><code>&lt;nav style=&quot;background: #eee; color: blue&quot;&gt;...&lt;/nav&gt;</code></pre><p>그러나 하나에 집중하기 위해 파일이나 구간을 구분하는 관심사 분리 측면에서 <strong>인라인 스타일과 내부 스타일 시트는 권장하지 않는다.</strong></p>
<hr>
<h3 id="기본적인-셀렉터-selecter">기본적인 셀렉터 (selecter)</h3>
<h3 id="📌-id로-이름을-붙여서-스타일링-적용하기">📌 id로 이름을 붙여서 스타일링 적용하기</h3>
<p>만약 navigation section 아래에 있는 <strong>h4 요소</strong>에만 색을 바꾸려면 어떻게 해야 할까?</p>
<p>h4 요소는 하나의 태그이기 때문에 태그를 선택해 색상을 변경할 수 있다.</p>
<pre><code>  h4 {
  color: red;
}</code></pre><p>navigation section에만 적용하려고 했던 의도와는 달리, aside section의 h4 요소에도 변경한 색상이 적용됐다. </p>
<p>navigation section 아래의 h4 요소를 정확하게 선택하기 위해서는 이 엘리먼트에 id를 붙여서 해결할 수 있다. </p>
<p>이름을 붙일 때에는 가능한 의미를 담아서 구분할 수 있도록 하자.</p>
<p>id가 있는 요소를 선택할 때에는 <code>#기호</code>를 이용한다. 
id는 하나의 문서에서 한 요소에만 사용해야 한다.</p>
<p>h4 요소에 id를 붙이고 id로 요소를 선택해 스타일링 한다.</p>
<pre><code>&lt;h4 id=&quot;navigation-title&quot;&gt;This is the navigation section.&lt;/h4&gt;

#navigation-title {
  color: red;
}
</code></pre><h3 id="📌-class로-스타일을-분류하여-적용하기">📌 class로 스타일을 분류하여 적용하기</h3>
<p>id와 유사하게 특정 요소에 class를 지정하는 방법이 있다. </p>
<blockquote>
<ol>
<li><code>navigation section</code>의 <code>li 요소</code>와 <code>footer</code>의 <code>li 요소</code>를 구분한다. </li>
<li>가장 먼저 시도했던 태그를 선택하는 방법으로 li 요소를 스타일링한다.</li>
</ol>
</blockquote>
<pre><code>li {
  text-decoration: underline;
}</code></pre><p>이번에도 의도와는 다르게 footer에 있는 li 요소에도 스타일링이 적용되었다. 
그럼 이번에도 id 사용할 수 있을까? X</p>
<p> <strong>id는 문서 내에 단 하나의 요소에만 적용할 수 있는 유일한 이름</strong>이어야 한다.</p>
<p>이때 사용할 수 있는 속성이 바로 <code>class</code>이다.
주로 동일한 기능을 하는 CSS를 여러 요소에 적용하기 위해 <code>class</code>를 사용한다.</p>
<p>프론트 작업을 진행하다보면 유일한 요소보다는 다수의 요소에 특정 속성 값을 부여해주어야 하는 경우가 많기 때문에 <code>id</code>보다 <code>class</code>가 훨씬 빈번하게 사용된다.</p>
<p>모든 li 요소에 동일한 class를 추가하기 위해서 class를 선택할 때 <code>#</code>이 아닌 <code>.</code> 을 이용하여 선택한다. </p>
<pre><code>&lt;!-- 바른 예제 --&gt;
&lt;ul&gt;
    &lt;li class=&quot;menu-item&quot;&gt;Home&lt;/li&gt;
        &lt;li class=&quot;menu-item&quot;&gt;Mac&lt;/li&gt;
    &lt;li class=&quot;menu-item&quot;&gt;iPhone&lt;/li&gt;
    &lt;li class=&quot;menu-item&quot;&gt;iPad&lt;/li&gt;
&lt;/ul&gt;

.menu-item {
  text-decoration: underline;
}</code></pre><h3 id="📌-여러-개의-class를-하나의-엘리먼트에-적용하기">📌 여러 개의 class를 하나의 엘리먼트에 적용하기</h3>
<p>여러 class를 하나의 요소에 적용하기 위해서는, 띄어쓰기로 적용하려는 class들의 이름을 구분한다.</p>
<blockquote>
<ul>
<li>요소를 만들거나, 요소에 스타일링을 적용할 때에는 항상 이름과 목적이 일치하는지 잘 살펴보아야 한다.</li>
</ul>
</blockquote>
<pre><code>li class=&quot;menu-item selected&quot;&gt;Home&lt;/li&gt;

.selected {
  font-weight: bold;
  color: #009999;
}</code></pre><h3 id="📌-id와-class-차이">📌 id와 class 차이</h3>
<table>
<thead>
<tr>
<th align="center">id</th>
<th align="center">class</th>
</tr>
</thead>
<tbody><tr>
<td align="center">#으로 선택</td>
<td align="center">.으로 선택</td>
</tr>
<tr>
<td align="center">한 문서에 단 하나의 요소에만 적용</td>
<td align="center">동일한 값을 갖는 요소 많음</td>
</tr>
<tr>
<td align="center">특정 요소에 이름을 붙이는 데 사용</td>
<td align="center">스타일의 분류에 사용</td>
</tr>
</tbody></table>
<hr>
<h3 id="css-selector">CSS Selector</h3>
<p><strong><code>셀렉터</code></strong></p>
<pre><code>h1 { }
div { }</code></pre><p><strong><code>전체 셀렉터</code></strong></p>
<pre><code>* { }</code></pre><p><strong><code>Tag 셀렉터</code></strong></p>
<pre><code>section, h1 { }</code></pre><p><strong><code>ID 셀렉터</code></strong></p>
<pre><code class="language-css">#only { }</code></pre>
<p><strong><code>class 셀렉터</code></strong></p>
<pre><code>.widget { }
.center { }</code></pre><p><strong><code>attirbute 셀렉터</code></strong></p>
<pre><code>a[href] { }
p[id=&quot;only&quot;] { }
p[class~=&quot;out&quot;] { }
p[class|=&quot;out&quot;] { }
section[id^=&quot;sect&quot;] { }
div[class$=&quot;2&quot;] { }
div[class*=&quot;w&quot;] { }</code></pre><p><strong><code>후손 셀렉터</code></strong></p>
<pre><code>header h1 {}</code></pre><p><strong><code>자식 셀렉터</code></strong></p>
<pre><code>header &gt; p { }</code></pre><p><strong><code>인접 형제 셀렉터</code></strong></p>
<pre><code>section + p { }</code></pre><p><strong><code>형제 셀렉터</code></strong></p>
<pre><code>section ~ p { }</code></pre><p><strong><code>가상 클래스</code></strong></p>
<pre><code>a:link { }
a:visited { }
a:hover { }
a:active { }
a:focus { }</code></pre><p><strong><code>요소 상태 셀렉터</code></strong></p>
<pre><code>input:checked + span { }
input:enabled + span { }
input:disabled + span { }</code></pre><p><strong><code>구조 가상 클래스 셀렉터</code></strong></p>
<pre><code>p:first-child { }
ul &gt; li:last-child { }
ul &gt; li:nth-child(2n) { }
section &gt; p:nth-child(2n+1) { }
ul &gt; li:first-child { }
li:last-child { }
div &gt; div:nth-child(4) { }
div:nth-last-child(2) { }
section &gt; p:nth-last-child(2n + 1) { }
p:first-of-type { }
div:last-of-type { }
ul:nth-of-type(2) { }
p:nth-last-of-type(1) { }</code></pre><p><strong><code>부정 셀렉터</code></strong></p>
<pre><code>input:not([type=&quot;password&quot;]) { }
div:not(:nth-of-type(2)) { }</code></pre><p><strong><code>정합성 확인 셀렉터</code></strong></p>
<pre><code>input[type=&quot;text&quot;]:valid { }
input[type=&quot;text&quot;]:invalid { }</code></pre><hr>
<h2 id="텍스트-꾸미기">텍스트 꾸미기</h2>
<h3 id="📌-색상">📌 색상</h3>
<p>글자의 색상을 변경하는 속성은 <code>color</code></p>
<blockquote>
<ul>
<li>HEX(16진수, RGB) </li>
</ul>
</blockquote>
<ul>
<li>주요 색상의 이름을 사용</li>
</ul>
<p>예) red class의 color 속성에 #ff0000 값을 할당한다.</p>
<pre><code>.red {
  color: #ff0000;
}</code></pre><p>배경 색상이나 박스 테두리 색상을 적용할 수도 있다.</p>
<pre><code>.box {
  color: #155724; /* 글자 색상 */
  background-color: #d4edda; /* 배경 색상 */
  border-color: #c3e6cb; /* 테두리 색상 */
}</code></pre><h3 id="📌-글꼴">📌 글꼴</h3>
<p>글꼴의 속성을 font-family</p>
<pre><code>.emphasize {
  font-family: &quot;SF Pro KR&quot;, &quot;MalgunGothic&quot;, &quot;Verdana&quot;;
}</code></pre><p>글꼴의 이름은 <code>따옴표</code>를 붙여 적용할 수 있다.</p>
<p>사용하려는 글꼴이 존재하지 않거나, 디바이스에 따라 지원하지 않을 수 있다. 
이런 경우를 대비하여 <code>fallback</code> 글꼴을 추가할 수 있다. </p>
<p>fallback은 표현하고 싶은 글꼴이 없거나 사용할 수 없는 경우를 위한 대비책으로, fallback을 위해 여러 글꼴을 사용하는 경우, 쉼표로 구분하여 입력할 수 있다. </p>
<p>입력된 순서대로 fallback이 적용된다.</p>
<h3 id="📌-크기">📌 크기</h3>
<p>글자의 크기를 변경하기 위해서는 <code>font-size</code> 속성을 사용한다.</p>
<pre><code>.title {
  font-size: 24px;
}</code></pre><p><strong>글꼴의 단위</strong></p>
<p><code>절대 단위</code>: px, pt 등
<code>상대 단위</code>: %, em, rem, ch, vw, vh 등</p>
<p>기기나 브라우저 사이즈 등의 환경에 영향을 받지 않는 절대적인 크기로 정하는 경우 
px(픽셀)을 사용한다. 
px는 글꼴의 크기를 고정하는 단위이기 때문에 <strong>사용자 접근성이 불리</strong>하다.</p>
<p>하지만 픽셀을 모바일 기기처럼 작은 화면이면서, 동시에 고해상도인 경우에도 적합하지 않다.</p>
<p>기본적으로 고해상도에서는 1px이 모니터이 한 점보다 크게 업스케일(upscale)되기 때문에, 뚜렷하지 못한 형태로 출력되는 경우도 있다.</p>
<p>따라서 px은 인쇄와 같이 화면의 사이즈가 정해진 경우에 유리하다.</p>
<p>그 외 일반적인 경우에는 상대 단위인 rem을 추천한다.
root의 글자 크기, 즉 브라우저의 기본 글자 크기가 1rem이다</p>
<h3 id="📌-기타-스타일링">📌 기타 스타일링</h3>
<ul>
<li><code>굵기</code>: font-weight</li>
<li><code>밑줄, 가로줄</code>: text-decoration</li>
<li><code>자간</code>: letter-spacing</li>
<li><code>행간</code>: line-height</li>
</ul>
<h3 id="📌-정렬">📌 정렬</h3>
<ul>
<li><code>가로 정렬</code> : text-align</li>
<li><code>왼쪽 정렬</code>: left</li>
<li><code>오른쪽 정렬</code>: right</li>
<li><code>가운데 정렬</code>: center</li>
<li><code>양쪽 정렬</code>: justify</li>
</ul>
<p><strong><code>세로 정렬</code></strong>
vertical-align 속성을 쉽게 떠올릴 수 있지만, 이 속성은 부모 요소의 display 속성이 반드시 <code>table-cell</code>이어야 한다. </p>
<blockquote>
<p>정렬하고자 하는 글자를 둘러싸고 있는 박스의 높이가, 글자 높이보다 큰 경우에만 적용할 수 있다.</p>
</blockquote>
<hr>
<p>Velog로 글을 작성하려고 하는데 단축키도 안먹히고 글쓰기 불편한 것 같다.
너무 글로만 작성한 것 같아서 좀 더 간결하게 정리해야 할 필요가 있는 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[KPT 회고 방법]]></title>
            <link>https://velog.io/@ju_haze/KPT-%ED%9A%8C%EA%B3%A0-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@ju_haze/KPT-%ED%9A%8C%EA%B3%A0-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Mon, 24 Oct 2022 00:15:13 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/ju_haze/post/ca0b444b-23f2-459f-b5f1-85b122371cd3/image.png" alt=""></p>
<h2 id="회고">회고</h2>
<p>: 지나간 일을 돌이켜 생각하는 것 </p>
<h2 id="contents">contents</h2>
<blockquote>
<p>*<em>1. 목표 상기하기
2. Keep, Problem 작성하기
3. Try 작성하기
4. 우선순위 정하기
*</em></p>
</blockquote>
<h3 id="1-목표-상기하기">1. 목표 상기하기</h3>
<blockquote>
<ul>
<li>현재 ‘내&#39;가 학습을 통해 이루고자 하는 것은 무엇인가?</li>
</ul>
</blockquote>
<ul>
<li>현재 바라는 목표를 모두 이루었다면 ‘나&#39;는 어떻게 변해 있을까?</li>
<li>‘나&#39;에게서 어떤 모습을 보았을 때, 목표를 이루었다고 말할 수 있을까?</li>
</ul>
<h3 id="2-keep-problem-작성하기">2. Keep, Problem 작성하기</h3>
<p>KPT의 앞 두 글자는 각각 Keep, Problem의 약자이다.</p>
<p><strong>Keep</strong></p>
<ul>
<li>만족스러운 부분</li>
<li>앞으로 계속 이어가면 좋을 부분</li>
</ul>
<p><strong>Keep 질문</strong></p>
<blockquote>
<ul>
<li>목표를 달성하기 위해 시도했던 것 중 가장 효과적이었던 노력은 무엇인가?</li>
</ul>
</blockquote>
<ul>
<li>목표를 달성하기 위해 했던 모든 노력 중 반드시 유지해야 할 것은 무엇인가?</li>
</ul>
<p><strong>Problem</strong></p>
<ul>
<li>아쉬운 부분</li>
<li>목표를 이루는데 장애물이 되었던 것</li>
<li>개선이 필요하다고 생각되는 부분</li>
</ul>
<p><strong>Problem 질문</strong></p>
<blockquote>
<ul>
<li>목표를 달성하기 위해 세웠던 계획 중 가장 유지하기 어려웠던 것은 무엇인가?</li>
</ul>
</blockquote>
<ul>
<li>목표를 달성하는데 있어서 가장 큰 장애물은 무엇인가?</li>
</ul>
<h3 id="3-try-작성하기">3. Try 작성하기</h3>
<p>KPT의 마지막 글자인 T는 Try의 약자로, 즉시 실천할 <strong>Action Item</strong>을 의미한다.
단, Try를 작성함에 있어서 반드시 주의해야 할 것은 지속적으로 실천이 가능해야 한다는 것이다.</p>
<ul>
<li>Keep과 Problem을 기반으로 작성하며 구체적으로 작성한다.</li>
<li>Keep 중에서 반드시 유지하고 싶거나, 더 발전시키고 싶은 것</li>
<li>Problem 을 해결할 수 있는 방법 </li>
</ul>
<p><strong>Try 질문</strong></p>
<blockquote>
<ul>
<li>목표를 달성하기 위해 반드시 제거해야 하는 장애물이 있다면, 어떻게 제거할 수 있을까?</li>
</ul>
</blockquote>
<ul>
<li>목표를 달성하기 위해 계속해서 유지해야 할 노력이 있다면 무엇인가?</li>
</ul>
<h3 id="4-우선순위-정하기">4. 우선순위 정하기</h3>
<ul>
<li><p>가장 시급하면서 가장 빠르게 시도할 수 있는 것</p>
<p>  복습, 운동</p>
</li>
<li><p>시급하지만 시도하는데 시간이 걸리거나, 빠르게 시도가 가능하지만 시급하지 않은 것 </p>
<p>  블로그 작성하기</p>
</li>
<li><p>시급하지 않고 시도하는데 시간이 걸리는 것</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SEB BE 42기] OT]]></title>
            <link>https://velog.io/@ju_haze/%EC%BD%94%EB%93%9C%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%B8%A0-BE-42%EA%B8%B0-DAY-1</link>
            <guid>https://velog.io/@ju_haze/%EC%BD%94%EB%93%9C%EC%8A%A4%ED%85%8C%EC%9D%B4%EC%B8%A0-BE-42%EA%B8%B0-DAY-1</guid>
            <pubDate>Thu, 20 Oct 2022 07:50:42 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/ju_haze/post/e7c1115f-ed08-495e-8e70-476635b5871b/image.png" alt=""></p>
<h3 id="시작해봐요-백엔드">시작해봐요 백엔드</h3>
<p>코드스테이츠 백엔드 코스에 합격하고 첫번째 수업이다.
전공자가 왜...? 라고 생각할 수 있지만 웹 백엔드를 학교에서 따로 집중적으로 배우지는 않았고 혼자 독학하다보니 점점 게을러지면서 공부를 안해서 6개월 간 공부 습관도 들일 겸 지원하게 되었다.</p>
<p>코드스테이츠를 선택한 이유는 커리큘럼이 마음에 들어서다.</p>
<p>9시부터 18시까지 수업에 집중할 수 있을까 걱정이 많았는데 예상 외로 그냥 개인이 공부하는 시간이 꽤나 있어서 놀랐다. </p>
<p>페어 프로그래밍에 대한 설명도 있었는데 페어에게 과연 내가 도움을 줄 수 있을까? 라는 걱정이 있지만 서로 배워가는 과정이니 자신감을 가지자! ... 일단은 이렇게 생각하려고 한다. </p>
<p>휴학했을 때 네이버 커넥트재단에서 운영하는 부스트코스를 수강해본 적이 있는데 어느 과정을 수강하던간에 pseudo code(의사 코드)를 먼저 작성해보게 하는 것 같다.</p>
<p>그 때는 라면 끓이기 pseudo code 작성하기였는데 </p>
<ol>
<li>냄비와 500ml 생수, 라면, 부탄가스와 버너, 젓가락을 준비한다.</li>
<li>버너에 부탄가스를 넣고 그 위에 냄비를 올린다.</li>
<li>냄비에 500ml 물을 넣는다.</li>
<li>불을 켜고 물을 끓인다.</li>
<li>물이 끓으면 라면과 스프, 건더기 스프를 넣고 3분간 끓인다.</li>
<li>3분이 지나면 불을 끄고 젓가락으로 맛있게 먹는다.</li>
</ol>
<p>사실 몇 년 전에 써서 자세히 기억은 나지 않지만 저런식으로 썼던 것 같다.
(그때보다 자세하게 쓴 듯..?)</p>
<p>어쨌든 저걸 쓰고 다른 사람들이 쓴 것을 보고 멘토님께서 쓴 걸 봤는데 생각보다 자세하게 라면을 한번도 안 끓여본 사람도 끓일 수 있도록 작성하는 것을 보고 나는 아직 멀었구나 저렇게 작성해야 하는거구나 생각했었다. </p>
<p>마지막 학기를 다니면서 부트 캠프를 병행하게 되었는데 이왕 시작한 거 열심히 해보려고 한다. </p>
<p><strong>1일 1 commit 1 TIL에 도전</strong>해보겠다.</p>
<hr>
<h4 id="keep">Keep</h4>
<p><strong>1. 일찍 일어나자!</strong> 
전날 새벽 2시에 잠들어서 과연 내가 일찍 일어나서 수업을 들을 수 있을까 걱정했는데 이게 무슨일이람? 6시 반에 눈을 뜨고 7시 반에는 정신 차렸다.
6개월동안 지각하지 말고 매일매일 일찍 일어나보자</p>
<p><strong>2. 블로그 작성하기</strong>
매번 써야지 하다가 작심 3일..ㅎㅎ 이번에는 꾸준히 써보자</p>
<h4 id="try">Try</h4>
<p><strong>1. 운동하기</strong>
이왕 아침에 일찍 일어나고 6개월 간 열심히 공부하기로 마음먹은 김에 6개월 간 운동을 꾸준하게 해보려고 한다.</p>
<p><strong>2. 독서하기</strong>
내가 부족한 부분이 무엇인지 생각해봤는데 CS에 대한 지식이 부족한 것 같다. 아예 없지는 않지만 시험을 위한 벼락치기 공부 위주로 해서 설명해보라고 하면 어영부영 설명하는 정도? 
그래서 오늘 도서관에 가서 책 3권을 대출했다.</p>
<p>마음먹은 김에 도서관 다녀오는 그런 사람이다 이거야~~</p>
<p>&lt;한권으로 읽는 컴퓨터 구조와 프로그래밍&gt;
&lt;오늘도 개발자가 안 된다고 말했다&gt;
&lt;1일 1로그 100일 완성 it 지식&gt;</p>
<p>2주간 책을 읽고 리뷰를 작성해보겠다.</p>
<p>나 자신 화이팅!</p>
<hr>
<h3 id="회고-작성하는-방법">회고 작성하는 방법</h3>
<pre><code>1. 지금 현재의 기분이나 느낌 표현하기
2. 오늘 학습한 내용 중 지금 떠올릴 수 있는 단어 모두 나열하기
3. 2에서 작성한 단어를 가지고, 오늘의 학습 내용 설명하기
4. 설명하기 어려운 단어가 있다면 그 이유에 대해 간단히 작성해보기
5. 그 단어를 스스로 설명할 수 있기 위해서 누군가에게 질문을 한다면, 어떤 질문을 해야할까 생각해보기</code></pre><ul>
<li>5번 방법은 질문하는 능력을 키우기에 좋은 것 같다.</li>
<li>나는 말을 잘 하지는 못해서 최대한 구글링해보다가 그래도 모르겠을 때 질문을 하는 편이다.</li>
<li>내가 원하는 방향으로, 답변을 얻기에 좋겠지만 많은 노력과 생각이 필요할 것 같다.</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>