스프링 프레임워크(Spring Framework)의 탄생배경, 장단점
취업준비/면접준비우선 프레임워크가 무엇인지 알고가자!
Framework 란?
프레임워크는 말그대로 뼈대이다.
뼈대의 의미를 소프트웨어적인 관전에서 보면
아키텍쳐에 해당하는 골격 코드이다.
(골격코드란? - 프로그램의 골자만 기술한 불완전한 형식의 명령어, 명령아가 사용될 때마다 완전하게 또는 상세히 지정해야만 한다.)
특정한 목적에 맞게 프로그래밍을 쉽게 하기 위한 약속.
모든 프레임워크는 어떤 언어를 기반으로, 어떠한 목적을 갖고 만들어졌다.
가장 헷갈려 하는 게 라이브러리 인데, 라이브러리는 우리가 직접 클래스를 new로 생성해서 사용하는 것이라고 보면 되고,
프레임워크는 내가 만든걸 framework가 사용해주는 것을 말한다.
이런 걸 제어의 역전(Inversion of Control), 뒤집혀진 라이브러리라고 한다.
개발자 입장에서 프레임워크를 본다면,
다른 개발자 2명이 서로 다른 기술과 경험으로 코드를 작성한다고 해보자,
그리고 프로젝트가 끝나면 다른 사람이 프로젝트에 대해 유지보수를 할 수 있는데
2명 다 코드가 전혀 다르기 때문에 유지보수 하기가 힘들다.
근데 이때, 만약 뼈대(골격)가 같다면
각기 다른 자유분방한 코드보다는 유지보수가 수월할 것이다.
이러한 이유로 프레임워크가 탄생하게 되었다.
등장배경을 간략히 말하자면, EJB(엔터프라이즈 자바빈즈(Enterprise JavaBeans; EJB)는 기업환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델이다. 즉, EJB는 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션이다. EJB 사양은 Java EE의 자바 API 중 하나로, 주로 웹 시스템에서 JSP는 화면 로직을 처리하고, EJB는 업무 로직을 처리하는 역할을 한다.)가 전에 개발자들이 사용하던 서버 애플리케이션이었는데 고가의 장비(WAS 등등)이 필요했고, 개발환경 설정 그리고 테스트 환경에 많은 애로사항이 있어서 훨씬 가볍게 애플리케이션을 개발할 수 있는 프레임워크인 Spring이 등장했다고 합니다. EJB에 비해 톰캣 컨테이너를 사용하고, 코드의 경량화 그리고 개발 중 테스트가 쉽다는 장점이 있습니다.
EJB에서 선언적 트랜잭션(자동적으로 예외처리, 커밋을 해주는 것이라고 생각하면 된다.), 분산 컴포넌트(Enterprise Component)라는 좋은 특징을 갖고 있었지만, 위에서 말한 것과 같이 어렵고 무겁고 테스트도 안되고 그랬는데, Spring에서 EJB의 좋은 특징을 갖고 단점을 줄여서 개발자들의 봄이 왔다고 해서 이름도 Spring이라고 지었다고 합니다.
* 스프링프레임워크의 장단점 ?
프레임워크 장점
- 정형화 되어있어서 일정수준의 품질을 기대할 수 있고,
유지보수가 쉽다. (프레임워크 숙달자 기준) 등
프레임워크 단점
- 습득시 노력과 시간이 필요하다.
- 무겁다 등
스프링 장점 (다른 프레임워크에 비교)
- 개발자가 기본적인 디자인 패턴 (DI, AOP, 서비스 추상화 등)을 강제적으로 사용하도록 한다.
- 유연성이 좋다. 등
- 각 모듈을 조립(설정만 완벽하게 하면)하면 기능을 쉽게 구현가능하다.
- 모듈(기능) 추가및 제거 - 관리가 수월하다.
스프링 단점
- 습득시간이 오래 걸린다.
- 무겁다. model 1 방식 개발방식에 비해서 상대적으로?
- 스프링 설정하는 것에만 익숙해지다보니 코딩 실력이 떨어지게됨.
(스프링이 구현해 놓은걸 직접 구현하면서 코딩실력을 늘릴수 있는데 그렇게 못해서..)
출처
coneseo.tistory.com/31
https://keehyun2.tistory.com/entry/스프링-프레임워크-장단점-분석 [khp blog]
'취업준비 > 면접준비' 카테고리의 다른 글
JSP(Java Server Pages) 의 정의, 장단점 (0) | 2021.03.18 |
---|---|
프레임워크와 라이브러리 차이점(Framework & Library) (0) | 2021.03.16 |
의존성 주입(Dependency Injection) (0) | 2021.03.15 |
관심사 분리 (Separation of Concerns, SoC) (0) | 2021.02.22 |