Language/Spring (28) 썸네일형 리스트형 [JWT] JWT 등장 배경, Access Token, Refresh Token Cookie와 Session의 문제점Cookie의 문제점보안에 취약요청 시 쿠키의 값을 그대로 전송유출 및 조작의 위험성용량 제한으로 많은 정보를 담을 수 없음 (도메인 별 약 4KB)웹 브라우저마다 쿠키에 대한 지원 형태가 다르기 때문에 다른 도메인 간 공유가 불가능 쿠키의 사이즈가 커질수록 네트워크에 부하 증가 Cookie & Session의 문제점상태 유지(Stateful)서버는 각 사용자의 세션을 메모리나 데이터베이스에 저장쿠키를 포함한 요청이 외부에 노출되더라도 세션 ID 자체는 유의미한 개인 정보를 담지 않지만, 해커가 이를 중간에 탈취하여 클라이언트인척 위장할 수 있다는 한계가 존재→ 세션 하이재킹(Session Hijacking)서버에서 세션 저장소를 사용하므로 요청이 많아지면 서버에 부하.. [Authentication] Cookie, Session, JWT Token 인증 / 인가인증(Authentication) 사용자의 신원을 확인하는 과정Ex) ID, PW를 이용한 로그인 / 생체 인식(지문, 얼굴) / OTP / 인증서 등 인가(Authorization)인증 이후의 프로세스로 인증된 유저가 어떠한 자원에 접근할 수 있는 지 확인하는 프로세스Ex) 관리자 페이지 - 관리자 권한을 가진 유저만 접근 가능웹 애플리케이션 인증의 특수성일반적으로 서버 - 클라이언트 구조Http 프로토콜을 이용한 통신→ 비연결성(Connectionless), 무상태(Stateless)의 특징을 가짐 비연결성(Connectionless)서버와 클라이언트가 연결되어 있지 않음서버와 클라이언트가 계속 연결되어 있다면, 서버의 비용이 기하급수적으로 증가리소스의 절약을 위해 서버는 하나의 요청에 .. [Spring Boot] 일정 주기마다 업데이트 프로젝트 적용해보기 cron을 이용하여 5초마다 해당 메서드가 실행되는 지 테스트@Scheduled(cron = "0/5 * * * * *")private void updateOrderStatus(){ log.info("Scheduled Test");}5초 간격으로 해당 메서드 실행 확인 주문 테이블의 주문 상태가 PURCHASE(구매)인 것만 추출주문일로부터 24시간 이내라면 아무것도 하지 않음주문일로부터 24시간 경과라면 OrderStatus를 구매(PURCHASE) → 구매 확정(CONFIRM)으로 변경다음과 같이 코딩 시 에러 발생@Scheduled(cron = "0/5 * * * * *")private void updateOrderStatus(){ log.info("Scheduled execute"); .. [Spring Boot] 정해진 시간마다 동작하는 Scheduler @Scheduled 일정 시간을 간격 또는 특정 시간마다 코드가 실행되도록 설정하는 어노테이션 사용법@Schelduled를 사용하기 위해서는 Application에게 Schedular를 사용하겠다는 것을 알리기 위해 @EnableScheduling을 선언@EnableScheduling@SpringBootApplicationpublic class SchedulerApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } 스케쥴링을 작업할 클래스 생성@Servicepublic class SchedulerService { @Scheduled(fix.. [Spring Boot] Redis를 이용한 이메일 인증 리팩토링 의존성 추가implementation 'org.springframework.boot:spring-boot-starter-data-redis' application.yml 설정 추가spring: # 레디스 redis: data: host: localhost port: 6379 RedisConfigConfiguration이 있는 클래스에 @EnableRedisRepositories 어노테이션을 추가하여 repository를 사용한다고 명시@Configuration@EnableRedisRepositoriespublic class RedisConfig { @Value("${spring.data.redis.host}") private String host; @Value(.. 레디스(Redis) 개념 및 설치 1. 레디스(Redis)란? 키(key)와 값(value)를 가진 NoSQL에 속하는 데이터베이스주로 비정형 데이터를 다루며 비관계형 데이터베이스 → 비정형 데이터 : 식별 가능한 구조나 아키텍처가 없는 데이터key, value 구조이기 때문에 쿼리가 필요 없음 레디스에서 지원하는 자료 구조Strings : Vinary-safe한 기본적인 key-value 구조Lists : String element의 모음, 순서는 삽입된 순서를 유지하며 기본적인 자료구로 Linked List를 사용Sets : 유일한 값들의 모임인 자료구조, 순서는 유지되지 않음Sorted sets : Sets 자료구조에 score라는 값을 추가로 두어 해당 값을 기준으로 순서를 유지Hashes : 내부에 key-value 구조를 하나.. [Spring Boot] 이메일 인증 코드를 이용한 회원 가입 시나리오1. 이메일 인증 버튼 클릭 → 인증 코드를 발급함과 동시에 인증(Auth) 테이블에 이메일과 인증코드를 저장 2. 이메일과 인증 코드로 인증 확인 요청 3. 인증(Auth) 테이블에 저장된 이메일이 있는 지 확인 → 없으면 인증 실패 4. 인증 테이블에 저장된 이메일과 인증 코드가 맞는 지 확인→ 맞으면 인증 성공→ 틀리면 인증 실패 Auth Entity@Entity@Getter@NoArgsConstructorpublic class Auth { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String email; private String authCode; public .. [Spring Boot] 구글 이메일 인증 코드 발급 구현 구글 SMTP 서비스 설정1. 자신의 Gmail로 접속 → 우측 상단 톱니 바퀴 클릭 → 모든 설정 보기 클릭2. 아래와 같이 IMAP 사용 설정변경 사항 저장을 눌렀을 때 본인 인증 창이 활성화 되긴 하였음3. 우측 상단 구글 계정을 클릭 → 구글 계정 관리 클릭4. 보안 → Google에 로그인하는 방법 → 2단계 인증 설정설정이 되었다면 넘어가도 됨5. 상단 검색창에 '앱 비밀번호' 검색하여 앱 이름 입력 후 만들기 → 생성된 비밀번호는 외부에 유출되지 않도록 저장build.gradle 의존성 추가implementation 'org.springframework.boot:spring-boot-starter-mail' application.yml 설정 추가spring: mail: host: s.. 이전 1 2 3 4 다음