본문 바로가기

전체 글

(36)
[Spring] Redis를 통한 Refresh Token 도입기 (2) 본 글에서는 기본적인 Redis 설정이 되어있다는 전제 하에 코드 위주로 설명합니다. 전체적인 리프레시 토큰 로직에 대해 참고하고 싶다면 이전 글을 확인해주세요. 자세한 코드는 https://github.com/mocacong/Mocacong-Backend/pull/131 에서 확인할 수 있습니다. 1. Token 객체 @Getter @Builder @AllArgsConstructor @NoArgsConstructor public class Token { @Id private Long id; private String refreshToken; private String accessToken; @TimeToLive(unit = TimeUnit.MILLISECONDS) // 디폴트는 TimeUnit.SECO..
[Spring] Redis를 통한 Refresh Token 도입기 (1) 현재 진행 중인 사이드 프로젝트 모카콩(https://github.com/mocacong/Mocacong-Backend)에서는 기존엔 Access Token 하나만 가지고 로그인 처리를 진행했었습니다. 그러나 유효시간이 짧은 Access Token 특성 상, 빈번하게 로그인 요청을 수행해야 했으며 이는 불편함을 초래하였습니다. 이에 따라 보안적인 측면을 고려하며 로그인 유효시간을 늘릴 수 있는 Refresh Token을 도입하기로 결정했습니다. 1. Refresh Token의 필요성 일반적으로 서비스에서 회원 인증을 위해 많이 사용되는 JWT(Json Web Token) 방식을 모카콩 프로젝트에서도 도입했습니다. 하지만 사용자 인증을 위한 Access Token의 유효시간은 약 30분으로 설정되어 있었습..
[Spring] Code Coverage 측정을 위한 JaCoCo 적용하기 1. JaCoCo란 JaCoCo는 Java code coverage를 측정하는 오픈소스 라이브러리입니다. JaCoCo는 Line, Branch Coverage를 제공하며 테스트를 실행한 후, 결과를 html/csv/xml 파일을 통해 보기 좋게 시각화를 해줍니다. Code Coverage 소프트웨어의 테스트를 논할 때 얼마나 테스트가 충분한가를 나타내는 지표 2. JaCoCo 적용하기 * 해당 포스트에 대한 코드 내용은 여기서 확인할 수 있습니다. (https://github.com/depromeet/14th-team5-BE/pull/7) 개발 환경: SpringBoot 3.1.5, Java 17, Gradle server: 루트 프로젝트 ├── config: 프로젝트 설정 관리 │ ├── build │..
[Spring] 멀티 모듈 프로젝트 도입하기 1. 단일 모듈 프로젝트의 문제점장기 프로젝트의 경우, 시간이 지날수록 기능이 추가되고 무거워집니다. 서비스가 분리된 후에도 도메인이 서로 강하게 결합되어 있는 경우, 도메인의 수정이나 업데이트를 일관되게 유지하는 것이 어렵습니다. 예를 들어 어느 한 쪽에서 도메인을 수정하면 다른 쪽에서도 도메인을 수정해야 합니다. 이 과정에서 어느 한 쪽에서 수정이 되지 않으면 도메인이 달라지는 경우가 생길 수 있으며 결국 프로젝트가 개발자에 대한 의존성이 높아지게 됩니다.   2. 멀티 모듈 프로젝트란?프로그래밍에서 ‘모듈’은 프로그램을 구성하는 시스템을 기능 단위의 독립적인 부분으로 분리한 것을 의미합니다. 다시 말해  독립적으로 배포될 수 있는 코드의 단위입니다. 그리고 하나의 프로젝트 안에 독립적인 모듈을 여러..
[JPA] 엔티티 매핑 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. 1. @Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 어노테이션을 필수로 붙여야 한다. 이 어노테이션이 붙은 클래스는 JPA가 관리하는 것으로, 엔티티라 부른다. ## 주의사항 기본 생성자는 필수다 JPA가 엔티티 객체를 생성할 때 기본 생성자를 사용하기 때문 Final 클래스, enum, interface, inner 클래스에는 사용할 수 없다 저장할 필드에 final을 사용하면 안된다 2. @Table 엔티티와 매핑할 테이블을 지정한다. 생략하면 매핑한 엔티티 이름을 테이블 이름으로 사용한다. 3. 데이터베이스 스키마 자동 생성 JPA는 데이터베이스 스키마를 자동으로 생성하는 기능을 지..
[JPA] 영속성 관리 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. 1. 엔티티 매니저 팩토리와 엔티티 매니저 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 persistence.xml에 있는 정보를 바탕으로 EntityManagerFactory를 하나만 생성한다. 엔티티 매니저 팩토리는 엔티티 매니저를 만드는 공장인데 공장을 만드는 비용이 상당이 크다. 하지만 공장에서 엔티티 매니저를 생성하는 비용은 거의 들지 않는다. 엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하여 서로 다른 스레드 간에 공유해도 되지만, 엔티티 매니저는 여러 스레드가 동시에 접근하면 동시성 문제가 발생하여 스레드 간에 절대 공유하면 안된다. 하나의 EntityManagerFactory..
[JPA] JPA 소개 해당 포스트는 김영한 님의 [자바 ORM 표준 JPA 프로그래밍] 을 읽고 정리한 글입니다. 1. SQL을 직접 다룰 때 발생하는 문제점 자바로 개발하는 애플리케이션은 대부분 관계형 데이터베이스를 데이터 저장소를 사용한다. 데이터베이스에 데이터를 관리하려면 SQL을 사용해야 한다. 특히 자바로 작성한 애플리케이션은 JDBC API를 사용해서 SQL를 데이터베이스에 전달해야 하므로 서버 개발자들은 능숙하게 SQL을 다룰 줄 알아야 한다. 1) 반복적인 작업 ① 반복, 반복 그리고 반복 데이터베이스는 기본적으로 객체 구조와는 다른 구조이므로 객체를 데이터베이스에 직접 저장하거나 조회할 수 없다. 그렇기에 개발자가 이를 위해서는 직접 SQL과 JDBC API를 사용해서 객체지향 애플리케이션과 데이터베이스 중간..
[HTTP 웹 기본 지식] Stateful, Stateless 해당 글은 김영한님의 '모든 개발자를 위한 HTTP 웹 기본 지식' 강의를 수강하고 중요한 내용을 정리하고 보충한 글입니다. 0. 개요 컴퓨터 시스템과 네트워크 프로토콜에서 Stateful와 Stateless라는 용어는 서버가 클라이언트와 상호작용하고 세션 정보를 관리하는 방식을 나타낸다. 1. Stateless (무상태 프로토콜) 무상태 프로토콜 혹은 시스템은 클라이언트와의 과거 상호작용에 대한 어떠한 정보도 저장하지 않는다. 즉, 서버가 클라이언트의 상태를 보존하지 않는다. 각각의 요청은 서버에 의해 독립적으로 처리되며 이전 요청과는 아무런 관련이 없다. 1) 특징 장점 서버가 클라이언트의 상태를 보존하지 않기 때문에, 서버의 확장성이 높아짐 무한한 수의 서버를 추가하여 시스템의 성능을 쉽게 향상시킬..