본문 바로가기

스프링44

[USports] Member OAuth with 프론트엔드 [USports] Member OAuth with 프론트엔드 OAuth with 프론트엔드 앞서 OAuth2 client를 가지고 간편 로그인을 구현했다 OAuth2 client를 가지고 구현을 했을 때에, http://주소/oauth2/authorization/kakao 를 a 태그에 넣었을 때 작동을 했다 그리고 /success 로 redirect해서, 응답 값을 프론트에 보냈다 BUT, 우리 프론트엔드 개발자 분은 Next.js를 사용했고, 위 주소를 axios, get으로 하면, 잘 안 돌아간다고 했다 프론트 측에도 로그인을 하는 로직이 따로 있다 http://주소/oauth2/authorization/kakao 를 redirection 없이 썼을 때는 응답값이 안 나오고 /success 로 re.. 2024. 1. 11.
[USports] Websocket 구현 [USports] Websocket 구현 build.gradle implementation 'org.springframework.boot:spring-boot-starter-websocket' implementation 'org.webjars:sockjs-client:1.1.2' implementation 'org.webjars:stomp-websocket:2.3.3-1' WebSocketConfig @Configuration @EnableWebSocketMessageBroker // STOMP를 사용 안 하고 EnableWebSocket으로 사용할 수 있다 public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Overri.. 2023. 12. 25.
[USports] Websocket 소개 [USports] Websocket 소개 HTTP 프로토콜 같은 경우 클라이언트가 요청을 보내고, 보낸 요청을 서버에서 응답을 하는 방식이다 웹에서 이루어지는 데이터 교환의 제일 기초적인 단계다 하지만 요청을 하고 응답을 하는 하나의 사이클이 끝나면, 클라이언트와 서버간의 연결은 끝나게 된다 example 클라이언트가 https://www.naver.com 을 서버에 요청을 한다 서버는 해당 페이지를 찾아서 응답을 해준다 클라이언트가 페이지를 받으면 클라이언트와 서버의 연결 상태는 끊기게 된다 즉 주식 정보, 비트코인 정보 같이 실시간으로 봐야하기 위해서는 새로 고침을 계속 눌러야 할 것이다 즉 실시간 데이터를 받기 위해 여러 방법이 있다 Polling & Long Polling Polling 같은 경우.. 2023. 12. 18.
[USports] Member OAuth2 [USports] Member OAuth2 Member를 만들고, 간편 인증이 필요할 것 같아 OAuth2를 사용하였다 그 중에 카카오 간편 로그인을 먼저 사용했다 OAuth란? 항상 간편 로그인을 위해서 사용되는 프로토콜인 줄 알았다 OAuth를 공부하면서 느낀 것 Resource Server, 즉 카카오나 네이버 같이 많은 사람들이 이미 회원가입을 한 어플리케이션에서, Client, 내 어플리케이션에게 자신들의 자원을 사용할 수 있는 권한을 주는 것이라고 크게 느꼈다 Resource Owner : 자원을 소유하는 사람 (예. 유저들) Resource Server : Resource Owner의 정보가 저장되어 있는 서버 (예. 카카오, 네이버) Client : Resource Server에 저장되어 .. 2023. 12. 9.
[USports] Member 단위 테스트 [USports] Member 단위 테스트 Mock 서비스를 테스트 할 때에 필요한 외부 클래스들을 넣었다 repository, passwordEncoder 등 MemberServiceImpl에 넣었던 클래스들을 Mock으로 넘겼다 InjectMocks Mock으로 설정했던 클래스들을 MemberServiceImpl에 넣는 것이다 Nested 테스트들을 단위별로 묶을 수 있다 예를 들어, 로그인 테스트, 회원가입 테스트 별로 나누고, 그 안에 성공 케이스와 실패 케이스를 넣을 수 있다 when, thenReturn 주로 메서드 내에 repository를 사용하던지, 또는 Mock으로 설정된 클래스를 사용할 때에 when을 사용한다. 그리고 thenReturn을 통해서 when에서 불러온 메서드를 통해 어.. 2023. 12. 7.
[USports] Email 전송 [USports] Email 전송 프로젝트에서 이메일 인증과, 임시 비밀번호를 이메일을 통해 는 것이 있다 구글 SMTP 서버를 이용하였다프로젝트 용 이메일을 새로 만들고, 프로젝트를 위해, 원래 비밀번호가 아닌, 프로젝트 용 비밀번호를 개인 설정에서 받을 수 있다 하기 전에 2차 인증까지 설정을 해야 한다! Google 계정 관리에 들어가기검색에서 앱 비밀번호를 치고, 들어가기그러면 계정 비밀번호를 입력하라고 뜬다 App Name에 어플리케이션 이름 입력하기 앱 비밀번호를 받고, 꼭 복사하기 (잊어버리면, 또 다시 앱을 입력해야 한다)그리고 외부에 노출하지 말기! Gmail의 설정에 들어가서 전달 및 POP/IMAP에 들어가기 아래와 같이 설정하기  build.gradle아래 추가implementati.. 2023. 12. 6.
[USports] Login 구현 [USports] Login 구현 MemberController 로그인 로그인을 하면 access token과 refresh token을 받게 된다 MemberDto에 UserDetail을 넣어 활용했다 memberService.loginMember()에서는 간단하게 비밀번호가 일치하는지 그리고 유저가 DB에 존재하는 확인하면 된다 확인 후 MemberDto를 리턴하고, tokenProvider.saveTokenInRedis() 를 진행한다 재발급 access token이 만료되었을 경우 reissue, 재발급을 통해 refresh token과 access token을 받게 된다 tokenProvider.regenerateToken(refreshToken) 을 통해 재발급을 진행 로그아웃 로그아웃을 하면.. 2023. 12. 5.
[USports] Redis + Login [USports] Redis + Login Redis https://jejoonlee.tistory.com/376 스프링 캐시 스프링 캐시 캐시 임시로 데이터를 저장하는 공간이다 인메모리가 될 수 있고, 서버에 캐시를 만들 수 있다 빠른 처리 속도로 성능을 향상할 수 있다 이미 조회한 데이터를 임시로 저장하고, 다 jejoonlee.tistory.com 예전에 레디스에 관련해서 살짝 다뤘던게 기억이 난다. 레디스는 NoSQL로 Key-Value로 데이터를 저장하는 메모리 데이터 스토어다. 해당 기능을 사용했을 때에 Key와 Value를 넣으면서, 해당 메모리에 대한 만료 기간도 넣을 수 있었다. 로그인과 레디스? 로그인을 할 때에 access token을 클라이언트에 준다 access token은 해당 .. 2023. 12. 5.
스프링 회원기능 스프링 회원기능 회원기능을 구현하는 방법은 크게 Session과 Token 방법이 있다 Session 토큰 방식 (JWT) 로그인 구현 클라이언트가 로그인을 하게 되면, 서버에서는 클라이언트에게 권한을 부여한다 여기서 권한, 입장권 같은 내용을 가지고 서버에서 권한이 필요한 기능이면, 해당 입장권을 통해 그 기능을 클라이언트가 사용할 수 있게 된다 Session vs Token 세션은 따로 메모리나 DB에 로그인한 내용을 저장한다 즉 클라이언트가 요청을 보낼 때 마다, DB를 계속 확인을 해야 한다 유저가 늘어나면 서버에 부하가 일어날 수 있다 토큰은 세션보다 입장권 내용에 더 많은 내용들이 들어가 있다 서버에서는 토큰만 확인을 하면 된다 JWT (Json Web Token) Header 토큰의 타입 (.. 2023. 11. 17.