목록Rest (6)
삶 가운데 남긴 기록 AACII.TISTORY.COM
서버 사이드 랜더링(SSR)은 브라우저로 필요한 화면(html)을 전송해주는데, 보통 jsp나 Thymeleaf 등을 사용합니다.그런데 REST API 서버 처럼 JSON(혹은 XML)을 이용해서 데이터를 주고 받는 경우, 무상태에다가 화면을 제공하지 않기 때문에 HttpSession이나 쿠키로 인증하는 방법에 제한을 받습니다.따라서 이런 제한을 피하기 위해 토큰을 이용해서 인증하는 방법을 JWT(JSON Web Token) 이라고 합니다.인증(Authentication): 사용자의 아이디와 비밀번호가 올바른지 확인합니다.JWT 생성: 인증에 성공하면 사용자 정보를 담은 JWT를 생성합니다.JWT 전송: 생성된 JWT를 클라이언트에게 응답으로 보냅니다.인가(Authorization)와 보호된 리소스 접근..
@RequestMapping@RequestMapping은 Spring MVC의 어노테이션이며, 특정 URL 요청을 어떤 컨트롤러의 메서드가 처리할지 연결(mapping)해주는 역할을 합니다.예를 들어 @RequestMapping(value="sendMessage")으로 되어있다면 이 메서드가 /sendMessage라는 경로(path)로 들어오는 요청을 처리하겠다는 것을 의미합니다. 예를 들어, 웹 애플리케이션이 http://localhost:8080에서 실행 중이라면, 사용자가 http://localhost:8080/sendMessage로 접속할 때 이 어노테이션이 붙은 메서드가 실행됩니다. 사용 위치:컨트롤러 클래스(class) 레벨이나 메서드(method) 레벨에 붙일 수 있습니다.클래스 레벨에 ..
서비스(비즈니스 로직) 서비스 레이어는 controller와 persistence 사이에서 비즈니스 로직을 수행하는 역할입니다. service 패키지를 만들어 아래 예제를 작성합니다. package ds.co.kr.todo.service; import org.springframework.stereotype.Service; @Service public class TodoService { public String testService() { return "Test Service"; } } @Service 어노테이션은 비즈니스 로직을 수행하는 컴포넌트이며 서비스 레이어임을 알려주는 어노테이션입니다. 스테레오 타입 어노테이션으로 내부에 @Component를 포함하고 있습니다. @RestController 에도 ..
REST 제약 조건 Client - Server 구조를 따릅니다. stateless 클라이언트가 서버에 요청을 보낼 때 이전 요청의 영향을 받지 않습니다. 그래서 요청을 보낼 때 로그인(인증) 정보를 항상 함께 보내야 합니다. http는 기본적으로 staeless 구조입니다. Cacheable 캐시가 가능한지 명시할 수 있어야 합니다. http는 헤더에 cache-control 에서 캐시 여부를 명시할 수 있습니다. Uniform Interface 리소스를 URI를 통한 인터페이스로 관리합니다. Layered System 인증서버, 캐싱 서버, 로드 밸런서 등 여러 레이어로 된 서버들을 거치지만 클라이언트는 서버 사이의 레이어의 존재 유무를 알지 못합니다. Code on demand 클라이언트는 서버에 ..
REST Client REST API를 이용하여 서버가 리소스를 제공하는 경우 클라이언트 측에서 리소스를 받기 위해 REST Client API가 필요합니다. 그중 하나인 OkHttp 라이브러리를 이용해 JAVA용 REST Client를 구현하는 예제를 소개합니다. OkHttp OkHttp는 Square 에서 만든 간편하게 REST API나 http기반의 요청 응답을 처리할 수 있는 라이브러리입니다. 오픈소스로 공개된 소프트웨어입니다. https://github.com/square/okhttp GitHub - square/okhttp: Square’s meticulous HTTP client for the JVM, Android, and GraalVM. Square’s meticulous HTTP cli..
개요 우리는 자바 3rd-party 라이브러리(jar)를 사용할 때 보통 maven이나 gradle 같은 빌드 도구를 사용합니다. 빌드 도구들은 해당 라이브러리에 대한 의존적인 클래스나 라이브러리를 같이 컴파일 및 실행을 해주기 때문에 보통 문제가 없습니다. 하지만 운영을 하다가 수동으로 라이브러리를 추가하거나 업데이트할 일이 있는 경우가 있는데, 이때 우리는 종종 ClassNotFoundException과 NoClassDefFoundError을 만나게 되는 경우가 있습니다. 저는 JDBC, SOAP통신용 라이브러리나 REST Client 용 라이브러리를 추가하거나 업데이트 시에 이런 문제가 생겼기 때문에 해당 오류를 따로 조사를 해봤습니다. Class Loader(JAVA8 이하) JVM이 class의..
