Software Engineering/Spring Boot

Spring Boot 웹 개발: 시작하기 전에 알아 둘 배경지식

iseop 2022. 6. 3. 19:19   인쇄용 버전

Model 1과 Model 2 아키텍처

웹 애플리케이션의 설계 패턴에는 Model 1과 Model 2(=MVC 패턴)이 있습니다.

저는 JSP를 처음 접했을 때 JSP 파일 내에 화면 표시부터 로직, JDBC와 SQL을 전부 때려박아서 간단한 게시판 기능을 만들었던 적이 있습니다. 그 때는 제가 웹 개발에 손을 댈 생각이 없었기 때문에 그대로 과제물로 제출했던 기억이 납니다.

 

아무튼, Model 1은 JSP에서 비즈니스 로직 부분을 자바 빈 클래스로 분리하여 개발하는 패턴입니다. 이렇게 하면 프레젠테이션 로직은 JSP와 HTML로, 비즈니스 로직은 자바 빈으로 구현하여 코드의 유지보수성과 재사용성이 좋아집니다.

예를 들어서, 현재 시각을 출력하는 자바 빈을 만들고, 그 기능이 필요한 모든 JSP 페이지에 jsp:useBean 태그를 삽입하여 자바 빈 클래스를 재사용할 수 있게 됩니다.

Model 1 Architecture

두 번째로, MVC 패턴이라고 불리는 Model 2는 모델, 뷰, 컨트롤러라는 세 가지 모듈로 구성됩니다. [참고]

먼저 모델은 비즈니스 로직 처리와 데이터 처리를 담당합니다.

는 모델로부터 데이터를 받아 클라이언트가 볼 HTML을 생성하는 기능을 담당합니다.

컨트롤러는 뷰/모델과 클라이언트 사이를 중개해주는 인터페이스입니다. 컨트롤러는 들어오고 나가는 모든 요청/응답을 가로채어서 그에 맞는 뷰/모델 로직이 실행되도록 합니다.

 

예를 들어서, 클라이언트가 회원가입 URL을 요청하면 컨트롤러가 이를 받아서 회원가입 페이지에 해당하는 뷰를 보여줍니다. 그리고 클라이언트가 폼에 데이터를 채워서 보내면 컨트롤러가 이를 회원가입 로직이 있는 모델에 전달하여 회원가입 처리가 실행되도록 합니다.

이렇게 하면 유지보수, 테스트, 확장성이 Model 1과 비교해서 확실히 좋아집니다. 이러한 이유로 대부분의 웹 애플리케이션은 보통 MVC 패턴으로 개발됩니다.

단점이라면, 컨트롤러 코드를 추가로 작성해야 하고, 코드가 수정되면 애플리케이션을 다시 배포해야 한다는 점입니다.

Model 2 (MVC) Architecture

 

Spring Framework

Java EE 수준의 기능을 제공하는 애플리케이션을 더 쉽게 개발할 수 있도록 개발된 자바 프레임워크입니다.

https://docs.spring.io/spring-framework/docs/current/reference/html/overview.html

 

Spring Framework Overview

The term "Spring" means different things in different contexts. It can be used to refer to the Spring Framework project itself, which is where it all started. Over time, other Spring projects have been built on top of the Spring Framework. Most often, when

docs.spring.io

현재는 Java EE를 거의 대체하고 자바 웹 애플리케이션 개발의 사실상 표준으로 자리잡았습니다.

Spring Framework는 Core, Testing, Data Access, Web Servlet, Web Reactive, Integration 기능을 제공하고, 각각의 기능에 대응하는 여러 하위 모듈로 구성됩니다.

 

Spring이 제공하는 핵심 모듈(Spring Core)이 제공하는 기능은 Dependency Injection입니다.

 

과거에 자바 애플리케이션을 개발할 때는, 코드에서 객체 간의 종속성을 관리하기 위해서 프로그래머가 직접 디자인 패턴을 적용하여 코드를 만들었습니다.

 

예를 들자면, 아래 코드에서 직원 클래스는 주소 클래스를 직접 인스턴스화하여 사용하는데, 이런 관계는 강한 결합(tight coupling) 관계라고 합니다. 직원 클래스가 인스턴스화될 때, 주소 클래가 이어서 인스턴스화 됩니다.

# Employee 클래스는 Address 클래스를 구성 요소로 가진다.
# Address 클래스가 변경되면 Employee 클래스도 영향을 받는다.
# 따라서 Employee 클래스는 Address 클래스에 종속되어 있다.

class Employee {  
	Address address;  
	Employee() {  
		address = new Address();  
	}  
}

 

이에 비해, 아래 코드는 직원 클래스의 주소값을 설정하기 위해 외부에서 생성된 인스턴스를 입력받아서 사용합니다.

기존에는 직원 클래스가 주소 클래스를 직접 인스턴스화했다면, 아래 코드에서는 외부 클래스에서 직원과 주소 클래스를 인스턴스화하기 때문에 이를 Inversion of Control이라고 부릅니다.

# Inversion of Control scenario

# 1. Constructor
class Employee {
	Address address;  
	Employee(Address address) {  
		this.address = address;  
	}  
}

# 2. Setter method
class Employee {
	Address address;  
	setAddress(Address address) {
		this.address = address;
	}
}

 

Spring IoC 컨테이너와 Dependency Injection

Spring 이전까지 결합도가 낮고 유지보수가 용이한 코드를 만들기 위해서는 프로그래머가 디자인 패턴에 주의해서 코드를 작성해야 했습니다. 하지만 Spring Core에서는 그 역할을 Spring IoC 컨테이너가 대신합니다. Spring에서는 IoC 컨테이너가 이러한 객체들을 생성해서 필요한 객체에게 입력해 줍니다. 코드를 작성하는 입장에서는 설정 메타데이터(XML 또는 애너테이션)를 이용해서 종속 관계만 작성하면, Spring IoC 컨테이너가 설정을 읽어들여서 그에 맞는 자바 빈을 생성해 줍니다. 그리고 이렇게 생성된 자바 빈 객체들을 다시 Spring 컨테이너 인스턴스를 통해 접근하게 됩니다.

 

Spring Boot

Spring Boot는 Spring Core를 기반으로 만들어진 Spring 모듈입니다.

기존 Spring 기반 애플리케이션에서 요구되는 복잡한 설정 파일을 없애고, 필요에 따라 변경 가능한 기본 설정을 제공하여 개발 기간을 단축하는 데 중점을 두어 개발되었습니다.

Tomcat 등 서블릿 컨테이너를 내장하여 독립 실행이 가능한 JAR 파일을 만들 수 있고(WAR 패키징도 가능함), Spring Boot 프로젝트에 사용할 수 있는 각종 starter 모듈 또한 개발 기간 단축에 도움이 됩니다.

 

Spring Boot: MVC Architecture

Spring Boot로 만들어진 MVC 웹 애플리케이션은 아래처럼 4계층 구조를 가지게 됩니다.

MVC Architecture

  • 프레젠테이션 계층은 Controller 클래스에 해당합니다. Controller 클래스는 클라이언트에서 오는 요청을 받아서 적절한 처리를 수행합니다. 구체적으로는 HTTP 요청 처리, JSON-객체 간 변환, 인증 처리(+비즈니스 계층에 전달) 등을 수행합니다.
  • 비즈니스 계층은 Service 클래스에 해당합니다. Service 클래스는 비즈니스 로직을 처리하는데, 예를 들자면 '중복된 사용자 ID 검증'같은 로직이 있겠습니다. 사용자가 회원가입 시 사용하고 싶은 ID를 입력하고, 중복 확인 버튼을 누르면 그 ID값을 프레젠테이션 계층(=Controller)으로부터 받아서 영속성 계층(=Repository)을 통해 DB에 중복된 ID가 있는지 확인한 뒤, 해당 ID값이 중복인지 아닌지 판별하여 그 결과를 다시 프레젠테이션 계층에 전달하는 식입니다.
  • 영속성 계층은 Repository 인터페이스에 해당합니다. Repository 인터페이스는 애플리케이션에 필요한 쿼리 메서드를 제공하고, 자바 객체(엔티티)를 DB 에 저장하거나, 그 반대 역할을 수행합니다.
  • 데이터베이스 계층을 DBMS 그 자체를 나타냅니다.

 

Spring Boot: MVC Workflow

위 아키텍처에 따른 Spring Boot 애플리케이션의 처리 과정은 아래와 같습니다.

MVC Workflow

  • 클라이언트가 전송한 HTTP Request를 Controller가 수신합니다. (둘 사이에는 웹 서버와 서블릿 컨테이너가 있습니다.)
  • 예를 들어서, 회원가입을 위한 사용자 정보 폼을 작성해서 POST했다고 가정합니다.
  • Controller가 URL에 따른 적절한 Service를 호출해서, 수신한 자료를 Model 형태로 변환해서 주입합니다.
  • Service는 회원가입 로직에 따라 Repository의 메서드를 통해 자료를 DB에 저장하고 결과를 반환합니다.
  • 오류가 없었다면, Controller는 처리 성공에 따른 Thymeleaf 페이지를 클라이언트에게 반환합니다.

 

처음 웹 개발을 시작하기 위해:

뭔가를 배울 때 중요한 것은 흥미를 잃지 않는 것입니다. 특히 웹 개발같은 경우에는 특별한 장비나 환경이 없어도 직접 공부한 것을 만들어 볼 수 있기 때문에, 기본적인 개념을 받아들인 다음 실제로 결과물을 만들어 보는 것이 흥미를 지속시키는 데 도움이 된다고 생각합니다. 그래서 선택한 책이 백견불여일타 스프링 부트 쇼핑몰 프로젝트 with JPA 입니다. 개발을 해 본 적이 없기 때문에 챕터 하나하나가 난관이겠지만, 그 안에서 모르는 내용은 인터넷을 통해 배우고 블로그에 정리해 가면서 첫 프로젝트를 완성해 볼 생각입니다. 이 책을 통해서 Web, Data JPA, Validation, Security, Thymeleaf, Test 스타터 모듈을 활용하여 기능을 구현하고, 간단한 쇼핑몰 기능을 가진 웹 사이트를 만들어볼 수 있습니다.

 

백견불여일타 스프링 부트 쇼핑몰 프로젝트 with JPA

스프링 부트와 JPA를 활용하여 실제 이커머스 업계에서 활용되는 쇼핑몰 기술들을 직접 구현해볼 수 있게 구성하였다. JPA와 THYMELEAF에 대한 간단한 예제로 기본 개념과 사용법을 익히고 그 후 쇼

book.naver.com