profile image

L o a d i n g . . .

스프링을 배울때 스프링 레거시, 스프링 부트 이야기를 많이 듣는다.
국비땐 스프링 레거시밖에 써본적이 없었으나 지금 들어온 회사는 스프링 부트를 사용하는 프로젝트가 있다.
사수님께서 스프링부트 프로젝트 구조를 공부해보면 좋겠다 라고 조언을 해주셔서 공부하는 김에 포스팅도 하게됐다.

스프링?

스프링은 자바에서 가장 많이 쓰이는 동적웹개발 프레임워크이다.
- DI, IOC, AOP특성을 이용해 결합도를 낮출 수 있다는 장점이 있다.

 

스트럿츠, 스프링, 장고, 앵귤러, 닷넷, 리액트, 뷰, 부트스트랩 등의 프레임워크가 있다

스프링과 다른 프레임 워크들의 차이점

- 자바클래스와 인터페이스 이용

- 프로젝트 전체 구조 설계에 유용

- 기본 뼈대를 흔들지 않고 여러 종류의 프레임워크를 혼용하여 사용 가능

프링 특징

출처: 나무위키 스프링

- POJO(Plain Old Java Object)기반의 구성만으로도 제작 가능

>> 자바 객체 표준이며 Java Language Specification에 의한 어떤 특정 경계가 존재하지 않음

>> 가독성과 재사용성 중요

>> 특정 환경에 종속되지않음, 미리 지정된 인터페이스 구현, 스프링 IoC컨테이너에서 어노테이션 사용하여 관리

>> 일반적인 자바코드를 사용하여 객체구성이 가능하는 방식을 그대로 사용 가능

 

- 대규모처리와 트랜잭션 지원 ​

 

- IoC(Inversion Of Control)

>> 제어의 역행 : 메소드나 객체의 호출 작업을 개발자가 아닌 외부에서 결정함, 대부분 프레임워크(스프링 등)에서 결정됨

개발자는 필요한 부분을 개발해서 끼워넣는 식으로 개발

 

- DI(Dependency Injection)

>> 의존성 주입 : 생성자를 통한주입 | set메서드를 이용한 주입으로 구분 가능

 ApplicationContext(스프링 컨테이너)가 관리하는 객체들을 Bean이라는 용어로 부르고 빈과 빈 사이의 의존관계를 처리하는 방식으로 XML 설정, 어노테이션 설정, Java 설정 방식을 사용할 수 있다.

- 관점 지향 프로그래밍;AOP(Aspect Oriented Programming) 지원

>> 횡단 관심사 분리 제작 가능

>> 핵심 비즈니스 로직만 집중해서 코드 개발 가능

>> 코드 수정 최소화, 유지보수 원활

 


AOP?

로깅, 트랜잭션, 보안 등 여러 모듈에서 공통적으로 사용하는 기능을 분리 및 조합하여 관리가능 

AOP 목적 : 횡단관심사와 이에 영향을 받는 객체간 결합도 떨어뜨리는 것

- 각 관심사에 대한 로직이 app전체에 걸쳐 관리되지 않고 Aspect라고 하는 곳에서 관리할 수 있다

>> 고유 비지니스 로직 처리가 명확해진다

>> 추상/부모 클래스나 인터페이스로 관리되는게 아닌 모듈을 상하/인터페이스 관계없이 분리하여 관리할 수 있다

AOP용어

핵심(코어)관심사 : 각 모듈에서 수행해야 하는 기본적이고 대표적 업무처리기능

횡단 관심사 : 여러개 모듈에 걸친 시스템 전체적인 부가요구사항 다룸

Join point
Advice를 적용 할 수 있는 지점 | 타겟이 구현한 인터페이스의 모든 메서드는 조인 포인트
Pointcut
어드바이스를 적용 할 타겟의 메서드를 선별함 (언제 어느포인트에 들어갈지 )
>> 일종의 조건식 (execution으로 시작하고 메서드의 시그니처를 비교하는 방법 주로 사용)
Advice
추가 실행될 기능(횡단 관심사의 묶음)
Aspect
AOP 기본모듈(중심단위), 어드바이스+포인트컷
Target
실제 로직을 수행 할 대상 인스턴스 (순수 비즈니스 로직)
Weaving
대상을 프록시에 적용하여 새로운 프록시 객체 생성
Proxy
Advice를 Target 객체에 적용할 때 생김. (클라이언트 관점에선 차이가 없다)

타겟 : 실제 수행할 비즈니스 로직 ex 서비스 클래스 (옷감)

조인 포인트 : 서비스 클래스 내 인스턴스메서드들

어드바이스 : 전처리 후처리로 가능한 추가실행될 기능들 (단추달기, 덧댐)

위빙 : 타겟에서 프록시객체가 생성되는 과정 ( 옷 만드는 과정 )

프록시 : 결과물 (옷)

 

어드바이저 == 에스팩트

어드바이스 + 포인트컷

pointcut

어드바이스를 적용 할 타겟의 메서드를 선별함 (언제 어느포인트에 들어갈지 )

>> 일종의 조건식 (execution으로 시작하고 메서드의 시그니처를 비교하는 방법 주로 사용)

스프링 AOP 기반으로 app 개발시 pointcut 사용하는 경우 적음

AOP 기반으로 app 개발하다보면 패키지, 클래스 별로 pointcut 적용해야하는 경우 있음

 

 

 

 

 

의존성 주입 예시


서블릿때처럼 자르를 각각 관리 넣어서 빌드해줘야하는건 아니지만 디펜던시 환경설정을 하고 버전에맞게 빌드를 해줘야한다




스프링 레거시라고 불리는 스프링 프레임워크란?

- 뼈대나 근간을 이루는 코드들의 묶음

스프링 프레임워크의 장점

- 개발에 필요한 구조를 이미 코드로 만들어뒀기 때문에 반쯤 완성된 상태에서 필요한 부분을 조립하는 형식의 개발이 가능

- 회사입장에서 보면 프레임 워크를 사용하여 일정한 품질 보장 가능

- 개발자 입장에서는 완성된 구조에 자신이 맡은 코드를 넣어줌으로써 개발 시간 단축


서블릿 사용했을 때에 비해 많이 간편해졌다지만 기능이 다양해 진 만큼 환경설정이 복잡하고 시간이 오래걸리는 단점이 있었다.
스프링 부트는 서블릿, 레거시비해 더욱더 간편하게 사용하기 위해 등장하게 되었다.

서치중에 괜찮은 짤이 있어 가져옴 ㅋ

부트가 제공하는 대표적인기능

Auto Configuration, 쉬운 의존성관리
- spring-boot-starter-[----]로 버전 및 추가의존성에 대한 호환성 관리
- spring-boot-starter-jdbc의존성을 디펜던시에 추가하면 DataSource, JdbcTemplate을 별다른 설정없이 @Autowired같은 어노테이션으로 바로 쓸 수 있다
- 만약 필요없거나 교체가 필요한 디펜던시는 exclude시킬수도 있다


Embedded Server (내장서버)
- Tomcat, Jetty 또는 Undertow를 직접 포함해 war파일을 배포할 필요 없음
- jdk 설치 후 java -jar ~~~.jar로 웹서버 구축을 간편하게 할 수 있다

인메모리 데이터베이스(H2, HSQL), 디스크 기반 DB지원
- 인메모리 데이터베이스?
디스크가 아닌 주 메모리에 모든 데이터를 보유하고 있어 디스크 검색보다 자료 접근이 빠름, 그러나 휘발성이기 때문에 디비서버가 꺼지면 모든 데이터가 유실됨


이 외 시큐리티, 테스트, 로깅(logback)또한 이전 스프링 프레임워크에 비해 제어 및 설정이 훨씬 간편해졌다.



참고
- https://jojoldu.tistory.com/43
- https://spring.io/projects/spring-boot
- https://namu.wiki/w/Spring(%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC)

 
반응형
복사했습니다!