반응형

개발/Spring 72

[Spring] 프리젠테이션 계층, 서비스 계층, 데이터 액세스 계층, 도메인 모델 클래스

프리젠테이션 계층 - 브라우저상의 웹 클라이언트의 요청 및 응답을 처리- 상위계층(서비스 계층, 데이터 액세스 계층)에서 발생하는 Exception에 대한 처리- 최종 UI에서 표현해야 할 도메인 모델을 사용- 최종 UI에서 입력한 데이터에 대한 유효성 검증 기능을 제공- 비즈니스 로직과 최종 UI를 분리하기 위한 컨트롤러 기능을 제공- @Controller 어노테이션을 사용하여 작성된 Controller 클래스가 이 계층에 속함 서비스 계층 - 애플리케이션 비즈니스 로직 처리와 비즈니스와 관련된 도메인 모델의 적합성 검증- 트랜잭션 처리- 프리젠테이션 계층과 데이터 액세스 계층 사이를 연결하는 역할로서 두 계층이 직접적으로 통신하지 않게 애플리케이션의 유연성을 증가- 다른 계층들과 통신하기 위한 인터페..

개발/Spring 2017.08.21

[Spring] Bean 등록 Annotation

Bean 등록 Annotation @Component 컴포넌트를 나타내는 일반적인 스테레오 타입으로 태그와 동일한 역할을 한다. @Repository Persistence 레이어, 영속성을 가지는 속성(파일, 데이터베이스)을 가진 클래스 @Service 서비스 레이어, 비즈니스 로직을 가진 클래스 @Controller 프리젠테이션 레이어, 웹 어플리케이션에서 웹 요청과 응답을 처리하는 클래스 Bean 의존관계 주입 Annotation @Autowired, @Resource 어노테이션은 의존하는 객체를 자동으로 주입해 주는 어노테이션이다. @Autowired - 정밀한 의존관계 주입 (Dependency Injection)이 필요한 경우에 유용하다.- @Autowired는 프로퍼티, setter 메소드, ..

개발/Spring 2017.08.21

[Spring] Ioc컨테이너와 DI(Dependency Injection) - 3

Spring DI 컨테이너의 개념 Spring DI 컨테이너가 관리하는 객체를 빈(bean)이라고 하고, 이 빈들을 관리한다는 의미로 컨에이너를 빈 팩토리라고 부른다. - 객체의 생성과 객체 사이의 런타임 관계를 DI 관점에서 볼 때는 컨테이너를 BeanFactory 라고 한다. - Bean Factory에 여러가지 컨테이너 기능을 추가하여 ApplicationContext 라고 부른다. BeanFactory - Bean을 등록, 생성, 조회, 반환 관리함- 보통은 BeanFactory를 바로 사용하지 않고, 이를 확장한 ApplicationContext를 사용함- getBean() 메소드가 정의되어 있음 ApplicationContext - Bean을 등록, 생성, 조회, 반환 관리하는 기능은 Bean..

개발/Spring 2017.08.18

[Spring] Ioc컨테이너와 DI(Dependency Injection) - 2

DI 의 개념각 클래스간의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 말함 - 개발자들은 단지 빈 설정파일에서 의존관계가 필요하다는 정보를 추가하면 된다. (xml, annotation)- 객체 레퍼런스를 컨테이너로부터 주입 받아서, 실행 시에 동적으로 의존관계가 생성된다.- 컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입해 주는 것이다. DI 의 장점- 코드가 단순해진다.- 컴포넌트 간의 결합도가 제거된다. DI의 유형으로 3가지가 있다.1. Setter Injection2. Constructor Injection3. Method Injection Setter Injection : Setter 메소드를 이용한 의존성 삽입- 의존성을 입력 받는 setter ..

개발/Spring 2017.08.18

[Spring] Ioc 컨테이너와 DI (Dependency Injection) - 1

IoC (제어권의 역전) :객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의마한다. 컴포넌트 의존관계 결정 (component dependency resolution), 설정(configuration) 및 생명주기 (lifecycle)를 해결하기 위한 디자인 패턴 (Design Pattern) IoC가 아닌 경우에는 개발자가 객체를 신규 생성한다고 볼 수 있지만, IoC인 경우에는 프레임워크 컨테이너가 객체를 생성해 개발자의 코드에 주입시켜준다고 볼 수 있다. 이것이 바로 제어권의 역전인 Inversion of Control 이다. IoC 컨테이너 :스프링 프레임워크도 객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공하고 있음. 즉, IoC 컨테이너 기능을 제공한..

개발/Spring 2017.08.18

[Spring] Bean 에 대한 어노테이션과 XML

좀 많이 옛날에 출판한 토비의 스프링이라서 틀릴 수도 있는데 알아놓아도 좋을 것 같다. 자바 코드 설정 정보 XML 설정 정보 Bean 설정파일 @Configuration Bean 의 이름 @Bean methodName() Bean 의 이름 : @Bean 메소드 이름이 Bean 의 이름이다. 이 이름은 getBean() 에서 사용된다. Bean 의 클래스 : Bean object를 어떤 클래스를 이용해서 만들지를 정의한다. Bean 의 의존 오브젝트 : Bean 의 생성자나 수정자 메소드를 통해 의존 오브젝트를 넣어준다. 의존 오브젝트도 하나의 Bean 이므로 이름이 있을 것이고, 그 이름에 해당하는 메소드를 호출해서 의존 오브젝트를 가져온다. 의존 오브젝트는 하나 이상일 수도 있다. 예를 들면 아래와 ..

개발/Spring 2017.08.16

[Spring] 템플릿 메소드 패턴과 팩토리 메소드 패턴

학교에서 빌린 토비의 스프링 책을 이제는 더 이상 볼 수 없기에 책을 못 보던 중 회사에 엄청 옛날에 나온 토비 책이 있어서 보는데 템플릿 메소드 패턴과 팩토리 메소드 패턴이 헷갈렸다. 그래서 검색해보았는데 다들 어렵게 설명하고 해서 조금 이해하기 힘들어서 정리해보려고 한다. 설명이 정확하지 않을 확률이 좀 더 높다. ■ 템플릿 메소드 패턴 간단하게 템플릿 메소드 패턴에 대해 이야기 하자면 다음과 같다.슈퍼 클래스에 기본적인 로직의 흐름을 만들고, 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 protected 메소드 등으로 만든 뒤 서브 클래스에서 이런 메소드를 필요에 맞게 구현해 사용하도록 하는 방법 좀 더 쉽게 말하면 다음과 같다.슈퍼 클래스에 기본적인 메소드가 정의되어 있고 세부적인 메소드는..

개발/Spring 2017.08.16

[Spring] Spring mybatis 연동하기

스프링 프로젝트를 생성했다고 가정하여 작성하겠다. 그리고 필자는 MySQL 를 사용했고 DB를 생성해주자. 스프링 프로젝트를 생성하면 다음과 같은 구조로 생성이 돼 있을 것이다. [사진 1: 스프링 프로젝트 구조] mybatis 를 사용하기 위해 maven dependency 를 추가해주어야 한다. pom.xml 에 다음에 내용을 추가해주자. [사진 2: maven dependency 추가 (pom.xml)] maven build 를 해준 뒤 [WEB-INF/spring/root-context.xml] 파일로 이동한다. 이제 root-context.xml 파일에 mysql 접속정보와 sqlSession, sqlSession 을 관리하는 sqlSessionFactory, 트랜잭션을 관리하는 transact..

개발/Spring 2017.08.16

[Spring] juso.go.kr 의 도로명 API 사용하기

우선 API 를 사용하기 위한 샤이니 키를 발급 받았다고 가정하고 이야기하겠다. 필자는 ModelAndView 객체를 반환하여 jsp 파일에 전달하려고 한다. String searchText = request.getParameter("key값"); String currentPage = "이 값은 0보다 커야한다"; String countPerPage = "총 얼마나 리스트로 보여줄지 정하는 값"; String apiUri = "http://www.juso.go.kr/addrlink/addrLinkApi.do?currentPage="+currentPage+"&countPerPage="+countPerPage+ "&keyword="+URLEncoder.encode(searchText,"UTF-8")+"&co..

개발/Spring 2017.08.14

[Spring] DAO 개선하기 - 3

이제 상속을 통한 DAO 확장을 해보자. UserDao 소스코드를 N사와 D 사에 변경해서 제공해주지 않고도 고객 스스로 원하는 DB 커넥션 생성 방식을 적용하도록 해보도록 하겠다. 그 방법으로 UserDao 에서 getConnection() 메소드를 추상 메소드로 만들면 된다. 그렇다면 N사와 D사에서는 getConnection() 메소드를 자신들이 원하는 방법으로 구현을 한다면 다른 기존의 코드를 변경하지 않고 해당 메소드만 구현하면서 사용할 수 있을 것이다. /* 상속을 통한 확장 방법이 제공되는 UserDao 클래스 */ public abstract class UserDao { public void add(User user) throws ClassNotFoundException, SQLExcept..

개발/Spring 2017.07.08
반응형