Spring 8

[Spring] Argument Resolver를 이용하여 Client IP 바인딩 하기

이번 포스팅에선 SpringBoot 환경에서 Argument Resolver를 이용하여 요청 파라미터를 바인딩하는 실습을 해보았다. Argument Resolver란? Argument Resolver(아규먼트 리졸버)는 Spring 환경에서 Controller로 들어온 파라미터를 가공하고나, 수정, 바인딩 기능을 제공할때 사용하는 객체이다. HandlerMethodArgumentResolver 인터페이스를 상속하여 Class를 만들어 사용한다. Body(@Request Body)에 담겨 들어오거나 @PathVariable을 이용하는 데이터들은 Controller에서 바로 파라미터로 받을 수 있지만 세션, 쿠키, 헤더 등에서 제공받는 데이터들을 파라미터로 받는 경우 Argument Resolver를 활용하..

Java&Web 2021.07.15

[WEB] Spring의 웹 계층과 트랜잭션 스크립트, 도메인 모델

Spring의 웹 계층 Web Layer 흔히 사용하는 Controller와 JSP 등의 뷰 템플릿 영역이다. 이외에도 filter, interceptor, ControllerAdvice 등 외부 요청과 응답에 대한 전반적인 영역이다. Service Layer @Service에 사용되는 서비스 영역이다. 일반적으로 Controller와 DAO의 중간 영역으로 사용된다. @Transcational이 사용되어야 하는 영역이다. Repository Layer DB와 같이 데이터 저장소에 접근하는 영역이다. DAO(Data Access Object)영역이다. DTOs DTO(Data Transfer Object)는 계층 간에 데이터 교환을 위한 객체를 DTOs는 그 영역이다. Web Layer에서 사용될 객체나..

Java&Web 2021.01.17

[Enum] Enum을 Binding해주는 Custom Converter

1 2 3 4 5 6 7 8 9 10 11 12 public enum Status { UNCHECKED(1), APPROVED(2), BLOCKED(3); @Getter private final int statusCode; Status(int statusCode) { this.statusCode = statusCode; } } Colored by Color Scripter 위와 같은 Enum 클래스를 사용한다고 가정하자. 클라이언트쪽에서 서버쪽으로 요청을 보낼때 인자값으로 위의 Enum에 등록된 값을 하나 사용할려고 한다. 이때, 클라이언트쪽에서 요청을 보낼때 Enum에 등록된 UNCHECKED, APPROVED, BLOCKED로 서버에 보낸다면 인자값을 받음에 있어 문제가 없을 것이다. 하지만 만약 u..

Java&Web 2021.01.13

[MyBatis] Enum을 MyBatis 환경에서 사용하기

Java 서버단에서 상수를 처리함에 있어서 여러방법이 있다. 보통 final을 붙여서 상수를 선언하여 처리하는 것이 일반적이지만 성질이 비슷한 상수가 다수가 존재한다면 Enum 클래스를 이용하여 처리할 수 있다. Enum 클래스에 대한 자세한 내용은 다른 포스팅에서 다룰 예정이고, 이번 포스팅에선 이러한 Enum 클래스를 MyBatis 환경에서 적용시키는 실습을 해보았다. 다음과 같은 과정을 거쳐 Springboot에서 Enum 클래스를 MyBatis에 적용시켜 보았다. Enum 클래스 생성 1 2 3 4 5 6 7 8 9 10 11 12 public enum Status { UNCHECKED(1), APPROVED(2), BLOCKED(3); @Getter private final int statusC..

Java&Web 2021.01.12

[JPA] Spring Data JPA (4) - 사용자 정의 Repository

Spring Data JPA는 다양한 프레임워크와 연동기능을 제공한다. JPA만으로 해결할 수 없는 동적쿼리등을 지원하기 위함이다. 대표적으로 QueryDSL 등을 사용하고, JDBC Template, Mybatis 등도 사용할 수 있다. 가장 많이 사용해본 Mybatis와의 연동을 실습해보았다. 사용자 정의 Repository - MyBatis MemberRepositroy에 기존 Spring Data JPA가 제공하는 메소드 말고, 다른 프레임워크(Mybatis)를 이용한 메소드를 추가하기 위해 다음과 같은 사용자 정의 Repository와 구현체 class를 만들어보았다. 1 2 3 public interface MemberRepositoryMybatis { List findDynamic(Membe..

Java&Web 2020.08.28

[JPA] Spring Data JPA (3) - 페이징과 정렬

페이징과 정렬 Spirng Data JPA는 아주 간편한 페이징과 정렬기능을 제공해준다. 메소드의 리턴 타입으로 Page를 사용해주고, pageable이란 파라미터에 시작페이지, 갯수, 정렬조건, 그리고 메소드이름으로 검색조건을 적절히 사용해준다면 count쿼리까지 자동으로 조회해주는 쉬운 페이징을 할 수 있다. 다음과 같은 예시가 있다. 1 2 3 4 5 public interface MemberRepository extends JpaRepository{ //페이징 Page findByAge(int age, Pageable pageable); } Colored by Color Scripter 위 처럼 Page를 리턴타입으로 받아주고, Pageable 변수를 파라미터로 가지는 메소드 네이밍 쿼리를 작성하..

Java&Web 2020.08.28

[JPA] Spring Data JPA (2) - 메소드 네임 쿼리, @Query

메소드 네임 쿼리 JPA는 기본적으로 JpaRepository을 상속 받음으로써 기본적인 CRUD를 할 수 있는 쿼리를 제공한다. 또한 이것과 별게로 추가적으로 규칙에 의한 메소드 네임만으로 다양한 쿼리문을 실행시킬 수 있는 기능도 제공해준다. 즉, JPA는 메소드의 이름을 분석하여 JPQL을 생성하고 실행한다. 예를 들면 다음과 같다. 1 2 3 public interface MemberRepository extends JpaRepository { List findByEmailAndName(String email,String name); } Colored by Color Scripter MemberRepository에 findByEmailAndName이란 메소드를 만들어주었고, 이것을 JPA는 내부적으..

Java&Web 2020.08.28

[JPA] Spring Data JPA (1) - 소개, 기본

JPA란? Java Persistence API로써 자바진영의 ORM 기술 표준 ※ ORM : Object-Relational Mapping, 객체와 관계형 데이터베이스의 매핑 기존에 존재했던 패러다임 불일치 문제를 해결 기존 JDBC와는 다르게 객체는 객체대로 설계, RDBMS는 RDBMS대로 설계 후 맵핑하는 방식 ※ 객체와 RDBMS의 차이 : 상속, 연관관계, 데이터 타입, 데이터 식별 방법 애플리케이션을 SQL이 아닌 객체중심으로 개발하여 생산성과 유지보수를 높임 JPA는 인터페이스, 구현체로써 Hibernate, EclipseLink, DataNucleus등을 사용, 대표적으로 Hibernate를 사용 Spring Data JPA란? Spring Data JPA는 Spring Data 프로젝트..

Java&Web 2020.08.28