[Spring] 스프링 시작하기 (2)

2020. 7. 23. 03:10Spring/Spring

1. 기본 개념

1) 자바 프레임워크

프레임워크는 애플리케이션의 기본이 되는 뼈대나 틀이다. 유지보수에 용이해지고 재사용성이 증가하게 된다. 빠른 구현, 쉬운 관리, 개발자 역량 획일화, 검증된 아키텍쳐의 재사용과 일관성 유지의 장점이 있다.

 

자바 프레임워크는 오픈소스 형태로 제공된다. 대표적으로는 Spring MVC, IoC, AOP, JPA, Mybatis가 있다.

2) 스프링 프레임워크 특징

1. 경량화

- 스프링은 여러 개의 JAR 모듈 파일로 구성되어 있으며 해당 JAR 파일만 있어도 배포가 쉽고 빠르다.

 

2. IoC (Inversion of Control)

- 애플리케이션 수행에 필요한 객체의 생성과 의존관계를 개발자가 직접 처리하였다. 또한 의존관계에 놓여진 객체를 변경하게 될 때, 코드를 변경해야하는 번거로움이 존재한다. 이를 컨테이너가 대신 처리하게 되면서 의존관계가 낮아져 유지보수가 편리해진다.

 

3. 관점지향 프로그래밍 (AOP)

- 비즈니스 메서드를 개발 시, 로직을 분리하여 공통으로 사용하는 기능들을 외부의 독립된 클래스로 분리하고, 해당 기능을 프로그램 코드에 직접 명시하지 않고 선언적으로 처리하여 적용하는 프로그래밍이다.

 

4. 컨테이너 (Container)

- 객체의 생성과 관리를 담당하며 객체 운용에 필요한 다양한 기능을 제공한다. 일반적으로 서버 안에 포함되어 배포되며 구동된다.

 

3) IoC 컨테이너

서블릿 클래스 개발 시 작성된 서블릿 클래스는 web.xml 파일에 자동으로 등록된다. /hello.do URL 요청 시 hello 이름으로 등록된 hello.HelloServlet 클래스를 찾아 객체를 생성하고 실행한다. 실행 결과로는 객체를 생성하지 않았음에도 HelloServlet 클래스의 생성자와 doGet() 메서드가 실행이 된다. 이 때, 객체의 처리는 서블릿 컨테이너에서 처리를 해준다. 이러한 과정을 소스코드로 처리하지 않고 컨테이너가 처리하는 방식으로 제어의 역행이라고 한다.

동작 도식화

public class HelloServlet extends HttpServlet {
	
    public HelloServlet() {
        System.out.println("===> HelloServlet 객체 생성");
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
        ServletException, IOException {
        System.out.println("doGet() 메서드 호출");
    }
}
<web-app>
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>hello.HelloServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>hello.do</url-pattern>
    </servlet-mapping>
</web-app>

 

 

 

2. 프로젝트 구조

1) Java Resources/src/main/java

패키지별로 자바 파일이 모여있는 곳이다. 스프링에서 MVC 패턴의 서블릿 구조를 잡아주기 때문에 따로 서블릿 생성 없이 구주에 맞춰 클래스 파일을 작성하면 된다.

2) Java Resources/src/main/resources

데이터베이스 연결을 위한 자원, 의존성 주입을 위한 xml 파일 등 자바 코드 외 모든 자원을 보관하는 곳이다.

3) Java Resources/src/test/*

테스트를 위한 자바 코드와 리소스를 보관하는 곳이다.

4) Java Resources/Libraries/Maven Dependencies

메이븐에서 자동으로 관리해주는 라이브러리 폴더로, pom.xml에 작성된 라이브러리들을 자동으로 다운 받아 관리해준다.

5) src/*

웹에 관련된 자원이 담겨있는 루트 폴더이다.

6) src/main/webapp/resources

웹에 필요한 다양한 자원들을 보관하는 곳이자 사용자가 직접 접근할 수 있는 공간이다. js, css, img 파일 등이 보관되어 있고 컨트롤러가 요청을 가로채지 않고 바로 접근할 수 있도록 설정해서 사용하는 곳이다.

7) src/main/webapp/WEB-INF

웹에 필요한 코드 파일, 컴파일 파일, 환경설정 파일이 보관되는 곳으로 보안이 중요한 파일이다. 따라서 사용자가 외부에서 접근할 수 없다. 컨트롤러(핸들러)를 이용하여 내부적으로만 접근이 가능한 공간이다.

8) src/main/webapp/WEB-INF/classes

컴파일된 파일이 보관되는 곳이다.

9) src/main/webapp/WEB-INF/spring

스프링 환경설정 파일(Context)이 보관되는 곳이다.

10) src/main/webapp/WEB-INF/views

JSP, HTML 파일이 보관되는 곳이다. 사용자가 입력하고 컨트롤러가 받아주는 URL이 이 폴더의 구조를 따라간다.

프로젝트 구조

 

 

 

3. 결합도

1) 결합도 높은 프로그램

/src/main/java/polymorphism/
SamsungTV.java, LgTV.java, TVUser.java

SamsungTV.java, LgTV.java, TVUser.java

2) 다형성을 이용한 결합도 낮춘 프로그램

/src/main/java/polymorphism/
TV.java, SamsungTV.java, LgTV.java, TVUser.java

TV.java, SamsungTV.java, LgTV.java, TVUser.java

3) 디자인 패턴을 이용한 결합도 낮춘 프로그램

클라이언트(TVUser.java)에서 소스를 수정하지 않고 TV 브랜드를 변경하기 위해 Factory 패턴을 적용한다. Factory 패턴은 클라이언트에서 사용할 객체 생성을 캡슐화하여 TVUser와 TV 사이의 결합도를 낮춘다. 사용자의 입력을 위해 Run Configuration - Argument에 원하는 TV 브랜드명을 입력하고 실행하면 클라이언트의 소스 수정 없이 실행되는 객체가 생성된다.

/src/main/java/polymorphism/
TVUser.java, BeanFactory.java

TVUser.java, BeanFactory.java


[참고] 스프링 퀵 스타트

[참고] codevang.tistory.com/240

728x90

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

[Spring] 컬렉션 객체 설정  (0) 2020.07.24
[Spring] 의존성 관리  (0) 2020.07.23
[Spring] 스프링 컨테이너 및 설정 파일  (0) 2020.07.23
[Spring] 스프링 시작하기 (1)  (0) 2020.07.23