본문 바로가기

개발자145

[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.
[MovMag] WebClient [MovMag] WebClient 처음에는 외부 API를 통해서 JSON 파일로 파싱을 해서 데이터를 가지고 왔다 RestTemplate이라는 라이브러리를 추천 받았다 하지만, Spring 문서에서는 Spring 5.0에서부터는 RestTemplate보다는 WebClient를 사용하라고 권고하고 있다 NOTE: As of 5.0 this class is in maintenance mode, with only minor requests for changes and bugs to be accepted going forward. Please, consider using the org.springframework.web.reactive.client.WebClient which has a more modern A.. 2023. 11. 6.
[MovMag] ElasticSearch + MySQL [MovMag] ElasticSearch + MySQL 참고한 블로그!!! https://backtony.github.io/spring/elk/2022-03-02-spring-elasticsearch-2/ 해당 프로젝트에서는 영화 DB를 TMDB API에서 가지고 와서 MySQL에 저장을 해 놓은 상태다 ElasticSearch는 DB가 아닌 검색 엔진이기 때문에, MySQL에 저장되어 있는 포멧을, ElasticSearch 포멧으로 바꿔놔야 한다 스프링에서는 Entity를 통해서 DB와 연결을 했다면, ElasticSearch는 Document를 사용한다 한 프로젝트 안에 Entity와 Document 두 개를 정확해 어노테이션을 통해 명시를 해야 한다 하드 코딩으로 Document를 만들지 않고, E.. 2023. 11. 3.
[MovMag] ElasticSearch setup [MovMag] ElasticSearch setup 엘라스틱서치? 처음에는 query문을 통해서 원하는 내용을 출력하려고 했다 like 문을 사용할 수 있지만, 데이터가 너무 많을 때에는 찾는 속도가 느려질 수 있다 현재 만들고 있는 MovMag 이라는 영화 리뷰 API 자체에서, DB에 저장한 영화 개수만 10,000개가 넘고, 캐스트 수는 100,000명이 넘었다 엘라스틱서치는 DB는 아니지만, 방대한 양의 데이터를 신속하고 거의 실시간으로 저장, 검색, 분석할 수 있다 ELK (ElasticSearch / Logstatsh / Kibana) 단독으로 ElasticSearch를 사용하여 검색 기능을 구현할 수 있다 ElasticSearch : 분석 및 저장 기능을 담당 Logstatsh : 수집 기능.. 2023. 11. 2.
[MovMag] 20231031 오늘 배운 것 (@Asnyc) [MovMag] 20231031 오늘 배운 것 @Async TMDB 오픈 API를 가져올 때, 너무 많은 데이터를 가져오는 탓에 데이터를 수집하는 속도가 느렸다 500 페이지의 영화 (한 페이지 당 20개) => 10,000개 캐스트 정보 (한 영화를 만들기 위해 많은 사람들이 필요하다) : 163,404명 동기적으로 할 때에는 예측할 때에는 1시간에 약 120페이지의 데이터를 저장할 수 있었다 비동기를 사용하여 데이터를 가지고 왔을 때, 10분 안에 50페이지의 데이터를 저장했음 (1시간 안에 저장) AsnycConfig @EnableAsync @Configuration public class AsyncConfig implements AsyncConfigurer { @Override public Exe.. 2023. 10. 31.
[MovMag] 오늘 배운 것 - 20231030 [MovMag] 오늘 배운 것 JWT 토큰 @PostMapping("/login") public TokenDto login( @RequestBody @Valid MemberLogin.Request request ) { MemberLogin.Response loginInfo = memberServiceImpl.login(request); return "토큰이 생성되었습니다 : Bearer " + tokenProvider.generateToken(loginInfo.getEmail(), loginInfo.getRole()); } 토큰을 생성하고, 바로 리턴을 했다 이렇게 하면 나중에 유저가 API를 사용할 때에 토큰을 계속 복사, 붙여넣기를 해야하는 불편함이 있다 @PostMapping("/login") pu.. 2023. 10. 31.