[Naver Cloud Camp 7] 교육 정리

네이버 클라우드 캠프 70일차 230802

우기37 2023. 8. 2. 20:31

#1 교육정리

1) Spring 이란?

 

 

#2 Spring?

Spring이란)

- JAVA의 웹 프레임워크로 JAVA 언어를 기반으로 사용한다. JAVA로 다양한 어플리케이션을 만들기 위한 프로그래밍 틀이라 할 수 있다.

 

- 옛날에 비교하면 지금은 JAVA의 활용도가 높아졌고 따라서 프로젝트 규모도 커졌다. JAVA를 이용한 기술은 JSP, MyBatis, JPA 등 여러가지가 있는데 즉, 이 기술들이 프로젝트에 많이 쓰인다고 할 수 있다. Spring은 이 기술들을 더 편하게 사용하기 위해 만들어진 것이다.

 

- 프로젝트를 진행하다 보면 아무리 분업을 해도 분명 중복되는 코드가 있기 마련이다. Spring은 이런 중복코드의 사용률을 줄여주고, 비즈니스 로직을 더 간단하게 해줄 수 있다.

 

- Spring을 사용하면 다른 사람의 코드를 참조하여 쓰기 편리한데 이말의 의미는 오픈소스를 좀더 효율적으로 가져다 쓰기 좋은 구조라는 것이다.

 

- 소규모 어플리케이션 또는 기업용 어플리케이션을 자바로 개발하는데 있어 유용하고 편리한 기능을 제공하는 프레임워크

- DI, AOP, MVC, JDBC (프로그래밍에 있어 어떤 구조를 만들어가는 방법론) 등을 지원

- 오픈소스 경량급 애플리케이션 프레임워크

 

- 결론적으로 Spring이란 JAVA 기술들을 더 쉽게 사용할 수 있게 해주는 오픈소스 프레임 워크이다.

 

 

프레임 워크와 라이브러리 차이점)

공부를 하다 보면 프레임 워크 틀을 사용할 때가 있고, 라이브러리를 가져와 사용하는 경우가 있습니다.

둘 다 개발에 있어 도움을 주는 역할인 것은 알고 있지만, 용어가 다른 이유가 궁금하여 공부한 내용을 아래와 같이 정리해보았습니다.

 

먼저, 프레임워크란

프레임 워크는 자주 쓰일 만한 기능들을 한데 모아 놓은 유틸(클래스)들의 모음(집합)이라고 정의할 수 있다.

설계의 기반이 되는 부분을 기술한 확장 가능한 기반 코드와 사용자가 이 코드를 자기 입맛대로 수정, 확장하는데 필요한 라이브러리 이 두가지 요소가 통합되어 제공되는 형태이다.

 

사용자가 이 기반 코드를 이용해 일정 수준 이상의 품질을 보장받는 코드를, 비교적 빠른 시간에 완성 및 유지 보수할 수 있는 환경을 제공해주는 솔루션이다.

 

즉 프레임 워크는 기본적인 설계나 필요한 라이브러리는 알아서 제공해줄꺼니깐 개발자는 만들고 싶은 기능을 구현하는데 집중해라는 취지에서 만들어진 것이다.

 

그렇다면 라이브러리와의 차이점은

라이브러리는 개발자가 프로그램을 짜다가 라이브러리가 필요한 순간에 인지하고 라이브러리를 직접 추가해야겠다는 생각이 들었을때 가져다 쓰는 것이다. 라이브러리는 프로그램 기능 구현에만 도움을 줄 수 있다.

 

하지만 프레임 워크는 필요한 라이브러리와 기능 구현에 필요한 설계도 틀을 함께 제공해준다.

여기서 설계도 틀이란 확장 가능한 기반코드, 재사용 가능한 형태의 협업화된 클래스와 같은 뜻이다. 사용자가 세세하게 신경쓰지 않아도 빠르게 기능을 확장하거나 유지보수할 수 있게 해주는 구조에 대한 가이드라인이라 할 수 있다. 즉, 기반이 되는 부모 클래스라 생각하면된다.

 

개발자가 동일한 라이브러리를 쓰는 동일한 기능의 프로그램을 사용할때, 프레임 워크를 사용하면 클래스 관계 구조나, 데이터를 처리하는 절차, 프로그램이 화면에 그려지는 방식 등 일부 틀을 함께 제공 받을 수 있다. 즉, 프레임 워크는 라이브러리+설계도가 함께 온다.

 

 

Spring 흐름)

사실 백마디 글보다는 그림으로 보면 이해하기 쉬운편이여서 그림을 참고해서 공부했습니다.

 

사용자로부터 request -> DispatcherServlet -> HandlerMapping을 통해 Controller연결 -> Service호출 -> DAO를 통해 DB에서 데이터 가져옴 -> ModleAndView 객체에 담아 DispatcherServlet으로 전달 -> ViewResolver을 통해 View와 연결하여 출력

이미지 출처 : https://velog.io/@max9106/Spring-spring%EC%9D%B4%EB%9E%80-x7k4r8d5ij

 

 

Spring 종류)

  • 스프링 프레임워크
  • 스프링부트 (스프링 프레임워크의 모든 기술들을 편리하게 사용할 수 있도록 도와줌)
  • 스프링 데이터 (CRUD를 편리하게 사용할 수 있도록 도와줌)
  • 스프링 시큐리티 (보안 관련 기능을 편리하게 사용할 수 있도록 도와줌)
  • 스프링 세션(세션 기능을 편리하게 사용할 수 있도록 도와줌)
  • 스프링 Rest Docs (api문서를 편리하게 사용할 수 있도록 도와줌)
  • 스프링 배치 (배치처리에 특화)

 

 

Spring 특징)

1. IoC(Inversion of Control, 제어 반전)

- 개발자는 JAVA 코딩시 new 연산자, 인터페이스 호출, 데이터 클래스 호출 방식으로 객체를 생성하고 소멸시킨다.

- IoC란 인스턴스 (객체)의 생성부터 소멸까지 객체 생명주기 관리를 개발자가 하는게 아닌 스피링(컨테이너)가 대신 해주는 것을 말한다.

- IoC는 개발자가 실수할 수 있는 생명주기 관리를 대신 해준다.

- 프로젝트의 규모가 커질수록 객체와 자원을 이용하는 방법이 더 복잡해지고 어디서 코드가 꼬일지 모르는 것을 Spring의 IoC는 자동으로 관리해준다.

- 즉, 제어권이 개발자가 아닌 IoC에게 있으며 IoC가 개발자의 코드를 호출하여 그 코드로 생명주기를 제어하는 것이다.

 

 

 

2. DI(Dependency Injection, 의존성 주입)

- 프로그래밍에서 구성요소 간의 의존 관계가 소스코드 내부가 아닌 외부의 설정파일을 통해 정의되는 방식이다.

- 코드 재사용을 높여 재사용을 높여 소스코드를 다양한 곳에 사용할 수 있으며 모듈간의 결합도도 낮출 수 있다.

- JAVA에서 데이터를 저장하고 가져오는 기능을 외부의 Oracle Database를 사용할 수도 있고, JDBC, iBatis, JPA 등 다른 프레임 워크를 이용해 짤 수도 있다. 이때 Spring을 이용하면 그때마다 필요한 부분을 뺐다 꼈다 하면서 적절한 상황에 필요한 기능을 해낼 수 있다.

 

 

 

3. AOP(Aspect Object Programming, 관점 지향 프로그래밍)

- 로깅, 트랜잭션, 보안 등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리 할 수 있다.

- 각각의 클래스가 있다고 가정하자. 각 클래스들은 서로 코드와 기능들이 중복되는 부분이 많다. 코드가 중복될 경우 실용성과 가독성 및 개발 속도에 좋지 않다. 중복된 코드를 최대한 배제하는 방법은 중복되는 기능들을 전부 빼놓은 뒤 그 기능이 필요할때만 호출하여 쓰면 훨씬 효율성이 좋다.

- 즉, AOP는 여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 높여주는 프로그래밍 기법이다.

 

 

 

4. POJO(Plain Old Java Object) 방식

- POJO는 Java EE를 사용하면서 해당 플랫폼에 종속되어 있는 무거운 객체들을 만드는 것에 반발하여 나타난 용어이다.

- 별도의 프레임 워크 없이 Java EE를 사용할 때에 비해 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기 용이하고, 객체가 가볍다.

- 즉, getter/setter를 가진 단순한 자바 오브젝트를 말한다.

 

블로그 참조 : https://jerryjerryjerry.tistory.com/62

 

 

 

5. 영속성과 관련된 다양한 서비스 지원

- MyBatis, Hibernate등 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스 제공