일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- JIRA
- 리프레시토큰
- 액세스토큰
- 트랜잭션
- 재갱신
- 티스토리챌린지
- 오블완
- oauth2
- 국제화
- yaml-resource-bundle
- Spring
- 토이프로젝트
- 메시지
- 스프링시큐리티
- githubactions
- 데이터베이스
- 소셜로그인
- CI/CD
- AWS
- java
- 백준
- 파이썬
- 스프링
- docker
- 도커
- springdataredis
- springsecurity
- springsecurityoauth2client
- 프로그래머스
- 스프링부트
- Today
- Total
목록스프링 (8)
땃쥐네
이번 글에서는 이전부터 미뤘던이메일 인증, 리프레시토큰 홀더의 Redis 저장 설정을 해보겠습니다.1. Redis 레디스는 인메모리 데이터베이스의 대표적인 제품으로, 데이터를 메모리에 저장하는 특징이 있습니다.디스크에 데이터를 저장하는 관계형데이터베이스들보다 데이터 접근이 빠르기 때문에 주로 캐시로 많이 사용합니다. 127.0.0.1:6379> set key valueOK127.0.0.1:6379> expire key 10(integer) 1127.0.0.1:6379> ttl key(integer) 5127.0.0.1:6379> ttl key(integer) 3127.0.0.1:6379> ttl key(integer) -2127.0.0.1:6379> get key(nil) 또 레디스는 TTL(Time..
이번 글에서는 지난 글에서 설계해둔 로그인 기능에서, 마저 적용하지 못 한 JWT 기술을 적용해보겠습니다. 1. JWT 의존성 추가enum class Dependencies( private val groupId: String, private val artifactId: String, private val version: String? = null, private val classifier: String? = null,) { // kotlin KOTLIN_JACKSON(groupId = "com.fasterxml.jackson.module", artifactId = "jackson-module-kotlin"), KOTLIN_REFLECT(groupId = "org.je..
지난 글에서 이메일/username/닉네임 유효성 검사 API를 작성했는데, 데이터베이스 연동을 하지 않았죠.이번 글에서는 데이터베이스 연동을 해보겠습니다.1. 로컬 MySQL 설정우선 로컬의 개발환경을 먼저 구성해보겠습니다. docker pull mysql:8.0.40-debian; 도커를 통해 mysql 이미지를 풀해오고mkdir -p ./tmpecho "FROM mysql:8.0.40-debian" > ./tmp/Dockerfileecho "RUN apt-get update && apt-get install -y locales" >> ./tmp/Dockerfileecho "RUN localedef -f UTF-8 -i ko_KR ko_KR.UTF-8" >> ./tmp/Dockerfileecho "E..
이번 글에서는 서비스 전반의 예외를 전역수준에서 어떻게 처리하여, 클라이언트에게 응답으로 내려줄지 다뤄보겠습니다. 기본적으로 스프링 웹 애플리케이션을 작성해보시면 오류가 발생했을 때 스프링이 알아서 에러 응답을 작성해줍니다만, 스프링이 작성한 예외 응답은 우리가 통제할 수 없는 영역 밖입니다. 우리가 통제할 수 있는 예외 응답을 내려줄 수 있도록 해야하는데요. 이 부분을 다뤄보겠습니다. 사실 메시지/국제화 처리 및 커스텀 예외 등을 정의해둔 터라 예외 처리에 대한 기틀은 전부 지난 글들에서 다뤘습니다.결론만 내려보면 전역 예외처리는 @RestControllerAdvice 및 @ExceptionHandler 를 써주고, 필터쪽 설정만 살짝 해주면 되긴합니다. 그러나 이렇게만 작성하면 글 분량이 없어지고 ..
이번 글에서는 자바/코틀린에서의 예외 개념을 한 번 짚고, 왜 제가 프로젝트에서 커스텀 예외를 정의했는 지, 어떤 식으로 사용했는지 설명해보도록 하겠습니다. 1. 예외 계층 커스텀 예외를 설명하기 전에 Java의 예외 계층을 설명해보겠습니다.제가 지금 사용하는 언어는 Kotlin 이지만 기본기는 Java 쪽에 있기 때문에 Java 기준으로 설명하겠습니다. Throwable은 모든 예외와 오류의 최상위 조상 클래스입니다.이 아래에는 Exception과 Error가 있습니다.Error는 주로 JVM 관련 오류나 시스템적인 문제로, 개발자가 예측하거나 처리하기 어려운 심각한 문제들입니다.예: OutOfMemoryError, StackOverflowError 등Exception 은 주로 개발자가 처리할 수 있는..
보통 프로젝트를 진행하다보면 A -> B -> C -> D -> E 와 같은 의존방향의 코드는 자주 작성됩니다. 이렇게 의존성의 방향을 알 수 있으면 뭐를 고쳐야할지 잘 보일거에요. 근데 의존성의 방향을 잘 못 관리한다거나, 계층을 넘어 의존하는 코드를 작성하면서 관리하다보면 위 그림처럼 B에서 E를 강하게 의존한 코드를 작성하게 되는 일이 생기고(특히 테스트 코드), E가 변경되면 D 뿐만 아니라 B의 코드를 변경하게 되는 일이 빈번하게 발생합니다. 무엇이 무엇을 의존하는지, 의존성의 방향은 어떤지 통제하기 힘들어지면 향후 코드 관리가 점점 힘들어집니다. 외부 모듈들을 테스트를 해보고 싶은데 모두 끌어와서 실행해야한다는 점도 저를 귀찮게 하는게 많았습니다.이메일 발송 라이브러리가 잘 작동되는 지 확인..
이번 글에서는브랜치가 푸시될 때마다 프로젝트 작업물이 EC2에 무중단으로 배포될 수 있도록 해보겠습니다.1. GitHub Actions 에 DockerHub / EC2 접근 자격증명 부여이전 글에서 지속적 통합을 GitHub Actions 를 통해 했듯, 지속적 배포 역시 GitHub Actions 를 통해 수행할 것입니다. 그런데 이전 글에서는 DockerHub, EC2 에 접근하는 작업을 하지 않았지만 이번에는 접근하는 작업을 해야합니다.제 DockerHub 에 도커 이미지를 push 한다거나, EC2 에 SSH 에 접속한다거나 하는 작업에 있어서는 몇 가지 자격증명이 필요합니다. 이것들을 우선적으로 준비해보겠습니다. 1.1 [GitHub Actions] DockerHub 액세스 토큰 준비 Git..
이전 글에서 AWS 전반적인 인프라 환경을 구성했습니다. 이번에는 프로젝트를 생성하고,풀리퀘스트에 커밋이 올라올 때마다 빌드테스트가 자동화되도록 하겠습니다.1. 스프링부트 프로젝트 생성, Git - GitHub - Jira 연동 프로젝트를 생성해보겠습니다. 일단은 간단하게 프로젝트를 생성하고, 구조를 바꿀 일이 있다면 이후 글에서 바꾸도록 하겠습니다. 이번 글에서는 배포 자동화에 초점을 맞추고 있기 때문에 복잡한 설정은 하지 않을겁니다. 1.1 스프링부트 프로젝트 생성 Intellij Ultimate 를 쓴다면 Spring Boot Initializr 지원 기능이 있으므로 그걸 써도 됩니다.근데 그렇지 않은 분들이 더 많은 것 같고 웹의 Spring Initializr 로 프로젝트를 생성했습니다.저는 자..