본문 바로가기

Spring

(38)
Spring RefreshToken 구현 JWT는 한번 발급되면 만료 전 까지 삭제할 수 없다. 토큰 재발급의 경우 다양한 방식으로 구현될 수 있으며, 해당 포스팅에서 구현된 방식은 여러 방식 중 하나이다. Refresh Token을 사용하는 이유 access token은 발급 후 서버에 저장되지 않고 해당 토큰으로 사용자 권한을 인증하는 특징이 있다. 만약 access token이 탈취되면 토큰이 만료되기 전까지 해당 토큰을 갖고 있다면 누구나 권한 인증이 가능하다는 문제점이 있어 이를 보완하기 위해 access token의 만료 기간을 짧게 주는 방법이 있다. 하지만 사용자 측면에서는 토큰이 만료될때 마다 다시 로그인을 하여 토큰을 발급 받아야하는 불편함이 발생한다. 이를 해소하기 위해 refresh token을 사용하는데, access t..
Redis 백업 및 복구(RDB, AOF) Redis를 작년 프로젝트에서 사용해보고 이번 프로젝트에서도 사용하기로 했다. Redis는 인메모리 데이터 저장소로 읽기 성능이 뛰어나 캐싱, 세션 저장소 등 다양한 곳에서 많이 사용된다. 하지만 인메모리 데이터 특성상 휘발성으로 종료되는 경우 데이터가 유실된다. 기존 프로젝트에서는 현재 채팅방 인원수를 카운팅 해야하기에 유실되도 상관이 없었다. 이번 프로젝트에서는 속도 개선과 DB에 데이터를 저장하게 되면 너무 방대한 양의 데이터가 저장되고 조회수 어뷰징 방지, 최근 조회 글, 다운로드 글 등 데이터가 유실되면 안되기에 데이터를 다시 DB에 저장해야 하나 고민중에 Redis에서 RDB와 AOF 라는 방법으로 백업이 가능하다고 한다. RDB와 AOF도 각각의 장단점이 있으니 비교하면서 상황에 맞게 적절한..
QueryDSL 기본문법 1. Q-Type Q-Type 인스턴스를 사용하는 방법은 2가지 방법이 있다.QMember qMember = new QMember("m"); // 별칭 직접 지정 QMember qMember = QMember.member; // 기본 인스턴스 사용직접 별칭을 넣어서 사용해도 괜찮지만 기본 인스턴스에서 생성된 별칭을 사용하는 것을 권장한다. 별칭을 직접 지정하는 방법은 같은 테이블을 조인하는 경우에 쓰인다. 2. 검색 조건 Member findMember = queryFactory .selectFrom(member) .where(member.username.eq("member1").and(member.group.eq("class1"))) .fetchOne(); where절에는 and나 or을 사용할 수 있..
spring 휴대폰 번호 인증하기(Naver SMS) 진행중인 프로젝트에 이메일or휴대폰 으로 인증을 구현할 일이 생겼다. 먼저 이메일 인증을 해봤고 휴대폰 인증까지 해보려고 한다. 많은 구글링을 했고 대부분 coolsms를 많이들 사용했는데 NAVER CLOUD에서도 지원하는 SMS API가 있기에 조금 더 친숙?한 네이버 클라우드를 선택했다. 1. NAVER SMS API 환경설정 1-1. 먼저 네이버 클라우드 플랫폼에 가입 후 콘솔로 이동 https://www.ncloud.com/ https://console.ncloud.com/sens/home 2-2. Simple & Easy Notification Service (SMS 서비스의 이름이다.) 의 Home을 찾아가 프로젝트 생성하기를 누른다. 2-3. 원하는 설정값을 입력하고 생성한다. 나는 SMS..
이메일로 인증 과정(SMTP,Redis) 지난 프로젝트를 진행하면서 Redis를 처음 써봤다. 실시간 채팅을 구현하여 채팅 내역을 저장하려고 했지만 서비스 특성상 채팅 내역은 DB에 저장하고 실시간 채팅 인원수 카운팅 하는데 사용했다. 회원가입 시 이메일을 통해 인증번호를 발송하고 해당 인증 번호를 Redis에 저장하여 인증 과정을 구현했다. Redis를 이전에 정리했었기에 간단하게 설명하자면 인메모리 데이터 구조로 컴퓨터의 메인 메모리 RAM에 데이터를 올려 사용하는 방법이다. 메모리에 데이터를 올리는 이유는 속도 때문이다. 저장공간에서 데이터를 가져오는 속도와 RAM에 올려진 데이터를 가져오는 속도가 수백배 이상 빠르다. 그러하기에 Redis는 빠른 속도가 장점이다. 1. Redis설치 이번에는 배포 서버에 설치하지 않고 간단하게 로컬에 설..
이메일로 인증 코드 발송(SpringBoot, SMTP) 전에 프로젝트를 진행하면서 구현해보고 싶었던 회원가입 시 인증 과정을 구현해봤다. 휴대폰 인증을 해보고 싶었고 휴대폰 인증 전 이메일 인증을 먼저 구현해봤다. 추후 휴대폰 인증도 구현 예정이고 인증번호를 Redis에 저장하는 방법도 구현해 볼 예정이다. 1. 의존성 추가 buid.gradle https://mvnrepository.com/ 에서 Spring Boot Starter Mail 검색 후 가장 많이 사용했던 버전으로 추가했다. implementation 'org.springframework.boot:spring-boot-starter-mail:2.7.0' 2. MailConfig Spirng에서 메일 서버를 사용하기 위해서는 메일 서버와 연결해야 한다. 보통 gmail을 많이들 사용했는데 언제부..
Swagger UI로 API 문서 통합 관리하기 Overview 프로젝트를 진행하면서 API명세서는 Notion에서 관리했다. 그 과정에서 팀원중에 실수로 수정하거나 삭제하는 경우가 발생해서 난감했던 상황도 있었다. 우리는 프로젝트 막바지에 Swagger를 알게되었고 배포가 끝난 상황에서 적용해봤다. 처음엔 UI가 보기 좋다, 갈끔하게 정리되는구나? 정도만 보고 넘어갔다. 개인적으로 연습겸 프로젝트를 하나 하고있는데, Swagger를 적용해서 진행 해보라는 동료의 조언에 전에 진행했던 프로젝트에서는 크게 느낌이 없었는데..? 라고 생각했다. Swagger관련하여 이것저것 찾아봤고 적용해봤다. 내가 아직 Swagger를 완벽히 활용하고 있지 않지만 놀라웠다... 단순 문서화 하는게 아닌 API를 문서내에서 Parameter를 넣어가며 바로바로 실행이 가..
JPA_영속성 컨텍스트란? 스프링으로 프로젝트를 진행하면서 JPA의 영속성 컨텍스트를 개념만 알고 별도로 정리하지 않고 넘어갔다. 지금 이렇게 하나하나 개념을 정리하고 있으니 JPA 영속성 컨텍스트도 다시 한번 익히고 정리해보려고 한다. JPA를 공부하며 가장 중요하다고 생각하는 부분은 설계와 관련된 객체와 관계형 데이터베이스를 매핑하는 것(Object Relational Mapping)과 지금 정리해보려고 하는 JPA 내부 동작인 영속성 컨텍스트 이다. 1. 영속성 컨텍스트(Persistence Context)란? 엔티티를 영구 저장하는 환경 이라는 의미 EntityManager.persist(entity); 동작 실제 DB에 저장하는 것이 아니라 영속성 컨텍스트를 통해 Entity를 영속화 한다는 의미다. 조금 더 구체적으로 ..
접근제어자의 종류 / 왜 사용할까? 프로젝트를 진행하면서 사용했던 접근제어자는 public 과 private만 사용해봤었다. 이외에 2가지의 접근제어자가 있다고는 알고 있었지만 사용해보진 못했다. 이번 기회에 접근제어자에 대해 정확히 이해하고 넘어가야겠다. 1. 접근제어자(Access Modifier)란? 접근제어자는 클래스나 변수, 메서드의 접근을 제어하기 위해 적어주는 예약어를 말한다. 접근제어자는 생략이 가능하며 생략했을 경우 자동으로 default 임을 뜻한다. 접근제어자를 사용하는 이유? 은행에 비유해보자면 은행에 있는 창구에는 누구나 접근하여 일처리를 할 수 있다. 하지만 은행내에 있는 금고에는 관계자외에는 출입이 엄격하게 통제되고 있다. 만약 금고에도 누구나 접근할 수 있고 사용할 수 있다면 큰 문제가 발생하지 않을까? 이처럼..
메이븐(Maven)과 그래들(Gradle) 스프링을 사용하면서 빌드 관리 도구인 그래들만 사용하였다. 처음 스프링을 학습하면서 자연스럽게 그래들을 사용했고 프로젝트를 생성할때 메이븐 이라는 것도 있구나 정도 봤었고 프로젝트를 진행하면서 열심히 삽질? 구글링을 통해서 많은 사람들이 그래들 뿐만 아니라 메이븐을 사용했다는걸 알았다. 당시 메이븐과 그래들의 차이점이 뭘까? 하고 구글링을 통해 '아 메이븐은 pom.xml파일에 필요한 각종 의존성과 라이브러리 추가,버전 등의 프로젝트 설정 정보를 xml형식으로 나열해서 하나하나 직접 작성하고 설정하는구나' 정도만 알고 별도로 정리하지 않았기에 주말에 일찍 일어나기도 했고 정리를 해보려고한다! 1. 빌드 관리 도구란? 빌드? 빌드란 소스코드 파일들을 컴퓨터에서 실행할 수 있는 소프트웨어로 변환하는 일련의 ..