티스토리 뷰

반응형

안녕하세요. 백오타빅 입니다.

요즘에 공부하고 있는 Spring을 정리하며 공유해보자라 생각이 들어서 게시글을 쓰게 되었습니다.

 

일단 Java를 사용해 웹 개발을 하려면 빠질 수 없다고 생각이 드는 Spring 프레임워크 라는 것에 대해 알아보도록 하겠습니다.

 

내용이 조금 길어질 것 같습니다..

본문부분/예제 소스 부분/인용으로 표시한 요약 부분

이렇게 나뉘어 지니 간단하게 보고 넘기시겠다 하시면 예제 소스 부분과 인용으로 표시한 요약 부분만 보셔도 괜찮으실 거 같습니다.

 

1. Spring 이란 무엇인가?

다들 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크라고 하더라구요. 근데 저는 이 문장을 봐도 이해가 딱 안되어 또 다시 문서를 정리하게 되었습니다.

그래서 제가 정리한 Spring은 무엇인가를 적어보겠습니다.

 

Java를 사용하며 요구 조건이 많은 기업에서 사용해도 편하며 공개되어 있고 언제나 무료로 사용할 수 있는 소스인데도 필요한 기능만 들어가 불필요하게 무겁지 않은 이미 구조화 된 뼈대

 

그냥 위에 있는 말을 풀어서 말한겁니다..ㅋㅋ

그래도 풀어서 얘기해주는 곳들은 글들이 너무 많아서 이해하다가 까먹게되더라구요..

 

어쨋든 그래서 Spring이란 가볍고 편하고 많이 사용하는 프레임워크라는 것입니다.

 

2. Spring을 왜 사용해야하나?

이제 Spring에 대해 간단하게라도 알았다면 Spring을 사용해야하는 이유도 알아야겠죠

일단 혼자서만 개발을 한다 그러면 굳이 Spring을 사용안해도 된다고 생각합니다.

하지만 대부분 타인과 같이 개발을 하게 될 것입니다.

그리고 기업을 대상으로 개발을 한다면 타 시스템에 연결을 해야하거나 짜잘한 기능을 계속 추가해야한다거나 등 이미 짜둔 소스를 또 변경해야하는 부분들이 많습니다.

물론 개발을 빠삭하게 알고 구조도 완벽하게 파악해서 더 좋은 소스를 만들 능력이 있다면 당연히 필요 없겠지만 이런 능력을 만들기에는 쉽진않죠..

 

그래서 Spring이라는 프레임워크라는 것을 사용하는 것입니다.

유지보수가 쉽고 큰 프로젝트에서도 별 탈 없이 개발에 몰두할 수 있다.

 

3. Spring의 주요 특징

Spring 프레임워크를 사용하는 이유에 있어선 주요 특징들이 훌륭해서 사용한다고 생각합니다.

일단 알기 전에 알아야 할 기초 지식들이 있습니다.

그것은 바로 비즈니스 로직과 POJO 라는 것인데요.

 

일단 비즈니스 로직이란?

사용자에게 보여주는 부분 이외의 각종 역할들을 처리하는 알고리즘 이라고 생각합니다.

간단하게 말해선 view 이외의 각종 과정이라고 말할 수 있을거 같네요.

 

그럼 POJO란?

특정 규약과 환경에 종속되어있지 않고 Java의 특징인 객체지향원리에 충실해야한다고 합니다.

그니깐 예를 들어 특정 클래스나 컴포넌트를 사용하여 특정된 의존성을 생기게 만드는 것이 아닌

Java의 장점을 살린 평범하고(Plain) 오래(Old) 사용된 자바(Java) 객체(Object)를 말합니다.

예시가 적절할 진 모르겠지만 또하나 예를 들자면 JS를 사용할 때 Jqeury를 사용하는 것 보단 Vanilla JS를 사용하자 라는 것이 아닐까 싶습니다

 

이제 기초 지식들도 다 알았으니 Spring에 대한 장점을 간단하게 설명해보겠습니다.

3-1. 제어의 역전(IOC)

IOC는 Inversion Of Control 라는 단어의 약자로 이루어져있습니다.

제어의 역전. 한마디로 기존엔 개발자가 필요한 기능을 직접 선언해 사용하는 것이 아닌 이런 제어의 권한을 프레임워크가 대신 해주는 것. 완전 거꾸로 되어버립니다.

그럼 이것이 왜 특징중에 하나이냐 하면은 추후에 나오는 여러 특징들이 IOC 덕분에 가능하기 때문입니다

그래서 지금 이해가 안되실 수도 있으시겠지만 밑에 DI 설명할 차례에서 예시와 함께 더 자세히 설명드리겠습니다.

 

IOC는 Spring 프레임워크에서만 사용하는 방법이 아닌 대부분 프레임워크에서도 사용하는 방식인 것으로 알고 있습니다.

 

개발자가 객체를 선언하여 관리하던 부분을 프레임워크가 대신 해준다.

3-2. 의존성 주입(DI)

우리가 사용해야 하는 객체는 다른 객체를 필요로 한다면 어떻게 할까요?

사용해야 하는 객체에 다른 객체를 인스턴스화해서 만들어준다거나 아니면 생성자 또는 Setter를 사용해 넣어주겠죠?

사용하는 객체 안에 인스턴스화를 해 만들어주는 예시 소스

DI의 특징이 살리지 않은 객체 선언

Mclass 라는 인사를 해주는 메인 클래스, Insa 라는 인삿말을 저장하고 있는 클래스가 있습니다.

영어를 쓰고 있는 곳에서는 Hello 라는 말로 인사를 나눌텐데요. 우리나라에서는 한국어를 사용해야합니다.

그러려면 Insa 클래스 안에 있는 String의 타입인 Hello라는 값을 한국어로 변경해주어야하는데

변경할 때 실수로 안에 있는 기능을 잘못 건들여 값을 못받아오면 어떻게 될까요? 정말 위험하겠죠.

 

차라리 메인 클래스에서 인스턴스화가 잘못되었다거나 출력해주는 라인이 잘못되었으면 한눈에 보일 텐데

코어 기능이 잘못되었으면 그와중에 기능적인 소스들이 많아진다면 찾기 힘들 것 입니다.

 

그래서 DI의 기능은 의존하는 것은 주입을 해 사용하자 라는 것이 나온 것이구요.

그럼 DI의 특징을 살려서 소스를 만들어볼까요.

 

생성자를 이용한 생성자 주입
Setter를 이용한 의존성 주입

 

이렇게 값을 받고 가지고 있는 클래스와 값을 주고 출력하는 클래스가 따로 있으면 기능이 나누어지고 객체들의 관계에 대한 것도 느슨해지며 다른 클래스에서도 사용할 때 더욱 편하게 접근하기 쉬울 것 입니다.

하지만 이 것이 IOC랑 무슨 상관이냐? 라고 생각이 드실 수도 있으십니다.

맞습니다. 아직 IOC와 전혀 관련없는 것인 DI의 특징만 설명했습니다.

 

그럼 IOC랑은 이제 어떻게 연관이 되냐 하면 지금 위에 같이 개발을 할 때 우리가 가져와서 직접 주입을 하여 사용했습니다.

 

하지만 Spring 프레임워크에서 제공하는 @(어노테이션)와(과) XML 파일로 설정하는 방법이 있습니다.

이 부분은 나중에 설명드리겠지만 간단하게 설명을 하자면

우리가 클래스나 메소드들을 인스턴스화해 사용할 때 연산자 new를 사용해 선언하고 관리했습니다.

하지만 이러한 과정을 프레임워크에게 넘겨 개발자가 작성만 해주면 프레임워크가 대신 해주는 것입니다.

그래서 우리가 소스를 작업하는 부분과 의존성을 주입해야하는 부분이 나뉘어서 유지 보수성이 높아지게 된다.

 

의존하는 것들은 내부 소스에 선언하는 것이 아닌 외부 소스로 뺀 다음 주입하는 방식이다.

 

여기까지 Spring에 대해 기초적인 부분들은 설명을 다 드렸습니다. 혹시 궁금한 부분을 질문하신다거나 틀린부분 혹은 조언을 해주시면 감사히 받겠습니다.

지금까지 봐주셔서 감사합니다.

반응형

'프로그래밍 > Spring' 카테고리의 다른 글

1. Spring Framework의 설치하기 전  (0) 2020.03.19
댓글