공부 21

[공부/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

[공부/Java] Java와 Kotlin

자바 객체 지향 방법론을 사용하며 여러 운영체제에서 실행될 수 있는 언어 자바의 특징 멀티 플랫폼 : JVM만 설치되어 있으면 어떤 운영체제에서도 애플리케이션을 작동시킬 수 있음 메모리 관리 : GC가 사용하지 않는 자원을 자동으로 반환 OOP : 객체 지향 방법론을 사용해 객체라는 단위로 나누고 객체들끼리 상호작용하는 방식 멀티 스레드 : Thread 클래스와 Runnable 인터페이스를 이용해 멀티 스레드를 구현 동적 로딩 : 필요한 시점에 구현한 클래스를 로딩할 수 있음 코틀린 개발자의 편의성, 간결하고 효율적인 코드 작성, 객체지향 프로그래밍과 함수형 프로그래밍의 장점을 절묘하게 조화시킨 언어 코틀린이 생겨난 배경 JetBrains라는 회사에서 만든 제품들이 70%이상 자바로 작성되어 있었는데, ..

공부/Java 2022.12.28

[공부/Java] 고정 소수점과 부동 소수점, 왜 컴퓨터는 소수 계산을 정확하게 못할까?

고정 소수점 (Fixed Point) 10진수를 2진수로 바꾼후 그걸 소수점이 정해진 곳에 넣는 방식이다. 맨 앞 1자리는 부호 비트(sign bit)라 해서 0이면 양수, 1이면 음수를 의미한다. 소수점의 위치는 미리 정해두고, 비트를 채워넣고 남은 공간은 0으로 채워준다. 이런 고정 소수점 방식은 구현하기는 편리하지만 사용한느 비트 수 대비 표현 가능한 수의 범위 또는 정밀도가 낮기 때문에 실수를 다룰 필요가 있는 범용 시스템에서는 거의 안 쓰이고, 높은 정밀도가 필요 없는 소규모 시스템에서는 간혹 쓰인다. 부동 소수점 (Floating Point) 2진수로 변환한 결과를 그대로 넣지 않고 몇가지 과정을 거친다. 정규화 (Normalization) 2진수를 1.xxx * 2^n 꼴로 변환하는 것을 말..

공부/Java 2022.12.28

[공부/Java] Runtime Data Area

Runtime Data Area는 JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다. 이 영역은 크게 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack으로 나뉜다. Method Area JVM이 실행되면서 생기는 공간이다. 모든 쓰레드가 공유하는 메모리 영역으로 클래스, 인터페이스, 메소드, 필드, Static 변수 등의 바이트 코드가 저장되는 공간이다. 이 영역 안에는 Runtime Constant Pool이라는 공간도 있는데 '상수'정보가 저장된다. Class Area, Code Area, Static Area로 불려진다. Heap Area 모든 쓰레드가 공유하며, new 키워드로 생성..

공부/Java 2022.12.28

[공부/Java] static이란?

일반적으로 우리가 만드는 class는 static 영역에 생성된다. static 키워드로 만든 정적 변수와 정적 메소드의 경우는 프로그램이 종료되기 전까지 사용이 가능하다. 또한 static이라는 키워드를 통해 static 영역에 할당된 메모리는 모든 객체가 공유하는 메모리라는 장점을 지니지만 GC(Garbage Collector)의 관리 영역 밖에 존재해 static을 자주 사용하면 프로그램 종료시까지 메모리가 할당된 채로 존재해 시스템 퍼포먼스에 악영향을 주게 된다. Static이 저장되는 위치 Permanent vs. Metaspace Permanent JDK 8 이전까지 존재했던 메소드 영역 클래스 내부의 메타 데이터들을 저장하는 영역 Heap영역에 속하며 클래스, 메소드 메타 데이터, 정적 객체..

공부/Java 2022.12.28

[공부/Java] JVM, JRE, JDK

자바 가상 머신 (JVM, Java Virtual Machine) 각기 다른 플랫폼에 설치해 동일한 자바 실행 환경을 만들어주는 소프트웨어 Java는 JVM 덕분에 플랫폼에 종속적이지 않지만, JVM 자체는 플랫폼에 종속적이라 운영체제에 맞는 JVM을 설치해줘야 함 응용 프로그램을 구성하는 클래스 파일(.class)의 바이트 코드를 JVM 환경에서 실행 JVM은 자바 실행 환경인 JRE에 포함되어 있어 현재 사용하는 컴퓨터 운영체제에 맞는 자바 JRE가 설치되어 있다면 자바 가상 머신이 설치되어 있다는 의미 JVM을 사용함으로써 하나의 바이트 코드(.class)로 모든 플랫폼에서 동작할 수 있다는 것이 가장 큰 장점이다! JVM 동작 방식 1. 자바로 개발된 프로그램을 실행하면 JVM은 OS로부터 메모리..

공부/Java 2022.12.24

[공부/Java] JVM 구성 - Class Loader, Execution Engine, Garbage Collector

JVM의 구성요소 Class Loader Class Loader는 바이트코드(.class)를 읽어들여서 클래스 객체를 생성하는 역할을 담당한다. class 로딩은 Run-Time에 일어난다. 개발자가 new라는 예약어로 객체를 생성하는 코드를 처음 실행할 때 JVM은 만들 클래스를 Class Loader로 .class 파일을 최초로 메모리에 load한다. 최종적으로 Runtime Data Area의 Method Aread에 배치된다. Class Loader의 기술적 특징 Hierarchical : Class Loader 간에 계층형 구조를 가짐. 'bootstrap' Class Loader가 가장 최상위 Delegate load reqeust : 계층형 구조를 가지고 있어 어느 시점에 Class 로딩요청..

공부/Java 2022.12.24
728x90