-
REST API, 그리고 스프링에서 REST API 디자인해보기 REST한 API(REST API) 간단하게 말하자면 API 디자인 가이드라인(원칙) API란? 원격으로 다른 시스템의 메소드 콜을 할 수 있도록 하는 것 어떤 클라이언트라도 일관된 방법으로 콜 할 수 있게, 서버에 변동이 생겨도 클라이언트는 아무런 영향 받지 않도록 - 하위 호환성, 일관성을 띄는 API 디자인 가이드라인(원칙) REST 왜 만들었을까? 현재의 웹 환경을 파괴하지않고도 HTTP를 발전시킬 수는 없을까 라는 생각 아래에 만들어짐 REST한 API가 되려면 지켜야하는 디자인 원칙 : 각각의 디자인 원칙은...
-
테스트 코드 중복 없애기 테스트 코드 중복을 없애기 위해서 2가지 방법(+@)이 있음 @Before 메소드를 사용 : 모든 테스트메소드가 거치기때문에 필요없는 메소드도 호출하는 단점이 있음 일반 메소드(prehandle 개념 메소드)를 정의해두고 prehandle을 거쳐야하는 @Test에서 호출하는 방법 : 코드양은 늘어나지만 필요한 메소드에만 적용시킬 수 있음 +@ 방법은 2번째에서 상속을 사용해서 중복을 제거하는 것 테스트 코드 또한 중복을 제거하지않으면 테스트 케이스가 늘어날수록 중복 제거한 코드보다 코드양이 훨씬 더 늘어남 2번째 방법으로 중복 제거하기 public class QnaAcceptanceTest extends AcceptanceTest {...
-
테스트하기 TestRestTemplate 활용 인수테스트하기 인수테스트 : end to end 테스트, 요청에 대한 응답 테스트(컨트롤러 테스트) 브라우저를 사용하지않고 클라이언트 역할을 하는 TestRestTemplate 사용 꼭 브라우저만이 클라이언트가 아니라는 것을 알 수 있음 : 외부에서도 HTTP만 지켜서 요청을 날릴 수 있다는 것을 알아야함 RestTemplate 래핑한 TestRestTemplate : RestTemplate는 스프링에서 제공하는 외부 API 콜 할 수 있는 API, Test는 래핑해서 테스트에 적합하게 만듦 테스트 코드 짜보기 - QnaAcceptanceTest AcceptanceTest : Qna 이외에도 인수테스트를 해야할 것들이 있는데 필요 조건이 중복되는...
-
스프링부트 HTTP 세션 데이터 쉽게 가져오기 - 커스텀 파라미터 만들기 HandleMethodArgumentResolver를 사용함 파라미터를 커스텀하는 역할, 두개의 메소드를 오버라이드 한 후 스프링 MVC에 리졸버를 등록하고, 실제로 적용할 부분에 선언해서 사용함 Interceptor와 컨트롤러 로직 사이에 존재하는 것으로 생각 : 코드 중복을 줄일 수 있음(같은 파라미터를 가지고 기능 구현을 한다면) 어노테이션 생성하기 : 커스텀 파라미터로 사용할 파라미터라는 표시(설정) @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface LoginUser { public boolean required() default true; } 커스텀 파라미터 만들기 - HandleMethodArgumentResolver public class LoginUserHandlerMethodArgumentResolver...
-
쓰면서 배우는 스프링(부트) 로그인 관련 기능 테스트 피드백 받은 내용 중 가장 뼈져리게 아픈 부분은 테스트 케이스를 작성하면서 실패 케이스를 깜빡했다는 것 테스트 케이스를 작성할 때에는 성공 케이스보다 실패 케이스가 더 중요함 : 실패 케이스일 때 브라우저가 어떤 응답을 받을지 테스트 꼭 해야함 @Test public void login_fail_invalid_password() { String userId = "javajigi"; builder.addParameter("userId", userId); builder.addParameter("password", "1111"); HttpEntity<MultiValueMap<String, Object>> request = builder.build(); ResponseEntity<String> response = template.postForEntity("/users/login", request, String.class); assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode()); } @Test public void login_fail_invalid_userId() {...