<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>killerwhale-94.log</title>
        <link>https://velog.io/</link>
        <description>corin-2</description>
        <lastBuildDate>Tue, 25 Apr 2023 02:20:46 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>killerwhale-94.log</title>
            <url>https://velog.velcdn.com/images/killerwhale-94/profile/3a4c8465-9406-4206-b736-85e23a699ae6/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. killerwhale-94.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/killerwhale-94" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[4월 25일 cs : 정규표현식, 호이스팅]]></title>
            <link>https://velog.io/@killerwhale-94/4%EC%9B%94-25%EC%9D%BC-cs-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85</link>
            <guid>https://velog.io/@killerwhale-94/4%EC%9B%94-25%EC%9D%BC-cs-%EC%A0%95%EA%B7%9C%ED%91%9C%ED%98%84%EC%8B%9D-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85</guid>
            <pubDate>Tue, 25 Apr 2023 02:20:46 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="정규-표현식-regular-expression에-대해-설명해보세요">정규 표현식 (Regular Expression)에 대해 설명해보세요.</h3>
</blockquote>
<p>정규 표현식, 또는 정규식은 문자열에서 특정 문자 조합을 찾기 위한 패턴입니다.
 JavaScript에서는 정규 표현식도 객체로서, RegExp의 exec()와 test() 메서드를 사용할 수 있습니다.</p>
<p>정규 표현식에서 사용되는 기호를 Meta문자라고  표현합니다. 표현식에서 내부적으로 특정 의미를 가지는 문자를 말하며 간단하게 정리하면 아래의 표와 같습니다.</p>
<p><img src="https://velog.velcdn.com/images/killerwhale-94/post/026acf72-6e18-46e4-a4ea-38972481640e/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/killerwhale-94/post/8a4c3124-d308-406a-9bf2-13782cf3b74c/image.png" alt=""></p>
<p>출저
<a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_expressions">https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Regular_expressions</a>
<a href="https://skout90.github.io/2017/09/23/Javascript/6.%20javascript-RegExp%EB%82%B4%EC%9E%A5%EA%B0%9D%EC%B2%B4/">https://skout90.github.io/2017/09/23/Javascript/6.%20javascript-RegExp%EB%82%B4%EC%9E%A5%EA%B0%9D%EC%B2%B4/</a></p>
<blockquote>
<h3 id="자바스크립트-javascript의-호이스팅-hoisting이란-무엇인가요">자바스크립트 (JavaScript)의 호이스팅 (Hoisting)이란 무엇인가요?</h3>
</blockquote>
<p>JavaScript에서 호이스팅(hoisting)이란, 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다. var로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화합니다. 반면 let과 const로 선언한 변수의 경우 호이스팅 시 변수를 초기화하지 않습니다.</p>
<h4 id="호이스팅은-코드가-실행하기-전-변수선언함수선언이-해당-스코프의-최상단으로-끌어-올려진-것-같은-현상을-말한다">호이스팅은 코드가 실행하기 전 변수선언/함수선언이 해당 스코프의 최상단으로 끌어 올려진 것 같은 현상을 말한다.</h4>
<p>출저
<a href="https://developer.mozilla.org/ko/docs/Glossary/Hoisting">https://developer.mozilla.org/ko/docs/Glossary/Hoisting</a>
<a href="https://hanamon.kr/javascript-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85%EC%9D%B4%EB%9E%80-hoisting/">https://hanamon.kr/javascript-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85%EC%9D%B4%EB%9E%80-hoisting/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[4월 20일 cs : Promise,await, Closure]]></title>
            <link>https://velog.io/@killerwhale-94/4%EC%9B%94-20%EC%9D%BC-cs-Promiseawait-Closure</link>
            <guid>https://velog.io/@killerwhale-94/4%EC%9B%94-20%EC%9D%BC-cs-Promiseawait-Closure</guid>
            <pubDate>Thu, 20 Apr 2023 05:05:04 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="프로미스-promise와-asyncawait에-대해-설명해보세요">프로미스 (Promise)와 async/await에 대해 설명해보세요.</h3>
<p>프로미스(Promise)는 자바스크립트 비동기 처리에 사용되는 객체입니다. 비동기 처리란, 어떤 작업을 수행할 때 그 결과가 나오기까지 시간이 걸리는 작업을 의미합니다. 예를 들어, 파일을 읽거나 데이터베이스에서 데이터를 가져오는 작업은 결과가 나오기까지 시간이 걸리기 때문에 비동기 처리가 필요합니다.</p>
</blockquote>
<p>프로미스는 비동기 처리를 위해 사용되며, 일반적으로 다음과 같은 형태로 사용됩니다.</p>
<pre><code>const promise = new Promise((resolve, reject) =&gt; {
  // 비동기 작업 수행
  if (작업이 성공) {
    resolve(결과);
  } else {
    reject(에러);
  }
});

promise.then((결과) =&gt; {
  // 결과 처리
}).catch((에러) =&gt; {
  // 에러 처리
});</code></pre><p>프로미스는 new Promise()로 생성하며, 생성자 함수의 인자로는 resolve와 reject 함수를 인자로 받습니다. 작업이 성공하면 resolve 함수를 호출하고, 실패하면 reject 함수를 호출합니다.</p>
<p>이렇게 생성된 프로미스 객체는 then()과 catch() 메서드를 가지며, then() 메서드는 작업이 성공했을 때 실행되며, catch() 메서드는 작업이 실패했을 때 실행됩니다. then() 메서드와 catch() 메서드는 각각 콜백 함수를 인자로 받으며, 콜백 함수에는 각각 resolve()와 reject() 함수를 호출할 때 넘겨준 인자가 전달됩니다.</p>
<p>async/await는 ES8(ECMAScript 2017)에서 추가된 비동기 처리 패턴입니다. async/await는 프로미스를 기반으로 동작하며, 코드의 가독성을 높이고 비동기 처리를 보다 간편하게 처리할 수 있도록 해줍니다.</p>
<p>async 함수는 함수 선언문이나 함수 표현식 앞에 async 키워드를 붙여서 만듭니다. async 함수 내부에서는 await 키워드를 사용하여 프로미스 객체가 처리되고 결과가 반환될 때까지 기다릴 수 있습니다. 이 때, async 함수 내부에서 await 키워드를 사용한 코드는 비동기 처리가 완료되기 전까지는 다음 코드로 넘어가지 않습니다.</p>
<pre><code>async function myFunction() {
  try {
    const result = await promise; // 프로미스 객체의 처리를 기다림
    // 비동기 처리 완료 후 처리할 코드
  } catch (error) {
    // 에러 처리
  }
}</code></pre><p>async 함수는 프로미스 객체를 반환하며, 반환된 프로미스 객체는 then()과 catch() 메서드를 사용하여 처리할 수 있습니다.</p>
<blockquote>
<h3 id="클로저-closure란-무엇인가요">클로저 (Closure)란 무엇인가요?</h3>
</blockquote>
<p>스코프는 함수를 호출할 때가 아니라 함수를 어디에 선언하였는지에 따라 결정된다. 이를 렉시컬 스코핑(Lexical scoping)라 한다.</p>
<p>클로저(Closure)란, 함수와 그 함수가 선언됐을 때의 렉시컬 환경(Lexical Environment)과의 조합으로 만들어진 특별한 객체입니다. 클로저는 함수 내부에서 선언한 변수를 외부에서 참조할 수 있도록 해줍니다.</p>
<p>좀 풀어말하면 클로저는 반환된 내부함수가 자신이 선언됐을 때의 환경(Lexical environment)인 스코프를 기억하여 자신이 선언됐을 때의 환경(스코프) 밖에서 호출되어도 그 환경(스코프)에 접근할 수 있는 함수를 말한다. 이를 조금 더 간단히 말하면 클로저는 자신이 생성될 때의 환경(Lexical environment)을 기억하는 함수다라고 말할 수 있겠다.</p>
<p>예를 들어, 다음과 같이 함수 내부에서 선언한 변수를 외부에서 참조하는 경우, 클로저가 생성됩니다.</p>
<pre><code>function outerFunction() {
  const outerVariable = &#39;outer&#39;;

  function innerFunction() {
    console.log(outerVariable);
  }

  return innerFunction;
}

const inner = outerFunction();
inner(); // &quot;outer&quot;</code></pre><p>위 예제에서, outerFunction() 내부에서 선언한 outerVariable 변수를 innerFunction() 내부에서 참조하고 있습니다. 이 때, outerFunction()의 실행 컨텍스트가 종료되어도 innerFunction()이 outerVariable 변수를 계속 참조할 수 있도록 클로저가 생성됩니다.</p>
<p>클로저는 주로 다음과 같은 상황에서 사용됩니다.</p>
<p>정보 은닉(Information Hiding): 함수 내부에 선언한 변수를 외부에서 직접 접근하지 못하게 하여 정보를 보호할 수 있습니다. 즉 전역변수의 사용을 억제 해 많은 오류를 예방할 수 있다.
캡슐화(Encapsulation): 함수를 사용하여 객체를 생성하고, 클로저를 이용하여 객체 내부의 변수와 메서드를 숨길 수 있습니다.
함수 팩토리(Function Factory): 함수를 반환하는 함수를 만들어서, 반환된 함수가 자신이 만들어질 때의 렉시컬 환경을 기억하도록 할 수 있습니다.
클로저는 자바스크립트에서 중요한 개념 중 하나이며, 함수형 프로그래밍에서는 불변성과 함수의 순수성을 보장하기 위해 불가피하게 사용됩니다.</p>
<p>출저
<a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Closures">https://developer.mozilla.org/ko/docs/Web/JavaScript/Closures</a>
<a href="https://poiemaweb.com/js-closure">https://poiemaweb.com/js-closure</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[4월 19일 cs: 보안과 개발방법론]]></title>
            <link>https://velog.io/@killerwhale-94/4%EC%9B%94-19%EC%9D%BC-cs-%EB%B3%B4%EC%95%88%EA%B3%BC-%EA%B0%9C%EB%B0%9C%EB%B0%A9%EB%B2%95%EB%A1%A0</link>
            <guid>https://velog.io/@killerwhale-94/4%EC%9B%94-19%EC%9D%BC-cs-%EB%B3%B4%EC%95%88%EA%B3%BC-%EA%B0%9C%EB%B0%9C%EB%B0%A9%EB%B2%95%EB%A1%A0</guid>
            <pubDate>Wed, 19 Apr 2023 23:06:28 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="보안-security과-관련된-문제들은-어떤-것이-있나요">보안 (Security)과 관련된 문제들은 어떤 것이 있나요?</h3>
</blockquote>
<p>악성 코드: 악성 코드는 컴퓨터 시스템에 손상을 입히는 소프트웨어입니다. 바이러스, 웜, 트로이 목마 등이 있으며, 이러한 악성 코드가 시스템에 침투하여 정보를 유출하거나 시스템을 마비시키는 경우가 있습니다.</p>
<p>인터넷 사기: 인터넷 사기는 인터넷을 통해 이루어지는 범죄로, 가장 흔한 예로는 사이버 스캠이 있습니다. 이는 거짓 정보나 이메일을 사용하여 개인 정보를 도용하거나 금전적인 이득을 취하는 방법입니다.</p>
<p>암호화된 정보 유출: 보안이 약한 상태에서 데이터가 유출되면 큰 문제가 될 수 있습니다. 특히 개인 정보, 금융 정보, 군사 기밀 등이 유출되면 큰 피해가 발생할 수 있습니다.</p>
<p>불법 액세스: 해커나 사이버 공격자들은 불법적으로 시스템에 접근하여 정보를 탈취하거나 시스템을 조작하는 경우가 있습니다.</p>
<p>내부자에 의한 공격: 내부자가 기업 내부에서 보안을 뚫어 정보를 유출하는 경우도 있습니다.</p>
<p>암호화 기술의 한계: 암호화 기술의 발전으로 정보 보안이 강화되었지만, 이 역시 해킹 등의 공격으로 암호화를 해독하는 경우도 있습니다.</p>
<p>IoT 보안: 최근에는 인터넷에 연결되는 사물들이 늘어나면서, IoT 보안 문제도 더 커지고 있습니다. 이러한 IoT 기기들은 보안에 취약하여 해커에 의해 조작될 수 있습니다.</p>
<p>사회 공학적 공격: 해커들은 인간의 신뢰를 이용해 보안을 뚫는 방법을 사용하기도 합니다. 사회 공학적 공격은 이메일, 문자, 전화 등을 통해 사람들을 속여 정보를 빼내는 방법입니다.</p>
<blockquote>
<h3 id="개발-방법론-development-methodology에-대해-설명해보세요">개발 방법론 (Development Methodology)에 대해 설명해보세요.</h3>
</blockquote>
<p>개발 방법론은 소프트웨어 개발을 위한 절차, 방법, 체계, 규칙 등을 정의하고 구체화한 것입니다. 소프트웨어 개발 과정에서 품질을 확보하고 생산성을 향상시키기 위해 적용됩니다. 다음은 대표적인 개발 방법론에 대한 설명입니다.</p>
<p>폭포수 모델 (Waterfall Model)
소프트웨어 개발 과정을 여러 단계로 구분하여 각 단계가 완료된 후에 다음 단계를 진행하는 방식입니다. 단계별로 문서화가 철저하게 이루어져 있어서 프로젝트 관리와 품질 보증에 용이하며, 수정이 쉽지 않은 단점이 있습니다.</p>
<p>애자일 방법론 (Agile Methodology)
고객과 개발자의 협력과 상호작용에 중점을 둔 방법론입니다. 요구사항의 변경과 빠른 반영이 가능하며 작은 주기로 반복하는 개발 방식으로, 빠르게 변화하는 비즈니스 환경에 적합합니다.</p>
<p>스크럼 (Scrum)
애자일 방법론 중 하나로, 일정 주기마다 작업 내용을 결정하고, 팀 내 구성원 간에 짧은 회의를 통해 작업 진행 상황을 파악하는 방법론입니다. 팀워크가 중요한 방법론이며, 빠른 출시와 품질 향상이 가능합니다.</p>
<p>XP (Extreme Programming)
애자일 방법론 중 하나로, 테스트 중심 개발(Test-driven development), 쌍방향 코드 검토, 지속적인 통합(Continuous Integration) 등을 적용하여 빠르게 변화하는 요구사항에 대응하는 방법론입니다.</p>
<p>Lean 소프트웨어 개발 방법론
제조업에서 발전한 Lean 방법론의 개념을 소프트웨어 개발에 적용한 방법론입니다. 낭비를 제거하고, 가치 창출에 집중하여 빠른 출시와 최적화된 프로세스를 추구합니다.</p>
<p>이외에도 다양한 개발 방법론이 존재하며, 프로젝트의 성격과 특성에 따라 적합한 방법론을 선택하여 프로젝트를 진행해야 합니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[4월 18일 CS : 자료구조, 알고리즘, 데이터베이스, ORM]]></title>
            <link>https://velog.io/@killerwhale-94/4%EC%9B%94-18%EC%9D%BC-CS-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-ORM</link>
            <guid>https://velog.io/@killerwhale-94/4%EC%9B%94-18%EC%9D%BC-CS-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-ORM</guid>
            <pubDate>Tue, 18 Apr 2023 02:20:38 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="자료구조와-알고리즘-중에서-자주-사용되는-것들은-어떤-것이-있나요">자료구조와 알고리즘 중에서 자주 사용되는 것들은 어떤 것이 있나요?</h3>
</blockquote>
<h4 id="자료구조">자료구조</h4>
<p>배열 (Array)
연결 리스트 (Linked List)
스택 (Stack)
큐 (Queue)
해시 테이블 (Hash Table)
힙 (Heap)
트리 (Tree)
그래프 (Graph)</p>
<h4 id="알고리즘">알고리즘</h4>
<p>이진 검색 (Binary Search)
정렬 알고리즘 (Sorting Algorithms) : 선택정렬, 삽입정렬, 퀵정렬, 병합정렬, 힙정렬 등
탐색 알고리즘 (Search Algorithms) : DFS, BFS 등
그래프 알고리즘 (Graph Algorithms) : 최단 경로, 최소 신장 트리 등
동적 계획법 (Dynamic Programming)
그리디 알고리즘 (Greedy Algorithms)</p>
<blockquote>
<h3 id="데이터베이스-database와-ormobject-relational-mapping에-대해-설명해보세요">데이터베이스 (Database)와 ORM(Object Relational Mapping)에 대해 설명해보세요.</h3>
</blockquote>
<h4 id="데이터베이스의-정의">데이터베이스의 정의</h4>
<p>데이터베이스는 구조화된 정보 또는 데이터의 조직화된 모음으로서 일반적으로 컴퓨터 시스템에 전자적으로 저장됩니다 데이터베이스는 일반적으로 데이터베이스 관리 시스템(DBMS)에 의해 제어됩니다. 연결된 애플리케이션과 함께 데이터와 DBMS를 하나로 묶어 데이터베이스 시스템이라고 하며 단축하여 데이터베이스라고도 합니다.
대부분의 데이터베이스는 데이터 작성 및 쿼리에 SQL(Structured Query Language)을 사용합니다.</p>
<h4 id="데이터베이스-관리-시스템dbms이란">데이터베이스 관리 시스템(DBMS)이란?</h4>
<p>데이터베이스에는 일반적으로 데이터베이스 관리 시스템(DBMS)으로 알려진 포괄적인 데이터베이스 소프트웨어 프로그램이 필요합니다. DBMS는 데이터베이스와 최종 사용자 또는 프로그램 간의 인터페이스 역할을 하여 사용자가 정보의 구성 및 최적화 방법을 검색, 업데이트 및 관리할 수 있게 해줍니다. 또한 DBMS는 데이터베이스의 감독 및 제어가 용이하여 성능 모니터링, 튜닝, 백업, 복구 같은 다양한 관리 작업이 가능합니다.</p>
<p>인기 데이터베이스 소프트웨어 또는 DBMS로는 MySQL, Microsoft Access, Microsoft SQL Server, FileMaker Pro, Oracle Database 및 dBASE가 있습니다.</p>
<h4 id="데이터-베이스-관리-시스템의-특징">데이터 베이스 관리 시스템의 특징</h4>
<ol>
<li>데이터의 독립성</li>
<li>데이터의 무결성</li>
<li>데이터의 보안성</li>
<li>데이터의 일관성</li>
<li>데이터의 중복 최소화</li>
</ol>
<h4 id="데이터베이스-관리-시스템의-종류">데이터베이스 관리 시스템의 종류</h4>
<ul>
<li><p>계층형( Hierarchical DataBase )
트리 형태의 구조. 트리는 부모-자식 관계로 표현되며 1:N로 구성될 수 있음
DBMS예 : IMS ( IBM 의 Information Management System )</p>
</li>
<li><p>네트워크형 ( Network DataBase )
계층형 데이터베이스의 단점을 보완하여 데이터 간 N:N ( 다 대 다) 구성이 가능한 망 형 모델. 계층 구조에 링크를 추가하여 유연성과 접근성을 높였지만 구조가 복잡해 유지보수가 어렵다.
DBMS 예 : IDMS ( Integrated Data Store ) </p>
</li>
<li><p>관계형 ( Relational DataBase )
관계형 데이터베이스 모델은 키( key )와 값 ( value )으로 이루어진 데이터들을 행( row )과 열 ( Column )로 구성된 테이블 구조로 단순화 시킨 모델이다. SQL ( Structured Query Language ) 를 사용하여 테이터를 처리한다. 데이터 모델링이 간단하지만 CAD/CAM , GIS 등과 같은 비정형 데이터들을 다루거나 실시간 분석에는 적합하지 않다.
DBMS 예 : UniSQL, Object store</p>
</li>
<li><p>객체 지향형 ( Object-Oriented DataBase )
객체지향 프로그래밍 개념에 기반하여 만든 데이터베이스 모델이다. 정보를 객체의 형태로 표현한다. 객체지향 프로그래밍 개념 ( 클래스, 상속 등 )을 사용할 수 있다.
CAD/CAM. GIS 등의 비정형 데이터들을 데이터베이스화 할 수 있도록 하기 위해 만들어진 모델이다.
멀티미디어 데이터 지원이 가능하지만 SQL 쿼리를 사용할 수 없고 ( OQL 이 있긴하다. ), 검색이나 대규모 트랜잭션 처리에서 성능이 떨어지는 단점이 있어 몇몇 특수한 전문분야 정도에서만 사용되고 있다.
DBMS 예 : O2, ONTOS</p>
</li>
<li><p>객체 관계형 ( Object-Relational DataBase )
관계형 데이터베이스에 객체 지향 개념을 도입하여 만든 데이터베이스 모델이다. 객체지향 개념을 지원하는 표준 SQL을 사용할 수 있고, 데이터 타입도 관계형 데이터베이스 보다 더 다양하게 추가되었다.
DBMS 예 : MySQL </p>
</li>
<li><p>NoSQL 
Not Only SQL 의 줄임말로 SQL 뿐만 아니라 다양한 특성을 지원한다는 의미라고 해석할 수 있다. 데이터 간에 관계를 정의하지 않는 데이터베이스 모델로 기존의 RDBMS 의 복잡도와 용량의 한계를 극복하기 위한 목적으로 만들어졌다. 비정형 데이터 처리에 유리하지만 스키마 변경이 불가능해  데이터값에 문제가 발생하면 감지가 어렵다. 
DBMS 예 : redis</p>
</li>
<li><p>NewSQL
New 와 SQL 의 합성어이다. RDBMS 의 SQL 과 NoSQL 의 장점을 결합하여 관계형 모델, 트랜잭션 지원 및 확장성과 고 가용성을 모두 만족시키려는 목적에서 만들어진 데이터베이스 모델이다.
DBMS 예 : VoltDB</p>
</li>
</ul>
<h4 id="orm이란">ORM이란?</h4>
<p>ORM은 Object Relational Mapping 즉, 객체-관계 매핑의 줄임말이다. 객체-관계 매핑을 풀어서 설명하자면 우리가 OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relational DataBase)에서 쓰이는 데이터인 테이블 자동으로 매핑(연결)하는 것을 의미한다. 그러나 클래스와 테이블은 서로가 기존부터 호환가능성을 두고 만들어진 것이 아니기 때문에 불일치가 발생하는데, 이를 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다. 따라서 ORM을 이용하면 따로 SQL문을 짤 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 된다.</p>
<ul>
<li><p>장점</p>
<ol>
<li>완벽한 객체지향형 코드이기 때문에 개발자가 객체 모델만 이용해 프로그래밍을 하는데 집중 가능. 즉 객체지향적 접근만 고려하면 되서 생산선 증가</li>
<li>재사용, 유지보수, 리팩토링 용이성
ORM은 기존 객체와 독립적으로 작성되어있고, 객체로 작성되었기 때문에 재활용할 수 있다. 또한, 매핑하는 정보가 명확하기 때문에 ERD를 보는 의존도를 낮출 수 있다.</li>
<li>DBMS(DataBase Management System) 종속성 하락</li>
</ol>
</li>
<li><p>단점</p>
</li>
</ul>
<ol>
<li>완벽하게 SQL문을 대체 못함. 프로젝트 복잡성이 증가할 수록 난이도도 올라가고 잘못 구현되었을 경우 속도저하 및 일관성이 무너짐</li>
<li>객체-관계 간의 불일치</li>
<li>세분성(Granularity)
경우에 따라서 데이터베이스에 있는 테이블 수보다 더 많은 클래스를 가진 모델이 생길 수 있다.</li>
<li>상속성(Inheritance)
RDBMS는 객체지향 프로그래밍 언어의 특징인 상속개념이 없다.</li>
<li>프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다.
이미 프로시저가 많은 시스템에선 다시 객체로 바꿔야하며, 그 과정에서 생산성 저하나 리스크가 많이 발생할 수 있다.</li>
</ol>
<p>출저
<a href="https://www.oracle.com/kr/database/what-is-database/">https://www.oracle.com/kr/database/what-is-database/</a>
<a href="https://noahlogs.tistory.com/36">https://noahlogs.tistory.com/36</a>
<a href="https://geonlee.tistory.com/207">https://geonlee.tistory.com/207</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTTPS와 HTTP의 차이점, RESTful API에 대해서]]></title>
            <link>https://velog.io/@killerwhale-94/HTTPS%EC%99%80-HTTP%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-RESTful-API%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C</link>
            <guid>https://velog.io/@killerwhale-94/HTTPS%EC%99%80-HTTP%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90-RESTful-API%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C</guid>
            <pubDate>Mon, 17 Apr 2023 04:44:51 GMT</pubDate>
            <description><![CDATA[<blockquote>
<h3 id="http와-https의-차이점은-무엇인가요">HTTP와 HTTPS의 차이점은 무엇인가요?</h3>
</blockquote>
<p>HTTP (HyperText Transfer Protocol) 와 HTTPS (HyperText Transfer Protocol Secure)의 가장 큰 차이점은 보안입니다. HTTPS는 HTTP에 SSL/TLS 프로토콜을 추가하여 데이터를 암호화하여 전송합니다. 이로 인해 중간에서 데이터를 가로채더라도 내용을 확인할 수 없습니다. 따라서 HTTPS는 민감한 정보를 전송할 때 사용됩니다.</p>
<ul>
<li>SSL / TLS 란? 
SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)는 인터넷에서 데이터를 안전하게 전송하기 위한 암호화 프로토콜입니다.
SSL은 Netscape에 의해 개발되었고, TLS는 SSL의 후속 버전으로 IETF에 의해 표준화되었습니다. 이 프로토콜들은 클라이언트와 서버 간의 통신을 암호화하여 중간에서 데이터를 가로채더라도 내용을 확인할 수 없게 합니다. HTTPS는 HTTP 프로토콜 상위에서 TLS 암호화를 구현한 것으로 모든 웹 사이트와 다른 웹 서비스에서 사용됩니다. </li>
</ul>
<p>참조
<a href="https://www.cloudflare.com/ko-kr/learning/ssl/transport-layer-security-tls/">https://www.cloudflare.com/ko-kr/learning/ssl/transport-layer-security-tls/</a>
<a href="https://whatismarketing.tistory.com/61">https://whatismarketing.tistory.com/61</a></p>
<hr>
<blockquote>
<h3 id="restful-api에-대해-설명해보세요">RESTful API에 대해 설명해보세요.</h3>
</blockquote>
<p>REST는 Representational State Transfer의 약자로, 자원을 자원(resource)의 표현(representation) 으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미합니다.</p>
<p>REST 아키텍처 스타일을 따르는 API를 REST API라고 합니다.
일반적으로 REST API와 RESTful API라는 용어는 같은 의미로 사용할 수 있습니다.</p>
<p>RESTful API는 HTTP 프로토콜을 사용하여 클라이언트와 서버 간의 통신을 처리합니다. 이를 위해 RESTful API는 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 서버에 요청을 보내고, 서버는 이에 대한 응답을 반환합니다.
RESTful API는 자원에 대한 URI(Uniform Resource Identifier)를 사용하여 자원을 표현하고, 자원의 표현 방법에 대한 미디어 타입을 정의합니다. 예를 들어, 자원의 URI는 &quot;/users&quot;와 같이 표현되며, JSON 또는 XML과 같은 미디어 타입을 사용하여 자원의 표현 방법을 정의합니다.</p>
<h4 id="rest의-특징">REST의 특징</h4>
<ul>
<li><p>Server-Client(서버, 클라이언트 구조)
자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client
서로간 의존성이 줄어듭니다</p>
</li>
<li><p>Stateless(무상태)
HTTP 프로토콜은 Stateless Protocol이므로 REST 역시 무상태성을 갖습니다.
이전 요청이 다음 요청의 처리에 연관되어서는 안됩니다. 물론 이전 요청이 DB를 수정하여 DB에 의해 바뀌는 것은 허용합니다. Server의 처리 방식에 일관성을 부여하고 부담이 줄어들며, 서비스의 자유도가 높아집니다.</p>
</li>
</ul>
<ul>
<li>Cacheable(캐시 처리 가능)
웹 표준 HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용할 수 있기 때문에 HTTP 가 가진 특징인 캐싱기능을 적용할 수 있습니다.
캐시는 대량의 요청을 효율적으로 처리하기 위해 필요합니다.</li>
</ul>
<ul>
<li>Layered System(계층화)
API Server는 순수 비즈니스 로직을 수행하고 그 앞단에 보안, 로드밸런싱, 암호화, 사용자 인증 등을 추가하여 구조상의 유연성을 줄 수 있습니다. 또한 로드밸런싱, 공유 캐시 등을 통해 확장성과 보안성을 향상시킬 수 있습니다.</li>
</ul>
<ul>
<li><p>Code-On-Demand(optional)
Server로부터 스크립트를 받아서 Client에서 실행합니다.
반드시 충족할 필요는 없습니다.</p>
</li>
<li><p>Uniform Interface(인터페이스 일관성)
URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행합니다. HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능합니다.
특정 언어나 기술에 종속되지 않습니다.</p>
</li>
</ul>
<h4 id="rest-api를-왜-쓸까">REST API를 왜 쓸까?</h4>
<p>확장성
REST API를 구현하는 시스템은 REST가 클라이언트-서버 상호 작용을 최적화하기 때문에 효율적으로 크기 조정할 수 있습니다. 무상태는 서버가 과거 클라이언트 요청 정보를 유지할 필요가 없기 때문에 서버 로드를 제거합니다. 잘 관리된 캐싱은 일부 클라이언트-서버 상호 작용을 부분적으로 또는 완전히 제거합니다. 이러한 모든 기능은 성능을 저하시키는 통신 병목 현상을 일으키지 않으면서 확장성을 지원합니다.</p>
<p>유연성
RESTful 웹 서비스는 완전한 클라이언트-서버 분리를 지원합니다. 각 부분이 독립적으로 발전할 수 있도록 다양한 서버 구성 요소를 단순화하고 분리합니다. 서버 애플리케이션의 플랫폼 또는 기술 변경은 클라이언트 애플리케이션에 영향을 주지 않습니다. 애플리케이션 함수를 계층화하는 기능은 유연성을 더욱 향상시킵니다. 예를 들어, 개발자는 애플리케이션 로직을 다시 작성하지 않고도 데이터베이스 계층을 변경할 수 있습니다.</p>
<p>독립성
REST API는 사용되는 기술과 독립적입니다. API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션을 모두 작성할 수 있습니다. 또한 통신에 영향을 주지 않고 양쪽의 기본 기술을 변경할 수 있습니다.</p>
<p>참조
<a href="https://aws.amazon.com/ko/what-is/restful-api/">https://aws.amazon.com/ko/what-is/restful-api/</a>
<a href="https://velog.io/@soom/REST-Representational-State-Transfer">https://velog.io/@soom/REST-Representational-State-Transfer</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[이벤트 루프, 콜백함수]]></title>
            <link>https://velog.io/@killerwhale-94/4-13%EC%9D%BC-cs%EC%A4%80%EB%B9%84</link>
            <guid>https://velog.io/@killerwhale-94/4-13%EC%9D%BC-cs%EC%A4%80%EB%B9%84</guid>
            <pubDate>Thu, 13 Apr 2023 04:28:43 GMT</pubDate>
            <description><![CDATA[<blockquote>
<ul>
<li>이벤트 루프 (Event Loop)에 대해 설명해보세요.</li>
</ul>
</blockquote>
<p>먼저 JavaScript는 싱글스레드 입니다. 하지만 멀티쓰레드 처럼 동시에 여러 작업을 수행할 수 있습니다. 어떻게? 그 이유는 JS의 메인 스레드인 이벤트루프가 싱글 스레드이기 때문에!! 하지만 이벤트 루프만 독립적으로 실행되는것이 아닌 웹 브라우저나 NodeJS 같은 멀티쓰레드 환경에서 실행되고 이를 적절하게 사용함으로써 멀티쓰레드처럼 사용이 가능한 것입니다.</p>
<p><img src="https://velog.velcdn.com/images/killerwhale-94/post/6ef30550-e470-44e3-a816-cd8c6a7f8b96/image.png" alt="">
출처 : <a href="https://www.sessionstack.com/blog/">How JavaScript works: an overview of the engine, the runtime, and the call stack</a></p>
<h3 id="memory-heap--call-stack">Memory Heap &amp; Call Stack</h3>
<p>먼저 Memory Heap에 있는 사용자가 작성한 코드들은 Call Stack에서 Stack 방식으로 쌓이며 코드를 실행하게 되는데 이때 동기 함수들은 그대로 실행하게 되고 비동기 함수들은 Web API로 처리하게 되며 일을 분배합니다.</p>
<p>Stack : 후입선출(LIFO)로 마지막에 들어간 것이 먼저 나가는 방식</p>
<h3 id="web-api">Web API</h3>
<p>Javscript를 사용하면서 우리가 많이 사용하는 API 들은 사실 JavaScript에서 지원하는 것이 아닌 웹 브라우저에서 제공하는 API로 DOM ,AJAX, Timeout 등이 있습니다.</p>
<p>Call Stack에서 실행된 비동기 함수는 Web API에서 처리를 하게 되고 그동안에 Call Stack은 나머지 동기 함수들을 처리하게 됩니다.</p>
<p>Web API는 비동기 함수들을 처리하며 작업이 완료된 비동기 함수들을 Callback Queue로 넘겨주게 됩니다.</p>
<h3 id="callback-queuetask-queue">Callback Queue(Task Queue)</h3>
<p>Callback Queue는 비동기 함수들을 보관하는 장소로 Event Loop에서 비동기 함수를 꺼내기 전까지는 계속 Queue방식으로 보관하게 됩니다.</p>
<p>Queue : 선입선출(FIFO)로 먼저 들어간 것이 먼저 나가는 </p>
<h3 id="event-loop">Event Loop</h3>
<p>Event Loop는 Call Stack과 Callback Queue를 상태를 계속 감시하며 Call Stack에 함수들이 존재하지 않는다면 Callback Queue에 있는 비동기 함수들을 Call Stack에 밀어 넣게 됩니다. 그 후 Call Stack에서 비동기 함수를 실행시키게 됩니다.</p>
<p>참고자료
<a href="https://chanyeong.com/blog/post/44">https://chanyeong.com/blog/post/44</a>
<a href="https://blog.toktokhan.dev/t-767eb0fa38f3">https://blog.toktokhan.dev/t-767eb0fa38f3</a></p>
<hr>
<blockquote>
<ul>
<li>콜백 함수 (Callback Function)가 무엇인지, 어떻게 사용되는지 설명해보세요.</li>
</ul>
</blockquote>
<p>콜백 함수 (Callback Function)는 다른 함수의 인자로 전달되어, 실행가능한 코드를 말합니다. 콜백은 태스크가 끝나기 전에 함수가 실행되지 않는 것을 보장합니다. 때문에 비동기에서 여러 문제와 에러들로부터 안전하게 지켜주죠.</p>
<p>콜백 함수는 다음과 같은 형태로 사용됩니다.</p>
<pre><code>function foo(callback) {
  // 작업 수행
  callback(); // 콜백 함수 실행
}

function bar() {
  // 추가적인 작업 수행
}

foo(bar); // foo 함수에 콜백 함수로 bar 함수를 전달</code></pre><p>위 예제에서는 foo 함수에 bar 함수를 인자로 전달하고 있습니다. foo 함수 내부에서는 작업을 수행한 후, 인자로 전달받은 callback 함수를 실행하고 있습니다. 이때 bar 함수가 실행되어 추가적인 작업이 수행됩니다.</p>
<p>이러한 콜백 함수는 비동기적인 작업을 처리할 때 많이 사용됩니다. 예를 들어, setTimeout 함수나 fetch 함수는 비동기적인 작업을 처리하고, 해당 작업이 완료되면 콜백 함수를 실행하여 결과를 전달합니다.</p>
<pre><code>setTimeout(function() {
  console.log(&#39;Hello, world!&#39;);
}, 1000); // 1초 후 &#39;Hello, world!&#39; 출력</code></pre><p>위 예제에서는 setTimeout 함수에 익명의 콜백 함수를 전달하고 있습니다. 이 함수는 1초 후 실행되며, 실행 시점에서는 &#39;Hello, world!&#39;가 출력됩니다.</p>
<p>콜백 함수는 자바스크립트에서 비동기적인 작업을 처리하기 위한 핵심적인 도구 중 하나입니다. 이를 통해 비동기 작업의 결과를 다루거나 추가적인 작업을 수행할 수 있습니다. 하지만, 콜백 함수를 중첩해서 사용하게 되면 코드가 복잡해지는 단점이 있으므로, 최근에는 Promise나 async/await와 같은 기술들이 많이 사용되고 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2023.3.24 일기]]></title>
            <link>https://velog.io/@killerwhale-94/2023.3.24-%EC%9D%BC%EA%B8%B0</link>
            <guid>https://velog.io/@killerwhale-94/2023.3.24-%EC%9D%BC%EA%B8%B0</guid>
            <pubDate>Fri, 24 Mar 2023 11:00:55 GMT</pubDate>
            <description><![CDATA[<p>정말 오랜만에 일기를 쓴다. 근 한달만인가?</p>
<p>그동안 여러 일이 있었고 최종프로젝트에 몰두하다보니 많이 소홀해 진 것 같다..</p>
<p>게다가 오랜만에 들어와서 보니까 그 전 일기들이 2022년으로 적혀있었다... ㅠㅠ</p>
<p>일단 최종프로젝트 하면서 insert bulk라는걸 처음 써봤는데 꼭 알아두어야 할 기능이라서 적도록 하겠다.</p>
<p>insert bulk를 적용하면서 시행착오가 많았다.</p>
<p>먼저 DB는 gym테이블과 이미지를 넣을 수 있는 gymImg테이블을 분리시켜놨다.
<img src="https://velog.velcdn.com/images/killerwhale-94/post/04820d62-abf9-41bc-a005-cf53a114d1e3/image.png" alt=""></p>
<p>컨트롤러의 모습</p>
<p><img src="https://velog.velcdn.com/images/killerwhale-94/post/aedbe0e2-1521-430f-a4e1-bbac5f3a2be4/image.png" alt=""></p>
<p>nestjs 공식 Docs를 참고해서 멀터를 설정했고 우리 조는 외부저장소인 S3를 사용하기로 했다. </p>
<p>초기 서비스 코드
<img src="https://velog.velcdn.com/images/killerwhale-94/post/29cfe95c-ece8-410e-81e1-54e517e1039c/image.png" alt=""></p>
<p>처음 설정했던 서비스 코드이다. 테이블이 따로 분리되있기 때문에 transaction을 사용해 한번에 데이터를 등록하고자 했다.
다만 여기서 문제가 발생했는데 여러개의 이미지를 선택하고 POST요청을 보내도 결국 DB에 저장되는 이미지는 하나만 들어갔다.</p>
<p>그래서 두 번째로 생각했던게 배열로 저장하는 방법이었다.</p>
<p><img src="https://velog.velcdn.com/images/killerwhale-94/post/d2753fa2-11bd-4063-a7e9-75263cd21238/image.png" alt=""></p>
<p>gymImgs라는 배열안에 여러개의 이미지를 반복문으로 돌리면서 하나씩 추가하는 방법
이렇게 저장할려고 했을 시 entity타입도 바꿔줘야 하고 무엇보다 따로 이미지 테이블을 분리한 의미가 전혀 없어보였다. 근본적으로 작동이 되는지도 의문이었다.</p>
<p>최종 코드
<img src="https://velog.velcdn.com/images/killerwhale-94/post/4212b452-aafa-4230-b625-070b3b3a205f/image.png" alt="">
외래키까지 묶어 반복문을 돌리면서 gymImgs 배열에 넣었고 그걸 그대로 DB에 저장시키는 코드를 짰다. </p>
<p><img src="https://velog.velcdn.com/images/killerwhale-94/post/8303f260-e30a-4f4a-a1c6-1c77884c544d/image.png" alt="">
여러개의 이미지를 넣고 코드를 작동시켰을 때 DB에 저장되는 모습이다.
Insert bulk의 이점은 대량의 데이터를 한번에 처리 할 수 있어 속도가 빨라지고 오버헤드를 줄일 수 있다고 한다. 또한 여러개의 파일을 처리할 때는 save대신 insert가 좋다고 알고있어서 최종 프로젝트 전까지 테스트해보고 서버에 좋은 방법을 채택할 예정이다.</p>
<p>p.s  insert 대신 save를 써야하는 이유는 save의 경우 documents를 select 해오고 존재하지 않으면 insert 기능을 수행하고 존재한다면 documents 전체를 update시킨다.</p>
<p>즉 순수하게 데이터를 생성해서 넣고싶다면 insert가 좋다. select를 수행하지 않기 때문에 아무래도 빠르기 때문. 이게 데이터를 한두개넣는거면 딱히 상관이 없을텐데 여러개를 넣을때는 속도차이가 분명 존재할 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022. 02. 9 일기]]></title>
            <link>https://velog.io/@killerwhale-94/2022.-02.-9-%EC%9D%BC%EA%B8%B0</link>
            <guid>https://velog.io/@killerwhale-94/2022.-02.-9-%EC%9D%BC%EA%B8%B0</guid>
            <pubDate>Thu, 09 Feb 2023 12:03:09 GMT</pubDate>
            <description><![CDATA[<p>오늘부터 nest 강의주차에 들어섰다.</p>
<p>국내에 nest강의가 딱히 없어서 40만원짜리 백앤드 풀코스 패키지를 구매해서 처음부터 복습겸</p>
<p>보고 있다.</p>
<p>총 80시간 정도이고 다음주까지 완강이 목표다.</p>
<p>빠르게 듣기보단 하나하나 꼼꼼하게 완벽히 짚고 넘어갈 생각이다.</p>
<p>화이팅...!!!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022. 02. 8 일기]]></title>
            <link>https://velog.io/@killerwhale-94/2022.-02.-8-%EC%9D%BC%EA%B8%B0</link>
            <guid>https://velog.io/@killerwhale-94/2022.-02.-8-%EC%9D%BC%EA%B8%B0</guid>
            <pubDate>Wed, 08 Feb 2023 08:01:18 GMT</pubDate>
            <description><![CDATA[<p>KPT 회고록</p>
<p>Keep(만족스러웠던 부분)
프로젝트 기간동안 팀원들끼리 서로 이해해주고 힘이 되어줌
악조건 속에서도 끝까지 포기하지 않고 해냄.
프로젝트 기간동안 의사소통을 열심히 함.</p>
<p>Problem(아쉬웠던 부분, 장애물)
시간이 부족해 끝까지 해내지는 못했음.
소켓에 대한 이해가 부족해 시간을 많이 잡아먹음
전체적인 서비스에 대해서 생각을 하면서 ERD와 URL을 생각해야한다.
건강 관리도 잘 해야겠다.</p>
<p>Try (좀 더 노력해야 할 것들)
앞으로 처음 설계를 탄탄하게 하고 그 설계대로 맞춰가는 노력하기
좀 더 체계적인 업무분담 필요
많은 레퍼런스 찾기
테스트코드 작성해보기</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022. 02. 7일 일기]]></title>
            <link>https://velog.io/@killerwhale-94/2022.-02.-7%EC%9D%BC-%EC%9D%BC%EA%B8%B0</link>
            <guid>https://velog.io/@killerwhale-94/2022.-02.-7%EC%9D%BC-%EC%9D%BC%EA%B8%B0</guid>
            <pubDate>Tue, 07 Feb 2023 12:07:19 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/killerwhale-94/post/c1ee0d4a-0213-4176-a59a-c687c4b33434/image.png" alt=""></p>
<p>db 구조를 좀 바꿨다.</p>
<p>원래 cart와 order 테이블을 잇는 테이블이 하나 더 있었는데 생각해보니 쓸모가 없어 지워버렸다.</p>
<p><img src="https://velog.velcdn.com/images/killerwhale-94/post/e459e4da-0121-4fd4-b87b-ef98a135ca89/image.png" alt=""></p>
<p>이제 시퀄라이즈 관계설정엔 꽤 익숙해졌다. 다음 프로젝트부턴 한글 쓰듯 자연스레 코드 작성이 가능할 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022. 02. 6일 일기]]></title>
            <link>https://velog.io/@killerwhale-94/2022.-02.-4%EC%9D%BC-%EC%9D%BC%EA%B8%B0</link>
            <guid>https://velog.io/@killerwhale-94/2022.-02.-4%EC%9D%BC-%EC%9D%BC%EA%B8%B0</guid>
            <pubDate>Mon, 06 Feb 2023 12:04:46 GMT</pubDate>
            <description><![CDATA[<p>오늘은 socket이랑 트랜잭션을 완료했다.</p>
<p>socket은 제대로 배운적도 없고 너무 어렵다.</p>
<p>실시간 채팅과 주문시 전체 유저한테 실시간으로 정보전달 중에 선택하는것이었는데</p>
<p>나는 실시간 정보전달로 정했다.</p>
<p>코드는 다 짰는데 아직 테스트는 못해봐서 내일 프론트 완성하고 테스트를 해봐야 정확히 작동하는지 알 것 같다.</p>
<p>내일까지만 힘내자.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022. 02. 3일 일기]]></title>
            <link>https://velog.io/@killerwhale-94/2022.-02.-3%EC%9D%BC-%EC%9D%BC%EA%B8%B0</link>
            <guid>https://velog.io/@killerwhale-94/2022.-02.-3%EC%9D%BC-%EC%9D%BC%EA%B8%B0</guid>
            <pubDate>Fri, 03 Feb 2023 11:57:44 GMT</pubDate>
            <description><![CDATA[<p>오늘 목표한 바 까지는 끝내놨고 주말에 소켓, 마이페이지 부분 완성하려고 한다.</p>
<p>꺾이지 말자</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022. 02. 2일 일기]]></title>
            <link>https://velog.io/@killerwhale-94/2022.-02.-2%EC%9D%BC-%EC%9D%BC%EA%B8%B0</link>
            <guid>https://velog.io/@killerwhale-94/2022.-02.-2%EC%9D%BC-%EC%9D%BC%EA%B8%B0</guid>
            <pubDate>Thu, 02 Feb 2023 11:12:26 GMT</pubDate>
            <description><![CDATA[<p>팀 프로젝트 2일차.</p>
<p>오늘 로그인 회원가입 기능을 구현했고</p>
<p>마이페이지 내 정보 보기, 관리자아이디 유저 정보 열람까지 완성했다.</p>
<p>에러핸들링이 아직 좀 미숙한데 더 공부해서 완벽하게 완성해야겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022. 02. 1일 일기]]></title>
            <link>https://velog.io/@killerwhale-94/2022.-02.-1%EC%9D%BC-%EC%9D%BC%EA%B8%B0</link>
            <guid>https://velog.io/@killerwhale-94/2022.-02.-1%EC%9D%BC-%EC%9D%BC%EA%B8%B0</guid>
            <pubDate>Wed, 01 Feb 2023 13:04:39 GMT</pubDate>
            <description><![CDATA[<p>오늘 팀 프로젝트가 시작됐다.</p>
<p><a href="https://github.com/Hojunz/29JO">https://github.com/Hojunz/29JO</a></p>
<p>일단 오늘은 팀 프로젝트 전체적인 구성을 만들었고</p>
<p>DB연결 시키고 끝냈다.</p>
<p>내일부터 본격적으로 기능들을 넣을건데 이 전 프로젝트와는 다르게 조금은 느슨하게</p>
<p>그렇지만 확실하게 갈려고한다.</p>
<p>화이팅 해보자</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022. 01. 31일 일기]]></title>
            <link>https://velog.io/@killerwhale-94/2022.-01.-31%EC%9D%BC-%EC%9D%BC%EA%B8%B0</link>
            <guid>https://velog.io/@killerwhale-94/2022.-01.-31%EC%9D%BC-%EC%9D%BC%EA%B8%B0</guid>
            <pubDate>Tue, 31 Jan 2023 11:55:07 GMT</pubDate>
            <description><![CDATA[<p>할말없음. 3주동안 방치당하니 길을 잃음.</p>
<p>내일이 프로젝트인데 얼른 끝내고 새로운 공부 시작하고싶음. 이상</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022. 01. 30일 일기]]></title>
            <link>https://velog.io/@killerwhale-94/2022.-01.-30%EC%9D%BC-%EC%9D%BC%EA%B8%B0</link>
            <guid>https://velog.io/@killerwhale-94/2022.-01.-30%EC%9D%BC-%EC%9D%BC%EA%B8%B0</guid>
            <pubDate>Mon, 30 Jan 2023 12:10:23 GMT</pubDate>
            <description><![CDATA[<p>오늘도 인강만 들었다</p>
<p>이게 맞나 싶다</p>
<p>국비를 다니는데 혼자 자습하는것같다</p>
<p>거의 방치하는데 이건 아니지않나...</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2023. 01. 29 주간 회고]]></title>
            <link>https://velog.io/@killerwhale-94/2023.-01.-30-%EC%A3%BC%EA%B0%84-%ED%9A%8C%EA%B3%A0</link>
            <guid>https://velog.io/@killerwhale-94/2023.-01.-30-%EC%A3%BC%EA%B0%84-%ED%9A%8C%EA%B3%A0</guid>
            <pubDate>Sun, 29 Jan 2023 23:57:57 GMT</pubDate>
            <description><![CDATA[<p>이번주 잘한점</p>
<ol>
<li>인강 신청하는것에 돈을 아끼지 않음</li>
</ol>
<p>아쉬운 점</p>
<ol>
<li>집중을 제대로 못했다</li>
</ol>
<p>개선해야  할 점</p>
<ol>
<li>흔들리지 않고 최선을 다하자</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022. 01. 27일 일기]]></title>
            <link>https://velog.io/@killerwhale-94/2022.-01.-27%EC%9D%BC-%EC%9D%BC%EA%B8%B0</link>
            <guid>https://velog.io/@killerwhale-94/2022.-01.-27%EC%9D%BC-%EC%9D%BC%EA%B8%B0</guid>
            <pubDate>Sun, 29 Jan 2023 23:56:25 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/killerwhale-94/post/5faba66d-a394-49c1-8e74-4b818fc9d1b7/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/killerwhale-94/post/135a9b23-d6e6-4182-a8f0-c3deaee80cb4/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/killerwhale-94/post/869c9be3-88d2-496a-bd89-65186fe0e5c5/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022. 01. 26일 일기]]></title>
            <link>https://velog.io/@killerwhale-94/2022.-01.-26%EC%9D%BC-%EC%9D%BC%EA%B8%B0</link>
            <guid>https://velog.io/@killerwhale-94/2022.-01.-26%EC%9D%BC-%EC%9D%BC%EA%B8%B0</guid>
            <pubDate>Thu, 26 Jan 2023 12:03:55 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/killerwhale-94/post/c628c12b-7b09-4346-8894-708df3133af6/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/killerwhale-94/post/8442e0e6-b493-409c-aaa2-e0aa727b5c73/image.png" alt=""></p>
<p>오늘 푼 문제 2가지</p>
<p>정답률 높은 순으로 계속 풀고 있는데 오늘 문제는 유난히 쉽게 느껴졌다.</p>
<p>그냥 문제가 쉬웠던건지 알고리즘 실력이 늘은 건지.. 모르겠다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022. 01. 25일 일기]]></title>
            <link>https://velog.io/@killerwhale-94/2022.-01.-25%EC%9D%BC-%EC%9D%BC%EA%B8%B0</link>
            <guid>https://velog.io/@killerwhale-94/2022.-01.-25%EC%9D%BC-%EC%9D%BC%EA%B8%B0</guid>
            <pubDate>Wed, 25 Jan 2023 13:39:46 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/killerwhale-94/post/4b4bd910-743a-4183-a7c8-60fde1561569/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/killerwhale-94/post/a1d81131-0bf8-4948-873e-d15e81fe626e/image.png" alt=""></p>
<p>오늘 푼 문제</p>
]]></description>
        </item>
    </channel>
</rss>