인프런 강의 10

4. HTTP 메서드

HTTP 메서드의 속성 • 안전(Safe Methods) • 멱등(Idempotent Methods) • 캐시가능(Cacheable Methods) [안전] Safe • 호출해도 리소스를 변경하지 않는다. • Q: 그래도 계속 호출해서, 로그 같은게 쌓여서 장애가 발생하면요? • A: 안전은 해당 리소스만 고려한다. 그런 부분까지 고려하지 않는다. [멱등] Idempotent • f(f(x)) = f(x) • 한 번 호출하든 두 번 호출하든 100번 호출하든 결과가 똑같다. • 멱등 메서드 • GET: 한 번 조회하든, 두 번 조회하든 같은 결과가 조회된다. • PUT: 결과를 대체한다. 따라서 같은 요청을 여러번 해도 최종 결과는 같다. • DELETE: 결과를 삭제한다. 같은 요청을 여러번 해도 삭제..

3. HTTP 기본

HyperText Transfer Protocol html 문서간 링크를 통해서 연결할 수 있는 이걸 전송하는 프로토콜로 시작 모든 것이 HTTP HTTP 메시지에 모든 것을 전송 • HTML, TEXT • IMAGE, 음성, 영상, 파일 • JSON, XML (API) • 거의 모든 형태의 데이터 전송 가능 • 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용 • 지금은 HTTP 시대! HTTP 역사 • HTTP/0.9 1991년: GET 메서드만 지원, HTTP 헤더X • HTTP/1.0 1996년: 메서드, 헤더 추가 • HTTP/1.1 1997년: 가장 많이 사용, 우리에게 가장 중요한 버전 • RFC2068 (1997) -> RFC2616 (1999) -> RFC7230~7235 (2014..

2. URI와 웹 브라우저 요청 흐름

URI(Uniform Resource Identifier) "URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있다" https://www.ietf.org/rfc/rfc3986.txt - 1.1.3. URI, URL, and URN 리소스를 식별(주민번호처럼) URL Locator 위치 URN Name 이름 [URI] 단어 뜻 • Uniform: 리소스 식별하는 통일된 방식 • Resource: 자원, URI로 식별할 수 있는 모든 것(제한 없음) • Identifier: 다른 항목과 구분하는데 필요한 정보 • URL: Uniform Resource Locator • URN: Uniform Resource Name 식별할 수 있는 모든 걸 다 자원이라고 함. 웹브라우저 h..

1. 인터넷 네트워크

개발자는 평생 HTTP기반 위에서 개발 언젠가 한 번은 HTTP 정리해야 함 인터넷에서 컴퓨터 둘은 어떻게 통신할까? 인터넷망을 통해서 전달되야하는 데이터들은 수많은 노드(서버)를 거쳐서 이동해야 함 [IP(인터넷 프로토콜, IP프로토콜)] 복잡한 인터넷 망을 거칠 규칙 필요 IP 주소를 통해 가능해짐 클라이언트가 주소 있어야함. 받을 서버도 주소 있어야 함. 인터넷 프로토콜 역할 • 지정한 IP 주소(IP Address)에 데이터 전달 • 패킷(Packet)이라는 통신 단위로 데이터 전달 출발지 IP주소, 도착지 IP주소, 메세지 넣고(패킷) 노드끼리 던지면서 전달 노드들이 서로 목적지 어딘지 물어가면서 던지면서 전달 클라이언트의 패킷 전달 루트와 서버의 패킷 전달 루트가 서로에게 보내는 거라도 다를 ..

스프링이란?

스프링 생태계 스프링은 하나가 아닌 여러가지 기술들의 모음 스프링의 가장 핵심인 스프링 프레임워크 여러 스프링 기술들(아래 선택들)을 편리하게 사용하게 도와주는 스프링 부트 스프링 데이터 : 관계형데이터베이스든 NoSQL이든 mongoDB, Redis 등등 기본 CRUD는 다 같아서 이런 걸 좀 편리하게 사용할 수 있도록 도와주는 ex) spring data JPA 스프링 세션 : 세션기능을 편리하게 스프링 시큐리티 : 보안과 관련 스프링 Rest Docs : API 문서를 편리하게 스프링 배치 : 애플리케이션 만드는 게 실무에서는 천만건을 한번에 처리하기는 힘드니까 천건씩 퍼올려서 돌리고 저장하고 하는 걸 배치처리라고 하는데 거기에 특화된 기술 스프링 클라우드 : 최근 클라우드 기술에 특화된 기술 스프..

자바 진영의 추운 겨울과 스프링의 탄생

JPA란 ORM 기술(자바 객체를 DB에 편하게 저장하고 꺼내는 기술, 쿼리 안쓰고) EJB는 비싸고 어렵고 복잡하고 느림. 이론은 분산도 되고 선언도 되고 하지만 인터페이스 구현해야하고 의존적이어서 별로였음. 순수하게 옛 POJO(Plain Old Java Object)? 오래된 방식의 간단한 자바 오브젝트를 쓰자. 더보기 Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어 EJB지옥에 불타는 개발자들이 오픈소스를 만듦 스프링 (EJB컨테이너 대체, 단순함의 승리, 현재 사실상 표준 기술..

Spring Security와 JWT -과제하면서 참고한 뱀귤 블로그

JWT는 Header, Payload, Signature 3개로 구성 Header : Signature 해싱 위한 알고리즘 정보 담겨있음 Payload : 서버와 클라이언트가 주고 받는, 시스템에서 실제로 사용될 정보에 대한 내용들을 담고 있음. Signature : 토큰의 유효성 검증을 위한 문자열 JWT 관련 TokenProvider: 유저 정보로 JWT 토큰을 만들거나 토큰을 바탕으로 유저 정보를 가져옴 JwtFilter: Spring Request 앞단에 붙일 Custom Filter Spring Security 관련 JwtSecurityConfig: JWT Filter 를 추가 JwtAccessDeniedHandler: 접근 권한 없을 때 403 에러 JwtAuthenticationEntryPo..

Spring Boot JWT Tutorial - 4, 5

Token 정보를 Response할 때 사용할 TokenDto JpaRepository를 extends하면 findAll, save 등의 메소드를 기본적으로 사용할 수 있게 됨. findOneWithAuthoritiesByUsername 메소드는 username을 기준으로 User 정보를 가져올 때 권한 정보도 같이 가져오게 됨. @EntityGraph는 쿼리가 수행이 될 때 Lazy 조회가 아니고 Eager조회로 authorities 정보를 같이 가져오게 됨. Spring Security에서 중요한 부분 중 하나인 UserDetailsService를 구현한 CustomUserDetailsService 클래스를 생성 UserDetailsService를 implements하고 UserRepository를 ..

Spring Boot JWT Tutorial - 1, 2, 3

JWT는 RFC 7519 웹 표준으로 지정 JSON 객체를 사용해 토큰 자체에 정보들을 저장하고 있는 Web Token JWT 방식은 헤비하지 않고 아주 간편하고 쉽게 적용 가능해 사이드 프로젝트 진행시 유용 (몇가지 사항만 잘 대응하면 대규모프젝에서도 충분히 사용가능 인증방식) JWT는 Header, Payload, Signature 3개로 구성 Header : Signature 해싱 위한 알고리즘 정보 담겨있음 Payload : 서버와 클라이언트가 주고 받는, 시스템에서 실제로 사용될 정보에 대한 내용들을 담고 있음. Signature : 토큰의 유효성 검증을 위한 문자열 -중앙의 인증서버, 데이터 스토어에 대한 의존성 없음, 시스템 수평 확장 유리 -Base 64 URL Safe Encoding >..

프로젝트 환경설정

spring initializr : 스프링 부트 기반 프로젝트 만들어주는 사이트. https://start.spring.io/ Maven과 Gradle 라이브러리를 데려오고 빌드하는 라이프사이틀 관리해주는 툴. 버전설정 Spring Boot 버전 snapshot 만드는 중 M1정식 릴리즈 아님 그룹은 기업도메인명 artifact 결과물(프로젝트명) dependencies 어떤 라이브러리를 땡겨쓸거냐 spring web http만드는 템플릿엔진 딱 맘에 드는 게 없어서 thymeleaf build.gradle group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' 우리가 설정한대로, 11버전으로 다운로드 dependencies 에 아까 ..