본문 바로가기

Server-DB/Spring Boot

자바 웹기술 #2. 스프링 그리고 스프링 부트

스프링 프레임워크의 사상 : DI, IoC, AOP

앞서 말한 바와 같이, 모델2의 패턴으로 웹 어플리케이션을 구성하다 보면 공통되는 부분이 나타난다. 이렇게 반복되는 부분을 하나의 틀로 만든것이 프레임워크이고, 그 중 대표적인 것이 스프링 프레임워크이다. 

 

반복되는 부분을 틀로 만들 때, 어떠한 사상과 철학이 들어가게 된다. 스프링 프레임워크의 사상은 DI, IoC, AOP로 요약할 수 있다. 스프링을 사용하기 이전에는 어떠한 로직을 만들 때 매번 객체를 만들어주어야 했다. 예를 들어, 서블릿과 JSP로 웹 프로그래밍을 할 경우, DB와 연결해줄 DAO를 만들 때 마다 매번 새로운 객체를 만들어서 로직을 짰다. 이 방식의 문제점은, 사용하던 DB를 다른 DB로 바꿀경우 DAO 역시 전부 다 수정해주어야 한다는 점이다. 예를 들어, 오라클을 사용하다가 MySQL을 사용할 경우에는, 기존에 작성한 DAO 코드를 모두 수정해주어야 한다.

 

이것을 지양하기 위해 나온 개념이 DI(Dependency Injection, 의존성주입)이다. 개발자가 일일히 클래스를 만들 경우, 모든 코드를 일일이 수정해야할 상황이 생기므로, 이를 막기 위해 스프링 프레임워크가 만든 클래스만 사용하자는 것이다. 스프링 프레임워크에서 클래스를 만들고, 이 클래스를 사용할 때 개발자가 새로 만드는 것이 아니라 프레임워크로부터 그 클래스를 주입시키는 것이다. 이것은 곧 클래스를 만드는 것이 개발자가 아니라 프레임워크가 된다는 의미이다. 이러한 상황을 IoC(Inversion of Control, 제어역전)이라 한다. IoC는 다양한 종류가 존재하는데 가장 대표적인 것이 DI이다.

 

AOP(Aspect Oriented Programming, 관점지양 프로그래밍)은, 쉽게 말해서 주기능과 보조기능을 분리해서 프로그래밍하는 것을 말한다. Aspect라는 것이 주된 기능과 보조 기능을 분리해서 생각한다는 의미이다. 주기능과 달리 보조기능은 때때로 수정, 보완, 삭제할 일이 자주 있다. 그래서 보조기능만 한 군데 모아서 관리하는 것이 필요하다. 이러한 모듈화작업을 AOP라 한다.

 

Spring MVC 패턴

DI, IoC, AOP라는 철학을 바탕으로 스프링 프레임워크를 통해 MVC를 구현하려면 다음과 같은 기능들에 익숙해져야 한다. JDBC/마이바티스, 트랜잭션, 타일즈 그리고 메이븐/그레이들. 

 

JDBC(Java Database Connectivity)는 기존의 방식으로 데이터 액세스 레이어를 구성하는 것을 말한다. DAO와 VO, DTO로 DB와 로직간의 연결을 구현하는 것이다. 헌데 이 방식에 문제점이 존재한다. Java 코드 상에서 직접적으로 SQL 쿼리를 작성하기 때문에 Java와 SQL 쿼리문이 섞인다. 이것을 막기 위해 마이바티스 프레임워크가 등장했다. 사용할 SQL 쿼리문을 XML로 등록한 뒤 사용하는 것이다. 그러면 Java와 SQL 코드가 섞일 일이 없고, 일일히 쿼리문을 수정할 필요 없이 SqlMapper만 관리하면 된다.

 

이렇게 비즈니스 로직과 데이터 액세스 레이어를 통해 백엔드를 구성하게 되는데, 문제는 유저가 데이터를 업데이트 하는 과정에서 다른 데이터가 같이 변경되지 않는 경우가 생길 수 있다. 예를 들어, 현금송출 서비스를 만든 경우, A의 계좌에서는 돈이 나갔는데, B의 계좌에서는 돈이 증가하지 않는 경우가 있다. 이를 막기 위한 기능이 트랜잭션이다. A와 B의 계좌 모두 업데이트된 경우에만 변경된 사항을 저장하도록 하는 것이다.

 

프레젠테이션 레이어 측면에서는 타일즈라는 기능이 있다. JSP로 화면을 구현하다보면, 반복되는 화면이 존재한다. 이렇게 반복되는 부분을 타일처럼 분리하여 매번 코드를 작성하지 않아도 되게 만드는 것이다.

 

마지막으로 메이븐과 그레이들이 있다. 둘 다 빌드 툴이라고 하는데, Java 웹 프로그래밍의 흐름을 보면 알겠지만, 서로 다른 구성요소와 라이브러리 그리고 프레임워크가 뒤섞여 이들을 관리하는 것이 쉽지 않다. 그래서 이를 관리하는 도구가 필요하다. 이것을 빌드 툴이라 한다. 라이브러리를 관리하는 것 이외에도 작성한 코드를 서버에 업로드하기 위해 컴파일하는 과정을 거치는데, 이 때 다운 받은 라이브러리 역시 다 같이 서버에 올려주어야 한다. 이러한 과정을 자동화시켜주는 것도 빌드툴의 역할이다. 메이븐과 그레이들이 대표적인 빌드 툴인데, 둘의 차이는 메이븐은 정적이고, 그레이들은 동적이라는 것이다. 메이븐은 XML로 라이브러리를 관리하기 때문에 개발자가 일일이 수정해주어야 한다. 하지만 그레이들은 Groovy라는 언어로 스크립트를 통해 라이브러리를 관리하기 때문에 개발자가 일일이 수정해줄 필요가 없다.

 

말 그대로 스프링을 부팅해준다

메이븐과 그레이들과 같은 툴로 빌드가 쉬워졌지만, 여전히 이들을 우리가 별도로 다운받아서 사용해야 한다. 마이바티스도 다운받아서 세팅해주어야 한다. 즉, 자바로 웹서비스를 만들기 위해선 다운 받아야 될 요소가 많은 것이다. 이 때 이렇게 다운받아야할 요소들을 자동으로 다운받아주는 도구가 스프링 부트다. 말 그대로 스프링을 부팅해준다. 프로젝트를 위해 필요한 설정들을 세팅하면 이 세팅에 따라 자동으로 스프링 프로젝트의 환경세팅을 해준다. 

 

스프링 부트 사용화면 빌드툴, 언어, 매니페스토, DB 등등을 설정할 수 있다