공부/Spring 9

[공부/Spring] Spring AOP로 나만의 캐싱기능 구현하기

배경Redis를 이용해서 캐싱 기능을 구현하려고 한다. 스프링에서 캐싱을 위해 @Cacheable 이라는 어노테이션을 지원해주지만 단순히 메서드의 반환 값을 캐시하여 이후 동일한 인수로 호출될 때 캐시된 값을 반환만 해준다. @Cacheable은 복잡한 캐싱 전략을 사용하기 어렵고, Redis의 여러 기능들을 사용하려면 추가적인 설정이 필요하다. 일단 "나만의 캐싱 기능을 구현"하는 것이 목적이기 때문에 스프링에서 제공하는 @Cacheable를 사용하지 않고 기능을 구현하려고 한다. 나만의 캐싱 전략어떤 서비스냐에 따라 캐싱 전략 또한 변해야 한다. 아직 생각하고 있는 서비스는 없으므로, 가장 일반적인 읽기는 많고 그에 비해 쓰기는 비교적 적은 서비스를 위한 캐싱 전략을 생각해보고자 한다. 읽기 전략개인..

공부/Spring 2024.07.25

[공부/Spring] 구글 SMTP를 이용한 이메일 인증

운영체제 : MacOS M1 IDE : IntelliJ Spring Boot : 2.7.8 Java : 11 JDBC : MyBatis 계기 추후에 아이디나 비밀번호를 찾을 때 이메일을 이용하기 위해 회원가입시 이메일 인증 과정을 추가하고자 한다. 이메일 인증은 회원가입 뿐만 아니라 비밀번호 재설정시 본인임을 확인하기 위한 용도로도 사용할 예정이다. SMTP란? SMTP(Simple Mail Transfer Protocol)은 네트워크를 통해 전자우편(이메일)을 전송하는 기술 표준을 의미한다. 이메일 인증을 위해서 SMTP를 통해 원하는 계정으로 인증코드를 담은 이메일을 전송할 것이다. SMTP를 사용하기 위해 build.gradle에 아래 의존성을 추가해주자. implementation 'org.spr..

공부/Spring 2023.07.23

[공부/Spring] 유효성 검사를 위한 Validation 처리

운영체제 : MacOS M1 IDE : IntelliJ Spring Boot : 2.7.8 Java : 11 JDBC : MyBatis 계기 회원가입의 경우 아이디, 비밀번호, 이메일 등 그 값이 일정한 형식을 지켜야 한다. 이를 체크해주는 메소드를 하나 하나 생성해줄 수도 있겠지만 이전에 @NotNull, @Email 등 유효성 검사를 해주는 어노테이션을 본 적이 있어 해당 어노테이션들을 이용해 유효성을 검사하고자 한다.  @Valid란? @Valid는 JSR-303 표준 스펙으로써 빈 검증기(Bean Validator)를 이용해 객체의 제약 조건을 검증하도록 지시하는 어노테이션이다. 어노테이션으로 편리하게 검증을 해준다는 특징이 있다. Spring에서는 LocalValidationFactoryBea..

공부/Spring 2023.03.07

[공부/Spring] @ExceptionHandler 예외처리

운영체제 : MacOS M1 IDE : IntelliJ Spring Boot : 2.7.8 Java : 11 Persistence Framework : MyBatis 계기 회원가입을 구현하면서 성공을 제외하고 이메일 형식을 틀리거나, 이미 존재하는 아이디 등을 처리해줄 때 각 상황에 맞는 상태코드와 응답 Body에 넣어줄 메시지를 설정해주고 싶었다. 처음엔 서비스층에서 회원가입을 수행하다가 문제가 발생하면 그 문제를 컨트롤러에 전해주고, 컨트롤러에서는 문제가 무엇인지 판단하고 그에 맞는 상태코드와 응답 메시지를 만들려고 했다. 하지만 이 방법으로 구현하면 컨트롤러의 코드가 많이 지저분해지기도 하고, 서비스에서 어떤 문제인지를 판단을 한 상태이기 때문에 컨트롤러에서 또 그 문제에 맞는 상태코드와 응답 메시..

공부/Spring 2023.02.21

[공부/Spring] 에러 - Could not get lock /var/lib/dpkg/lock-fronted

📌Could not get lock /var/lib/dpkg/lock-fronted 에러 다른 프로세스가 진행중이라 발생하는 에러이다. 진행중인 프로세스를 죽여주면 해결된다. 방법 1) sudo killall apt apt-get 방법 2) 방법 1을 실행했는데 진행중인 프로세스가 없다고 뜨면, 디렉토리를 하나 하나 삭제해준다. sudo rm /var/lib/apt/lists/lock sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock* 다음 명령어까지 실행해주면 해결된다. sudo dpkg --configure -a sudo apt update

공부/Spring 2022.07.29

[공부/Spring] #4 | 서버 접속 간편화

✅ 운영체제는 MacOS(M1) 사용중입니다. ✅ 이전 포스트 [공부/Spring] #3 | RDS 생성 및 연결 ✅ 운영체제는 MacOS(M1)을 사용합니다. ✅ 이전 포스트 [공부/Spring] #2 | 보안그룹 설정, 고정 IP 주소 설정 ✅ 운영체제는 MacOS(M1)을 사용합니다. ✅ 이전 포스트 [공부/Spring] EC2 인스턴스 생성 및 연 yulee.tistory.com ☘️ 서버 접속 간편화 EC2 인스턴스에 SSH로 접속할 땐 인스턴스 정보에서 연결 버튼을 클릭해 SSH 클라이언트 항목에서 예에 있는 명령어를 복사해 실행시키면 된다고 전에 포스팅한 적이 있는데 호스트를 등록해 더 간편화하고자 한다. 1. 다운 받은 키 페어 관리하기 1-1. 키 파일 권한 변경 chmod 400 "키 ..

공부/Spring 2022.07.28

[공부/Spring] #3 | RDS 생성 및 연결

✅ 운영체제는 MacOS(M1) 사용중입니다. ✅ 이전 포스트 [공부/Spring] #2 | 보안그룹 설정, 고정 IP 주소 설정 ✅ 운영체제는 MacOS(M1)을 사용합니다. ✅ 이전 포스트 [공부/Spring] EC2 인스턴스 생성 및 연결 ✅ 운영체제는 MacOS(M1)을 사용합니다. ☘️ EC2 인스턴스 생성하기 1. 인스턴스 시작 AWS에 가입해주고 yulee.tistory.com ☘️ RDS 생성 1. RDS 생성 1-1. 데이터베이스 생성 RDS는 AWS에서 지원하는 관계형 데이터베이스로 인스턴스에서 데이터베이스를 사용하는 것보다 편하고 용량도 크게 쓸 수 있다. AWS에서 RDS를 검색하고 왼쪽 메뉴에서 데이터베이스 클릭 후 데이터베이스 생성을 누른다. 1-2. 엔진 옵션 사용할 MySQL..

공부/Spring 2022.07.28

[공부/Spring] #2 | 보안그룹 설정, 고정 IP 주소 설정

✅ 운영체제는 MacOS(M1) 사용중입니다. ✅ 이전 포스트 [공부/Spring] EC2 인스턴스 생성 및 연결 ✅ 운영체제는 MacOS(M1)을 사용합니다. ☘️ EC2 인스턴스 생성하기 1. 인스턴스 시작 AWS에 가입해주고 검색창에 EC2를 검색해준다. 왼쪽 메뉴에서 인스턴스를 눌러주고 인스턴스 시작 클릭! 2. 인스 yulee.tistory.com ☘️ 보안그룹 설정 1. 인바운드 규칙 설정하기 이전 포스트에서처럼 인스턴스 생성이 완료되었으니 이제 해당 서버에서 사용할 포트를 열어줘야 한다. 왼쪽 메뉴에서 보안 그룹에 들어가보면 default 하나와 새로 만든 인스턴스에 적용되는 보안그룹이 launch-wizard-번호 형태의 보안 그룹을 클릭하고 인바운드 규칙 편집을 눌러준다. 아래와 같이 S..

공부/Spring 2022.07.28

[공부/Spring] #1 | EC2 인스턴스 생성 및 연결

✅ 운영체제는 MacOS(M1) 사용중입니다. ☘️ EC2 인스턴스 생성하기 1. 인스턴스 시작 AWS에 가입해주고 검색창에 EC2를 검색해준다. 왼쪽 메뉴에서 인스턴스를 눌러주고 인스턴스 시작 클릭! 2. 인스턴스 설정 2-1. 애플리케이션 및 OS 이미지 Quick Start에서 Ubuntu로 선택하고 AMI는 무료로 사용가능한 Ubuntu Server 22.07 LTS (HVM), SSD Volume Type으로 선택해준다. (Ubuntu 선택 시 자동으로 선택됨) 인스턴스 유형의 경우도 자동으로 선택되는 프리티어인 t2.micro를 그대로 사용 2-2. 키페어(로그인) 생성 기존에 쓰던 키 페어를 쓸 경우엔 선택해주고, 새로 만들어 줄 경우엔 새 키 페어 생성을 눌러준다. 키 페어 이름은 기억하기..

공부/Spring 2022.07.24
728x90