STUDY (287) 썸네일형 리스트형 Spring Boot | REST Docs 적용하기 ( + build failed 해결.. ) Spring REST Docs? Asciidoctor를 사용해 RESTful 서비스에 대한 문서를 생성하도록 돕는다. Swagger vs REST Docs Swagger UI Spring REST Docs 실제 코드에 애노테이션을 추가하여 문서가 작성되는 방식 -> 가독성 측면에서 좋지 않을 수 있음 -> 하지만 적용하는 방법이 쉬움! 테스트 코드로 문서를 작성하는 방식 (테스트가 성공해야만 작성됨) -> 테스트 코드를 반드시 작성해야 함.. -> 약간의 진입 장벽이 있음 API를 테스트 해볼 수 있음! API 테스트 불가능 진짜 "문서" Swagger도 사용해봤지만, REST Docs가 더 좋다고 느꼈다.. 일단 문서 생긴게 더 마음에 들기도 하고...^^ REST Docs 적용하기! 우아한형제들 기술.. React | JWT 안전하게 저장하기 (localStorage 사용 X) (3) 지난글까지 완료한 상태라면, 다른 탭에서 로그아웃을 하더라도 모든 탭이 동시에 로그아웃이 되지만.. 다른 탭을 생성하면 또 로그인을 해야한다. 이번 글에서는 이 문제를 해결한다! Refresh Token을 Cookie에 저장! 최초 로그인 시 함께 발급되는 refresh_token을 쿠키에 저장한다. 우선, 리액트에서 쿠키를 편하게 사용하려면 다른 라이브러리를 추가해야 한다. 아니면 documtn.cookie로 생성하고, 삭제하고 해야 하는데 굉장히 번거로운 작업이다.. 물론 직접 해도 된다. universal-cookie를 사용할 것이다. react-cookie를 사용해도 되긴 하지만, 자바스크립트 내에서만 사용할 것이므로.. npm install universal-cookie auth.js 수정 우선.. JUnit5 | multipart/formdata 전송 테스트 ( MockMultipartFile, @RequsetPart ) MockMultipartFile로 파일 업로드 POST 요청 테스트를 해보자! 1. TestClass 작성 보통 테스트할 클래스 명에 Test를 붙여 생성한다. @SpringBootTest를 이용한 통합테스트를 진행할 것임 @AutoConfigureMockMvc를 이용해 MockMvc 자동 설정 스프링 프로필을 설정해놓았다면, @ActiveProfiles로 사용하고자 하는 프로필을 꼭 명시할 것 @BeforeEach로 테스트 메서드 요청 전에 access_token을 발급 받아 초기화 함 -> OAuth2를 사용하는 경우에만 해당 @Slf4j @SpringBootTest @AutoConfigureMockMvc @ActiveProfiles(profiles = "local") public class Imag.. JUnit5 | Test LifeCycle JUnit5은 네 가지의 테스트 라이프사이클 애노테이션을 제공한다. @BeforeAll JUnit4의 @BeforeClass를 대신하는 애노테이션이다. 모든 테스트가 실행되기 이전에 @BeforeAll이 명시된 메서드가 실행된다. -> 테스트가 실행되기 전에 딱 한 번 실행 반드시 static 메서드여야 한다. @BeforeEach JUnit4의 @Before를 대신한다. @Test애노테이션이 명시된 각각의 테스트 메서드 이전에 실행된다. static 메서드일 수 없다. @AfterAll JUnit4의 @AfterClass를 대신한다. 모든 테스트들이 실행된 이후에 실행된다. -> 테스트가 완전히 종료된 후 딱 한 번 실행 반드시 static 메서드여야 한다. @AfterEach JUnit4의 @Afte.. JUnit5 | Controller 테스트 하기 ( + OAuth2 ) 1. TestRestTemplate 이용하기 TestRestTemplate을 이용하기 위해서는 @SpringBootTest어노테이션과 webEnvironment설정이 필요하다. @SpringBootTest의 webEnvironment속성 설정을 RANDOM_PORT로 설정 @TestConstructor를 명시하여 생성자로 의존관계 주입 @ActiveProfiles에 사용할 프로필을 설정 (프로필 설정이 되어있지 않다면 생략) @Slf4j @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) @TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL) @ActivePr.. React | JWT 안전하게 저장하기 (localStorage 사용 X) (2) Home 컴포넌트 작성 Home.jsx는 /경로 (기본 경로)로 접근하면 나타나는 페이지다. 일단 /login과 /hello링크를 생성했다. /login은 인증되지 않아도 접근이 가능하다 /hello는 인증된 상태여야만 접근이 가능하다 -> PrivateRoute처리하여 인증되지 않은 상태라면 /login으로 바로 이동시킴 import React from 'react'; import { Link } from 'react-router-dom'; export default function Home() { return ( Home Sweet Home 🏠 로그인 여긴 로그인을 해야 갈 수 있어요 ); } 지금은 로그인하지 않았기 때문에 (authenticated = false) 둘 중 어떤 것을 눌러도 모두 로.. React | JWT 안전하게 저장하기 (localStorage 사용 X) (1) JWT는 어디에 저장해야 할까 이전 글에서 알아 보았듯, WebStorage(LocalStorage 혹은 SessionStorage)에 저장하면 안 된다! 그러다가 이 가이드를 발견했고, 이대로 따라해보기로 했다. 가이드는 아래와 같은 방식으로 구현된다. 서버는 GraphQL이다. http통신으로 JWT를 받는다. LocalStorage에 JWT를 저장하지 않는다. (중요) JWT는 In Memory에 저장한다. -> 이 가이드는 in memory방식의 문제점을 해결해준다..! (매우 중요) 서버에서 refresh_token을 제공해야 한다. (제일 중요) 탭을 새로 생성해도, 다른 탭에서 로그아웃을 해도 정상적으로 처리되도록 만든다! 그리고 이 가이드와 내가 한 방식의 다른점..! 서버가 없음 -> 서.. JWT를 어디에 저장할까 항상 아무 생각 없이 LocalStorage에 저장했었는데요... 안된답니다..🙅♀️ 1. LocalStorage WebStorage의 하나인 localStorage에 저장하는 방식. 가장 흔히 사용하는 방법이다. 장점: 웹 페이지를 새로고침 해도 살아있음 단점: XSS 공격에 취약 sessionStorage는..? localStorage와 똑같다. 브라우저 종료되었을 때 사라지냐, 사라지지 않느냐의 차이 2. Cookie 쿠키에 그냥 저장하는 방식은.. 안전하지 않다. 하지만 httpOnly, sameSite, secure설정을 한다면..?! HttpOnly: javascript에서 document.cookie로 접근하는 것을 막는다 SameSite: SameSite=strict설정을하게되면, CSR.. 이전 1 ··· 5 6 7 8 9 10 11 ··· 36 다음