공부/Spring

공부/Spring

스프링부트 3.X 스프링 시큐리티 JWT 토큰 기능 구현하기

Spring Boot 3.0.2 version 기준입니다. (Spring Boot 3.1.0까지 실행 확인) 이전 글 아래 포스팅과 이어지는 글입니다. 스프링부트 3.X 스프링 시큐리티 사용해서 회원가입, 로그인, 로그아웃 구현하기 스프링 시큐리티? 스프링 시큐리티는 스프링 기반의 애플리케이션 보안(인증, 인가, 권한)을 담당하는 스프링 하위 프레임워크이다. 인증(Authentication)? 인증은 사용자의 신원을 입증하는 과정이 devhan.tistory.com JWT? JWT는 JSON Web Token의 줄임말이다. JWT는 토큰 기반 인증을 지원한다. 토큰 기반 인증은 말 그대로 토큰을 사용하는 방법인데, 토큰은 서버에서 클라이언트를 구분하기 위한 유일한 값이다. 서버에서 토큰을 생성해서 클라이..

공부/Spring

스프링부트 3.X 스프링 시큐리티 사용해서 회원가입, 로그인, 로그아웃 구현하기

스프링 시큐리티? 스프링 시큐리티는 스프링 기반의 애플리케이션 보안(인증, 인가, 권한)을 담당하는 스프링 하위 프레임워크이다. 인증(Authentication)? 인증은 사용자의 신원을 입증하는 과정이다. 쉽게 말하면 우리가 흔히 어떤 사이트에 아이디와 비밀번호를 입력하고 로그인하는 과정이다. 인가(Authorization)? 인가는 사용자의 권한을 확인하는 작업이다. 이것도 쉽게 말하면 파일 공유 시스템에서 권한 별로 접근할 수 있는 폴더가 상이하다. 상위직책자는 들어갈 수 있고, 하위 직책자는 접근할 수 없는 경우 사용자의 권한을 확인해야 하는데 이 과정을 인가라고 한다. 그래서 스프링 시큐리티? 스프링 기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크이다. 이름에 걸맞게 보안 관련 옵션을..

공부/Spring

Gradle 프로젝트를 Springboot 3.X 프로젝트로 변경하기

Gradle? Gradle은 Build system 중 하나로 소스 코드를 이용해서 실행 가능한 애플리케이션을 생성하는 과정을 자동화하는 프로그램이며, 의존성 내려받기, 코드 패키징, 컴파일, 테스트 실행 등이 포함된다. Gradle 외에 Maven이 있으며 요즘엔 Maven 보다는 Gradle을 많이 사용하는 추세다. Gradle 특징 XML 형식으로 작성되는 Maven에 비해 가독성이 좋고 설정이 간단함 자바, 코틀린, 그루비 등 다양한 언어 지원, 원하는 대로 빌드 스크립트 작성 가능 빌드와 테스트 속도가 Maven에 비해 더 빠름 Springboot 3.X 프로젝트로 변환 build.gradle 기존 소스 plugins { id 'java' } group 'me.hs' version '1.0-SN..

공부/Spring

스프링부트 3.X에 Swagger 적용하기

프로젝트 개발에 본격적으로 들어가기에 앞서 API 문서 자동화가 필요한 거 같아 Swagger를 적용하려한다. Swagger란? 스웨거는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크이다. 별도의 스웨거 UI 도구를 통해 스웨거를 사용하며 자동화된 문서화, 코드 생성, 테스트 케이스 생성 지원이 포함된다. 출처 : 위키백과 Springfox Swagger vs Springdoc Spring Swagger의 경우 2020년의 마지막 버전인 3.0.0에서 멈춰있고, Springdoc의 경우엔 2023년에도 업데이트가 된 것을 mavenRepository에서 확인할 수 있다. 또한 둘의 차이점은 webflux의 지원..

공부/Spring

토비의 스프링 부트 - 자동 구성 기반 애플리케이션_1

메타 애노테이션과 합성 애노테이션 @UnitTest 애노테이션 생성 @Test 메서드가 붙어있는 simpleHelloService()의 애노테이션을 @UnitTest 애노테이션으로 변경해보자. 물론 새로 생성해줘야한다. @UnitTest void simpleHelloService() { SimpleHelloService helloService = new SimpleHelloService(); String ret = helloService.sayHello("Test"); Assertions.assertThat(ret).isEqualTo("Hello Test"); } @Test void helloDecorator() { HelloDecorator decorator = new HelloDecorator(nam..

공부/Spring

토비의 스프링 부트 - DI와 테스트, 디자인 패턴

테스트 코드를 이용한 테스트 여태 코드를 작성하면 서버를 재실행하고 인텔리제이 터미널에서 HTTPie로 테스트를 진행했다. 이렇게 사람이 수동으로 테스트를 하는 것보다 테스트 코드를 작성해서 사람보다는 기계?가 테스트하는 게 훨씬 시간도 절약되고 정확성이 높다. HelloApiTest.java public class HelloApiTest { @Test void helloApi() { } } 내용이 빈 메서드를 만들고 실행해보면 테스트가 통과되었다는 표시가 뜬다. 검증할 내용이 없어 테스트가 통과되지 않는 상황이 없기에 몇 번을 돌려도 테스트는 통과된다. TestRestTemplate.java @Test void helloApi() { // http localhost:8080/hello?name=Spri..

공부/Spring

토비의 스프링 부트 - 독립 실행형 스프링 애플리케이션-2

스프링 컨테이너로 통합 현재 코드는 스프링 컨테이너를 만들고 서블릿을 초기화하는 작업을 스프링 컨테이너가 초기화되는 과정 중에 일어나도록 코드를 변경해보자. 이유는 스프링부트가 그렇게 사용하고 있다. 스프링 컨테이너의 초기화 작업은 refresh()에서 일어난다. applicationContext.refresh(); refresh() 전에 호출되는 onRefresh()를 사용하려면 GenericWebApplicationContext를 상속받아서 오버라이딩 해야한다. 클래스를 따로 만들기보다는 익명 클래스를 사용하여 오버라이딩 한다. public class HellobootApplication { public static void main(String[] args) { GenericWebApplicatio..

공부/Spring

토비의 스프링 부트 - 독립 실행형 스프링 애플리케이션-1

스프링 컨테이너 사용 기존 소스 코드 정리 FrontController의 로직 중 'else if~' 구문 삭제 HTTP Status Code 세팅 코드 삭제 (에러가 나지 않는 한 알아서 200 OK 코드가 붙어 나간다.) 즉, 생략가능 HTTP Header에 세팅한 Content-Type 부분 setContentType() 메서드로 변경. 이러면 header ID를 생략하고 값만 넣으면 됨 public class HellobootApplication { public static void main(String[] args) { TomcatServletWebServerFactory serverFactory = new TomcatServletWebServerFactory(); // 다양한 서버 프로그램을 ..

공부/Spring

토비의 스프링 부트 - 독립 실행형 서블릿 애플리케이션

Containerless 개발 준비 내장형 톰캣을 실행하지 않도록 HellobootApplication.java에서 일부 코드를 삭제한다. package tobyspring.helloboot; public class HellobootApplication { public static void main(String[] args) { } } 서블릿 컨테이너 띄우기 톰캣은 설치를 해서 사용할 수도 있지만 내장형 톰캣도 따로 있어 설치하지 않고 임베디드 형식으로 사용할 수 있게 개발되었다. 스프링 부트는 https://start.spring.io/ 에서 프로젝트를 생성하면 프로젝트에 자동으로 임베디드 톰캣 라이브러리가 포함된다. 그럼 프로젝트에서 내장형 톰캣을 불러와 사용해보자. 톰캣 라이브러리를 직접 가져오는게..

공부/Spring

토비의 스프링 부트 - 스프링 부트 시작하기

프로젝트 생성 Spring Boot 버전은 2.7.10을 선택, Dependency는 Spring Web 선택, Java 버전은 11을 선택했다. Hello 컨트롤러 HelloController 생성 hello() 작성 @GetMapping("/hello") public String hello(String name) { return "hello " + name; } 서버 실행 후 확인 Hello API 테스트 HTTP 요청을 만들고 응답을 확인하는데 사용되는 도구 웹 브라우저 개발자 도구 curl HTTPie - https://httpie.io/ Homebrew 설치가 되어 있으면 'brew install httpie' 커맨드로 설치 가능Intellij IDEA Ultimate- http request ..

공부/Spring

토비의 스프링 부트 - 스프링 부트 살펴보기

스프링 부트 소개 스프링 부트는 스프링을 기반으로 실무 환경에 사용 가능한 수준의 독립실행형 애플리케이션을 복잡한 고민 없이 빠르게 작성할 수 있게 도와주는 여러가지 도구의 모음이다. 즉, 스프링 부트는 스프링을 기반으로 한 프레임워크이자 라이브러리이다. 프레임 워크 소프트웨어 개발자가 응용 소프트웨어의 표준 구조를 구현하기 위해 사용하는 소프트웨어 프레임워크로 구성된다. 즉, 프로그래밍에서 특정 운영체제를 위한 응용 프로그램 표준 구조를 구현하는 클래스와 라이브러리의 모임이다. 재사용할 수 있는 수많은 코드를 프레임워크로 통합함으로써 개발자가 새로운 애플리케이션을 위한 표준 코드를 다시 작성하지 않아도 된다. - 출처 : 위키백과 라이브러리 주로 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발..

공부/Spring

Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Catalogs and Orders Microservice_4

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) Orders Microservice 기능 마이크로서비스 URI(API Gateway 사용 시) HTTP Method 상품 목록 조회 Catalogs Microservice /catalog-service/catalogs GET 사용자 별 상품 주문 Orders Microservice /order-service/{user_id}/orders POST 사용자 별 주문 내역 조회 Orders Microservice /order-service/{user_id}/orders GET 프로젝트 생성 강의에서는 Spring Boot 버전을 2.4.2를 선택했고, 나는 3.0.4 버전을 선택했다. Model Mapper 라이브러리 추가 build.gra..

공부/Spring

Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Catalogs and Orders Microservice_3

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) Catalogs Microservice 프로젝트 생성 강의에서는 스프링부트 버전을 2.4.2로 선택, 나는 3.0.3으로 선택했다. build.gradle ModelMapper dependancy 추가 implementation 'org.modelmapper:modelmapper:2.4.2' application.yml server: port: 0 spring: application: name: catalog-service h2: console: enabled: true settings: web-allow-others: true path: /h2-console jpa: hibernate: ddl-auto: create-drop show..

공부/Spring

Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Catalogs and Orders Microservice_2

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) Users Microservice - 사용자 조회 User의 전체 사용자 목록과 상세 정보 보기 기능을 추가해보자. UserController의 각 메서드 uri 매핑 주소에 prefix 격으로 '/user-service/'가 들어간다. 그러므로 클래스 블럭에 있는 @RequestMapping() 어노테이션에 해당 uri를 기재하고, 각 메서드 XXXMapping()에 적혀있는 '/user-service/'는 지워주자. @RequestMapping("/user-service/") public class UserController { ... } ResponseUser vo에 회원 주문 목록을 볼 수 있도록 필드를 하나 추가한다. 아직 R..

공부/Spring

Spring Cloud로 개발하는 마이크로서비스 애플리케이션_Catalogs and Orders Microservice_1

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA) Users Microservice와 Spring Cloud Gateway 연동 Controller에서 port 출력 @GetMapping("/health_check") public String status() { return String.format("It's Working in User Service on PORT %s", env.getProperty("local.server.port")); } apigateway-service 프로젝트 route 정보 입력 application.yml routes: - id: user-service uri: lb://USER-SERVICE predicates: - Path=/user-service/..

데부한
'공부/Spring' 카테고리의 글 목록