풀스택 웹개발(2) - Spring Framework
소개
[풀스택 웹개발] 시리즈는 Spring을 활용하여 풀스택 웹사이트를 만드는 것을 목표로 합니다. 빠르고 직관적인 이해를 돕기 위해 전문적인 용어보다는 비유적인 표현을 많이 사용했습니다. 웹사이트를 처음 만들어보는 분도 쉽게 배우고 따라하는 웹개발 설명서가 되었으면 합니다.
본 시리즈가 다루는 주제는 크게 다음과 같습니다:
다음과 같은 내용을 학습하시면 본 시리즈를 이해하는 데 도움이 됩니다:
- 객체지향(Opject-oriented-programming)
- Java
- SQL
Table of Contents
Spring Framework
자바스크립트(Java Script) 언어를 주로 활용하는 타 웹 프레임워크와 달리, 스프링(Spring) 프레임워크는 자바(Java) 언어를 활용하는 오픈소스 프레임워크입니다. 참고로 자바스크립트와 자바는 햄스터와 햄, 돌고래와 돌 정도의 관계성을 가지고 있습니다.
여기서 잠깐!
프레임워크가 뭐지? 싶다면 펼치기를 눌러 이 포스트를 읽어주세요
스프링은 원래 엔터프라이즈 에플리케이션을 빠르게 개발하기 위한 목적으로 만들어졌습니다. 웹 개발을 3단계(모듈)로 나눠서 개발하도록 구성되어 있기 때문에 개발이 수월하고, 업데이트를 할 때도 모든 코드를 수정할 필요 없이 업데이트가 필요한 모듈만 수정하면 돼서 확장 가능성이 높습니다. 다만 개인보다는 거대 테크 회사들이 사용할 목적으로 만들었기 때문에 설정들이 다소 복잡하고 처음 배우는 사람들이 접근하기 어렵다는 단점이 있었고, 이 단점을 개선한 더 간편한 프래임워크가 바로 스프링 부트(Spring Boot)입니다.
Spring의 작동 원리를 알아볼까요?
-
IoC (Inversion of Control)
스프링의 핵심 기능 중 하나로, 객체의 생명 주기와 의존성을 개발자 대신에 프레임워크가 관리합니다. 즉, 개발자가 ‘이 부분은 이렇게 사용할 거야’라는 테그를 달아놓으면, 프레임워크가 코드를 실행하며 알아서 기능을 불어넣고 관리를 해줍니다. 이를 통해 모듈 간의 결합도를 낮추고 유연한 애플리케이션을 개발할 수 있습니다. 모듈 하나가 고장나도 모두 망가지지는 않는다는 뜻입니다.
Spring은 태그(Annotation, 어노테이션)을 통해 해당 코드의 기능을 정의합니다.
Spring을 이해하기 위해 가장 중요한 부분이니 기억해 주세요.
Bean
Spring Bean은 Spring IoC 컨테이너가 관리하는 객체입니다. Spring 프레임워크에서 객체를 생성하고, 초기화하고, 소멸시키는 기본 단위입니다. 방금 설명한 어노테이션을 적고 프로그램을 실행시키면 Bean이 생성됩니다. (다른 방법으로 XML 파일이나 Java Config 클래스로 Bean을 정의할 수도 있습니다.)
Bean = 책
Spring IoC 컨테이너 = 도서관
Dependency Injection (의존성 주입) = 참고문헌
이미지 출처 Pexels
도서관으로 비유해 보자면 컨테이너(Container)는 모든 책을 보관하고 관리하는 장소라고 볼 수 있습니다. 여기서 책을 찾거나 대여하고 반납하는 작업이 이루어지죠. Bean은 책에 관한 정보라고 보시면 됩니다. Bean에는 책의 제목, 저자, 발행 연도같은 정보가 들어있어 책을 식별하고 분류하는 데 도움을 줍니다. Bean을 생성(Instantiation)하면 도서관에 책이 추가됩니다. 책이 도서관에 처음 들어오면 책의 정보(제목, 저자 등)에 따라 적절한 위치에 배치됩니다.
어떤 책은 참고문헌이나 인덱스 같은 추가 정보를 필요로 합니다. 즉, 책이 다른 참고문헌에 의존성(Dependency)을 가진다고 생각할 수 있습니다. 그리고 이 참고문헌을 통해 책의 내용을 더 잘 이해할 수 있습니다.
책이 도서관에 들어왔는데 오랜 시간 아무도 빌려가지 않으면 폐기되기도 합니다. 이처럼 Bean도 생명주기(Lifecycle)을 가지고 있습니다.
도서관에는 책이 한 권만 있을 수도 있고(Singleton) 사본이 여러 권 있을 수도 있습니다(Prototype).
-
AOP (Aspect-Oriented Programming)
이미지 출처: Java Guides
AOP, 또는 관점 지향 프로그래밍은 특정 기능을 여러 코드에 걸쳐 적용할 수 있게 해주는 프로그래밍 패러다임입니다. 간단하게 말해서 서로 다른 객체(Class)들이 공통적으로 가진 부분을 한 번에 묶어서 관리한다는 뜻입니다. 이를 통해 코드 중복을 줄이고 관심사를 분리할 수 있습니다.
-
데이터 액세스 / 트랜스액션(Transaction) 관리
(JDBC와 ORM 프레임워크와의 통합을 통해) 데이터베이스 연동과 트랜잭션 관리를 쉽게 할 수 있습니다.
-
MVC (Model-View-Controller) 아키텍처
스프링은 웹 애플리케이션을 위한 MVC 디자인 패턴 구현을 제공합니다. 이를 통해 웹 애플리케이션의 모델(Model), 뷰(View), 컨트롤러(Controller)를 분리하여 개발할 수 있습니다. MVC 아키텍처에 관한 자세한 내용은 이 포스트를 확인해 주세요
-
보안
스프링은 기본적으로 인증, 권한 부여와 같은 보안과 관련된 기능들을 제공합니다.
-
RESTful 웹 서비스
또는 REST API를 사용한다고 말할 수 있습니다. REST API의 조건을 충족하면 보통 RESTful하다고 말합니다. 스프링은 REST API에 기반한 개발을 간편하게 할 수 있도록 도와줍니다. REST API에 관한 자세한 내용은 이 포스트를 확인해 주세요
Spring Boot
Spring Boot(스프링 부트)는 기존 Spring을 더 쉽고 빠르게 사용할 수 있도록 개선한 Spring 프레임워크입니다. 스프링 부트는 개발 초기에 “스프링 부트 스타터”라는 프로젝트 명을 가지고, 간단한 조작만으로 스프링 애플리케이션을 빠르게 시작할 수 있도록 돕는 것을 목표로 했습니다. 그렇게 2014년 4월에 스프링 부트 1.0이 출시되었습니다.
Spring 어노테이션과 컴포넌트
Spring은 어노테이션을 통해 IoC 컨테이너(팀워크)에게 각각의 코드가 어떤 역할을 수행하는 지 알려줍니다. @컴포넌트 이름
의 형태로 작성하는데요, @Component
는 일반 컴포넌트(팀원), @Service
는 서비스 레이어(발표자료를 제작자), @Repository
는 데이터 액세스 레이어(자료조사 담당자), @Controller
는 프레젠테이션 레이어(발표자)를 표시합니다. 이렇게 어노테이션이 되어 있으면 컨테이너가 Bean을 만들어 관리하게 됩니다.
@Component
의 종류:
`@Repository`(자료조사)
`@Service`(발표자료 제작)
`@Controller`(발표)
이미지 출처 Javapoint
각각의 컴포넌트에 어노테이션을 적어놓으면, Model이 어노테이션을 따라 데이터를 처리합니다. 클라이언트가 버튼을 클릭하는 등 요청을 보내면, Controller가 요청을 Service Layer에게 전달하고, Model이 요청을 처리한 뒤, Service Layer와 Controller를 거쳐 결과가 View(웹사이트 화면)에 표시됩니다.
자료 출처
- YC Tech Academy 2,3주차
- Java Guides: Spring AOP Tutorial for Beginners