<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>spring_study.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Fri, 02 Sep 2022 07:07:47 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>spring_study.log</title>
            <url>https://velog.velcdn.com/images/spring_study/profile/00f375fa-6c25-42e3-83a5-946bd5f4a396/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. spring_study.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/spring_study" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Spring MVC]]></title>
            <link>https://velog.io/@spring_study/Spring-MVC</link>
            <guid>https://velog.io/@spring_study/Spring-MVC</guid>
            <pubDate>Fri, 02 Sep 2022 07:07:47 GMT</pubDate>
            <description><![CDATA[<p>MVC    (Model View Controller)
사용자 인터페이스와 비지니스 로직을 분리하여 개발 하는 것</p>
<p>Model 데이터 디자인을 담당한다.
View 실제로 렌더링되어 보이는 페이지를 담당한다.
Controller 사용자의 요청을 받고, 응답을 주는 로직을 담당한다</p>
<p>Spring MVC
<img src="https://velog.velcdn.com/images/spring_study/post/4fd39ca5-8ee4-4b6c-a145-b959acc9d8a3/image.png" alt=""></p>
<p><strong>Client → DispatcherServlet</strong>
가장 앞 단에서 요청을 받아 FrontController 라고도 불림</p>
<p><strong>DispatcherServlet → Controller</strong>
    API 를 처리해 줄 Controller 를 찾아 요청을 전달
    Handler mapping 에는 API path 와 Controller 함수가 매칭되어 있음</p>
<p><strong>Controller → DispathcerServlet</strong>
   Controller 가 Client 으로 받은 API 요청을 처리
    Model 정보와 View 정보를 DispatcherServlet  으로 전달</p>
<p> **  DispatcherServlet → Client**
    ViewResolver 통해 View 에 Model 을 적용
   View 를  Client 에게 응답으로 전달</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[트러블 슈팅]]></title>
            <link>https://velog.io/@spring_study/%ED%8A%B8%EB%9F%AC%EB%B8%94-%EC%8A%88%ED%8C%85</link>
            <guid>https://velog.io/@spring_study/%ED%8A%B8%EB%9F%AC%EB%B8%94-%EC%8A%88%ED%8C%85</guid>
            <pubDate>Thu, 01 Sep 2022 08:45:52 GMT</pubDate>
            <description><![CDATA[<p>트러블슈팅(troubleshooting)은 문제 해결의 일종으로, 망가진 제품, 또는 기계 시스템의 망가진 프로세스를 수리하는 일에 주로 적용된다. 문제 해결을 위해 문제의 원인을 논리적이고 체계적으로 찾는 일이며 제품이나 프로세스의 운영을 재개할 수 있게 한다.</p>
<p><strong>트러블 슈팅 해결</strong></p>
<ol>
<li><p>예상과 다르게 동작 될 경우
sysout을 사용하여 찾아보기</p>
</li>
<li><p>Exceotion이 발생할 경우
대부분 구글에 있으니 keyword를 잘 선정하여 검색하기
(자바는 사용자가 많아 대부분 나옴 안나올 경우 keyword 다시 선정 또는 문제의 원인이 다른 곳임)</p>
</li>
</ol>
<p><strong>오류 줄이기</strong></p>
<ol>
<li>설계 잘하기</li>
</ol>
<ul>
<li><p>eventstorming</p>
<p>eventstorming이란?
<a href="http://www.msaschool.io/operation/design/design-three/">http://www.msaschool.io/operation/design/design-three/</a></p>
<p>eventstorming을 위한 보드
<a href="https://miro.com/app/dashboard/">https://miro.com/app/dashboard/</a></p>
</li>
<li><p>model -&gt; repository -&gt; service -&gt; controller 순으로 개발하기</p>
<p>한번에 개발하지 말고 
model에서 column, 연관관계 확인하기
repository에서는 JPA가 있어서 편하지만 기능을 미리 정리하고 사용하기
service 완성 후 controller 연결해서 postman 같은 것으로 테스트 하지 말고 service를     서버단에서 먼저 테스트 하기
controller 연결하여 확인하기</p>
</li>
</ul>
<ol start="2">
<li><p>테스트 코드 만들기</p>
<p> swagger 꼭 사용하기</p>
</li>
</ol>
<p><strong>트러블슈팅 꼭 기록하기</strong></p>
<p>문제 발생 배경
발생한 오류의 종류, 위치, 원인
원인 파악을 위해 한 일
오류 해결방법
오류를 해결하며 배운 것</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Controller 와 HTTP Response 메시지]]></title>
            <link>https://velog.io/@spring_study/Controller-%EC%99%80-HTTP-Response-%EB%A9%94%EC%8B%9C%EC%A7%80</link>
            <guid>https://velog.io/@spring_study/Controller-%EC%99%80-HTTP-Response-%EB%A9%94%EC%8B%9C%EC%A7%80</guid>
            <pubDate>Wed, 31 Aug 2022 11:20:53 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/spring_study/post/0fa947b9-f44d-4dc3-bea6-d77989a956ae/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/spring_study/post/4e32d57f-0003-41fb-b6f3-dce314e4d0f2/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[PUT과 PATCH의 차이]]></title>
            <link>https://velog.io/@spring_study/PUT%EA%B3%BC-PATCH%EC%9D%98-%EC%B0%A8%EC%9D%B4</link>
            <guid>https://velog.io/@spring_study/PUT%EA%B3%BC-PATCH%EC%9D%98-%EC%B0%A8%EC%9D%B4</guid>
            <pubDate>Wed, 31 Aug 2022 11:04:30 GMT</pubDate>
            <description><![CDATA[<p>PUT과 PATCH 모두 http 메서드로 리소스를 업데이트하는 기능을 한다.</p>
<p>put은 리소스 전부를 바꿀 때 사용하고 patch는 리소스 일부를 바꿀 때 사용하며 만약 put을 이용하여 일부만 바꾸는 요청을 보낸다면 요청을 보낸 리소스를 제외한 다른 것은 null 값이 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[의존성 주입(DI)]]></title>
            <link>https://velog.io/@spring_study/%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85DI</link>
            <guid>https://velog.io/@spring_study/%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85DI</guid>
            <pubDate>Wed, 31 Aug 2022 10:41:07 GMT</pubDate>
            <description><![CDATA[<p>의존성 주입의 방법으로는 3가지가 있다</p>
<ol>
<li><p>생성자 주입
한번만 호출 되기에 의존관계가 변경되지 않을 때 사용함(대부분의 경우 변경 안함)</p>
</li>
<li><p>setter 주입
setter로 인하여 의존관계가 변할 수도 있음</p>
</li>
<li><p>필드 주입
@Autowired 어노테이션을 이용하여 의존성 주입.
필요한 의존 객체의 타입에 해당하는 빈을 찾아서 주입해줌.</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[웹소켓]]></title>
            <link>https://velog.io/@spring_study/%EC%9B%B9%EC%86%8C%EC%BC%93</link>
            <guid>https://velog.io/@spring_study/%EC%9B%B9%EC%86%8C%EC%BC%93</guid>
            <pubDate>Sun, 28 Aug 2022 07:21:53 GMT</pubDate>
            <description><![CDATA[<p>http는 클라이언트가 요청을 보내면 서버가 응답을 보내는 단방향 통신이며 계속 연결되어 있지 않다. 그래서 요청을 보내지 않으면 서버로부터 응답을 받을 수 없다.</p>
<p>웹소켓은 클라이언트와 서버 사이에 하나의 TCP 연결을 통해 실시간으로 전이중 통신을 가능하게 하는 프로토콜이다.</p>
<p>전이중 통신이므로, 연속적인 데이터 전송의 신뢰성을 보장하기 위해 Handshake 과정을 진행한다.
기존의 다른 TCP 기반의 프로토콜은 TCP layer에서의 Handshake를 통해 연결을 수립하는 반면, 웹 소켓은 HTTP 요청 기반으로 Handshake 과정을 거쳐 연결을 수립한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[RESTful, RESTAPI]]></title>
            <link>https://velog.io/@spring_study/RESTful-RESTAPI</link>
            <guid>https://velog.io/@spring_study/RESTful-RESTAPI</guid>
            <pubDate>Wed, 24 Aug 2022 03:46:07 GMT</pubDate>
            <description><![CDATA[<p>REST란(Representational State Transfer) 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미하며 API(Application Programming Interface)란 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 하는 것이다.</p>
<p>REST API는 REST의 원리를 따르는 API를 의미한다.</p>
<p>RESTFUL이란 REST의 원리를 따르는 시스템을 의미한다.</p>
<p>HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
HTTP Method(POST, GET, PUT, DELETE)를 통해
해당 자원(URI)에 대한 CRUD Operation을 적용하는 것이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Spring Framework, Spring Boot]]></title>
            <link>https://velog.io/@spring_study/Spring-Framework-Spring-Boot</link>
            <guid>https://velog.io/@spring_study/Spring-Framework-Spring-Boot</guid>
            <pubDate>Wed, 24 Aug 2022 03:14:07 GMT</pubDate>
            <description><![CDATA[<p>스프링 프레임워크는 자바 플랫폼을 위한 오픈소스 프레임워크로 동적 웹사이트를 개발하기 위한 서비르를 제공하며 경량 컨테이너로 자바 객체를 담고 직접 관리한다.</p>
<p>스프링의 특징으로는 제어의 역전, 의존성주입, 관점지향 프로그래밍이 있다.</p>
<p>IoC 제어의 역전
메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.
(프레임워크가 개발자 코드를 호출한다)</p>
<p>DI 의존성 주입</p>
<p>스프링이 제공하는 의존 관계 주입 기능으로, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 생성한 객체를 주입 시켜주는 방식이다.</p>
<p>AOP 관점지향 프로그래밍</p>
<p>핵심기능과 공통기능을 분리시켜 핵심 로직에 영향을 끼치지 않게 공통기능을 끼워 넣는 개발 방법이다.</p>
<p>스프링 부트
스프링은 많은 기능을 제공하기에 설정 또한 복잡하다. 그렇기에 많은 설정을 자동화를 하여 나온 것이 스프링 부트이다.</p>
<p>스프링과의 차이점은 스프링 부트에는 톰켓이 포함되어 있으며 starter을 통한 dependency 자동화, jar을 이용하여 배포 가능하다는 점이 있다.</p>
<p>starter를 통한 dependency 자동화</p>
<p>JPA가 필요하다면 prom.xml(메이븐)이나 build.gradle(그레이들)에 &#39;spring-boot-starter-data-jpa&#39;만 추가해주면 spring boot가 그에 필요한 라이브러리들을 알아서 받아온다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[프로토콜 http https]]></title>
            <link>https://velog.io/@spring_study/%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-http-https</link>
            <guid>https://velog.io/@spring_study/%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-http-https</guid>
            <pubDate>Tue, 23 Aug 2022 01:47:57 GMT</pubDate>
            <description><![CDATA[<p>프로토콜은 컴퓨터 내부 또는 컴퓨터간의 데이터 교환 방식을 정의하는 규칙 체계를 의미한다</p>
<p>http는 요청을 보내는 클라이언트와 응답을 보내는 서버가 있는 클라이언트 서버 구조로 클라이언트가 요청을 보내고 서버가 읍답을 보내면 연결을 끊으며 상태를 저장하지 않는다.</p>
<p>https는 http를 암호화해서 통신하는 것으로 SSL(보안 소켓 계층)과ㅏ TLS(전송 계층 보안)을 이용한다.
SSL은 서버와 클라이언트와의 연결을 암호화하여 도난을 방지하고 TLS는 데이터의 무결성을 제공하여 데이터의 손상과 수정을 방지한다.</p>
<p>http 메소드</p>
<p>GET 메서드는 특정 리소스의 표시를 요청합니다. GET을 사용하는 요청은 오직 데이터를 받기만 합니다.</p>
<p>HEAD 메서드는 GET 메서드의 요청과 동일한 응답을 요구하지만, 응답 본문을 포함하지 않습니다.</p>
<p>POST 메서드는 특정 리소스에 엔티티를 제출할 때 쓰입니다. 이는 종종 서버의 상태의 변화나 부작용을 일으킵니다.</p>
<p>PUT 메서드는 목적 리소스 모든 현재 표시를 요청 payload로 바꿉니다.</p>
<p>DELETE 메서드는 특정 리소스를 삭제합니다.</p>
<p>CONNECT 메서드는 목적 리소스로 식별되는 서버로의 터널을 맺습니다.</p>
<p>OPTIONS 메서드는 목적 리소스의 통신을 설정하는 데 쓰입니다.</p>
<p>TRACE 메서드는 목적 리소스의 경로를 따라 메시지 loop-back 테스트를 합니다.</p>
<p>PATCH 메서드는 리소스의 부분만을 수정하는 데 쓰입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[CORS]]></title>
            <link>https://velog.io/@spring_study/CORS</link>
            <guid>https://velog.io/@spring_study/CORS</guid>
            <pubDate>Mon, 22 Aug 2022 08:18:10 GMT</pubDate>
            <description><![CDATA[<p>CORS란 교차 출처 리소스 공유로 브라우저는 보안적인 이유로 교차 출처(프로토콜, 도메인, 포트번호가 다른 것)의 http의 요청을 제한하고 있다 이것을 http 헤더를 이용하여 허용하거나 제한 하는 것이 CORS이다.</p>
<p>CORS가 없다면 사이트를 모방하여 사용자 로그인정보를 빼오거나 다른 사람의 정보를 입력하는 등의 공격을 할 수 있다.</p>
<p>Simple requests인 경우 서버로 요청을 합니다.
서버의 응답이 왔을 때 브라우저가 요청한 Origin과 응답한 헤더 Access-Control-Request-Headers의 값을 비교하여 유효한 요청이라면 리소스를 응답합니다. 만약 유효하지 않은 요청이라면 브라우저에서 이를 막고 에러가 발생합니다.
Simple requests란?
HTTP method가 다음 중 하나이면서</p>
<p>GET
HEAD
POST
자동으로 설정되는 헤더는 제외하고, 설정할 수 있는 다음 헤더들만 변경하면서</p>
<p>Accept
Accept-Language
Content-Language
Content-Type이 다음과 같은 경우</p>
<p>application/x-www-form-urlencoded
multipart/form-data
text/plain
Simple requqets라고 부릅니다. 이 요청은 추가적으로 확인하지 않고 바로 본 요청을 보냅니다.</p>
<p>preflight 요청일 경우
Origin헤더에 현재 요청하는 origin과, Access-Control-Request-Method헤더에 요청하는 HTTP method와 Access-Control-Request-Headers요청 시 사용할 헤더를 OPTIONS 메서드로 서버로 요청합니다. 이때 내용물은 없이 헤더만 전송합니다.
브라우저가 서버에서 응답한 헤더를 보고 유효한 요청인지 확인합니다. 만약 유효하지 않은 요청이라면 요청은 중단되고 에러가 발생합니다. 만약 유효한 요청이라면 원래 요청으로 보내려던 요청을 다시 요청하여 리소스를 응답받습니다.
preflight 요청이란?
Simple requests가 아닌 cross-origin요청은 모두 preflight 요청을 하게 되는데, 실제 요청을 보내는 것이 안전한지 확인하기 위해 먼저 OPTIONS 메서드를 사용하여 cross-origin HTTP 요청을 보냅니다. 이렇게 하는 이유는 사용자 데이터에 영향을 미칠 수 있는 요청이므로 사전에 확인 후 본 요청을 보냅니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[쿠키 세션 JWT]]></title>
            <link>https://velog.io/@spring_study/%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98-JWT</link>
            <guid>https://velog.io/@spring_study/%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98-JWT</guid>
            <pubDate>Fri, 19 Aug 2022 23:32:28 GMT</pubDate>
            <description><![CDATA[<p>http는 클라이언트와 서버가 요청과 응답을 주고 받으면 연결을 끊어버리고 상태 정보를 저장하지 않는다 그래서 사용자 인증을 하기 위해 쿠키, 세션, JWT 같은 것을 이용한다.</p>
<p>쿠키는 클라이언트에 저장되는 키와 밸류로 이루어진 데이터로 인증 시간이 될때까지 클라이언트가 종료되어도 유지가 된다.그러나 인증 정보를 클라이언트가 가지고 있기 때문에 보안에 취약해 민감하지 않은 정보만을 저장한다.</p>
<p>세션은 쿠키를 기반으로 하지만 사용자 정보를 서버에 저장하고 클라이언트를 구분하기 위해 ID를 부여하고 클라이언트가 종료될때까지 유지한다. 단점은 서버에 정보를 저장하기에 사용자가 많아지면 서버에 부하가 걸린다</p>
<p>JWT는 제이슨 웹 토큰으로 헤더(암호화 방식), 페이로드(유저 정보), 서명 확인(헤더+페이로드+시크릿키)로 이루어져있다.따로 저장하지 않고 복호화를 통해 확인만 하면 되서 서버에 부담이 적지만 한번 발급한 JWT는 삭제할 수 없어 탈취 당할 경우 위험하다.이건 리프레쉬토큰을 이용하여 해결 할 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[JPA]]></title>
            <link>https://velog.io/@spring_study/JPA</link>
            <guid>https://velog.io/@spring_study/JPA</guid>
            <pubDate>Tue, 16 Aug 2022 00:19:23 GMT</pubDate>
            <description><![CDATA[<p>JPA(Java Persistence API)는 정의로는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다.</p>
<p>ORM은 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑시켜주는 것으로 객체의 클래스와 데이터베이스의 테이블은 서로 호환성을 생각하여 만들어진게 아니기에 불일치가 존재하는데 그것을 객체 간의 관계를 바탕으로 SQL을 생성하여 해결하는 것이다.(즉 SQL을 직접 작성할 필요가 없어짐)</p>
<p>JPA 사용 이유는 반복적인 CRUD SQL 작성과 매핑 코드를 작성하는 것보다 간단하고 필드가 추가되거나 삭제되어도 JPA가 대신 처리해주기에 수정할 코드가 줄어드며 상속과 연관관계에 대한 불일치를 해결해준다.
그러나 통계 같은 큰데이터를 처리 할때는 JPA로 처리하기는 힘들기 때문에 직접 쿼리문을 작성하는 것이 효율을 늘릴 수 있는 방법이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[라이브러리와 프레임워크]]></title>
            <link>https://velog.io/@spring_study/%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EC%99%80-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC</link>
            <guid>https://velog.io/@spring_study/%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC%EC%99%80-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC</guid>
            <pubDate>Sun, 14 Aug 2022 20:09:53 GMT</pubDate>
            <description><![CDATA[<p>라이브러리의 정의는 주로 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다. 여기에는 구성 데이터, 문서, 도움말 자료, 메세지 틀, 미리 작성된 코드, 서브루틴(함수), 클래스, 값, 자료형 사양을 포함 할 수 있다.</p>
<p>다음으로 프레임워크의 정의는 복잡한 문제를 해결하거나 서술하는데 사용되는 기본 개념구조이다.
나는 스프링을 사용하기에 애플리케션 프레임워크에 대해 살펴보면 프로그래밍에서 특정 운영 체제를 위한 응용 프로그램 표준 구조를 구현하는 클래스와 라이브러리 모임이다.
프레임워크의 구현은 객체 지향 프로그래밍 기법이 사용되고 있는 응용 프로그램 고유의 클래스가 프레임워크의 기존 클래스를 상속할 수 있다.</p>
<p>프레임워크의 특징으로는 모듈화, 재사용성, 확장성, 제어의 역흐름이 있다.</p>
<p>라이브러리와 프레임워크의 가장 큰 차이는 제어의 역흐름에 있다.</p>
<p>라이브러리는 사용자의 코드가 라이브러리를 호출하여 사용되기 때문에 제어의 주도성이 사용자의 코드에 있지만 프레임워크의 경우 프레임워크가 사용자의 코드를 호출하여 사용하는 것이다.
또한 프레임워크는 라이브러리를 포함하고 있다.</p>
<p>프레임워크의 장점은 코드의 재사용으로 효율적이며 이미 만들어지고 감증된 코드이기에 버그 발생 가능성을 줄여준다 또한 프레임워크는 체계적으로 만들어져있기에 유지보수에 좋으며 추상화된 코드 제공을 통해 확장성이 좋다
그러나 단점으로는 다른 사람이 짠 코드이기에 코드를 습득하고 이해하는데 시간이 필요하고 기본 틀 안에서 개발을 해야하기에 제약사항이 있다는 것이다. 또한 기능이 많은만큼 프로젝트의 용량이 증가하게 된다.</p>
]]></description>
        </item>
    </channel>
</rss>