본문 바로가기

Development/Spring

(10)
[Spring]Validation과 BindingResults을 통한 유효성 검사 Validation이란? Validation은 프로그래밍에 있어서 가장 필요한 부분으로 특히 java에서는 null 값에 대해서는 Null Pointer Exception이 발생하므로 유효성을 사전에 미리 검사하는 것이 Validation이다. Validation의 주의사항 검증해야 할 값이 많아질 경우 코드가 길어진다. 구현의 따라서 달라질 수 있지만 서비스 로직과 분리가 필요할 수도 있다. 흩어져 있는 경우 어디에서 검증을 하는지 알기가 어려우며, 재사용의 한계가 있다. 검증 로직이 변경되는 경우 참조하는 클래스에서 로직이 변경이 필요한 경우도 있다. 유효성 검사에 사용되는 어노테이션 목록 @Null // null만 혀용합니다. @NotNull // null을 허용하지 않습니다. "", " "는 허용..
[Spring]@RequestParam, @RequestBody, @ModelAttribute의 정의와 차이 종종 HTTP를 이용해 파라미터를 서버로 전송할 때 값이 바인딩이 되지 않는 오류를 경험한 적이 있었다. 이러한 경우 파라미터가 올바른 방법으로 바인딩이 되지 않았기 때문에 발생한 경우가 다수였다. 클라이언트가 HTTP를 이용해 파라미터를 서버로 전송했을 때 스프링에서는 클라이언트로부터 받은 파라미터를 객체로 바인딩하는 역할을 하는 어노테이션에는 @RequestParam, @RequestBody, @ModelAttribute 3가지의 어노테이션이 있다. 이번에는 이 3가지의 어노테이션에 대해서 알아보도록 하자 @RequestParam @RequestParam 어노테이션은 클라이언트가 1개 혹은 여러 개의 HTTP 요청 파라미터를 보냈을 때 보낸 파라미터를 하나씩 받을 때 사용된다. 즉 파라미터를 클라이언..
[Spring]MVC 패턴의 정의와 특징 MVC 패턴이란? MVC는 디자인 패턴 중 하나로 Model, View, Controller의 앞글자들을 딴 약자로 애플리케이션을 세 가지 역할로 구분한 개발 방법론이다. 위의 두 개의 MVC 동작 이미지에서 알 수 있듯이 클라이언트가 요청을 하게 되면 Controller는 작성된 서비스 로직을 바탕으로 Model을 통해 데이터를 가져오고 해당 데이터들을 View를 이용해 클라이언트에게 인터페이스적 요소를 제공한다. 이렇게 MVC 패턴을 통해 비즈니스 로직과 UI분리하여 유지보수를 독립적으로 수행하며 Model과 View가 다른 컴포넌트에 종속되지 않기 때문에 애플리케이션의 확장성과 유연성에 있어서 유리해지게 된다. Model Model은 데이터를 가진 객체로 애플리케이션이 포함해야 할 데이터가 무엇인지..
[Spring] 빈 스코프 빈 스코프란? 빈 스코프는 빈이 생성되어 관리되는 범위의 뜻으로 스프링 빈은 싱글톤, 프로토타입, 웹 관련 스코프(request, session, application)와 같은 다양한 스코프를 지원하며 각각의 특징은 아래와 같다. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 스코프이다. 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 웹 관련 스코프 request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프이다. session : 웹 세션이 생성되고 종료될 때까지 유지되는 스코프이다. application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프이다. 싱글톤의 경우에는 이전에..
[Spring] 빈 생명주기 콜백 빈 생명주기 콜백 시작 애플리케이션 시작 시점에 필요한 연결을 미리 해두고 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화와 종료 작업이 필요하다. 스프링을 통해서 이러한 초기화와 종료 작업이 어떻게 진행되는지를 알아보자 public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect(); call("초기화 연결 메시지"); } public void setUrl(String url) { this.url = url; } // 서비스 시작 시 호출 public void connect() { System.out.print..
[Spring] 의존관계 자동 주입 다양한 의존관계 주입 방법 의존관계 주입에는 크게 4가지 방법이 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 1. 생성자 주입 생성자를 통해서 의존관계를 주입받는 방법이다. 특징 생성자 호출 시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용 생성자가 딱 1개만 있으면@Autowired를 생략해도 자동 주입된다. 물론 스프링 빈에만 해당한다. 2. 수정자 주입(setter 주입) setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법이다. 특징 선택, 변경 가능성이 있는 의존관계에 사용 자바 빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 방법이다. 3. 필드 주입 필드에 바로 주입하는 방법이다. 특징 외부에서 ..
[Spring] @Component와 컴포넌트 스캔 컴포넌트 스캔과 자동 주입 설정 앞선 글에서는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했으나, 이렇게 할 경우 등록해야 할 스프링 빈이 수십~수백 개가 될 경우 설정 정보도 커지고 누락하는 문제가 발생할 수가 있다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 또한 의존관계도 자동으로 주입하는 @Autowired 기능도 제공한다. 이제부터 AutoAppConfig.java 파일을 생성하는 것부터 해서 코드로 컴포넌트 스캔과 의존관계 자동 주입을 알아보자 @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type = Filt..
[Spring] 스프링 컨테이너에 등록된 스프링 빈 조회 지난 글에서 스프링 컨테이너와 빈이 설정되는 것과 관련하여 살펴보았다. 이번 글에서 지난번에 설명한 스프링 컨테이너와 그리고 스프링 컨테이너에 등록된 스프링 빈을 조회하는 여러 가지 방법에 대해 살펴보려고 한다. 그러면 컨테이너에 등록된 모든 빈을 조회하는 것부터 해서 코드와 함께 하나하나 살펴보도록 하자 컨테이너에 등록된 모든 빈 조회 AppConfig.java @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { retur..