Spring

    OAuth2 로그인 인증

    OAuth2.0 인증 및 권한 획득을 위한 업계 표준 프로토콜 보안수준이 어느정도 검증된 플랫폼의 API를 이용하여 사용자 인증과 리소스에 대한 권한 획득(인가)을 할 수 있도록 해준다. 즉, 구글, 카카오, 네이버 등과 같은 사이트에서 로그인을 하면 직접 구현한 사이트에서도 로그인 인증을 받을 수 있도록 하는 구조 구성요소 Resource Owner: 개인 정보의 소유자 Client: 리소스 서버에서 제공해주는 자원을 사용하는 외부 플랫폼 Authorization Server: 외부 플랫폼이 리소스 서버의 사용자 자원을 사용하기 위한 인증 서버 Resource Server: 사용자의 개인 정보(자원)을 저장하고 제공해주는 서버 인증 종류 1. 권한 코드 승인 방식 일반적으로 서버 사이드에서 인증을 처리..

    JWT 인증 구현

    서블릿 필터 서블릿 필터란 서블릿 실행 전에 실행되는 클래스들로, 디스패처 서블릿이 실행되기 전에 항상 실행된다. 구현된 로직에 따라 원하지 않는 HTTP 요청을 걸러낼 수 있으며, 걸러낸 HTTP는 거절된다. 서블릿 필터에서 전부 살아남은 HTTP 요청은 디스패처 서블릿으로 넘어와 컨트롤러에서 실행된다. 서블릿 필터를 구현하려면 HttpFilter 또는 Filter를 상속해 doFilter() 라는 메서드를 원하는대로 오버라이딩 서블릿 필터들은 FilterChain을 이용해 연쇄적으로 순서대로 실행되며, 각 필터는 다음으로 부를 Filter를 FilterChain 안에 갖고 있어 FilterChain을 통해 다음 필터를 실행할 수 있다. 스프링 시큐리티 스프링 시큐리티는 스프링 기반 어플리케이션의 권한..

    RestContoller 요청과 응답 방법

    HTTP는 GET/POST/PUT/DELETE/OPTIONS 등과 같은 메서드와 URI를 이용해 서버에 HTTP 요청을 보낸다. 서버는 자기 주소를 제외한 /{리소스} 부분을 해석하고, 이 요청이 어떤 HTTP 메서드를 이용했는지 확인 후, 해당 리소스의 HTTP 메서드에 연결된 메서드를 실행한다. @RestController @RestController @RequestMapping("/test") // 리소스 public class TestController { @GetMapping public String testController() { return "hello"; } } @RestController 어노테이션은 해당 컨트롤러가 RestController 임을 명시하고, 스프링은 HTTP와 관련된 ..

    REST API 인증 기법

    ※ 인증은 사용자가 누구냐에 관한 것이고, 인가는 사용자가 사용할 수 있는 자원을 말한다. Basic 인증 상태가 없는 웹 애플리케이션에서 인증을 구현하는 가장 간단한 방법으로, 모든 HTTP 요청에 아이디와 비밀번호를 같이 보낸다. 최초 로그인한 후 HTTP 요청 헤더의 Authorization: 부분에 Basic : 처럼 아이디와 비밀번호를 콜론으로 이어붙인 Base64로 인코딩한 문자열을 함께 보낸다. HTTP 요청을 수신한 서버는 인코딩된 문자열을 디코딩해 아이디와 비밀번호를 찾아낸 후 사용자 정보가 저장된 데이터베이스 또는 인증 서버의 레코드와 비교한다. 만약 데이터베이스의 레코드와 아이디와 비밀번호가 일치하면 요청받은 일을 수행하고, 아니면 거부한다. 문제점 Basic 인증 방법은 아이디와 비..

    REST 아키텍처 패턴

    레이어드 아키텍처 패턴 스프링 프로젝트 내부에서 어떻게 코드를 적절히 분리하고 관리할 것이냐에 대한 것으로, 애플리케이션을 구성하는 요소들을 수평으로 나눠 관리하는 것 레이어로 나눈다는 것은 메서드를 클래스 또는 인터페이스로 쪼개는 것으로, 각 레이어 사이에는 계층이 있고 레이어는 자기보다 한 단계 하위의 레이어만을 사용한다. 보통 자바로 된 비즈니스 애플리케이션의 클래스는 비즈니스 로직을 수행하는 클래스와, 데이터를 담는 클래스로 나눌 수 있다. 비즈니스 로직을 수행하는 클래스는 컨트롤러, 서비스, 리포지토리처럼 로직을 수행한다. 데이터를 담는 클래스는 아무 기능 없이 데이터베이스에서 반환된 비즈니스 데이터를 담고 있으며, 기능에 따라 엔티티, 모델, DTO 등으로 부른다. 모델, 엔티티, DTO 모델..

    스프링 컨테이너와 컴포넌트 스캔

    ApplicationContext ApplicationContext 인터페이스를 스프링 컨테이너라고 하며, 스프링 컨테이너는 애플리케이션 컴포넌트(Bean)들을 생성하고 관리한다. BeanDefinition은 빈 설정 메타정보로, AppConfig의 @Bean 당 각각 하나씩 메타정보를 생성한다. 이후 스프링 컨테이너는 생성된 메타정보를 기반으로 스프링 빈을 생성한다. AppConfig 스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정 정보로 사용하여 @Bean이 적힌 메서드를 모두 호출하여 반환된 객체를 스프링 컨테이너에 등록하고, 설정정보를 이용해서 의존관계를 주입한다. @Configuration public class ServiceConfiguration { @Bean p..

    Gradle 스프링 초기 설정

    패키징 기존의 자바 웹 애플리케이션은 WAR 파일로 패키징되며, JAR 파일은 라이브러리와 데스크톱 UI 애플리케이션 패키징에 사용되었다. WAR 파일은 기존의 자바 애플리케이션 서버에 애플리케이션을 배포할 때는 적합하지만, 대부분의 클라우드 플랫폼에는 맞지 않는다. JAR 패키징은 클라우드를 염두에 둔 선택으로, 모든 자바 클라우드 플랫폼은 실행 가능한 JAR 파일을 사용한다. 스프링 프로젝트 구조 애플리케이션 소스 코드는 src/main/java, 테스트 코드는 src/test/java, 자바 리소스가 아닌 것은 src/main/resources에 저장된다. Applicaton은 스프링 부트의 메인 클래스이며, application.properties에 구성 속성을 지정할 수 있다. static은 브..