[Spring] 1.Spring 개요


Spring



image




스프링 프레임워크는 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 간단히 스프링이라고도 불립니다.

동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있습니다!



프레임워크는 말 그대로 뼈대나 근간을 이루는 코드들의 묶음이라고 볼 수 있는데,

프레임 워크의 장점은 개발에 필요한 구조를 이미 코드로 만들어 놓았기 때문에,

실력이 부족한 개발자라 하더라도 반쯤 완성한 상태에서 필요한 부분을 조립하는 형태의 개발이 가능하다는 겁니다!



회사의 입장에서는 프레임워크를 사용하면 일정한 품질이 보장되는 결과물을 얻을 수 있고,

개발자 입장에서는 완성된 구조에 자신이 맡은 코드를 개발해서 넣어주는 형태이므로 개발 시간을 단축할 수 있습니다.



스프링도 이러한 프레임워크로 자바로 구성되어 있습니다.

음 쉽게말해서 웹 애플리케이션이 잘 돌아가게 자바로 구조를 미리 짜놓은 것을 스프링이라고 생각하시면 됩니다!


MVC 구조



Spring은 MVC 구조로 되어있습니다!

MVC 구조란 기능별로 Model, View, Controller로 나누어져서 서로 상호작용하는 구조입니다!

View 는 화면에 보여지는 역할을 하고, Model은 서비스와 DAO(Data Access Object)를 담당

Controller는 MVC 가운데에서 조율하는 역할을 합니다!


image




여기서 Servlet이라는 용어가 나오는데 서블릿이 무엇일까요?


서블릿




자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램을 말합니다.

다시 말해서 클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해주어야 하는데, 이러한 역할을 하는 자바 프로그램입니다.

예를 들어, 어떠한 사용자가 로그인을 하려고 할 때. 사용자는 아이디와 비밀번호를 입력하고, 로그인 버튼을 누릅니다.

그 때 서버는 클라이언트의 아이디와 비밀번호를 확인하고, 다음 페이지를 띄워주어야 하는데, 이러한 역할을 수행하는 것이 바로 서블릿(Servlet)입니다.


자바소스 속에 HTML 코드가 들어가는 형태입니다.


// Servlet 예제


public class HelloServlet extends HttpServlet {
	public void doGet(HttpServletRequest req,HttpServletResponse res) 
    throws ServletException,IOException {
        res.setContentType("text/html;charset=UTF-8");

        PrintWriter out = res.getWriter();

        out.println("<HTML>");

        out.println("<BODY>");

        out.println("Hello World!!");

        out.println("</BODY>");

        out.println("</HTML>");

        out.close();

	}
}




JSP



JSP(Java Server Page)는 HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 언어입니다.


<!-- JSP 예제 -->


<%@page import="java.util.Calendar" %> 
<%@ page contentType="text/html; charset=UTF-8"%> 
<% String str=String.format("%tF",Calendar.getInstance()); %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>꾸리블로그</title> 
</head> 
<body> 
오늘은 <%=str%><br/> 입니다! 
</body> 
</html>




보시면 알겠지만, HTML 내부에 Java 코드가 있어 HTML 코드를 작성하기 쉽습니다.

단, 로직과 디자인이 한 파일내에 섞여있어 유지보수가 어렵습니다!


javabeans



자바 빈즈는 JSP 페이지의 로직 부분을 분리해서 코드를 재사용함으로 프로그램의 효율을 높이기 위해 사용합니다.

프로그램의 모듈화는 코드를 재사용하므로 프로그램의 작성기간이 단축되고, 이미 사용되던 코드이므로 안정성이 보장되며 유지/보수가 쉽습니다.

MVC 패턴에서 자바 빈은 프로그램 로직을 소유할 수 있고 DB와 연동해서 작업을 처리합니다!


model 1




image




Spring 구조: model 2




image




Spring의 특징




  • POJO(Plain Old Java Object) 기반의 구성



일반적인 Java 코드를 이용해서 객체를 구성하는 방식을 그대로 스프링에서 사용할 수 있다.

-> 코드를 개발할 때 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않다는 것을 의미



  • 의존성 주입(DI)를 통한 객체 간의 관계 구성



일단 IoC(Inversion Of Control - 제어의 역행)이라는 단어를 알아야하는데요!

제어의 역행은 말 그대로 메소드나 객체의 호출작업이 개발자에 의해 결정되는 것이 아니라, 외부에서 결정되는 것을 의미합니다.

이 방식은 대부분의 프레임워크에서 사용하는 방법으로, 개발자는 필요한 부분을 개발해서 끼워 넣기의 형태로 개발하고 실행하게 됩니다!

쉽게 말하면 개발자는 프레임워크에 필요한 부품을 개발하고, 조립하는 방식의 개발을 하게되고, 최종 호출은은 개발자가 아닌 스프링에 의해서 결정됩니다.

이를 제어의 역행(IoC)라고 합니다!

그리고 의존성 주입(DI)는 의존적인 객체를 직접 생성하거나, 제어하는 것이 아니라,

제어의 역행으로 특정 객체에 필요한 객체를 외부에서 결정해서 연결시키는 것을 의미합니다!

외부에서 필요한 객체를 결정하기 떄문에 개발자는 의존적인 객체들과의 관계를 직접 처리할 필요없고, 인터페이스를 활용해서 유연한 구조를 사용할 수 있습니다.



  • AOP 지원



좋은 개발 환경의 중요 원칙은 ‘개발자가 비즈니스 로직에만 집중할 수 있게한다’ 인데, 스프링은 이러한 환경을 제공해줍니다.

보안이나 로그 트랜잭션과 같이 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링에서는 cross-concern(횡단 관심사)이라고 하며,

스프링은 이러한 횡단 관심사를 분리해서 제작합니다. AOP(Aspect Oriented Programming)은 이러한 횡단 관심사를 모듈로 분리하는 패러다임 입니다.



AOP는 AspectJ의 문법을 통해서 작성할 수 있는데, 이를 통해서 개발자는 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있게 되었습니다!