Spring Security OAuth2 클라이언트 JWT예제 목표구현 방식인증 : 네이버/구글 소셜 로그인 (코드 방식) 후 JWT 발급인가 : JWT를 통한 경로별 접근 권한인증 정보 DB 저장 후 추가 정보 기입 버전 및 의존성Spring boot 3.xxSpring Security 6.2.2OAuth2 ClientJWT 0.12.3 등 OAuth2.0 코드 방식 인증을 활용하고 JWT는 단일 토큰으로 진행관리를 하지 않고 인증만 받고 사용하는 경우 추가적인 사용자 정보나 어떠한 사용자가 우리의 서비스를 활용하는지 확인할 수 없기에 소셜 로그인을 통해 인증 받은 데이터는 DB에 저장을 한 뒤 관리해야 한다. 예제에서 사용되는 JWT는 2가지백엔드 소셜 로그인 제공 서비스(구글, 네이버) OAut..
모니터링 메트릭 활용메트릭 등록 - 예제 만들기공통으로 사용되는 기술 메트릭(CPU, 메모리 사용량, 쓰레드...)은 이미 등록되어 있기에 사용해서 모니터링 할 수 있다.비지니스에 특화된 부분들(재고량, 취소수...)과 관련된 비지니스 메트릭이 있으면 비지니스와 관련된 문제들을 빠르게 인지할 수 있다.비지니스 메트릭은 직접 등록하고 확인해야 한다. 비지니스 메트릭을 위한 예제와 정의주문수 / 취소수상품 주문 시 주문수가 증가상품 취소 시 주문수는 유지되지만 취소수가 증가재고 수량상품 주문 시 재고 수량 감소상품 주문 취소 시 재고 수량 증가재고 물량이 들어오면 재고 수량 증가주문수, 취소수는 계속 증가하기에 카운터를 사용재고 수량은 증가하거나 감소하므로 게이지를 사용 public interface Ord..
마이크로미터, 프로메테우스, 그라파나마이크로미터기존에는 사용하던 모니터링 툴을 변경하면 코드까지 모두 변경해야하는 문제가 발생했다.이런 문제를 해결하는 것이 마이크로미터라는 라이브러리이다.개발자는 마이크로미터 표준 측정 방식만 알고 있으면 변환해서 전달해준다. 마이크로미터 : 애플리케이션 메트릭 파사드라고 불리며 애플리케이션의 메트릭(측정 지표)을 마이크로미터가 정한 표준 방법을 모아서 제공해준다.추상화를 통해서 구현체를 쉽게 갈아끼울 수 있도록 해뒀다.스프링 부트 액츄에이터는 마이크로미터를 기본으로 내장해서 사용한다.개발자는 마이크로미터가 정한 표준 방법으로 메트릭을 전달하고 모니터링 툴에 맞는 구현체를 선택하면 된다.모니터링 툴이 변경되어도 구현체만 변경하면 된다.메트릭 확인하기스프링 부트는 마이크로..
액츄에이터프로덕션 준비 기능프로덕션 준비 기능 : 운영 환경에서 서비스할 때 필요한 기능들프로덕션을 운영에 배포할 때 준비해야 하는 비 기능적 요소들을 의미지표(metric), 추적(trace), 감사(auditing), 모니터링ex) 애플리케이션이 살아있는지, 로그 정보는 정상 출력되는지, 커넥션 풀 사용 현황 등.. 엑츄에이터 : 프로덕션 준비 기능을 편리하게 사용할 수 있도록 스프링 부트가 제공하는 기능마이크로미터, 프로메테우스, 그라파나 같은 모니터링 시스템과 쉽게 연동하는 기능도 제공액츄에이터 시작implementation 'org.springframework.boot:spring-boot-starter-actuator' //actuator 추가build.gradle 의존성 추가액츄에이터가 제공..
외부설정과 프로필외부 설정 사용 - Environment스프링은 Environment를 활용해서 더 편리하게 외부 설정을 읽는 방법을 제공한다.스프링이 지원하는 다양한 외부 설정 조회 방법Environment@Value - 값 주입@ConfigurationProperties - 타입 안전한 설정 속성 @Slf4jpublic class MyDataSource { private String url; private String username; private String password; private int maxConnection; private Duration timeout; private List options; public MyDataSource(String ur..
외부설정과 프로필외부 설정이란하나의 애플리케이션을 여러 다른 환경에서 사용해야할 때가 있다.개발 환경 : 개발이 잘 진행되고 있는지 내부에서 확인하는 용도개발 서버 -> 개발 DB운영 환경 : 실제 고객에게 서비스하는 용도운영 서버 -> 운영 DB각 환경에 따라서 다른 설정 값이 존재한다.ex) 서로 다른 DB를 사용하기에 DB 설정 값(url ...)이 존재한다. 환경에 따라 값을 설정하는 방법환경에 따라 변하는 설정 값을 내부에 포함하는 방법환경에 따라 빌드를 여러번 해야한다.빌드 결과물이 서로 다르고 유연성이 떨어진다.실행 시점에 외부 설정값을 주입하는 방법 (주로 사용하는 방식)환경과 무관하게 하나의 빌드 결과물을 생성설정 값은 각 환경에 맞게 실행 시점에 외부에서 주입한다. 실행 시점에 외부..
자동 구성예제 만들기JdbcTemplate을 사용한 회원 데이터를 DB에 보관하고 관리하는 기능 개발 @Datapublic class Member { private String memberId; private String name; public Member() { } public Member(String memberId, String name) { this.memberId = memberId; this.name = name; }}회원 예제 @Configuration@Slf4jpublic class DbConfig { @Bean public DataSource dataSource() { log.info("dataSource 빈..
스프링 부트 스타터와 라이브러리 관리스프링 부트는 라이브러리들을 편리하게 사용할 수 있는 기능을 제공한다.외부 라이브러리 버전 관리스프링 부트 스타터 제공 dependencies { //1. 라이브러리 직접 지정 //스프링 웹 MVC implementation 'org.springframework:spring-webmvc:6.0.4' //내장 톰캣 implementation 'org.apache.tomcat.embed:tomcat-embed-core:10.1.5' //JSON 처리 implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.1' ...}...라이브러리 직접 선택 build.gradle 예시..
내장 톰캣WAR 배포 방식의 단점WAR 배포 방식의 단점WAS를 별도로 설치해야 한다.애플리케이션 코드를 WAR로 빌드해야 한다.빌드한 WAR 파일을 WAS에 배포해야 한다.개발 환경 설정이 복잡하다. 이 문제를 해결하기 위해 외장 서버를 라이브러리를 통해 내장 서버로 제공한다.내장 톰캣 - 서블릿public class EmbedTomcatServletMain { public static void main(String[] args) throws LifecycleException { System.out.println("EmbedTomcatServletMain.main"); //톰캣 설정 Tomcat tomcat = new Tomcat(); Connec..
웹 서버와 서블릿 컨테이너웹 서버와 스프링 부트 소개웹 서버 전통적인 방식 vs 최근 방식전통적인 방식 - 서버에 WAS를 설치하고 WAS에서 동작하도록 서블릿 스펙에 맞춰 코드 작성 -> WAR 형식으로 빌드 -> war 파일을 WAS에 전달해서 배포WAS 기반위에 개발하고 실행해야 하며 IDE 개발 환경에서도 WAS와 연동해야 하는 추가 설정이 필요하다.최근 방식 - 스프링 부트가 내장 톰캣(WAS)을 포함 -> 코드 작성 -> JAR 빌드 후 실행하면 WAS도 함께 실행WAS 설치, IDE 개발 환경에서 WAS와 연동하는 일을 수행하지 않아도 된다.톰캣 설치윈도우 사용자 톰캣 실행 / 종료톰캣폴더/bin 폴더로 이동실행 : startup.bat종료 : shutdown.bat 톰캣 실행 로그 위치톰캣..