[Spring] Filter vs. Interceptor
2024. 11. 27. 11:48
Spring
개발을 하다 보면 공통적으로 처리해야 할 업무들이 많다.공통 업무에 관련된 코드를 페이지마다 작성한다면 비효율적일 것이다.이에 Spring은 공통적으로 여러 작업을 처리할 수 있는 다음과 같은 기능들을 지원하고 있다.1. Filter(필터)2. Interceptor(인터셉터)3. AOP(Aspect Oriented Programming, 관점 지향 프로그래밍) 이제 필터(Filter)와 인터셉터(Interceptor)가 무엇인지 그리고 차이점에 대해서도 알아보자.또한, 간략하게 인터셉터(Interceptor)와 AOP에 대해서도 비교해보자. Filter 요청과 응답을 거른 후 정제- Dispatcher Servlet에 요청이 전달되기 전/ 후에 url 패턴에 맞는 모든 요청에 대해 부가 작업을 처리..
Spring 프로젝트에서 웹소켓 적용하기~!! 1탄
2024. 6. 10. 23:01
Spring
여행 일정 공유사이트를 만들며 여러명이서 실시간으로 편집상태를 공유하는 기능이 있으면 좋겠다고 생각했고, 이를 위해 웹소켓을 연동하게 되었다. 기본 HTTP는 stateless하기 때문에 서버에 변경사항이 생겨도 클라이언트에서 요청을 하지 않으면 변경사항이 적용되지 않는 반면 WebSocket은 지속적으로 connection을 유지하기 때문에 실시간으로 변경사항이 적용된다! 웹소켓의 이런 특징을 이용해 실시간 편집기능을 구현할 수 있다. 그리고 WebSocket 은 HTTP를 통해 최초 연결(핸드세이크)되며 이후 일정 시간이 지나면 HTTP연결은 자동으로 끊어지고 WebSocket Connection은 유지된다 다만 웹소켓은 stateful 프로토콜로서 connection을 항상 유지해야하기 때문에 트..
[프로젝트] Spring batch의 적용
2023. 6. 6. 17:10
Spring
yata project에서 기한이 만료된 게시글을 일정 시간마다 한번에 처리해 줄 필요가 있었고, spring batch기능을 통해 일괄처리해주기로 결정하였다. 🔎스프링 배치(Spring Batch) 대량의 데이터를 처리하기 위한 일괄 처리(Batch Processing) 프레임워크 일괄 처리는 주기적으로 실행되며, 대부분의 작업은 큰 데이터 세트를 읽어 처리하고, 가공하여 결과를 저장하는 작업이다. 스프링 배치는 이러한 일괄 처리 작업을 효율적이고 안정적으로 처리하기 위한 다양한 기능과 구성 요소를 제공한다. 🔎스케줄링(Scheduling) 정해진 일정 또는 주기에 따라 작업을 실행하는 기능 주로 주기적으로 실행되는 반복 작업에 사용된다. 스프링 프레임워크에서는 @Scheduled 애너테이션을 사용하여..
Spring - 엔티티 간의 연간관계 매핑(일대다,다대일,다대다,일대일)
2022. 11. 5. 18:38
Spring
📌단방향 연관관계 한쪽 클래스만 다른 쪽 클래스의 참조 정보를 가지고 있는 관계를 단방향 연관 관계라고 한다. 📌양방향 연관 관계 양쪽 클래스가 서로의 참조 정보를 가지고 있는 관계를 양방향 연관 관계라고 한다. 📌일대다 단방향 연관 관계(일에서 다의 정보를 가지고 있음) 일대다- 일(1)에 해당하는 클래스가 다(N)에 해당하는 객체를 참조할 수 있는 관계 한명의 회원이 여러 건의 주문을 할 수 있으므로 Member와 Order는 일대다 관계이며, Member만 List 객체를 참조할 수 있으므로 단방향 관계이다. 일대다 단방향 매핑은 잘 사용하지 않는다. 위의 일대다 단반향 연관 관계에서 Order 클래스가 ‘테이블 관계에서 외래키에 해당하는 MEMBER 클래스의 참조값’을 가지고 있지 않아 일반적인 ..
Spring - JDBC기반 Domain Entity와 테이블 설계
2022. 11. 2. 11:55
Spring
👀애그리거트 루트(Aggregate Root) 선정 기준 애그리거트 내의 도메인들 중에서 다른 모든 도메인들과 직간접적으로 연관이 되어 있는 도메인 데이터베이스의 테이블 간 관계로 보자면, 애그리거트 루트는 부모 테이블이 되고, 애그리거트 루트가 아닌 다른 도메인들은 자식 테이블 즉, 애그리거트 루트(Aggregate Root)의 기본키 정보를 다른 도메인들이 외래키 형태로 가지고 있다고 볼 수 있다 관계형 데이터베이스에서 A 테이블의 기본키를 B 테이블이 가지고 있다면 A는 부모 테이블이 되고, B는 자식 테이블이 됩니다. B인 자식 테이블이 가지고 있는 A 테이블의 기본키를 외래키라고 함 📋샘플 애플리케이션 도메인 엔티티 및 테이블 설계 도메인에서 애그리거트 루트 찾기 📜애그리거트 간의 관계 회원 정..
Spring - @MapStruct로 MapperImpl생성 시 입력값으로 null이 들어오는 오류
2022. 10. 31. 10:17
Error
@MapStruct를 이용해 자동 mapper구현체 생성을 하여 코드를 작성한 후 postman으로 다음과 같은 값을 입력하려 하였으나 전부 null값이 들어오며 500오류가 발생하였다. 콘솔창에 뜨는 에러메세지는 다음과 같다. NULL not allowed for column 코드를 확인해보았다. 원인은 @MapStruct를 통해 자동 작성된 Mapper의 구현체가 제대로 작성되지 않았기 때문이었다. 원래는 mapper구현체에서 Dto객체가 들어오면 다음과 같이 get,set으로 값을 가져와 변환하고 Entity객체로 리턴해주어야 하나 get과 set메서드가 들어가는 부분이 전부 제대로 만들어지지 않았다. @Component public class CoffeeMapperImpl implements Co..
Spring - 유효성 검증
2022. 10. 30. 14:23
Spring
MemberPostDto 클래스의 각 멤버 변수에 유효성 검증을 위한 애너테이션을 추가한 후 컨트롤러로 전달받는 DTO 매개변수 앞에 @Valid를 붙여줌 @NotBlank 값이 비어있지 않은지를 검증 null 값이나 공백(””), 스페이스(” “) 같은 값들을 모두 허용하지 않는다. 유효성 검증에 실패하면 에러 메시지(400 ‘Bad Request’)가 콘솔에 출력 @Email 유효한 이메일 주소인지를 검증 유효성 검증에 실패하면 내장된 디폴트 에러 메시지(400 ‘Bad Request’)가 콘솔에 출력 @Pattern 정규 표현식(Reqular Expression)에 매치되는 유효한 값인지를 검증 📌쿼리 파라미터(Query Parameter 또는 Query String) 및 @Pathvariable에..
Spring - Mapper 클래스의 구현, MapStruct
2022. 10. 30. 14:19
Spring
매퍼(Mapper)를 이용한 DTO 클래스 ↔ 엔티티(Entity) 클래스 매핑하는 과정을 정리해 보려 한다. 요그림에서 Controller 에서 DTO Entity Class 요 과정을 매퍼라 한다!! 먼저 매퍼클래스를 구현해보자! //MemberController에서 사용하는 DTO 클래스와 Member 간에 서로 타입을 변환해주는 매퍼(Mapper)클래스 import org.springframework.stereotype.Component; @Component // (1)스프링빈 등록을 위해 추가 public class MemberMapper { // (2) MemberPostDto를 Member로 변환 public Member memberPostDtoToMember(MemberPostDto mem..
Spring - 컨트롤러(DI를 통한 서비스 계층 ↔ API 계층 연동과정)
2022. 10. 30. 14:15
Spring
DI를 통한 서비스 계층 ↔ API 계층 연동과정을 정리해보려 한다. 순서 -Entity클래스인 member 클래스 생성 -memberController 코드구현 -MemberService에 @Service 에너테이션 추가 (Spring Bean으로 만들어주기 위해) -위 코드의 문제점 먼저 Entity클래스인 member 클래스를 생성해준다. 도메인 엔티티(Entity) 클래스란 서비스 계층에서 데이터 액세스 계층과 연동하면서 비즈니스 로직을 처리하기 위해 필요한 데이터를 담는 역할을 하는 클래스 DTO와 비슷한 역할을 하지만 DTO는 클라이언트와 API 계층 사이에서 데이터를 담아 전달하고, 도메인 엔티티 클래스는 API계층과 서비스 계층 사이에서 데이터를 전달한다. 📝member 클래스 생성 imp..