Manning Publications의 <Spring Start Here>를 요약 정리했습니다.
프레임워크라는 애플리케이션을 구축하는 기능의 집합입니다. 애플리케이션 프레임워크는 앱을 빌드하는 데 사용하는 광범위한 도구와 기능 세트를 제공해 줍니다. 하지만 모든 기능을 다 사용할 필요는 없습니다. 만드는 애플리케이션이 요구하는 사항들에 대해서 알맞은 도구를 사용하는 것이 프레임워크를 올바르게 사용하는 것입니다.
책에서 프레임워크를 가구에 비유합니다. 이케아와 같은 곳에서 산 옷장은 알맞은 구성 요소와 조립하는 방법을 알려주는 설명서를 받게 됩니다. 여기서 약간의 차이가 있는데 옷장의 요소뿐만 아닌 탁자, 의자와 같은 제품들의 구성 요소 또한 받게 되는 것인데, 내가 필요한 원하는 구성 요소만을 사용해서 조립하는 것을 애플리케이션 프레임워크와 비슷하다고 할 수 있습니다.
사실 프레임워크에 대한 아이디어는 새로운 것이 아니고 항상 존재해왔습니다. 초창기부터 개발자들은 이미 존재하는 코드들의 일부를 재사용해왔습니다. 시간이 지남에 따라 수많은 코드들이 재사용되는 과정에서 많은 애플리케이션이 비슷한 요구 사항이 존재하는 것을 알게 되었습니다.
비즈니스 로직 코드는 애플리케이션이 비즈니스 요구 사항을 구현하는 코드로 말합니다. 사용자가 기대하는 기능을 구현한 코드 부분을 비지니스 코드라고 합니다. 하지만 모든 앱은 보안, 로깅, 데이터 일관성 등 다른 측면들도 추가로 처리해야 합니다. 그렇기에 앱에 구현된 비즈니스 로직 코드는 위의 공통된 부분들에 비해 작습니다.
그렇기에 우리는 매번 동일한 기능을 다시 작성하지 않고 동일한 부분을 재사용하여 효율적으로 애플리케이션을 만드려고 합니다.
스프링을 프레임워크라고 하지만 훨씬 더 복잡한 구조를 가지고 있습니다. 스프링은 하나의 생태계와 같다고 할 수 있습니다. 일반적으로 개발자가 스프링 프레임워크를 참조한다면 다음과 같은 소프트웨어 기능의 일부를 참조합니다.
스프링 코어는 스프링 프레임워크의 가장 기본적인 메커니즘을 제공합니다. 스프링은 Inversion of Control(IOC) 원칙을 기반으로 작동하여 빈을 제어하는 등 스프링의 근간이라 할 수 있는 기능들을 제공합니다.
애플리케이션은 처리하고 있는 데이터를 유지하는 것이 중요합니다. 데이터베이스 작업을 기본으로 하며 데이터의 지속성을 관리하는 데 사용할 데이터 액세스 모듈을 제공합니다.
스프링으로 개발된 가장 일반적인 웹 애플리케이션이며 다양한 방식으로 웹 애플리케이션과 서비스를 작성할 수 있는 수많은 기능을 제공합니다. 오늘날의 수많은 애플리케이션이 가장 일반적으로 사용하는 서블릿 방식을 사용합니다.
스프링 테스트 모듈은 단위 테스트, 통합 테스트를 작성하는 데 사용하는 많은 도구들을 제공합니다. 테스트는 굉장히 중요하며 놓쳐서는 안 되는 부분입니다.
스프링의 생태계는 앞부분의 기능들보다 훨씬 더 많습니다. 여기에는 Spring Data, Spring Security, Spring Cloud, Spring Batch, Spring Boot과 같이 많은 프로젝트가 있습니다. 이러한 프로젝트는 함께 사용도 가능합니다. 예를 들어 Spring Boot, Spring Security Spring Data 모두 사용하여 앱을 만들 수 있습니다.
스프링 프레임워크에 대한 기본 지식을 알게 되었다면 스프링 프레임워크를 사용할 시기와 이유를 알 수 있습니다. 하지만 많은 개발자들이 단순하게 백엔드 애플리케이션에서만 스프링을 사용하는 것을 보았습니다. 사실 스프링 프레임워크는 다른 부분에서도 충분히 사용할 수 있습니다.
백엔드 애플리케이션은 서버 측에서 실행되는 시스템의 일부이며 데이터를 관리하고 클라이언트의 요청을 처리하는 책임을 가지고 있습니다. 또한 사용자 데이터 처리하는 작업을 합니다. 백엔드 앱은 여러 방식으로 다른 앱과 상호 작용하고 데이터 베이스를 사용하여 데이터를 관리하는 일을 합니다.
자동화 테스트는 개발자가 애플리케이션이 예상대로 작동하는지 확인하기 위해 사용하는 스프트웨어의 구현 부분입니다. 소규모 시스템에서는 테스트를 수동으로 수행해도 상관없지만 규모가 커지고 흐름이 중요한 애플리케이션일 경우 효율적인 자동 시스템을 구축하는 것이 중요합니다.
데스크톱과 모바일 앱 또한 스프링을 통해 개발되기도 합니다. 데스크 톱 애플리케이션은 다양한 웹과 모바일 앱과 상호 작용하기에 자주 개발되지는 않지만 스프링 IOC 컨테이너를 통한 인스턴스 관리를 이용하여 깔끔한 구현과 뛰어난 유지보수를 제공하기 때문입니다. 모바일 안드로이드는 굉장히 드문 경우이지만 스프링을 통해서 개발이 가능하다는 점은 언급할만한 가치가 있습니다.
프레임워크가 만능처럼 보이지만 사용을 피해야 하는 이유도 분명히 존재합니다. 너무 많은 도구를 사용했을 때의 부작용 이거나 간단한 시스템을 너무 어려운 방법으로 처리한다거나 여러 이유가 있습니다.
애플리케이션을 작게 만들어야 하는 경우 스프링 프레임워크의 종속성을 초기화하는 등의 작업을 하는 것은 너무 큰 메모리를 차지하게 됩니다. 따라서 가능한 작은 크기의 애플리케이션을 개발해야 하는 경우에는 Doker, Kubernetes와 같은 방식을 차용하는 것이 좋습니다.
국방 또는 정부 조직과 같이 특수한 보안 사항이 중요한 경우에 오픈 소스 프레임워크는 보안 상 좋지 않습니다. 물론 오픈 소스이기에 많은 사람들이 취약점을 발견하고 이를 수정하여 높은 보안성을 가지니까 괜찮다고 할 수 있지만 이런 정보조차 공개하고 싶지 않을 수도 있습니다.
프레임워크의 구성 요소를 사용하여 개발하는 것보다 그냥 사용자 정의 구성 요소를 개발자 스스로 만드는 것이 더욱 코드가 짧은 경우도 있습니다. 대부분의 경우 프레임워크를 활용하고 남은 부분을 사용자 정의로 처리하지만 사용자 정의의 크기가 프레임워크의 부분보다 압도적으로 많을 수 있기에 조심해야 합니다.
이미 만들어진 애플리케이션을 프레임워크로 전환하면 더 좋지 않을까?라는 생각을 자주 할 수 있습니다. 하지만 변경하는 부분에서 기존 애플리케이션이 작동하는 방식과 프레임워크의 작동 방식 사이에서 문제가 발생할 수 있습니다. 그렇기에 프레임워크로의 변경이 마땅한 이점을 주지 않을 수 있습니다.
이 외에도 JDBC Template을 배우고 Hibernate 등에 대해서 학습합니다.
OREILLY의 스프링 관련한 책 중에서 상당히 높은 점수를 받고 있어서 한번 읽게 되었는데 나와 너무 잘 맞는 책이라서 선택하게 되었다. 책이 영어로 되어있어서 많이 불편하긴 하지만 내가 선호하는 방식으로 책이 구성되어 있어서 1장을 다 읽자마자 이 책을 공부해야겠다고 생각했다.
지금까지 스프링에 관해서 여러 번 배우려고 노력도 했었는데 매번 좌절되었다. 가장 큰 이유는 DI니 IOP니 이해가 가지 않는 내용들로 시작해서 일단 하면서 배워 그러면 나중에 설명해 줄게 의 방식이 나와 너무나도 맞지 않았기 때문이다. 나는 이론을 알아야 예제도 볼 수 있는 아주 꽉 막힌 인간이기 때문이다. 그렇기에 이 책의 1장을 보자마자 드는 생각은 이게 스프링을 설명해주는 책이지 라는 생각을 많이 하게 되었다. 물론 내가 모자라서다.
사실 스프링이 무엇인지 정확하게 이야기할 수 없었다. 그냥 프레임워크의 일종? 정도였다. 하지만 이 책은 1장부터 스프링 프레임워크란 무엇인지 정확하게 설명해주고 있어서 좋았다. 단순한 프레임워크가 아닌 하나의 생태계와 같은 넓은 범위의 스프링을 나타내는 것이었다. 그렇기에 나는 스프링 부트와 스프링 데이터를 함께 사용할 수 있다는 사실조차 몰랐다. 이제야 스프링이 어떻게 생겼는지 정확하게 알게 되었다.
스프링은 만능이 아니다. 나는 자바 웹 개발자가 되기에 열심히 공부를 하고 있었기에 스프링을 배우면 모든 것을 할 수 있지 않을까?라는 생각을 했다. 거기다가 블로그들의 글을 보면 스프링의 단점? 초기 세팅이 어렵고 난이도가 높다 정도였기에 와 진짜 만능이구나 라는 생각을 했다. 하지만 스프링 또한 단점이 있고 이런 부분을 보니까 다른 관점에서 스프링을 바라볼 수 있게 되었다. 이렇게 나는 스프링을 바라보는 지식의 깊이가 늘게 된 것 같다.
한 번도 들어보지 못한 개념이었다. 스프링을 구현하는 가장 기본적인 요소지만 처음 들어봤다. 1장에서 스프링 코어의 중요성을 얘기하고 다음 장에서 이를 중심적으로 다룬다고 하기에 집중해서 공부할 예정이다. 그리고 가장 중심부를 단단하게 다져서 주변 부분으로 뻗어나가는 공부 방식으로 공부하려고 한다.
스프링을 어떻게 서든 공부해야지 했고 엄청나게 도전하고 IOC REST 이런 부분만 어떻게 해보려고 끙끙되다가 만난 한줄기 빛 같은 책이다. 하면서 배우고 이 정도만 다루면 회사에서 지장이 없다고 하는 강의는 그만 듣고 싶다. 나는 어떻게 스프링이 생겼고 작동하는지 궁금했고 왜?라는 질문에 대답을 얻고 싶기에 이 책을 선택했다.
물론 걱정되는 점도 많다. 영어로 된 책이다 보니까 이해하고 공부하는데 시간이 많이 걸린다. 그냥 많이 걸리는 것이 아닌 엄청 많이 걸린다. 내 영어 실력이 아주 형편없기 때문일 것이다. 이 글을 작성할 때도 영어를 번역하는 과정에서 굉장히 애를 먹었다. 하지만 포기할 생각은 없다.
생각해 보면 내가 쉽게 배우는 것은 남들도 쉽게 배울 것이다. 어렵게 깊게 배우고 내 것으로 만들기 위해 노력할 것이다.
도움 받은 곳