Spring/Spring 입문 - 개념 및 핵심 새로비 2022. 1. 9. 22:16
| 스프링 AOP ( Aspect Oriented Programming ) AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 예로들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다. 또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다. AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. ..
더 읽기
Spring/Spring 입문 - 개념 및 핵심 새로비 2018. 12. 19. 21:52
| 스프링 Expression Language : SpEL SpEL은 Spring Expression Language의 줄임말로 스프링의 객체들의 정보를 질의하거나 조작하여 어떤 값을 표현할 수 있는 강력한 표현 언어다. 객체들의 정보는 레퍼런스로 연관되어 있는 객체 그래프를 탐색하여 얻어지므로 런타임 때 SpEL의 표현식 값이 결정(Resolve)된다. 참고로 객체 그래프는 런타임 때 객체 간의 연관 관계를 통해 그려지는 그래프를 의미하는 말이다. | SpEL의 내부 구성 SpEL은 내부적으로 ExpressionParser 객체를 통해 SpEL의 표현식을 파싱하며 StandardEvaluationContext 객체를 통해 스프링 빈이 가지고 있는 객체 정보를 구한다. 이 두 정보를 가지고 표현식 객체와..
Spring/Spring 입문 - 개념 및 핵심 새로비 2018. 12. 19. 05:31
| Converter와 Formatter PropertyEditor는 스프링 초창기에 썼던 데이터 바인딩 인터페이스였지만 후에 이를 대체할 Converter와 Formatter란 데이터 바인딩 인터페이스가 나오게 되었다. Converter는 S타입을 T 타입으로 변환할 수 있는 일반적인 변환기이며 Thread-safe하다. Formatter는 Object와 String간의 변환을 담당하며 문자열을 Locale에 따라 다국화하는 기능을 제공한다. 웹 어플리케이션을 제작할 때는 주로 Formatter를 사용한다. | Converter 구현 Converter는 제네릭으로 두 개의 인자, Source와 Target을 받아서 구현한다. 또한 Converter는 PropertyEditor와는 다르게 Thread-s..
Spring/Spring 입문 - 개념 및 핵심 새로비 2018. 12. 17. 23:53
| 스프링 데이터 바인딩( Spring Data Binding ) 스프링에서는 사용자가 입력한 값을 타겟 객체에 설정하는 데이터 바인딩 기능을 지원한다. org.springframework.validation.DataBinder 인터페이스를 통해서 데이터 바인딩 기능을 지원하며 사용자가 입력한 값을 도메인 모델에 동적으로 변환해서 넣어준다. 이 기능이 필요한 이유는 다음과 같은 이유에서다. 사용자의 입력값은 대부분 문자열이지만 자바의 객체가 가지고 있는 데이터 타입은 int, long, Data, Double 혹은 사용자가 작성한 클래스로 만들어진 객체 Event, Book 같은 것이다. 따라서 사용자의 이런 문자열 입력값을 자바의 데이터 타입으로 변환해서 넣어줘야하는 데, 이때 적절하게 데이터를 넣어주..
Spring/Spring 입문 - 개념 및 핵심 새로비 2018. 12. 16. 23:53
| 스프링 Validation 추상화 스프링에서는 Validator 인터페이스를 지원하여 어플리케이션에서 사용하는 객체를 검증할 수 있는 기능을 제공한다. 이 Validator 인터페이스는 어떤 특정 계층에 사용하는 기능이 아닌 모든 계층에서 사용할 수 있다. Validator는 Java EE Spec인 Bean Validation의 어노테이션을 이용하여 객체가 제대로 요구사항에 맞추어 생성 됬는지 검증할 수 있다. | Validator 인터페이스 Validator 인터페이스를 상속한 클래스는 두 메서드를 구현해야 한다. boolean supports(Class clazz) : 어떤 타입의 객체를 검증할 때 이 객체의 클래스가 이 Validator가 검증할 수 있는 클래스인 지를 판단하는 매서드void ..
Spring/Spring 입문 - 개념 및 핵심 새로비 2018. 12. 14. 21:13
| 스프링 Resource 추상화 스프링의 Resource 객체는 java.net.URL을 추상화한 인터페이스다. Resource 객체는 스프링 내부에서 가장 많이 사용하는 인터페이스이며 스프링 IoC 컨테이너가 생성될 때, 컨테이너 설정 정보를 담는 파일들을 가져올 때도 사용된다. 리소스를 읽어오는 기능을 Resource 인터페이스를 통해 추상화한 이유는 다음과 같다. 1. 클래스 패스 기준으로 리소스 읽어오는 기능 부재2. ServletContext를 기준으로 상대 경로로 읽어오는 기능 부재3. 새로운 핸들러를 만들어 사용할 수 있지만 기능이 복잡하고 편리하지 않다. | Resource 인터페이스 구현체 Resource 인터페이스를 구현한 구현체들의 목록은 다음과 같다. 1. UrlResource :..
Spring/Spring 입문 - 개념 및 핵심 새로비 2018. 12. 13. 12:50
| 스프링 ResourceLoader ResourceLoader는 리소스를 읽어오는 기능을 제공하는 인터페이스다. ApplicationContext 인터페이스는 이 ResourceLoader 인터페이스를 상속받은 상태이므로 ApplicationContext를 통해서도 ResourceLoader가 제공하는 메서드를 사용하는 것이 가능하다.@Component public class AppRunner implements ApplicationRunner { @Autowired ResourceLoader resourceLoader; @Override public void run(ApplicationArguments args) throws Exception { Resource resource = resourceLo..
Spring/Spring 입문 - 개념 및 핵심 새로비 2018. 12. 13. 11:45
| 스프링 ApplicationEventPublisher 스프링 ApplicationEventPublisher는 스프링에서 이벤트 프로그래밍에 필요한 인터페이스를 제공한다. ApplicationContext 인터페이스에 이미 상속되어있어서 ApplicationContext의 구현체에서도 접근이 가능하다.@Component public class AppRunner implements ApplicationRunner { @Autowired ApplicationContext applicationContext; // ApplicationEventPublisher를 사용해도 된다. @Override public void run(ApplicationArguments args) throws Exception { ap..
Spring/Spring 입문 - 개념 및 핵심 새로비 2018. 12. 12. 21:38
| 스프링 메세지소스(Spring MessageSource) 스프링 메세지 소스(Spring MeesageSource)는 국제화(i18n)을 제공하는 인터페이스다. 메세지 설정 파일을 모아놓고 각 국가마다 로컬라이징을 함으로서 쉽게 각 지역에 맞춘 메세지를 제공할 수 있다. | 메세지 설정 파일 셋업하기 메세지 설정 파일을 셋업하기 위해서는 .properties 확장자가 붙은 프로퍼티 파일에 [파일이름]_[언어]_[국가].properties 형식으로 메세지 파일을 추가해야 한다. 다음은 그 예시다. message.properties : 기본 메시지. 시스템의 언어 및 지역에 맞는 프로퍼티 파일이 존재하지 않을 경우에 사용. message_en.properties : 영어 메시지. message_ko.pr..
Spring/Spring 입문 - 개념 및 핵심 새로비 2018. 12. 12. 00:11
| 스프링 프로퍼티(Spring Property)를 통한 환경 설정 스프링에서는 프로퍼티를 통해 다양한 방법으로 설정값을 정의할 수 있다. 이 설정값은 Environment 객체를 통해 가져올 수 있으며, 가져올 수 있는 값은 프로퍼티 소스 설정 및 프로퍼티 값이다. 프로퍼티에는 우선순위가 있으므로 같은 이름의 프로퍼티가 있을 경우 가장 우선순위가 높은 프로터티 설정값으로 사용하게 된다. 다음은 프로퍼티 우선순위에 대한 내용이다. (위에서 아래로 우선순위가 낮아짐) 1. ServletConfig 매개변수2. ServletContext 매개변수3. JNDI (java:comp/env/)4. JVM 시스템 프로퍼티 (-Dkey="value")5. JVM 시스템 환경 변수6. 사용자 프로퍼티 설정파일 | JV..
Spring/Spring 입문 - 개념 및 핵심 새로비 2018. 12. 11. 23:23
| 스프링 환경설정(Spring Environment Configuration) 스프링에서는 프로필(Profile)을 통해 런타임 환경을 설정할 수 있는 기능을 제공한다. 이 기능을 이용하여 테스트환경에서 여러 테스트를 돌리고 난 다음 프로덕션 환경으로 전환하는 것을 어렵지 않게 할 수 있다. 스프링이 동작할 때 해당 환경(프로필)이 어떤 것인지를 알기 위해서는 ApplicationContext 인터페이스의 구현 객체에서 getEnvironment 매서드를 통해 Environment 객체를 뽑아낸 뒤 확인이 가능하다.@Component public class AppRunner implements ApplicationRunner { @Autowired ApplicationContext ctx; @Autow..
Spring/Spring 입문 - 개념 및 핵심 새로비 2018. 12. 9. 23:55
| 스프링 빈 스코프 설정 (Spring Bean Scope Configuration) 스프링 빈(Spring Bean)은 생존주기를 가지고 있으며 또한 스프링 컨테이너에서 관리하는 스프링 빈이 어떤 범위로 관리될 것인지를 설정할 수 있다. 관리 형태는 싱글턴 스코프 혹은 프로토타입 스코프 둘 중 하나다. 대부분의 경우 싱글턴 형태로 빈을 관리하게 되지만 Request, Session, WebSocket 같은 하나하나의 객체를 생성해야만 할 때는 프로토타입 스코프를 쓴다. 어노테이션을 통해서 스프링 빈의 범위를 설정하는 방법은 다음과 같다. @Component @Scope("singleton") public class Single { }@Component @Scope("prototype") public ..
Spring/Spring 입문 - 개념 및 핵심 새로비 2018. 12. 8. 13:52
| 스프링 리다이렉트(Spring Redirect) 리다이렉트(Redirect)는 사용자가 웹 서버의 자원을 요청했을 때 현재 URL 자원(HTML이나 Img 등)을 반환하는 것이 아닌 다른 자원을 받도록 다른 URL로 유도하는 것을 말한다. 아래는 /removeForm 으로 들어온 사용자 요청으로 사용자 정보를 삭제하는 일을 하는 컨트롤러 메서드다. 만약 정상적인 경로(회원인증이 된 후의 사이트)로 /removeForm이 들어올 경우 해당 코드를 실행하면 되지만 그렇지 않을 경우(회원 인증도 안 된 상태)에는 이 코드를 실행하지 않거나 다른 곳으로 리다이렉트해야한다 . 이 때, ModelAndView 객체에 setViewName에 리다이렉트 URL을 넣어 해당 URL로 사용자 페이지가 유도되도록 할 수..
Spring/Spring 입문 - 개념 및 핵심 새로비 2018. 12. 7. 23:55
| 세션과 쿠키(Session, Cookie) 웹 서비스는 HTTP 프로토콜을 기반으로 사용자와 통신한다. HTTP 프로토콜은 클라이언트와 서버와의 관계를 유지하지 않는 특징인 Stateless 기반인 프로토콜이다. 따라서 만약 쇼핑몰같은 웹서비스를 이용할 때 만약 HTTP 프로토콜만으로 통신한다면 페이지를 이동할 때마다 계속해서 서버와 연결해야하는 불편함이 생긴다. 또한 사용자의 요청마다 서버와 매번 새로운 연결이 생기기 때문에 로그인 상태유지, 장바구니 등의 기능을 구현하는 것이 매우 까다로워진다. 이런 Stateless 상태를 해결하는 두 가지 방식이 있는데 세션(Session)과 쿠키(Cookie)다. 두 방식 모두 사용자와 서버의 연결 상태를 유지해주는 방법으로, 세션은 서버에서 연결 정보를 관..
Spring/Spring 입문 - 개념 및 핵심 새로비 2018. 12. 6. 00:21
| @ModelAttribute @ModelAttribute는 스프링에서 JSP파일에 반환되는 Model 객체에 속성값을 주입하거나 바인딩할 때 사용되는 어노테이션이다. 컨트롤러(Controller) 객체에서 2가지 방법으로 사용된다. @ModelAttribute("serverTime") public String getServerTime(Locale locale) { Date date = new Date(); DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); return dateFormat.format(date); }먼저 메서드에 @ModelAttribute를 붙이는 경우다. 이 ..