[Spring] Spring이란?
Spring이란?
- Java언어 기반의 프레임워크
- Java로 다양한 어플리케이션을 만들기 위한 프로그래밍 틀
프레임워크❓
- 프로그램 기본 구조(뼈대)
- 원하는 기능 구현에만 집중하여 빠르게 개발할 수 있도록 기본적으로 필요한 기능을 갖추고 있는 것.
쉽게 이해할 수 있도록 집을 짓는 것으로 비유를 해보자.
사용자가 집을 직접 짓기 위해 설계도를 직접 그리고 각각의 기초 작업들을 일일이 하는 것 보다, 전문가들의 도움을 받아 작업을 하면 더욱 쉽고 효율적으로 집을 지을 수 있는 것처럼 프레임워크를 사용한다면 프레임워크가 제공하는 여러 기능들을 사용해서 빠르고 효율적으로 프로그램을 구축할 수 있을 것이다.
프레임워크를 사용하면 뭐가 좋을까❓
개발 프로세스 간소화
프레임워크에서 제공하는 여러 도구와 패키지는 개발자가 스크립트를 처음부터 작성할 필요가 없고, 이미 만들어진 코드를 재사용하게 되므로 재사용성을 높이고, 시간과 비용을 아낄 수 있다.
유지보수 용이
프레임워크를 사용한다면 코드가 체계적이고 상대적으로 정형화되기 때문에, 개발자가 중간에 교체되더라도 위험이 적고, 이후 소스코드의 유지보수도 상당히 용이해진다.
보안
개발자는 일반적으로 SQL Injection, CSRF 등 외부 공격을 방어하기 위한 추가적인 소스코드를 작성해야하지만, 프레임워크를 사용하면 이러한 일들을 할 필요가 없다. 대부분의 프레임워크와 함께 제공되는 보안 기능들은 개발자가 웹 사이트 혹은 애플이케이션을 보호할 수 있는 방법을 제공하기 때문이다.
그럼 프레임워크의 단점은 없을까❓
사전학습
다양한 기능을 제공하고, 미리 만들어져있는 기능을 사용하기 위해서는 학습이 필요하다. 새로운 프레임워크를 학습하고 사용하기 위해서는 많은 공부가 필요하다.
제약사항
제공하고 있는 기능들 외에, 원하는 옵션을 추가하는 것에 굉장히 보수적일 수 있다.
사용법이 정해져 있고, 기본적으로 설계된 구조를 바탕으로 코드를 작성하고 기능을 완성해야하기 때문에 코드를 유연하게 개발하는데 있어서 한계가 있을 수 있다.
크기
프레임워크는 많은 기능을 제공한다. 이는 개발하면서 필요하지 않은 기능도 포함된다는 것을 의미하고, 불필요한 기능이 메모리를 차지하기 때문에 리소스 낭비로 이어질 수 있다.
💡스프링(Spring)의 특징 -⭐ 결합도를 낮춰 유연할 개발 가능하게 해준다!
- 제어의 역전(IOC : Inversion of Control)
- 프로그램의 생명주기에 대한 제어권이 웹 애플리케이션 컨테이너에 있다.
- 사용자가 직접 new 연산자를 통해 인스턴스를 생성하고 메서드를 호출하는 일련의 생명주기에 대한 작업들을 스프링에 위임
- 객체관리 주체가 프레임워크(Container)가 되기 때문에 개발자는 로직에 집중할 수 있다는 장점이 있다.
- 의존성 주입(DI)
- 객체 사이에 필요한 의존 관계에 대해서 스프링 컨테이너가 자동으로 연결해 주는 것
- DI를 이용하여 빈(Bean) 객체 관리, 스프링 컨테이너에 클래스를 등록하여 스프링이 클래스의 인스턴스를 관리해 준다.
- XML 설정을 통한 DI - applicationContext.xml에서 설정
- 어노테이션을 이용한 DI
12345678910//DI가 없는 예제@RestControllerpublic class Controller{Service service = new Service(); //객체간의 결합도↑@RequestMapping("/hello")public String hello(){return service.helloMessage();}}cs 12345678910111213141516171819202122//DI가 있는 예제//service@Componentpublic class Service{public String helloMessage(){return "hello~"}}//controller@RestControllerpublic class Controller{@AutowiredService service;@RequestMappint("/hello")public String hello(){return service.helloMessage();}}cs
- 관점 지향 프로그래밍(AOP)
- 주요 핵심 기능과 핵심 기능 구현을 위한 부가적인 기능(로깅 작업, 데이터베이스 연결 및 트랜잭션 처리, 파일 입출력 등) 구현을 분리하여 각각의 관점별로 묶어서 개발하는 방식
- 주요 핵심 기능과 핵심 기능 구현을 위한 부가적인 기능(로깅 작업, 데이터베이스 연결 및 트랜잭션 처리, 파일 입출력 등) 구현을 분리하여 각각의 관점별로 묶어서 개발하는 방식
그럼 왜 스프링 부트가 필요할까❓
- Spring MVC 프레임워크를 사용할 때 applicationContext.xml이외에 다양한 설정을 통해 의존성을 주입해야한다.
- 기본 프로젝트를 셋팅하는데 많은 시간 소요
그럼 Spring Boot는 뭐가 다를까❓
- Spring Boot는 따로 설정할 필요 없이 단지 실행만 하면 된다!
- spring-boot-starter-web을 사용하면 종속된 모든 라이브러리를 알맞게 찾아서 가져오기 때문에 종속성이나 호환 버전에 대해 신경 쓸 필요가 없다!
공부하면서 작성한 글입니다. 틀린 내용이 있다면 알려주세요!🙏🏻
👀 참고
https://dzone.com/articles/spring-vs-spring-boot
https://msyu1207.tistory.com/entry/Spring-VS-Spring-Boot-차이점을-알아보자