본문 바로가기

spring19

Runtime, Test DB 설정 Test DB 설정 PostgreSQL 드라이버 의존성을 추가한다. pom.xml org.postgresql postgresql runtime 그리고 로컬(또는 DB 서버)에서 도커를 사용하여 PostgreSQL 컨테이너를 띄우고, 실행하자. $ docker run --name eventdb -p 5432:5432 -e POSTGRES_PASSWORD=1234 -d postgres $ docker exec -it eventdb bash PostgreSQL 접속 # PostgreSQL 접속 /# su - postgres # 관리자로 접속 $ psql -d postgres # 유저 + 패스워드로 접속 $ psql -U postgres -W Password: # 테이블 확인 postgres=# \dt 이제 스.. 2021. 1. 27.
Spring REST Docs Spring REST API - Spring REST Docs Spring REST Docs 는 소스에 관한 설명을 제공할 수 있는 정형화된 documents 를 만드는 기능을 제공한다. Docs 를 만들 때 swagger 를 사용할 수도 있지만, Spring REST Docs 로 만들어보자. Spring Docs 에서 문서 조각을 snippets 라 한다. 문서 조각이 모인 Docs를 Asciidoctor 조립하여 HTML 문서를 만든다. 테스트 MockMvc WebTestClinet REST Aussured 등등 REST Docs 를 사용해보자. pom.xml 에 REST Docs 의존성을 추가한다. org.springframework.restdocs spring-restdocs-mockmvc tes.. 2021. 1. 26.
Spring REST API - HATEOAS Spring REST API - HATEOAS HATEOAS 란 Hypermeida As The Engine Of Applicaton State 의 약자로, REST API 의 개념을 충족시키는 조건 중 하나이다. 서버는 리소스를 보낼 때 리소스와 연관된 링크 정보를 담아 클라이언트에게 제공해야하며, 클라이언트는 링크 정보를 바탕으로 리소스에 접근해야한다는 원칙이다. 연관된 링크 정보는 { relation : href } 쌍으로 묶어서 _links 안에 넣어주면 된다. 예를 들면 아래와 같다. self 는 자기 자신에 대한 href 정보를 제공한다. 그 외에 query-events 라는 relation 에는 해당 리소스 정보를 담고 있는 href 를 담아주면 된다. { ..., "_links":{ "se.. 2021. 1. 24.
Spring REST API - 테스트코드 파라미터사용 Spring REST API - 테스트코드 파라미터 리팩토링 JUnitParam 을 사용해서 테스트 코드에서 매개변수만 바꾸어 중복된 코드를 제거한다. 아래와 같이 3개의 테스트를 실행하는데, 값만 바꾸어 가면서 테스트하려한다. 하지만, 반복되는 코드가 길게 있으니 보기에 좋지 않다. JUnitParams 로 아래 코드를 리팩토링해보자. @Test public void testFree(int basePrice, int maxPrice, boolean isFree) { //------------------------------------------------ // Given Event event = Event.builder() .basePrice(0) .maxPrice(0) .build(); // When.. 2021. 1. 23.
Spring REST API - BadRequest Spring REST API - Bad Request 빈 입력값 처리 JSR 303 라이브러리에 있는 Bean Validation 을 사용할 수 있다. pom.xml org.springframework.boot spring-boot-starter-validation 각 필드마다 필드의 속성들을 어노테이션으로 달아준다. @Builder @AllArgsConstructor @NoArgsConstructor @Data public class EventDto { @NotEmpty private String name; @NotEmpty private String description; @NotNull private LocalDateTime beginEnrollmentDateTime; @NotNull private.. 2021. 1. 23.
Spring - AOP(관점지향 프로그래밍) Aspect-oriented Programming, 관점지향 프로그래밍 흩어진 관심사(Crosscutting concerns) 를 유기적으로 연결되도록 프로그래밍하는 것이다. 코드면에서는 중복된 코드가 제거되어 효율적이고, 비즈니스적으로는 관련된 업무가 연결되어 쉽게 통제가 가능할 것이다. 여러 프로그래밍언어에서 AOP 구현체(implementation)가 있는데 java에서는 AspectJ 가 널리 쓰인다. 스프링에서는 스프링 AOP를 사용한다. 스프링 AOP는 AspectJ 보다 제한적인 기능을 제공한다. 개념, 용어 Aspect : 기존 클래스들의 유기적 관계를 재정리할 새로운 관점 클래스들을 말한다. 한 관점은 하나의 모듈이 되는데 이 안에 advice와 pointcut 이 포함된다. Advice.. 2021. 1. 13.
Spring - spEL(스프링 Expression Language) Spring - spEL, 스프링 표현어 스프링 EL(Expression Language) 란 객체 그래프를 조회하고 조작하는 기능을 제공하는 언어를 말한다. spEL은 모든 스프링 프로젝트에서 사용하는 expression language로 만들었다. 문법이나 규칙은 배우기가 쉽다. #{"표현식"} ${"프로퍼티"} 이런식으로 특정 객체를 가져와서 문자열처럼 사용할 수 있고, 계산도 할 수 있다. 표현식은 프로퍼티를 포함할 수 있지만, 반대로는 불가능하다. 가령 #{blue.data} + 1 은 가능하다. 어디에 사용되는가 @Value 애노테이션 안에 spEL을 쓰면, 아래 필드값에 결과가 주입된다. @ConditionalOnExpression 어노테이션에서도 사용된다. 스프링 시큐리티의 경우 메소드 시.. 2021. 1. 13.
Spring - 데이터 바인딩 데이터 바인딩 데이터 바인딩이란 서로 다른 타입의 데이터를 함께 묶어 동기화하는 기법이다. 이 글에서는 서로 다른 유형의 데이터를 넣었을 때 알아서 원하는 유형으로 연결 시켜주는 것이라고 생각하자. 예를들면 Object 형에서 String 형으로 말이다. 스프링에서 데이터 바인딩을 하는 방법은 다양하다. PropertyEditor, Converter, Formatter 3가지 모두 사용가능하지만, 포매터를 추천한다. PropertyEditor DataBinder 인터페이스 xml 설정 값을 빈으로 넣을 때도 사용되고, spEL 에서도 사용된다. 프로퍼티 값을 타겟 객체에 설정하는 기능을 제공하고, 사용자 입장에서는 사용자 입력값을 애플리케이션 도메인 모델에 동적으로 변환하여 넣어주는 기능을 제공한다. 입.. 2021. 1. 13.
Spring - Validation Validation 추상화 org.springframework.validation.Validator 주로 spring MVC 에서 사용하지만, 웹 MVC 전용은 아니다. 애플리케이션에서 사용하는 객체 검증을 위한 일반적 인터페이스이다. 예제를 만들기 위해 이벤트를 하나 생성한다. @Getter @Setter public class RedEvent { Integer id; String title; } (lombok 을 사용하여 자동 게터, 세터를 생성한다고 하자) 이제 위 이벤트를 가지고 Validator 를 구현해보자. Validator를 사용하려면 두 가지 메소드를 구현해야 한다. supports, validate public class RedEventValidator implements Validat.. 2021. 1. 12.
Spring - ResourceLoader ApplicationContext 은 여러가지 클래스를 상속받는다. 그 중 ResourceLoader 를 알아보자. 리소스를 읽어오는 기능을 제공한다. ResourceLoader Resourceloader 를 통해 resources 폴더 안의 리소스들을 읽을 수 있다. classpath 는 기본적으로 target/classes 로 되어있다. import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.io.Res.. 2021. 1. 12.
728x90