개발자 '쑥말고인절미'
스프링 프레임워크 시작하기 본문
프레임워크와 라이브러리
- 프레임워크란, 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것
- 라이브러리란, 자주 사용되는 로직을 재사용하기 편리하도록 잘 정리한 일련의 코드들의 집합
- 쉽게 말하면
- 프레임워크는 자동차의 프레임, 즉 기본적으로 구성하고 있는 뼈대를 의미
- 라이브러리는 자동차의 기능을 하는 부품. 바퀴, 헤드라이드, 와이퍼 등
프레임워크 종류
- 자바 프레임워크 : Struts, Spring, 전자정부 프레임워크
- QRM 프레임워크 : myBatis(iBatis), Hibernate
- 자바스크립트 프레임워크 : AngularJS, React, Polymer, Ember
- 프론트엔드 프레임워크 : Bootstrap, Foundation, MDL
프레임워크 장점
- 효율적
- 아무것도 그려지지 않은 제로에서 코드를 일일이 짜는 것보다 시간과 비용이 훨씬 절약되며 생산성이 좋아진다.
- Quality 향상
- 버그 발생 가능성을 처리해줌으로써 개발자가 반복 작업에서 실수하기 쉬운 부분을 커버해준다. 다수의 개발자가 사용하며 수정하다 보니 이미 검증된 코드라고 볼 수 있다.
- 유지보수성
- 프레임워크를 쓰지 않고 일일이 코드를 짜 놓은 경우, 회사 입장에서 개발 담당자가 바뀌어버리면 곤란해진다. 그러나 프레임워크를 사용하면 코드가 보다 체계적이어서 담당자가 바뀌더라도 위험부담을 줄일 수 있으며 유지보수에 안정적이다.
프레임워크 단점
- 학습시간이 길다
- 코드를 본인이 짜 놓은 것이 아니기 때문에, 프레임워크에 있는 코드를 습득하고 이해하는 데 오랜 시간이 걸린다.
- 제작자의 의도된 제약 사항
- 제작자가 설계한 구조를 어느 정도 유지한 채 코드에 살을 붙여나가야 한다. 따라서 개발자는 자유롭고 유연하게 개발하는 데 한계가 있다.
스프링 프레임워크 특징
- POJO(Plain Old Java Object) 방식
- POJO는 Java EE의 EJB를 사용하면서 해당 플랫폼에 종속되어 있는 무거운 객체들을 만드는 것에 반발하여 나타난 용어이다. 별도의 프레임워크 없이 Java EE를 사용할 때에 비해 특정 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기가 용이하고, 객체가 가볍다.
- 관점 지향 프로그래밍(Aspect Oriented Programming, AOP)
- 로깅, 트랜잭션, 보안 등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리할 수 있다. AspectJ를 포함하여 사용할 수 있고, 스프링에서 지원하는 실행에 조합하는 방식도 지원한다. 이 분리 관리한다는 게 개념이 처음에 이해하기 어려운데, 추상/부모/클래스나 인터페이스로 관리되나는 게 아니라 모듈을 관리해주는 모듈을 상하/인터페이스 관계없이 따로 마련한다는 개념에 가깝다.
- 쉽게 설명하자면 C언어에서는 중복할당을 줄이기 위해서 간접적으로 값을 가리키는 포인터로 가리키는데, Spring에서는 반복할당을 줄이기 위해 포인터를 대신하여 스프링 어노테이션을 사용하는 것이라고 보면 된다.
- 의존성 주입(Dependency Injection, DI)
- 프로그래밍에서 구성요소 간의 의존 관계가 소스코드 내부가 아닌 외부에서 설정을 통해 정의되는 방식이다. 코드 재사용을 높여 소스코드를 다양한 곳에 사용할 수 있으며 모듈간의 결합도도 낮출 수 있다. 계층, 서비스 간에 의존성이 존재하는 경우 스프링 프레임워크가 서로 연결시켜준다.
- 어노테이션을 이용하여 DI가 이루어지게 되는데 예로 @Controller, @Service가 있다.
- 제어 역전(Inversion of Contorl, IoC)
- 전통적인 프로그래밍에서는 개발자가 작성한 프로그램이 외부 라이브러리의 코드를 호출해서 이용했다. 제어 역전은 이와 반대로 외부 라이브러리 코드가 개발자의 코드를 호출하게 된다. 즉, 제어권이 프레임워크에게 있어 필요에 따라 스프링 프레임워크가 사용자의 코드를 호출한다.
- 생명주기 관리
- 스프링 프레임워크는 Java 객체의 생성, 소멸을 직접 관리하며 필요한 객체만 사용할 수 있다.
스프링 프레임워크 구조
- Core
- 제어 역전(IoC)과 의존성 주입(DI) 기능을 제공한다. 생소한 용어일 수 있으나 제어 역전은 전체적인 프로세스의 흐름이 개발자가 아니라 프레임워크(여기서는 Spring)에 의해 결정된다는 뜻이다. 개발자는 프레임워크가 정한 틀에 따라 적절한 코드를 작성해 넣기만 하면 되기 떄문이다. 의존성 주입은 객체 생성에 관한 뜻이다.
- 클래스 A와 B가 있다고 할 때, A클래스의 메소드 내에서 B클래스의 객체를 생성하여 비즈니스 로직에 사용하면 A는 B에 의존하는 관계가 된다. 그리고 A, B클래스가 아닌 외부에서 A클래스의 메소드를 호출하고, 파라미터 값으로 B클래스의 객체를 전달한다면 이것은 주입이 된다.
- 그렇다면 의존성 주입은? 이 두 상황을 합치면 된다. 파라미터 값으로 전달받은 B객체를 A클래스의 메소드 내에서 비즈니스 로직에 사용하는 것을 의미한다.
- 즉, A와 B는 의존 관계가 외부에서의 주입을 통해 이루어진 것이다.
- DAO
- JDBC 추상 계층을 제공한다. JDBC는 자바의 데이터베이스 커넥터이다. 데이터가 담겨있는 VO(Value Object) 클래스를 이용해 사용한다.
- ORM
- JPA. Hibernate와 같은 ORM이나 MyBatis 같은 데이터베이스 API 등과 통합할 수 있는 기능을 제공한다.
- AOP
- 스프링 스레임워크에서 제공하는 AOP 패키지를 제공한다. 공통로직을 한 군데에서 관리해서 공동으로 사용한다는 개념 자체는 어렵지 않으나, 데이터와 변수가 어디서 어디로 오고가는지를 따지면 매우 어려울 것이다.
- 스프링 공부하는 도중 최악의 난이도를 지닌 구간이라고 한다. 처음 공부할 때는 대충 보고 뒤에 내용을 계속 공부하는 것을 추천하고, 실질적으로는 로그찍기용이 대부분이라고 한다.
- Web : Spring Web MVC, Struts, WebWork 등 웹 애플리케이션 구현에 도움되는 기능을 제공한다.
- JEE : EJB, JMX 등의 엔터프라이즈 J2EE 스펙에 관한 기능을 제공한다.
+
참고링크 맨 하단의 링크는 스프링을 배워야하는 이유에 대해 개인적인 의견이 적혀있다. 필자의 개인적인 의견이지만 나도 궁금했던 내용이었고, 다른 사람들도 똑같이 궁금해하는 것 같아서 링크를 남겨둔다. 미래의 나를 위해서~ 같은 질문을 던지는 다른 사람들을 위해서~
참고링크
https://moolgogiheart.tistory.com/87
프레임워크(Framework)란? 개념, 장단점, 종류
프레임워크라는 개념을 접하기 전에 '부트스트랩(Bootstrap)'이란 용어를 먼저 알게 되었습니다. 웹 프로젝트를 개발하기 위한 좋은 툴이라는 것을 듣게 되었죠. 그래서 부트스트랩이 무엇인지 자
moolgogiheart.tistory.com
https://namu.wiki/w/Spring(%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC)
Spring(프레임워크) - 나무위키
2017년 Spring Framework 5.0 출시와 함께 도입된 새로운 모듈. 기존의 Servlet 기반 Spring MVC의 단점을 해소하고자 만들어진 모듈이기 때문에 바닥부터 다시 만들었다. 주로 non-blocking과 함수형 프로그래
namu.wiki
https://seolin.tistory.com/119
왜 자바 Spring만 뽑나요? 꼭 배워야 하나요?
들어가며 취준생 시절 때부터도 쭉 간직해 온 의문이 있었습니다. 내로라하는 대기업들의 구직 공고를 보면, 항상 따라오는 조건들이 있었죠. Java 언어 사용이 능숙한 분 Spring Framework 개발 경험
seolin.tistory.com
'STUDY > Spring & SpringBoot' 카테고리의 다른 글
[Spring] Mapper.java와 Mapper.xml 설명 참고링크 (0) | 2022.11.29 |
---|---|
[Spring] maven, pom.xml에 대하여 (0) | 2022.11.26 |
스프링 및 스프링 부트 어노테이션 정리(1) (0) | 2022.11.19 |
스프링 컨테이너 BeanFactory와 ApplicationContext (0) | 2022.11.12 |
[메모] IntelliJ 처음 프로젝트 실행 시 오류 발생 참고링크 (0) | 2022.10.22 |