반응형

 

 

 

1. Data Mappers

: 객체와 데이터베이스 사이에 데이터를 이동시킴

- 객체와 데이터베이스가 서로 독립적으로 유지되고 mapper에 대해서도 독립적임

 

 

2. pom.xml 설정

- 사용할 DBMS의 JDBC driver는 별도 설치 필요

 

 

 

3. MyBatis workflow

 

 

4. Mapper XML 예

 

 

 

 

 

 

 

 

 

5. MyBatis - spring 연동

- pom.xml

 

 

1) SqlSessionFactoryBean

2) SqlSessionTemplate

3) MapperScannerConfigurer

 

 

 

 

반응형

'Programming > Spring' 카테고리의 다른 글

10. Spring 기반 RESTful service  (0) 2021.06.07
09. Spring JDBC  (0) 2021.06.01
07. Thymeleaf  (0) 2021.05.31
06. Spring Boot  (0) 2021.05.27
05. Spring MVC  (0) 2021.04.18
반응형

 

 

 

1. Thymeleaf란?

: server-side java template engine

- JSP를 대체하는 템플릿 언어 및 엔진

- 모든 기능을 HTML element 의 속성으로 표현

 

 

2. JSP와 Thymeleaf 비교

 

 

3. Spring MVC Framework와의 연동

- Spring view resolution 방식에 따라 타임리프 템플릿을 뷰로 이용 가능하다.

- Form backing beans

- MessageSource 객체를 통해 Spring에서 관리되는 message file들에서 메시지 검색 및 출력

- SpEL 사용 가능

 

 

4. dependency 설정 (in Spring-Boot)

- auto-configuration

: 명시적인 bean 설정 필요없음

- Template file 기본 위치: src/main/resources/templates

 

 

5. Namespace 선언

 

 

 

6. 텍스트 출력

th:text 속성 : 주어진 식의 값을 tag의 content에 출력함(기존 값을 대체)

 

 

 

7. Standard Expression Syntax

 

 

8. 변수 식 : ${...}

 

사용 예)

 

 

9. 선택 변수 식 : *{...}

: 전체 context 대신 특정 객체에 대해 실행됨

1) th:object를 먼저 설정하고

2) *{...} 으로 뒤에 객체 선택

 

 

 

 

10. 메시지 식 : #{...}

 

 

11. Link URL : @{...}

: page, context, server, protocol에 대한 상대 경로 이용

 

 

 

 

12. Literals

 

 

13. Operations

 

 

14. 임의의 속성 설정(이미지)

 

 

 

15. 반복문 - th:each="..."

 

 

** 홀수번째만 속성을 적용하고 싶다면,

 

 

 

 

 

 

16. 조건문 ; th:if="...", th:unless="..."

 

 

 

 

17. Switch

 

 

 

18. Template layout

 

 

- id를 이용한 fragment 삽입

 

- 다양한 방식

 

 

 

- fragment는 params를 가질 수 있음

 

- th:remove

 

 

 

 

19. Form binding in Spring MVC

 

- checkbox

 

 

- radio button

 

- dropdown list

 

 

 

 

20. 검증 오류 메시지 출력

반응형

'Programming > Spring' 카테고리의 다른 글

09. Spring JDBC  (0) 2021.06.01
08. MyBatis  (0) 2021.06.01
06. Spring Boot  (0) 2021.05.27
05. Spring MVC  (0) 2021.04.18
04. bean life-cycle관리 / 외부설정 property / message source  (0) 2021.04.13
반응형

 

 

1. spring boot

: 스프링 프레임워크와 3rd party library들에 대한 복잡하고 반복적인(boiler-plate) 설정 코드를 최소화하고 비즈니스 로직 구현에 집중하게 함

- 내장된 Servlet container(Tomcat)를 이용하여 독립적으로 실행 가능한 Spring 애플리케이션 개발 가능 (JAR)

- 'starter' dependency를 이용한 build 의존성 설정 간소화

- 스프링 프레임워크와 3rd party library들에 대한 자동 설정(auto-config)

 

 

 

2. 스타터 의존성(starter)

spring-boot-starter 가 포함하는 의존성

1) spring-boot

2) spring-boot-autoconfigure

3) spring-boot-starter-logging

4) javax-annotation-api

5) spring-core

6) snakeyaml

 

spring-boot-starter-web이 포함하는 의존성

1) spring-boot-starter

2) spring-boot-starter-json

3) spring-boot-starter-tomcat

4) spring-web

5) spring-webmvc

 

+ spring-boot-starter-jdbc

 

 

 

 

3. 자동설정(auto-configuration)

: 어플리케이션 실행 시, classpath에 Spring module 또는 3rd party library가 존재할 경우,

관련된 bean들의 설정을 자동으로 실행한다.

 

예) 특정 database가 classpath에 있으면 그 database를 사용하는 Datasource bean들을 자동으로 실행한다.

예) spring-jdbc 모듈이 classpath에 있고, datasource bean이 설정되어 있으면 jdbcTemplate bean을 자동으로 설정해준다.

예) Spring-webmvc 모듈이 classpath에 있으면 DispatcherServlet, HandlerMapping Spring MVC의 기본 bean들을 자동 설정

예) Thymeleaf libraryclasspath에 있으면  template resolver, view resolver, template engine 등을 자동으로 설정(view로 이용 가능)

예) Spring Security 모듈이 classpath에 있으면 Spring Security 기반의 웹 보안을 위해 필요한 bean들을 자동 설정

예) Embedded Tomcatclasspath에 있으면 Tomcat servlet container를 시작함 (8080 port 사용)

 

아래와 같은 명시적인 설정을 하지 않아도 Spring boot가 필요한 bean들을 자동으로 생성 및 설정해준다.

 

 

 

 

 

4. Spring boot Actuator

: 실행중인 애플리케이션의 내부 상태를 조회하고 모니터링하는 기능

다양한 application metrics

1) 실행중인 process, thread의 상태

2) HTTP 요청

3) 메모리 사용량

4) data source 사용량(connection 개수)

5) GC 횟수 및 개수

- Web endpoint(Rest URL)이나 원격 shell을 통해 이용 가능하다.

 

 

 

 

5. @SpringBootApplication

어노테이션은 다음과 같은 세 가지 어노테이션을 포함한다.

1) @SpringBootConfiguration : @Configuration 기능 포함

2) @EnableAutoConfiguration : classpath 기반으로 자동 bean scan 실행

4) @ComponentScan : 현재의 package를 base로 자동 bean scan 실행

- sub package들도 모두 실행

 

 

 

 

6. shell/cmd에서 build 실행 방법

1) mvnw가 포함된 폴더로 이동

2) mvnw package

-> build 후 JAR 파일 생성

3) java -jar target/demo-0.0.1-SNAPSHOT.jar

-> 생성된 JAR 파일 실행

4) mvnw spring-boot:run

-> build 후 바로 실행

 

 

 

7. 추가적인 MVC 설정, 인터셉터 설정

 

 

 

 

 

 

 

반응형

'Programming > Spring' 카테고리의 다른 글

08. MyBatis  (0) 2021.06.01
07. Thymeleaf  (0) 2021.05.31
05. Spring MVC  (0) 2021.04.18
04. bean life-cycle관리 / 외부설정 property / message source  (0) 2021.04.13
03. Auto-wiring, Java code 기반 설정, annotation 기반 설정  (0) 2021.04.13
반응형

 

 

 

 

1. MVC Pattern

Model : 결과 데이터

View : UI

Controller : Request 처리, Request/Response 데이터 전달

 

 

 

2. Spring MVC 

: MVC Framework(spring-webmvc)

-> Spring DI, AOP 이용가능

 

🔑 MVC 모델

1. MVC 모델 1과 MVC 모델 2의 차이점에 대해 설명하시오.

👉🏻 MVC 모델 정리 포스팅

👉🏻 MVC란 Model, View, Controller의 줄임말로써, MVC는 사용자와 상호작용하는 S/W를 디자인함에 있어 세가지 요소로 쪼개어 하는 것을 의미합니다. MVC 모델 1은 웹 브라우저의 요청을 JSP 페이지가 받아서 처리 하는 구조입니다. JSP 페이지 안에서 모든 정보를 표현(view)하고 저장(model)하고 처리(control)되므로 재사용이 힘들고, 읽기도 힘들어 가독성이 떨어집니다. 주로 중소형 프로젝트에 적합한 모델입니다. MVC 모델 2는 모델 1과 달리 웹 브라우저의 요청을 하나의 서블릿이 받게 됩니다. 서블릿은 웹 브라우저의 요청을 알맞게 처리한 뒤, 그 결과를 JSP로 포워딩 합니다. 처리 작업의 모듈화로 유지보수가 쉬워지는 반면 개발 시간이 늘어난다는 단점을 가지고 있습니다. 

(+) Spring MVC 모델 2

👉🏻 스프링 MVC 프레임워크는 스프링이 제공하는 트랜잭션 처리, DI, AOP를 손쉽게 사용할 수 있습니다.
다른 MVC 프레임워크와 마찬가지로 컨트롤러를 사용하여 요청을 처리합니다. 스프링에서는 DispatcherServlet이 MVC에서의 컨트롤러(Controller)부분을 처리합니다. 

 

💡 구성 요소

구성 요소 설명
DispatcherServlet 클라이언트의 요청을 전달받아 요청에 맞는 컨트롤러가 리턴한 결과값을
View에 전달하여 알맞은 응답을 생성한다.
HandlerMapping 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정한다.
Controller 클라이언트의 요청을 처리한 뒤, 결과를 DispatcherServlet에 리턴한다.
ModelAndView 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담는다.
ViewResolver 컨트롤러의 처리 결과를 생성할 뷰를 결정한다.
View 컨트롤러의 처리 결과 화면을 생성, JSP 또는 Velocity 템플릿 파일 등을 뷰로 사용한다.

출처 : 동덕여자대학교 소프트웨어시스템개발 수업

 

 

 

3. 개발 과정

step 1) DispatcherServlet 설정

: Client로부터 request를 전달받는 servlet 객체(front controller)

: web.xml 설정 

 

 

step 2) HandlerMapping 설정

: Request를 처리할 handler(controller and method) 선택

[디폴트] /WEB-INF/[name]-servlet.xml

 

 

Step 3) Controller 구현 및 설정

- Annotation 기반 controller

: @Controller (자동 bean scan 대상)

: @RequestMapping (사용자 정의 메소드를 특정 request URL에 대한 handler method로 지정)

 

 

 

step 4) ViewResolver 

: 논리적인 view 이름에 대해 물리적인 view 객체 생성

 

 

 

step 5) View 구현

: JSP 등을 사용하여 View page 작성

 

 

 

 

 

 

4.  Javacode 기반 설정

 

 

 

 

 

 

5. ContextLoaderListener

- Root container

 

 

 

 

 

6. HandleMapping

: Request를 처리할 handler(controller) 객체 선택

- RequestMappingHandler : @Controller and @RequestMapping 어노테이션 이용하여 handler 객체 선택

 

- URL matching pattern

* Ant pattern

? (한 개의 문자), * (0개 이상의 문자와 매칭), ** (0개 이상의 디렉토리와 매칭)

 

 

 

7. Controller 구현 : HTTP 전송 방식 지정

1) method 속성

 

 

 

 

2) @GetMapping, @PostMapping 이용

 

 

 

 

8. Request Param 추출 

 

1) HttpServletRequest 이용

 

 

 

2) @RequestParam

 

 

3) @PathVariable

 

 

3) @RequestHeader

4) @CookieValue

 

 

5) Servlet API

 

 

 

 

 

9. Command 객체를 통한 Form 입력 처리

: HTML Form 에 입력된 데이터를 자바빈 객체를 통해 입력 받음

 

- View 에서 command 객체 접근

 

- @ModelAttribute로 객체 이름 지정

 

- 여러 개

 

반응형
반응형

 

 

 

 

Spring Container의 bean 관리

- bean 객체의 생성, 의존 객체 주입 및 초기화, 객체 삭제 등 객체 life-cycle에 관련된 작업을 수행한다.

- 각 bean에 대해 callback method를 호출하여 실행함(호출의 주체가 '시스템')

* bean 클래스에 life-cycle 관련된 callback method가 구현된 경우, container가 적절한 시점에 메소드를 호출함

ex) BeanNameAware#setBeanName(String beanName), InitializingBean#afterPropertiesSet()

 

* 자체적으로 정의된 custom init/destroy method 호출

<bean>의 init-method, destroy-method 속성으로 지정된 메소드

@Bean의 initMethod, destroyMethod 속성으로 지정된 메소드

@PostConstruct, @PreDestroy가 적용된 메소드

 

 

 

전체 life-cyle process

 

 

ApplicationContext container의 수행 절차

 

 

 

 

 

Life-cycle 관련 interfaces 및 callback methods

- BeanNameAware

void setBeanName(String beanName) ; id/name 속성을 전달

- BeanFactoryAware

void setBeanFactory(BeanFactory factory) : 자신을 관리하는 beanFactory 객체를 전달

- ApplicationContextAware

void setApplicationContext(Application context) : 자신을 관리하는 applicationContext 객체를 전달

 

예시)

 

 

 

Custom init-method

- Bean 객체 생성 및 DI 수행 후에 호출되는 메소드

- Bean 객체를 삭제하기 전에 호출되는 메소드

 

 

 

- Spring interfaces

 

 

- <bean> @Bean 설정 

 

 

 

 

 

 

 

Bean Scoping

Spring container는 기본적으로 한 개의 bean instance만을 생성(singleton)

Scope 지정 방법 : <bean>의 scope 속성 또는 @Scope annotaion 사용

 

 

Singleton vs Prototype

 

 

 

@Scope annotation 사용 예

 

 

 

 

외부 설정 Property

설정 정보의 외부화

Spring에서 bean 설정에 사용되는 설정 값을 외부의 환경변수나 파일 등에 별도의 property로 저장하고 사용하는 방법

ex) 데이터베이스 구성 정보 등

 

외부에 정의된 property 이용 방법

1) PropertyPlaceholderConfigurer 

-> <context:property-placeholder />

2) Environment 및 PropertySource 이용

 

 

 

PropertyPlaceholderConfigurer 

객체를 통해 외부에 존재하는 property file을 읽어들임(loading)

 

 

XML 기반 설정

- PropertyPlaceholderConfigurer 타입의 객체를 bean으로 생성

- property file의 목록을 location 또는 locations 속성의 값으로 제공

- property file에 정의된 각 property는 ${property-name} 형식으로 참조

 

 

 

 

- 주의사항 : <context:pro...> 가 두 번 이상 사용될 경우 먼저 처리된 설정만 적용됨

- 해결방법

 

 

 

 

JavaConfig 기반 설정

@PropertySource, @PropertySources annotation 이용

 

 

 

Environment를 통한 property 이용

 

 

 

Bean에서 Environment 클래스 이용하는 방법

방법 1) EnvironmentAware interface 구현

 

 

 

방법 2) @Autowired 를 통한 Environment 객체 자동 주입

 

 

 

 

 

 

 

Message Source 

텍스트 메시지들을 프로그램 내에 직접 작성하지 않고 외부 property file에 저장 후 참조

 

Message bundle 정의 및 활용

 

 

 

ApplicationContext 가 위의 인터페이스를 상속하고 AbstractApplicationContext 클래스가 구현

 

 

 

 

 

 

Bean 객체에서 Message 참조 방법

방법 1) MessageSourceAware 인터페이스 구현

 

 

방법 2) ApplicationContextAware 인터페이스 구현 (MessageSourceAware 의 상위 클래스)

 

 

 

 

반응형

'Programming > Spring' 카테고리의 다른 글

06. Spring Boot  (0) 2021.05.27
05. Spring MVC  (0) 2021.04.18
03. Auto-wiring, Java code 기반 설정, annotation 기반 설정  (0) 2021.04.13
02. SpringDI / 생성자 * setter 방식 / SpEL  (0) 2021.04.06
01. Spring Framework 개요  (0) 2021.04.04
반응형

 

 

 

 

 

Auto-wiring

: DI를 명시적으로 설정하지 않아도 container가 bean의 타입이나 이름을 이용하여 DI를 자동으로 수행하는 기능

 

 

XML 기반 설정

예시)

 

- byName (setter-based injection)

: property와 같은 name(또는 id) 값을 갖는 bean을 찾아 주입한다.

 

 

- byType (setter-based injection)

: property와 같은 타입을 갖는 bean을 찾아 주입한다.

단, Instrument 객체가 하나만 존재할 경우에만 쓸 수 있다.

 

 

- Constructor (constructor-based injection)

: 생성자 호출 시, argument와 같은 타입을 갖는 bean을 찾아 전달한다.

단, 해당 객체가 유일하게 존재할 경우에만 쓸 수 있다.

 

 

 

 

 

 

Auto-wiring과 명시적 설정의 혼합

자동 설정을 이용하되, 일부 preperty에 대해 명시적으로 <property>나 <constructor-arg>를 이용해 DI 설정 가능하다.

주의) 명시적 설정이 자동 설정보다 우선적으로 적용된다.

 

 

 

 

 

주의할 점

- byName, byType 방식 : 주입 가능한 bean이 없을 경우, DI 수행을 안 함

- byType, constructor 방식 : 주입 가능한 bean이 여러 개일 경우, exception 발생

(NoUniqueBeanDefinitionException)

- constructor 방식 : 자동 주입에 사용 가능한 생성자가 여러 개일 경우 exception 발생

- Auto-wiring은 다양한 타입의 bean 객체들이 다수 존재하고, 특정 타입의 bean객체가 한 개씩만 존재할 때 효과적이다.

- 그러나 객체 간의 의존 관계를 명확히 파악하기 어렵고 부작용이 발생할 위험이 있다.

 

 

 

 

참고 : 부모 Bean을 통한 설정 재사용

Bean들 사이에 중복되는 설정이 많을 경우 추상 bean을 정의하고 그 설정을 재사용(상속)

- abstract : true값을 갖는 경우, 추상 bean 생성(객체 생성 불가)

 

예1)

 

예2)

 

 

 

 

 

Java Code 기반 설정

 

@Configuration, @Bean annotation 사용

@Configuration : 이 클래스를 Spring bean의 설정 정보로 사용한다.

@Bean : 이 메서드가 생성 및 반환하는 객체를 bean 객체로 등록한다. method 이름을 bean의 id로 사용한다.

         or name 속성을 통해 bean의 id를 지정 가능하다.

 

- 생성자 기반 의존 관계 설정 (DI)

 

 

- Setter-method 기반 의존 관계 설정 (DI)

 

 

Collection Wiring

: Collection(List, Set, Map, Properties, ...) 객체 생성 및 주입

 

 

주의! 생성되는 bean들은 기본적으로 singleton 객체이다.

같은 메서드를 여러 번 호출해도 객체는 내부적으로 한 번만 생성되고 호출된다.

 

 

 

Java code 기반 설정 사용 방법

AnnotationConfigApplicationContext class를 container로 사용한다.

 

 

여러 개의 JavaConfig 클래스 사용

방법 1 :@Autowired를 이용해 설정 클래스의 객체를 주입한다.

 

 

방법 2 : @Autowired를 통해 필요한 의존 객체들을 자동 주입한다.

 

방법 3 : 모든 설정 클래스를 파라미터로 전달

 

방법 4 : @import annotation를 이용한 설정정보 결합

 

 

 

 

 

 

Annotaion 기반 설정

 

 

 

- XML 설정을 해줘야 함 !!

 

 

 

@Required

: property에 대한 setter method 앞에 사용

 

 

 

 

@Autowired

- 생성자, property, method에 대해 적용 가능

: setter 뿐만 아니라 일반 메서드에도 적용 가능

- bean들 사이의 의존 관계를 type을 이용하여 자동 설정

* 만약 할당 가능한 타입의 bean 객체가 존재하지 않을 경우, NoSuchBeanDefinitionException

* 만약 하당 가능한 타입의 bean 객체가 여러 개일 경우, NoUniqueBeanDefinitionException

 

- required 속성

: 의존 객체 주입이 반드시 필요한지 여부를 나타낸다.

: required = false로 하면 할당가능한 bean이 존재하지 않더라도 exception을 발생시키지 않는다.

 

 

 

- XML 설정

 

 

 

- Java Code 기반 설정

 

 

 

Collection Type property

원소 타입의 모든 bean을 모아서 하나의 collection 객체를 생성 및 주입한다.

 

- 주의사항

1) autowired를 property에 직접 적용할 경우, setter method가 존재하지 않아도 DI가 실행된다.

2) @Autowired를 property나 setter method, 일반 method에 적용할 경우,

Default 생성자를 통해 객체가 생성되고, 의존 객체가 주입된다.

* Default 생성자가 없고 인자가 있는 생성자가 존재할 경우 exception 발생 !

 

 

 

@Nullable

: @Autowired + @Nullable 사용시 할당 가능한 Bean이 존재하지 않는 경우 null을 주입한다.

 

 

 

@Qualifier

자동 주입 가능한 bean이 여러 개일 때, 특정 bean에 대해 한정자를 붙이거나 특정 bean을 선택하기 위해 사용한다.

 

- XML 이용 시,

 

- Java Config 이용 시,

 

 

- Bean 클래스에서 정의 시,

 

 

 

 

 

@Value

int, boolean, float, String 등의 값을 전달함

 

 

 

@Resource

: @Autowired + @Qualifier

 

 

- 주의사항

: name 속성이 생략되면 property 이름을 사용한다.(autowiring by name)

만약 이름이 같은 bean을 찾지 못하면, autowiring by type으로 전환

만약 할당 가능한 bean이 없거나 여러 개이면 exception 발생 !

 

 

 

 

 

 

참고 : JSR - 330 Annotations

 

 

 

 

 

 

 

 

 

 

Bean Scan

Annotation을 이용한 자동 bean 탐색 및 등록

1) 특정 어노테이션이 붙은 클래스에 대해 자동으로 bean을 등록하는 기능

@Component, @Controller, @Service, @Repository, @Aspect, @Configuration

속성으로 bean의 id 지정 가능, 지정하지 않았다면 클래스 이름으로(첫글자소문자) 지정

 

2) XML 또는 JavaConfig 클래스에서 명시적인 Bean 설정 생략 가능하다.

 

예시)

 

 

XML 설정 방법

<context:component-scan />

 

 

 

JavaConfig 설정 방법 : @ComponentScan

 

 

참고) beanScan 범위 설정

include-filter : 포함시킬 클래스 

exclude-filter : 제외시킬 클래스

 

 

 

 

설정 방식의 장단점

XML

장점 : 클래스들과 설정 정보를 분리할 수 있고, 관심사의 분리

단점 : 값이 모두 String 타입이므로 type-safe 하지 않음(즉 오타가 있을 때 debugging의 어려움)

 

Annotation 기반 설정 + bean scan

장점 : Java code 설정하므로 type-safe하고, 적용이 빠름

단점 : 설정이 클래스들과 결합(분산)되어 관리나 관심사의 분리가 어려움

 

Java Code 기반 설정

장점 : 클래스들과 설정을 분리할 수 있고 관심사의 분리 가능, java code로 설정하므로 type-safe

 

 

 

 

 

 

 

 

 

반응형

+ Recent posts