본문 바로가기
Programming

Spring이란?

by BTC_티모 2023. 5. 30.

탑신병자 듀오 팀 티모입니다.

오늘은 Spring에 대해서 알아보겠습니다.


Spring이란, 자바 기반의 엔터프라이즈 개발을 편하게 해주는 경량급 오픈소스 애플리케이션 프레임워크입니다.

 

특징

1. 애플리케이션 프레임워크

Spring은 자바 객체와 라이브러리들을 직접 관리해줍니다.따라서 개발자는 기능 구현에 필요한 라이브러리들을 복잡한 절차 없이 불러와 사용하기만 하면 되는 장점이 있습니다.또한 이 범위가 특정 계층, 기능에만 종속되지 않고 애플리케이션의 모든 영역에 사용 가능합니다.

 

2. 경량급

기존의 EJB(Enterprise Java Bean)를 통해 기업들이 원한 큰 규모의 서비스를 구축할 수는 있었지만

서비스 구현을 위해 EJB의 환경과 구성 내에서 작업해야 했고 그 과정에서 불필요하고 복잡한 과정이 늘어났습니다.

Spring은 비즈니스 로직을 다루는 코드와 실제 기술적인 코드를 분리시키는 것으로 그 복잡함을 해결했습니다.

실제 Spring은 사용자에게 편의를 제공하기 위해 수십만 라인의 코드를 가진 방대한 프레임워크지만

EJB에서 의미 없이 넣던 코드를 제거하고, 기능 수행에 반드시 필요한 것들로만 구성되어있다는 것이 핵심입니다.

 

3. 오픈소스

기본적으로 오픈소스 기반이므로 사용자들이 자유롭게 사용하고, 피드백을 제공하며 발전합니다.

또 한편으로는 전문 기업인 스프링소스를 따로 두어 오픈소스의 단점인 개발 환경의 불확실성을 해결하고

사용자에게 지속적이고 안정적인 개발 환경을 제공합니다.

 

핵심 기술

1. IOC (Invertion Of Control) : 제어 반전

사용자가 new 연산자, 인터페이스 및 클래스 호출을 통해 객체를 생성하거나 소멸시킬 때

이 관리를 직접 하지 않고 Spring이 자체적으로 제어합니다.

 

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

구성요소 간 의존관계를 소스 코드 내부가 아니라 외부의 설정 파일에 따로 두어 정의해

코드의 재사용률을 높이며 결합도를 낮출 수 있습니다.

한 클래스에 의존성을 가는 클래스가 구성된 경우에도, 상위 클래스의 수정 부분을 하위에도 똑같이 적용해야 하는 번거로움을 줄일 수 있습니다.

 

Spring에서 DI는 필드 주입, setter 주입, 생성자 주입으로 총 3가지 방법이 있습니다.

3가지 방법 중 생성자 주입을 가장 권장하고 있습니다.

 

1) 필드 주입 (Field Injection)

필드 내에 직접 @Autowired 어노테이션을 사용합니다.

읽고 사용하기 편하지만 final 선언이 불가능해 클래스나 변수의 상태를 유지시킬 수 없고,

스프링 컨테이너 내에서만 주입이 가능하므로 외부에서 수정이 불가능합니다.

 

예시

@Controller
public class MemberController {

    @Autowired
    private MemberService memberService;
}

 

2) setter 주입 (Setter Injection)

setter 메소드(set +@)를 이용합니다.

필드 주입에 비해 상대적으로 결합도를 낮출 수 있지만,

set 메소드가 public으로 노출되어 다른 사용자가 언제든지 호출할 수 있다는 단점이 있습니다.

 

예시

@Controller
public class MemberController {

    private MemberService memberService;

    @Autowired
    public void setMemberService(MemberService memberService) {
        this.memberService = memberService;
    }
}

 

3) 생성자 주입 (Constructor Injection)

생성자를 만들어 컨트롤러에 주입시킵니다.

테스트 코드 작성에 유용하며, final을 사용해 객체의 불변성을 보장해줍니다.

또한 여러 객체가 서로를 참조하고 있을 때, 메소드 호출 과정에서 생기는 에러를 방지할 수 있습니다.

 

예시

@Controller
public class MemberController {

    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

 

3. AOP(Aspect-Oriented Programming) : 관점 지향 프로그래밍

공통 기능을 모듈화해 관리하고, 필요할 때 사용함으로써 유지보수 혹은 재사용에 용이합니다.

 

4. POJO(Plain Old Java Object) 방식

특정한 환경이나 구성에 종속되지 않고 단순한 자바 오브젝트를 이용합니다.

때문에 간결한 코드 구성이 가능하며, 환경 제약이 없어 테스트에도 유리합니다.


지금까지 Spring에 대해 간단히 알아보았습니다.

감사합니다.

 

'Programming' 카테고리의 다른 글

Golang 프레임워크 비교  (0) 2023.06.08
[C#] .NET Winform 개발환경 구성  (0) 2023.06.06
[C#] .NET Framework에 대한 이해  (0) 2023.05.20
Springboot&Vue.js 연동  (0) 2023.05.12
MVC 모델이란?  (0) 2023.01.18

댓글