본문 바로가기

java5

[Spring] Spring Security + OAuth2 + JWT 이번 개인 프로젝트에서 Spring Security를 활용하여 OAuth2 로그인을 구현했다. Spring Security의 OAuth2를 활용하는 방법과 JWT 발급까지 모두 정리해보려고 한다.참고) 개발 환경은 Spring boot 3, Java 17을 사용하였다.먼저 OAuth 2.0이 무엇인지 알아보자.OAuth 2.0 (Open Authorization 2.0)인증을 위한 개방형 표준 프로토콜로, third-party 프로그램에게 리소스 소유자를 대신해 리소스 서버에서 제공하는 자원에 대한 접근 권한을 위임하는 방식으로 작동된다. 쉽게 말해서 third-party 프로그램(구글, 카카오 등)에게 로그인 및 개인정보 관리에 대한 권한을 위임하여 third-party 프로그램이 가지고 있는 사용자에.. 2024. 1. 22.
[Spring] SSE + Redis pub/sub 이번에 개인프로젝트를 진행하면서 실시간 알림을 구현했는데, 해당 내용에 대해 정리해보고자 한다. 먼저 SSE에 대해 이해를 해야한다. SSE 전통적인 방식 웹 브라우저에서 전통적으로 변경된 데이터를 얻기 위해서는 클라이언트가 서버에 요청을 해야한다. 대표적인 방식이 Polling이다. Polling은 일정한 주기를 가지고 서버에 요청/응답을 하는 방식으로 서버에 변경 사항이 있는지는 클라이언트의 요청을 통해서 알 수 있다. 이는 클라이언트가 요청을 보냈을 때 변경 사항이 없다면 리소스 낭비가 되고, 짧은 주기로 지속적으로 요청하는 것은 서버에 부담이 될 수 있다. Polling을 개선한 방식이 Long-polling인데, 이는 클라이언트가 요청을 보냈을 때 서버측에서 연결을 열어두는 시간을 길게 가진다... 2024. 1. 18.
[Spring] Spring AOP 적용 데이터베이스 업데이트 프로젝트에서 테이블 별 업데이트 된 현황을 명세 테이블에 저장하는 기능을 구현해야 했다. 이 기능의 핵심 동작은 모두 같기 때문에 공통적으로 사용할 수 있도록 모듈화(하나만 만들어서 재사용)를 시키고 싶었다. 그래서 공통 기능을 모듈화하여 자동적으로 수행할 수 있도록 해주는 AOP를 적용하게 되었다. AOP란? Aspect Oriented Programing으로 관점 지향 프로그래밍으로 객체 지향을 보완하는 수단이다. 공통 관심사(Aspect)를 모듈화하여 비즈니스 로직을 헤치지 않고 재사용하는 프로그래밍 기법이다. 공통 관심사는 쉽게 말해서 여러 클래스에서 반복적으로 사용되는 공통 로직이라고 이해하면 된다. Spring에서 AOP는 프록시 패턴을 기반으로 설계되어 있다. Proxy.. 2023. 6. 19.
[Java] 비동기 + multi threading 구현 데이터베이스 업데이트 프로젝트를 진행하던 때에 데이터를 가공하는 작업을 수행하는데 시간이 매우 오래 걸리는 부분이 있었다. 업데이트를 위해 수집해온 데이터가 8천만개 이상인 상황에서 싱글 쓰레드로 수행하면 완료 시간이 말도 안되는 시간이 예상되어 멀티 쓰레딩을 통한 시간 단축이 필수라고 생각되었다. 구현 로직 구현은 java 8에서 비동기 요청을 처리할때 사용하는 객체인 CompletableFuture를 사용하였다. 1. 데이터 가공 2. 가공한 데이터를 저장 1번 완료 후 리턴값을 받아서 2번을 수행하는 과정을 모두 비동기 작업으로 병렬처리한다. ThreadPoolTaskExecutor 별도의 thread pool을 생성하여 실행하기위해 Executor를 설정하여 bean으로 등록해둔다. @Config.. 2023. 3. 1.
[Spring] Spring Security + JWT Spring Security 기반에 JWT 인증 방식을 적용해보았다. 인증 방식은 이렇다. 1. 클라이언트가 로그인을 요청한다. 2. ID/PW 검증 후 access token, rerfresh token을 발급한다. 3. refresh token은 DB에 저장하고, access token은 클라이언트에게 응답한다. 4. 클라이언트가 api 요청 시 access token이 만료되었으면 해당 유저의 refresh token으로 검증 후 access token을 재발급해준다. 위 방식을 하나씩 구현해 보자. 먼저 Spring Security와 JWT를 사용할 수 있도록 의존성을 추가해준다. 의존성 추가 build.gradle // security implementation 'org.springframewo.. 2023. 2. 6.