| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- SpringBoot
- html
- 문자열
- java테스트
- IntelliJ
- input
- 자바
- junit
- Array
- 자바스크립트
- Java
- 테스트자동화
- 정규식
- js
- javascript
- 단위테스트
- CSS
- 스프링부트
- ArrayList
- Visual Studio Code
- vscode
- 인텔리제이
- HashMap
- 자바문법
- junit5
- 배열
- string
- math
- Eclipse
- list
- Today
- Total
목록2026/02 (55)
어제 오늘 내일
지난 시간엔 DB에 Refresh Token을 저장했습니다.하지만 만료된 토큰이 DB에 계속 쌓이는 문제가 있죠.이를 해결하기 위해 "시간이 지나면 알아서 사라지는" Redis를 도입해 보겠습니다.Step 0. Redis 준비로컬에 Redis가 설치되어 있어야 합니다. (Docker 사용 추천)docker run -p 6379:6379 --name my-redis -d redisStep 1. 의존성 추가 (build.gradle)JPA 대신 Redis를 사용하기 위한 라이브러리를 추가합니다.dependencies { // ... 기존 의존성 ... // Spring Data Redis implementation 'org.springframework.boot:spring-boot-start..
지금까지 만든 JWT 시스템은 잘 동작하지만, 실무에 바로 쓰기엔 치명적인 딜레마가 하나 있습니다. "보안을 위해 토큰 유효기간을 짧게(30분) 줄였더니,사용자가 글을 쓰다가 30분이 지나면 로그인이 풀려버려서 글이 다 날아갔다!" 그렇다고 유효기간을 1년으로 늘리자니, 해커에게 토큰을 뺏기면 1년 내내 내 계정이 털리게 됩니다.이 문제를 해결하기 위해 Refresh Token(재발급 전용 토큰)을 도입해야 합니다.0. 시나리오: 리프레시 토큰이 왜 필요한가?여러분이 만든 앱을 사용하는 사용자 '철수'의 상황을 비교해 봅시다.😱 상황 1: Access Token만 있을 때 (현재 상태)오후 1:00 - 철수가 로그인을 합니다. (Access Token 발급, 유효기간 30분)오후 1:20 - 철수가 ..
Github에 프로젝트를 올리다 보면 절대 올라가서는 안 되는 파일들이 있습니다.나만의 비밀번호나 API Key가 적힌 보안 파일용량만 차지하는 빌드 파일 (build, dist 등)라이브러리 모음 폴더 (node_modules 등)OS가 자동으로 만드는 시스템 파일 (.DS_Store)이런 파일들을 Git이 "못 본 척" 무시하게 만드는 설정 파일이 바로 .gitignore 입니다. 오늘은 이 파일을 제대로 사용하는 방법을 알아보겠습니다.1. .gitignore 파일 만들기사용법은 아주 간단합니다. 프로젝트의 최상위 루트 폴더(보통 .git 폴더가 있는 곳)에 이름이 .gitignore인 파일을 하나 생성하면 됩니다.주의: 파일 이름 앞에 점(.)이 꼭 있어야 하며, 확장자(.txt 등)가 없어야 합니..
열심히 코딩해서 만든 내 컴퓨터(로컬) 속의 프로젝트,어떻게 Github(원격 저장소)에 안전하게 백업하고 공유할 수 있을까요?오늘은 이미 내 컴퓨터에 작업해 둔 폴더/프로젝트를 Github의 새 레포지토리(Repository)에 올리는 방법을 단계별로 알아보겠습니다.1. Github에서 새 레포지토리(Repository) 만들기가장 먼저 Github 웹사이트에 접속해서 프로젝트를 담을 그릇을 만들어야 합니다.Github 메인 페이지 우측 상단의 + 버튼을 누르고 [New repository]를 클릭합니다.Repository name에 원하는 프로젝트 이름을 입력합니다.중요: 기존 프로젝트를 올릴 때는 Add a README file, .gitignore, License 등의 체크박스를 모두 해제(체크하..
어느 날 갑자기 크롬 브라우저가 까맣게 변해서 당황하셨나요?혹은 눈의 피로를 줄이려 다크모드를 켰다가, 다시 밝고 깔끔한 화면으로 돌아가고 싶은데 방법을 모르시겠나요?크롬 다크모드는 눈을 편안하게 해주지만, 때로는 글씨가 잘 안 보이거나 익숙하지 않아 불편할 수 있습니다.오늘은 크롬 브라우저 다크모드를 해제하고 원래대로 되돌리는 3가지 확실한 방법을 정리해 드립니다.방법 1. 윈도우(Windows) 시스템 설정 확인하기 (가장 흔한 경우)크롬은 기본적으로 내 컴퓨터(윈도우)의 색상 설정을 따라갑니다. 윈도우가 다크모드로 설정되어 있다면 크롬도 자동으로 어두워집니다.바탕화면 빈 곳에서 마우스 우클릭을 하고 [개인 설정]을 클릭합니다.왼쪽 메뉴에서 [색]을 선택합니다.'색 선택' 항목이 '어둡게'로 되어 있..
드디어 Spring Security + JWT 시리즈의 마지막입니다! 👏지금까지 우리는 설정(Config), 필터(Filter), 토큰 발급기(Provider), 로그인 로직(Service)을 각각 조각조각 구현했습니다.오늘은 이 조각들이 실제로 합쳐져서 어떻게 동작하는지,---1. 로그인 할 때(토큰 발급)2. API를 호출할 때(토큰 사용)---두 가지 흐름으로 나누어 시퀀스 다이어그램으로 정리해 보겠습니다. 1. 전체 흐름도 (Sequence Diagram) 2. 다이어그램 상세 분석위 그림을 Flow 1 (로그인)과 Flow 2 (API 요청)로 나누어 자세히 뜯어보겠습니다.📌 [Flow 1] 로그인 & 토큰 발급 (여권 만들기)사용자가 처음 들어와서 ID/PW를 입력하고 "출입증(JWT)"을..
지난 시간까지 보안 설정(Config)을 바꾸고, 필터(Filter)를 장착했습니다.하지만 기존의 Form Login을 삭제했기 때문에, 현재는 로그인도 회원가입도 할 수 없는 상태입니다.이번 마지막 시간에는 사용자가 JSON으로 아이디/비번을 보내면 토큰을 발급해 주는 API 컨트롤러를 만들고,Postman으로 전체 흐름을 테스트하며 대장정을 마무리하겠습니다.Step 1. 로그인 요청용 DTO 만들기로그인할 때 받을 데이터(ID, PW)를 담을 객체입니다.위치: src/main/java/com/example/board/dto/MemberLoginDto.javapackage com.example.board.dto;import lombok.Data;@Datapublic class MemberLoginDto..
지난 시간까지 JWT 토큰 발급기(JwtTokenProvider)를 만들었습니다.이제 스프링 시큐리티 설정을 뜯어고쳐서 세션 기반의 Form Login을 걷어내고, JWT 필터를 장착할 차례입니다.이 과정이 끝나면 기존의 로그인 화면은 동작하지 않게 되며, 완전히 새로운 방식(API)으로 로그인을 처리하게 됩니다.우리는 이제 세션 기반의 "페이지 이동식 로그인"을 버리고, REST API 방식(데이터만 주고받는 방식)으로 전환합니다.더 이상 서버가 "로그인 페이지를 띄워주고, 로그인 성공하면 메인으로 튕겨주는" 역할을 하지 않습니다.서버는 오직 "ID/PW를 주면 토큰을 던져주는" 역할만 합니다.Step 1. JwtAuthenticationFilter 만들기 (보안 검색대)먼저, 요청이 들어올 때마다 헤..
지난 6편(이론편)에서 JWT는 "서버가 발급해 주는 위조 불가능한 출입증"이라고 배웠습니다.이제부터 실전입니다!기존 세션 방식을 버리고 JWT 방식을 적용하기 위해 가장 먼저 해야 할 일은'출입증을 찍어내는 기계(Provider)'를 만드는 것입니다.이 클래스 하나만 잘 만들어두면, 로그인할 때 토큰을 만들고, 요청이 올 때 토큰을 검사하는 모든 곳에서 핵심 부품으로 사용됩니다.Step 1. 의존성 추가 (build.gradle)JWT 기능을 구현하려면 외부 라이브러리가 필요합니다. Java 진영에서 가장 널리 쓰이는 jjwt 라이브러리를 추가합니다.파일: build.gradledependencies { // ... 기존 의존성 ... // JWT 라이브러리 (0.11.5 버전 사용) ..
지금까지 우리는 "세션(Session) 기반"의 로그인을 구현했습니다.사용자가 로그인하면 서버(Tomcat)의 메모리에 "이 사람 로그인했음!"이라고 적어두고,브라우저에게는 JSESSIONID라는 입장권을 줬죠.하지만 요즘 트렌드인 React, Vue, 모바일 앱(Android/iOS)과 통신하려면 세션 방식은 한계가 있습니다.그래서 등장한 것이 JWT(JSON Web Token)입니다.코드를 짜기 전에, "도대체 JWT가 뭐고, 세션이랑 뭐가 다른지" 명확히 짚고 넘어가는 이론편을 준비했습니다.(이걸 모르면 코드를 짜도 이해가 안 됩니다!)두 방식의 차이점을 '헬스장 이용'에 비유해서 아주 쉽게 설명해 드립니다.1. 세션(Session) 인증 방식 (우리가 지금까지 한 것)비유: "회원님 얼굴 기억해 ..
