개발바닥곰발바닥
반응형
[Spring] Spring Data Redis로 JWT RefreshToken 관리하기
JAVA/Spring 2022. 4. 12. 22:01

Redis로 JWT RefreshToken 관리하기 JWT를 사용하여 유저 인증을 구현할 때, RefreshToken은 데이터베이스에 저장해두고 사용자가 토큰 재발급을 요청할 때 검사해야 한다. 그러나 RefreshToken에도 유효기간이 있기 때문에, RDBMS에 저장하면 배치를 이용하여 주기적으로 삭제를 해줘야 하는 번거로움이 생기는데 이럴 때 Redis를 사용하면 생성할 때 유효기간을 정해두고 따로 작업이 필요 없이 만료된 토큰은 삭제된다. JWT 구현 부분은 생략하고 Redis 연동하는 부분만 설명하도록 하겠다. (redis 설치가 된 후의 진행과정) 1. bulid.gradle에 redis 의존성 추가 implementation 'org.springframework.boot:spring-boot..

article thumbnail
[Java] 다익스트라 알고리즘(최단거리 알고리즘)
알고리즘/이론 2022. 4. 10. 19:57

다익스트라 알고리즘 다익스트라 알고리즘은 음의 가중치가 없는 그래프의 한 정점에서 모든 정점까지의 최단거리를 각각 구하는 알고리즘이다. 다익스트라 알고리즘을 구현하는 과정은 다음과 같다. 방문하지 않은 정점 중 가장 가중치 값이 작은 정점을 방문한다. (처음에는 시작 정점을 방문한다.) 해당 정점을 거쳐서 갈 수 있는 정점의 거리가 이전에 기록한 값보다 작다면 그 거리를 갱신한다. 프로그래머스의 배달 문제의 그래프를 예시로 다익스트라 알고리즘을 설명해보겠다. 1번 정점을 시작 정점으로 잡고 1번 정점에서 방문할 수 있는 각 정점까지의 거리를 표시한다. 1번 정점에서 방문할 수 없는 정점은 INF(무한대)로 표시해둔다. 방문하지 않은 정점 중 가장 거리가 짧은 2번 정점을 방문한다. 1번 정점에서 2번 정..

[Spring] JPA를 사용한 카테고리 (하위메뉴) 구현
JAVA/Spring 2022. 4. 10. 03:43

JPA를 사용한 카테고리 (하위메뉴) 구현 오픈마켓 프로젝트에서 상품들을 카테고리 별로 분류하기 위해 카테고리 기능을 구현하게 됐다. 카테고리는 depth가 있기 때문에, 하위 메뉴까지 가져올 수 있도록 구현해야 한다. 테이블 계층형 구조를 위해 category 테이블에 자신의 PK를 부모로 삼는 parent 외래키를 넣어줬다. Entity 도메인 @Entity @Getter @Builder @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") priva..

[Spring Boot] 스프링 부트 외부 접속 안되는 문제
JAVA/Spring 2022. 4. 7. 20:19

프론트엔드와 백엔드를 분리한 API 서버를 개발하면서 외부에서 접속이 잘 되는지 확인하기 위해 포트포워딩 설정하고, 방화벽 인바운드 규칙에 8080포트 열어주고 서버 실행시킨다음에 노트북으로 접속해보려고 하니까 mysql 3306이나 redis 6379 포트는 ping이 잘 가는데 8080 포트에는 접속이 안되는 문제가 생겼다. 근데 또 스프링 내장 톰캣말고 따로 설치했던 톰캣을 실행하면 접속이 되는걸 확인하면서 포트 문제가 아니라 스프링 설정에 문제가 있을 거라는 추측이 가능했다. mysql 외부 접속이 안될 때 포트포워딩이랑 인바운드 규칙 설정 후에 잘되는 걸 확인했었는데, 이번에도 똑같은 방법으로 했는데 안되니까 뭐가 문제인지 찾는데 몇시간은 걸린 것 같다. 그래서 찾은 문제는 application..

article thumbnail
[Spring] JPA Column default 값 적용 안되는 문제
JAVA/Spring 2022. 4. 4. 03:23

회원가입 API를 만들던 중, Member 테이블의 state 필드에 디폴트 값이 N으로 설정되어 있음에도 state 값을 넣어주지 않자 오류가 발생하는 문제가 생겼다. 전에 mybatis를 사용할 때는 디폴트 값을 설정해놓으면 값을 넣지 않아도 자동으로 디폴트 값이 들어갔었는데 JPA를 사용하면서 갑자기 이런 문제가 발생하는게 당황스러웠는데, 찾아보니 Entity에 어노테이션 하나만 추가하면 해결되는 문제였다. DynamicInsert DynamicInsert 어노테이션을 사용하면, Insert 쿼리를 수행할 때 값이 null인 필드를 제외하고 Insert를 수행한다. DynamicInsert 어노테이션을 넣은 다음에는 정상적으로 잘 작동했다. 이것과 비슷한 어노테이션으로 DynamicUpdate가 있..

[Java] String, StringBuffer, StringBuilder의 차이
JAVA 2022. 4. 2. 23:59

String, StringBuffer, StringBuilder Java에서 문자열을 다루기 위한 대표적인 클래스는 String, StringBuffer, StringBuilder가 있다. 3 클래스 모두 문자열을 관리하는 클래스이지만 서로 간의 차이가 있다. 연산이 적을 때는 어떤 클래스를 사용하더라도 문제가 없지만 연산횟수가 많거나 멀티스레드 등의 환경에서 사용한다면 상황에 맞는 적절한 클래스를 사용해야 한다. String과 StringBuffer/StringBuilder 의 차이 String 객체는 한번 생성되면 할당된 공간이 변하지 않는 불변(immutable) 객체이다. 그러나 StringBuffer와 StringBuilder는 버퍼의 크기를 유연하게 늘려주는 가변(mutable) 객체라는 차이..

[객체지향] SOLID 원칙이란
기타 2022. 4. 2. 04:04

SOLID 원칙 SOLID 원칙이란 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙이다. 시간이 지나도 유지 보수와 확장이 쉬운 유연성 있는 시스템을 만들고자 할 때 적용할 수 있는 지침이다. 이 원칙들은 애자일 소프트웨어 개발의 전반전 전략의 일부라고 볼 수 있다. SOLID 원칙을 이루는 요소를 보면 다음과 같다. SRP(Single responsibility principle) - 단일 책임 원칙 OCP(Open/closed principle) - 개방 폐쇄 원칙 LSP(Liskov substitution principle) - 리스코프 치환 원칙 ISP(Interface segregation principle) - 인터페이스 분리 원칙 DIP(Dependency inversion princi..

[Spring] IoC와 DI의 이해
JAVA/Spring 2022. 4. 1. 01:33

IoC(Inversion of Control) 기존의 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결, 실행하므로써 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다. (객체를 생성하고, 객체 간의 의존성을 만들어주고, 초기화하고 객체를 호출하는 등) 그러나 IoC은 제어의 역전이라는 의미로 프로그램의 제어 흐름을 개발자가 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)이라고 한다. Spring에서 IoC는 객체의 대한 제어권이 스프링 컨테이너로 역전되기 때문에 xml 파일이나 어노테이션 방식으로 스프링 컨테이너에 Bean(객체)를 등록하면, 스프링 컨테이너에서 Bean의 생명주기(생성, 의존성 설정, 초기화, 소멸)를 모두 관리한다. IoC를 ..

반응형