<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dayeon_kim.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Sun, 03 Oct 2021 07:26:41 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>dayeon_kim.log</title>
            <url>https://images.velog.io/images/da_yeon_kim/profile/25eaf1ad-dd14-4c5e-b387-db861f391faa/8(pc).jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. dayeon_kim.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/da_yeon_kim" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[JWT & OAuth]]></title>
            <link>https://velog.io/@da_yeon_kim/JWT-OAuth</link>
            <guid>https://velog.io/@da_yeon_kim/JWT-OAuth</guid>
            <pubDate>Sun, 03 Oct 2021 07:26:41 GMT</pubDate>
            <description><![CDATA[<h2 id="1-cookie--session-이란-무엇인가">1. Cookie &amp; Session 이란 무엇인가</h2>
<h3 id="11-cookie">1.1 Cookie</h3>
<ul>
<li><p><strong>웹사이트에서 클라이언트에 저장해 놓는 데이터</strong>를 &quot;쿠키(Cookie)&quot;라고 합니다.</p>
</li>
<li><p>쿠키(Cookie)는 웹사이트를 방문할 때마다 읽히고 수시로 새로운 정보로 바뀔 수 있습니다.</p>
</li>
<li><p>페이지 탐색을 하거나 지역 및 언어, 성능에 대한 보고 혹은 마케팅 용 등 다양한 용도로 사용되곤 합니다.</p>
</li>
<li><p>쿠키는 웹사이트 접속시 접속자의 개인장치에 다운로드 되고 <strong>브라우저에 저장되는 작은 텍스트 파일</strong>입니다. </p>
</li>
<li><p><strong>웹사이트는 쿠키를 통해 접속자의 장치를 인식하고, 접속자의 설정과 과거 이용내역에 대한 일부 데이터를 저장합니다.</strong></p>
</li>
</ul>
<p>일반적으로 <strong>쿠키에는 만료일이 있습니다.</strong> 예를 들어,</p>
<ul>
<li>브라우저를 닫는 경우 자동으로 삭제되는 쿠키(세션 쿠키)</li>
<li>일부는 수동으로 삭제되기 전까지 남아있는 등 더 오랜기간 동안 컴퓨터에 저장되는 쿠키도 있습니다(지속적 쿠키).</li>
</ul>
<p>쿠키 값은 유저가 자유롭게 편집이 가능하며 통신 상 유출되기 쉽습니다. </p>
<h3 id="12-session">1.2 Session</h3>
<ul>
<li>서버에 저장해 놓는 데이터, 세션(Session)</li>
</ul>
<p><strong>- 세션의 단점</strong></p>
<ul>
<li>시도 때도 없이 세션이 생성이 됩니다.</li>
<li>서버에 저장되는 세션이 많아지면 많아질수록 세션을 만들고, 찾는 과정에서 처리를 요구하는 부하와 저장 공간이 추가적으로 필요하게 됩니다.</li>
</ul>
<h2 id="2-jwt-란-무엇인가">2. JWT 란 무엇인가</h2>
<ul>
<li>JSON Web Token (JWT)</li>
<li>JSON 객체를 사용하여 가볍고 </li>
<li>자가수용적인 (self-contained) 방식으로 정보를 안전성 있게 전달해주는 토큰</li>
<li>토큰이 일정시간 이후에는 만료되도록 합니다.(exp 라는 키로 해당 토큰의 만료시간을 추가해둡니다.)</li>
</ul>
<p><strong>- 자가 수용적 (self-contained)</strong></p>
<ul>
<li>헤더 (토큰의 종류와 사용된 알고리즘)</li>
<li>내용 (토큰을 통해 클라이언트에게 저장/전달해주고 싶은 정보)</li>
<li>서명 (인증하기 위한 증명서)</li>
</ul>
<p>이 때, 헤더와 내용은 JSON 형식이지만 이를 안전하게 전달하기 위해서 각각 base64 형태로 인코딩합니다.</p>
<p>인코딩 한 헤더와 내용을 특정 암호화 알고리즘을 통해서 암호화시켜 서명으로 사용합니다.</p>
<p>그렇게 되면 서명 부분을 복호화 했을 때의 값이 (헤더 + 내용)과 일치한다면 올바른 토큰이라는 것을 증명할 수 있습니다!</p>
<p>이를 자가 수용적 (self-contained) 이라고 표현합니다.</p>
<p><strong>JWT 는 필요한 모든 정보를 자체적으로 지니고 있습니다.</strong> </p>
<ul>
<li>토큰에 대한 기본정보(헤더)</li>
<li>전달하고 싶은 정보(내용)</li>
<li>토큰이 검증됐다는것을 증명서까지 포함하고 있습니다.(서명)</li>
</ul>
<h2 id="3-oauth-에-있는-역할">3. OAuth 에 있는 역할</h2>
<ul>
<li>OAuth는 다양한 플랫폼 환경에서 권한 부여를 위한 산업 표준 프로토콜</li>
</ul>
<p>예를 들어 <strong>스코르타파딩클럽, 유저, 페이스북</strong></p>
<ul>
<li>우리는 페이스북 <strong>계정 정보</strong>라는 자원을 이용할 것입니다. 이를 <strong>Resource</strong> 라고 합니다.</li>
<li><strong>페이스북</strong>은 페이스북 계정이라는 자원을 가지고 있으므로 <strong>Resource Server</strong> 라고 합니다.</li>
<li>그 자원을 가진 <strong>유저</strong>는 계정의 주인이므로 <strong>Resource Owner</strong> 라고 합니다.</li>
<li>이 <strong>계정 정보</strong>라는 자원을 가져가서 사용하고 싶은 스코르타파딩클럽은 <strong>Client</strong> 라고 합니다.</li>
</ul>
<h2 id="4-oauth-의-흐름에-대해-설명하기">4. OAuth 의 흐름에 대해 설명하기</h2>
<ol>
<li>Resource Owner 가 Client 에게 소셜 로그인을 요청합니다.</li>
<li>Client 의 정보(client_id, redirect_url)을 들고 Resource Server에게 갑니다.</li>
<li>Resource Owner 가 자신의 계정정보를 이용해 Resource Server에 로그인합니다.</li>
<li>Resource Server 에서 authorization_code 를 생성해 redirect_url 로 보냅니다.</li>
<li>Resource Owner 는 redirect_url 에 도착해 Client 에게 authorization_code 를 보냅니다.</li>
<li>Client 는 authorization_code 와 client_secret 을 이용해서 Resource Server 로부터 
access_token 을 받아옵니다.</li>
<li>이제 Client 는 access_token 을 가지고 Resource 에 자유롭게 접근이 가능합니다!<img src ="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F1596605a-972c-4989-a86b-8450c600f507%2FUntitled.png?table=block&id=776dcfe8-8380-421e-b310-17f20cfac4be&spaceId=83c75a39-3aba-4ba4-a792-7aefe4b07895&width=2000&userId=39861460-0cd1-41ba-8505-880e0ab77bc2&cache=v2"/>

</li>
</ol>
<img src="https://www.notion.so/image/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F1cafa29f-5918-409c-a460-b3169a9947fe%2FUntitled.png?table=block&id=afba5c54-60b2-4951-8d5c-dbe385e43766&spaceId=83c75a39-3aba-4ba4-a792-7aefe4b07895&width=1220&userId=39861460-0cd1-41ba-8505-880e0ab77bc2&cache=v2" />]]></description>
        </item>
        <item>
            <title><![CDATA[HTTPS & SSL]]></title>
            <link>https://velog.io/@da_yeon_kim/HTTPS-SSL</link>
            <guid>https://velog.io/@da_yeon_kim/HTTPS-SSL</guid>
            <pubDate>Sun, 03 Oct 2021 07:02:51 GMT</pubDate>
            <description><![CDATA[<h2 id="1-양방향-암호화---비대칭-이란-무엇인가">1. 양방향 암호화 - 비대칭 이란 무엇인가</h2>
<p><strong>비대칭키(공개키)방식</strong>은 암호화 복호화에 <strong>서로 다른 키</strong>를 사용합니다. </p>
<p><code>한 개의 키로 평문을 암호화 하는데 사용하고, 한 개의 키로 암호문을 복호화 하는데 사용합니다.</code></p>
<p>비대칭형 암호화를 하면 <strong>하나의 키쌍</strong>이 생기고 이 <strong>두개의 키</strong>는 수학적으로 밀접한 관계를 가지고 있습니다.</p>
<p><code>두개의 키를 각각 키A, 키 B라고 했을 때 
키 A로 암호화한 암호문은 키B로만 복호화 할 수 있습니다.</code></p>
<p>따라서 A가 암호화 한 것을 B 가 복호화 할 수 있고,
B가 암호화 한 것을 A가 복호화 할 수 있습니다.</p>
<ul>
<li>이 중 하나의 키는 공중에게 공개해도 상관 없습니다.(<strong>공개키(Public Key)</strong>)</li>
<li>다른 하나의 키는 비밀로 보호합니다.(<strong>비밀키, 개인키(Private Key)</strong>) </li>
</ul>
<p>비대칭형 암호는 <strong>암호화 및 복호화가 대칭형 암호에 비해 현저하게 느리다</strong>는 단점이 있습니다. 또한, 중간에 제게 보내는 메시지를 가로채서 공개된 암호키로 이상한 내용을 암호화 한 다음에 전송할 수도 있어 <strong>중간자 공격에는 취약</strong>합니다. </p>
<h2 id="2-https-란-무엇인가">2. HTTPS 란 무엇인가?</h2>
<ul>
<li>웹에서 사용하는 대표적인 통신 규약, 프로토콜</li>
<li>어떤 방식으로 통신할 것인지에 대해서 정한 것</li>
<li>HTTP는 Hyper Text Transfer Protocol의 약자입니다.</li>
<li>HTTPS는 HTTP over Secure Socket Layer(SSL)의 약자입니다.</li>
</ul>
<p>즉, 기존의 HTTP 프로토콜보다 더욱 안전해졌다는 의미입니다</p>
<p>SSL 은 이 세 가지 문제점을 방지하고자 만들어졌습니다.
<code>1. 데이터를 암호화하여 중간에서 탈취당해도 안전하도록 만들 것.</code>
<code>2. 통신 내용을 악의적으로 변경하지 못하도록 할 것.</code>
<code>3. 신뢰할 수 있는 사이트인지 확인시켜줄 것.</code></p>
<h2 id="3-인증서란-무엇인가">3. 인증서란 무엇인가?</h2>
<p>신뢰할 수 있는 기관인 CA로부터 특정한 사이트가 사용한다는 내용을 담은 공개키를 이용하여 해당 사이트가 맞음을 증명할 수 있게 되는 것 입니다.</p>
<p>이러한 추가적인 정보들이 있는 공개키를 바로 &quot;인증서&quot; 라고 부릅니다.</p>
<h2 id="4-ca란-무엇인가">4. CA란 무엇인가?</h2>
<ul>
<li>인증서를 발급하고 관리하는 기관</li>
<li>CA (Certificate authority)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java Spring]week03]]></title>
            <link>https://velog.io/@da_yeon_kim/Java-Springweek03</link>
            <guid>https://velog.io/@da_yeon_kim/Java-Springweek03</guid>
            <pubDate>Sat, 17 Jul 2021 05:59:06 GMT</pubDate>
            <description><![CDATA[<h3 id="jquery로-api-호출하기">jQuery로 API 호출하기</h3>
<pre><code class="language-javascript">$.ajax({
    type: &quot;POST&quot;,
    url: &quot;/api/memos&quot;,
    contentType: &quot;application/json&quot;, // JSON 형식으로 전달함을 알리기
    data: JSON.stringify(data), // JSON.stringify 란? JSON을 문자열로 만들어주는 것입니다!
    success: function (response) {
        alert(&#39;메시지가 성공적으로 작성되었습니다.&#39;);
        window.location.reload();
    }
});</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java spring]week02]]></title>
            <link>https://velog.io/@da_yeon_kim/Java-springweek02</link>
            <guid>https://velog.io/@da_yeon_kim/Java-springweek02</guid>
            <pubDate>Tue, 13 Jul 2021 17:54:46 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/da_yeon_kim/post/2549d3c8-d47b-4508-8733-9eaf14b5b509/image.png" alt=""></p>
<h3 id="rdbms-h2-sql">RDBMS, H2, SQL</h3>
<ul>
<li><p><strong>RDBMS(Relational DataBase Management System)</strong> : 컴퓨터에 정보를 저장하고 관리하는 기술입니다.</p>
</li>
<li><p>쇼핑몰이라면 주문 정보, 고객 정보 등을 컴퓨터에 저장해야 할텐데, 이걸 도와줍니다.</p>
</li>
<li><p><strong>H2</strong> : RDBMS의 한 종류로 In-memory DB의 대표 주자, 서버가 켜져있는 동안에만 작동하는 RDB입니다.</p>
<ul>
<li><strong>In-memory DB</strong> : 서버가 작동하는 동안에만 내용을 저장하고, 서버가 작동을 멈추면 데이터가 모두 삭제되는 데이터베이스를 말합니다.</li>
</ul>
</li>
<li><p><strong>SQL</strong> : 데이터를 읽고, 저장하고, 변경하고, 삭제하는 구체적인 문법입니다.</p>
</li>
</ul>
<h3 id="jpa-repository-domain">JPA, Repository, Domain</h3>
<ul>
<li><p><strong>JPA(Spring Data JPA)</strong> : SQL을 쓰지 않고 데이터를 생성, 조회, 수정, 삭제할 수 있도록 해주는 번역기입니다.</p>
</li>
<li><p>JPA는 Repository를 통해서만 사용할 수 있습니다.</p>
</li>
<li><p>&quot;테이블&quot;은 Domain, &quot;SQL&quot;은 Repository 입니다.</p>
</li>
<li><p><strong>Interface</strong> : 클래스에서 멤버가 빠진, 메소드 모음집</p>
</li>
</ul>
<h3 id="api-lombok-dto">API, Lombok, DTO</h3>
<ul>
<li><p><strong>API</strong> : 클라이언트 - 서버 간의 약속입니다. </p>
<blockquote>
<p>클라이언트가 정한대로 서버에게 요청(Request)을 보내면,
서버가 요구사항을 처리하여 응답(Response)을 반환합니다.</p>
</blockquote>
</li>
<li><p>*<em>API 요청 방식 : 생성, 조회, 수정, 삭제 *</em></p>
<ul>
<li><p><strong>REST</strong> : 주소에 명사, 요청 방식에 동사를 사용함으로써 의도를 명확히 드러냄을 의미합니다.</p>
</li>
<li><p>여기에 쓰이는 동사는 우리가 JPA 시간에 배운 CRUD를 지칭합니다.</p>
</li>
<li><p>즉 A에 대해 생성(POST)/조회(GET)/수정(PUT)/삭제(DELETE) 요청을 하는 것이죠.</p>
</li>
</ul>
</li>
</ul>
<ul>
<li><p>현업에서는 데이터를 주고받을 때, <strong>DTO</strong>를 반드시 이용합니다. </p>
<blockquote>
<p>테이블을 막 건드려도 될까?
= read, update할 때 Course 클래스를 막 써도 될까?
= 내가 아닌 다른 사람이 변경이라도 한다면?? 😱
완충재로 활용하는 것이
DTO(Data Transfer Object)입니다.</p>
</blockquote>
</li>
<li><p><strong>Lombok</strong> : 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메소드/생성자 등을 자동생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리입니다.</p>
</li>
</ul>
<h3 id="crud">CRUD</h3>
<p>CRUD란? 정보관리의 기본 기능
→ 생성 (Create)
→ 조회 (Read)
→ 변경 (Update)
→ 삭제 (Delete)</p>
<hr>
<h2 id="spring-구조">Spring 구조</h2>
<ol>
<li><p>Controller : 가장 바깥 부분, 요청/응답을 처리함.</p>
</li>
<li><p>Service : 중간 부분, 실제 중요한 작동이 많이 일어나는 부분</p>
</li>
<li><p>Repo : 가장 안쪽 부분, DB와 맞닿아 있음. →(Repository, Entity)</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Java spring]week01]]></title>
            <link>https://velog.io/@da_yeon_kim/Java-springweek01</link>
            <guid>https://velog.io/@da_yeon_kim/Java-springweek01</guid>
            <pubDate>Fri, 09 Jul 2021 18:07:44 GMT</pubDate>
            <description><![CDATA[<h2 id="브라우저에-바로-나타내보기">브라우저에 바로 나타내보기</h2>
<h4 id="1-화면에-클래스-정보-띄워보기">1. 화면에 클래스 정보 띄워보기</h4>
<p><code>데이터로 응답하려면, RestController 를 사용해야 합니다.</code></p>
<ul>
<li><p><strong>Rest ?</strong></p>
<ul>
<li>서버의 응답이 JSON 형식임을 나타냅니다.</li>
<li>HTML, CSS 등을 주고받을 때는 Rest 를 붙이지 않습니다.</li>
</ul>
</li>
<li><p><strong>Conroller ?</strong>
 <code>자동 응답기!
 누군가 말을 걸면 응답하는 녀석이에요.</code></p>
<ul>
<li>클라이언트의 요청(Request)을 전달받는 코드를 Controller 라고 부릅니다.<br><span style="color:red">    → JSON 만을 돌려주는 것은 RestController 라고 부릅니다.</span></li>
</ul>
</li>
</ul>
<hr>
<h4 id="2-그레이들gradle이란">2. 그레이들(Gradle)이란?</h4>
<blockquote>
<p>다른 사람들이 만들어둔 도구 내려받기</p>
</blockquote>
<ul>
<li>Javascript - NPM</li>
<li>Python - pip</li>
<li>Java - mavenCentral, jcenter </li>
</ul>
<ul>
<li>다른 사람이 만들어 놓은 코드를 가져올 때 도와준다.</li>
<li>인터넷에 spring 프로젝트를 배포 할 수 있도록 빌드하는 것을 도와준다.</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>