728x90

개발/Java & Kotlin 136

[Spring] CQRS 패턴이란?

1. 개념시스템은 크게 상태 변경과 조회 기능을 제공한다. 주문 취소, 결제 기능은 상태 변경에 해당되며, 주문서 조회, 사용자 조회 등이 조회에 해당된다. 명령 쿼리 책임 분리 패턴(Command Query Responsibility Segregation, CQRS) 는 상태를 변경하기 위한 명령을 위한 모델과 상태를 제공하는 조회(Query)를 위한 모델을 분리하는 패턴을 의미한다. 예를 들어, Order라는 리소스를 Order(명령용), OrderData(조회용) 2개의 모델로 나누어서 관리할 수 있다. 이때 OrderData를 이용해서 표현 계층에 데이터를 출력하는 데 사용하고, 애플리케이션에서는 Order를 활용해 변경을 수행할 수 있다. - 자세히 !CQRS 패턴의 주요 개념 1. 명령(Com..

[Spring] 스프링 트랜잭션 AOP 동작 흐름

1. 스프링 트랜잭션 AOP 동작 흐름 @Transactional어노테이션을 사용한 선언적 트랜잭션 관리(Declarative Transaction Management)의 전체 흐름에는 크게 3가지 요소가 등장한다. 트랜잭션 매니저, 트랜잭션 AOP 프록시, 트랜잭션 동기화 매니저가 이에 해당된다. 클라이언트 코드로부터 요청이 들어오면 트랜잭션 AOP 프록시가 트랜잭션 매니저를 획득하고, 트랜잭션을 시작하기 위해서 트랜잭션 매니저에게 요청한다. 트랜잭션 시작 요청 받은 트랜잭션 매니저는 데이터소스를 통해 커넥션을 받아오고 트랜잭션을 시작한다. 그리고, 트랜잭션 매니저는 트랜잭션이 시작된 커넥션을 동기화 매니저에 보관한다. 이후 트랜잭션이 종료되는 경우 트랜잭션 매니저는 트랜잭션 동기화 매니저에 보관한 커..

[Kotlin] 코틀린 + 스프링부트로 단숨에 완성하는 초강력 JWT 인증 시스템!💡 보안과 성능을 모두 잡아라!🔥(2)

지난번에 예외발생 DTO를 생성까지 작성했다. [Kotlin] 코틀린 + 스프링부트로 단숨에 완성하는 초강력 JWT 인증 시스템!💡 보안과 성능을 모두 잡아라!🔥  1. validation 추가컨트롤러를 다시 보면 @RequestBody 옆에 @validated가 있었다. 이는 필요한 값이 안왔을 경우 예외를 발생시킨다. @PostMapping("/signup") fun signup( request: HttpServletRequest, @RequestBody @Validated(SignUpValidation::class) reqAuthDto: ReqAuthDto, result: BindingResult ): ResponseEntity { ..

[Kotlin] 코틀린 + 스프링부트로 단숨에 완성하는 초강력 JWT 인증 시스템!💡 보안과 성능을 모두 잡아라!🔥

코틀린 스프링부트로 JWT구현해봤다. 제목은 어그로 ㅎㅎ GPT가 만들어준..   1. 코틀린으로 프로젝트 생성한다.라이브러리는dependencies { implementation("org.springframework.boot:spring-boot-starter-data-jpa") implementation("org.springframework.boot:spring-boot-starter-web") implementation("org.springframework.boot:spring-boot-starter-security") implementation("org.springframework.boot:spring-boot-starter-validation") implementati..

[Spring] 동기, 비동기 차이

동기와 비동기 차이에 대해서 알아보자 !    1. 개념동기와 비동기는 호출하는 함수의 작업 완료를 기다리는지 여부의 차이가 있다.  함수 A가 동기로 함수 B를 호출하면 A는 B의 작업이 완료될 때까지 기다려야 한다.  따라서 작업이 순차적으로 진행된다.  반면, 함수 A가 비동기로 함수 B를 호출하면 A는 B의 작업 완료를 신경 쓰지 않고 따로 동작한다.  따라서 작업이 순차적으로 진행되지 않는다.    2. 블록킹과 동기의 차이동기 호출에서는 호출된 함수가 작업을 완료할 때까지 호출한 함수가 기다린다.즉, 작업이 순차적으로 진행되는 것을 의미한다.  반면, 블로킹은 함수가 호출된 후, 호출한 함수의 결과를 기다리기 위해 실행을 멈추는 상태를 의미한다.즉, 제어권이 반환되지 않고 대기하는 상황이다. ..

[Spring] Annotation 알아보기

스프링에서 제공하는 어노테이션에 대해서 알아보자 !!!  1. 개념@Component, @Service, @Controller, @Repository는 각각의 클래스를 특정 역할을 수행하는 Spring Bean으로 등록할 때 사용된다.각 애너테이션은 클래스가 어떤 역할을 하는지를 명시적으로 나타내며, Spring의 @ComponentScan 기능을 통해 자동으로 Bean으로 등록된다.@Service, @Controller, @Repository 어노테이션은 내부적으로 @Component 어노테이션을 사용하고 있다.    2. 광고   3. 종류@Component 가장 일반적인 형태의 어노테이션으로, 특정 역할에 종속되지 않는 일반적인 Spring Bean을 나타낸다. 공통 기능을 제공하는 유틸리티 클래스..

[Java] 동일성과 동등성 알아보기

동일성과 동등성을 알아보자 !    1. 개념동일성과 동등성은 객체를 비교할 때 중요한 개념이다. 자바에서는 이 두 개념을 equals() 메서드와 == 연산자를 통해 구분할 수 있다.    2. equals()와 ==의 차이equals()는 객체의 내용을 비교하는 반면, ==는 객체의 참조(레퍼런스)를 비교한다. 따라서 두 객체의 내용이 같더라도 서로 다른 객체라면 equals()는 true를 반환할 수 있지만, ==는 false를 반환한다.    3. 광고  4. 동등성이란?동등성은 논리적으로 객체의 내용이 같은지를 비교하는 개념. 자바에서는 equals() 메서드를 사용하여 객체의 동등성을 비교한다. Apple 클래스를 예시로 보면, Object.equals 메서드를 오버라이딩하여 객체의 실제 데이..

[Java] equals와 hashCode 알아보기

equals와 hashCode에 대해서 알아보자    1. equalsequals() 메서드는 두 객체의 값이 같은지 비교하기 위해 사용하는 Java의 객체 메서드.기본적으로, Object 클래스에 정의되어 있으며, 모든 Java 클래스는 Object 클래스를 상속받기 때문에 모든 객체에서 사용 가능.   - 기본 구현public boolean equals(Object obj) { return (this == obj);}   - equals() vs == 비교비교 방식참조(주소) 비교값 비교 (보통 오버라이드 필요)기본 구현변경 불가능오버라이드 가능기본 용도객체의 주소(메모리 위치) 비교객체의 값 비교사용 예시str1 == str2str1.equals(str2)   - equals() 오버라이드 (..

[JPA] ID 생성 전략 알아보기

JPA의 ID 생성 전략을 알아보자 !!!  1. 개념JPA에서 ID를 생성하기 위해서는 직접 할당과 자동 할당을 사용할 수 있다.  직접 할당은 @Id어노테이션만을 사용하여 Id값을 직접 할당하는 방식.자동 할당은 @Id와 @GeneratedValue를 함께 사용해서 원하는 키 생성 전략을 선택하는 방식. @GeneratedValue의 stretagy 옵션을 통해 생성 전략을 설정할 수 있는데, 여기에 올 수 있는 값인 GenerationType는 다음과 같다.@Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface GeneratedValue { Generation..

[Java] 얕은 복사, 깊은 복사 알아보기

얕은복사, 깊은복사를 비교해보자   1. 정의자바에서 객체를 복사할 때 얕은 복사와 깊은 복사라는 두 가지 방식이 있다. 먼저 Book과 Author라는 두 클래스를 사용해서 예제를 살펴보면, Book은 책의 이름(name)과 저자(author) 정보를 가지고 있고, Author는 저자의 이름을 가지고 있다.    2. 광고    3. 예제class Book { private String name; // 책 이름 private Author author; // 저자 public Book(String name, Author author) { this.name = name; this.author = author; } public Book shallowCopy..

728x90