본문 바로가기

분류 전체보기

(101)
Null-safety Null 관련 어노테이션을 작성해보겠습니다. @NonNull @Nullable @NonNullApi @NonNullFields 이렇게 input 에 null 이 들어오지 않도록 , return 도 null 이 되지 않도록 설정할 수 있습니다. AppRunner에 null 을 입력해보니 compile error 가 뜨지 않습니다.. 이럴경우 STS 에서 추가 설정을 해주어야 합니다.
AOP `Aspect Oriented Programming 의 개념과 주요 용어 포인트컷 문법 @Aspect 어노테이션 객체지향 기본원칙을 적용해서 핵심기능과 부가기능을 분리해서 모듈화하는 것은 매우 어렵습니다. 스프링AOP는 OOP를 보완하는 수단으로 흩어진 Aspect를 모듈화할 수 있는 기법입니다. 핵심기능과 부가기능 업무 로직을 포함하는 기능을 핵심기능(core concerns) 핵심 기능을 도와주는 부가적인 기능(로깅, 보안 등) --> 부가기능(cross-cutting concerns) 핵심 기능에서 부가기능을 분리해서 모듈화하는 프로그래밍 기법이 AOP 입니다. Aspect는 Crosscutting Concerns 를 모듈화한 것을 의미합니다. 모듈안에는 advice (해야할 일들), Join po..
SpEL Spring Expression Language 객체 그래프를 조회하고 조작하는 기능을 제공합니다. Value 어노테이션의 값 안에 #을 붙이면 표현식으로 인식됩니다. Property 를 참고하는 방법은 $ 을 붙이면 됩니다. 표현식에서는 property 를 사용할 수 있지만 property 안에서는 표현식을 사용할 수 없습니다. ExpressionParser 를 이해하면 SpEL 를 이해할 수 있습니다.
Data binding 사용자가 입력한 값을 어플리케이션 도메인에 맞게 동적으로 변환하여 넣어주는 기능을 "Data binding" 이라고 합니다. 즉, 사용자가 입력한 "문자열"을 객체의 int, boolean, date 등의 도메인으로 변환하는 것입니다. 먼저 get 요청으로 오는 event 를 Event 객체로 받아서 그 아이디를 return 하는 메소드를 아래와 같이 구현하였습니다. Test 를 위해 Test 클래스를 작성하겠습니다. @WebMvcTest 는 계층형 테스트와 관련있습니다. 웹과 관련된 Bean만 등록해줍니다. get 요청으로 보내진 1 이라는 숫자는 아직 Event 객체로 매핑될 수 없기 때문에 테스트 수행시 에러가 발생할 것입니다. **** 이때 혹시 "no test found with test run..
Validation 스프링 어플리케이션에서 사용하는 검증을 위한 인터페이스입니다. NotEmpty, NotNull, Email등 Bean을 검증하는 기능입니다. 그럼 Event 클래스와 해당 클래스의 에러를 처리하는 Validator 클래스를 만들어보겠습니다. Validator 를 구현한 클래스는 2가지 메소드를 오버라이드해줘야합니다. 이렇게 Validator를 구현하여 사용할 수 있습니다. 하지만, Spring 에서는 LocalValidatorFactoryBean을 자동으로 등록해줍니다. 수행하는 방법은 @NotEmpty, @Min, @Email 등의 어노테이션을 붙여주는 것입니다. 아래 Event 클래스를 봐주세요 이렇게 어노테이션을 붙여둔 후에 Validator를 이용하여 확인해보면 (limit은 0이최소값인데 -1 ..
Resource 스프링에서는 Resource 를 추상화하였습니다. 즉, java.net.URL 을 추상화했습니다. 이렇게 추상화를 한 이유는 java.net.URL이 기존에는 classpath를 기준으로 resource 를 가져오는 기능이 없었습니다. 이전 포스팅에서 설명한 ReourceLoader 를 이용해서 resource 를 가져와야했습니다. 이런 방법을 통일시켰습니다. ApplicationContext를 생성할때 ClassPathXmlApplicationContext() 의 parameter가 내부적으로 resource 로 추상화됩니다. 내부에서는 resource 가 사용되고 있습니다. classpath 기준으로 parameter의 파일을 찾는 것입니다. 그 외에도 FileSystemXmlApplicationCo..
MessageSource ApplicationContext 가 상속받고 있는 인터페이스인 MessageSource 는 국제화 기능과 관련된 기능입니다. 즉, 메시지를 다국화하는 기능을 가지고 있습니다. MessageSource 에 있는 getMessage 메소드를 이용하기 위해서 resource 하단에 아래와 같은 파일을 추가해줍니다. 이 파일들은 MessageSource 가 읽어냅니다. 이렇게 getMessage 에 첫번째 파라미터로 입력한 첫번째 값을 두고 뒤에 필요한 부분을 배치하면 됩니다.
Docker 시작하기 도커와 컨테이너는 많이 들어봤습니다. 이번 포스팅에서는 도커, 컨테이너에 대해 본격적으로 작성하기에 앞서 간단한 안내글을 작성하도록 하겠습니다. 왜 필요한가 이에 대한 답을 찾기 위해 VM과 Docker Container의 비교를 비교해보겠습니다 VMWare 나 VBox를 사용하여 가상화를 하게 되면 Host OS 위에 Hypervisor (HW)가 들어가고 그 위에 다시 OS가 올라가는 형태입니다. 반면 도커에서는 Docker Engine 에서 컨테이너를 생성하게 됩니다. Linux의 기술인 '컨트롤 그룹' , '리눅스 네임스페이스' 기술을 사용하여 가상화 기능을 지원하고 있습니다. VM의 수가 늘어나는 경우 VM을 사용하는 것 보다 Docker Container를 사용하는 것이 비교적 더 빠르고 안정..