Free Lines Arrow
본문 바로가기
Spring/spring 기초 스터디

[Spring] Spring 개념

by skahn1215 2021. 4. 3.
728x90
반응형

Spring Framwork?

맨날 구글링 해서 스프링이 이런거다~ 라는것만 알았지 실제로 써보진 못했습니다.

스프링에대해 공부하고 나의 생각들을 정리하기 위해 써보는 글.

누구나 쉽게 이해하기 바라는 마음으로 써보는 글.

 

개념

  • 스프링 프레임워크 간단히 스프링이라고 불린다.
  • 스프링은 자바 엔터프라이 애플리케이션 개발에 사용되는 애플리케이션 프레임워크다.
  • 스프링 프레임 워크는 애플리케이션 바탕이되는 틀과 공통 프로그래밍 모델, 기술 API등을 제공해준다.

 

스프링의 개발 철학

 - 항상 프레임워크 기반의 접근 방법을 사용하라.

 

 

스프링의 등장배경

스프링이 나오게된이유는 자바를 통해 엔터프라이즈 시스템을 개발하는 데 좀 더 나은 방법과 전햑을 찾으려고 고민하고 연구한 끝에 나온 결과 물이라고한다.

 

스프링을 통해 개발자들이 얻게 되는 이점은 두가지 이다

 

1. 단순함.

  •   그럼 어떻게 단순함을 이점으로 얻을수 있을까?
  • 스프링은 EJB라는 강한 권위를 가졌던 표준 기술을 비판하면서 등장했다.

    EJB는 불필요하게 복잡한 기술이라고한다.

    자바는 이상적인 언어였지만 시간이 지나고 복잡해져서 객체지향의 본질을 잃어갔다.

    스프링은 자바가 잃어버린 객체지향의 본질과 장점을 개발자들이 살 릴수 있도록 도와주는 도구이다.   

    그래서 스프링이 강력하게 주장하는 것은 단순한 객체지향적인 개발 모델인 POJO 프로그래밍이다.

 

2. 유연성

 - 유연성을 어떻게 이점으로 얻을수 있을까?

   스프링은 유연성과 확장성이 매우 뛰어나다.

   스프링의 유연성으로 다른 많은 프레임워크와 편히라게 접목해서 사용할수있다.

   스프링만큼 많은 서드파티 프레임워크의 지원을 받는 기술도 없다.

   

스프링의 특징

1. POJO(Plain Old Java Object):

   - 스프링은 Plain Old Java Object 방식의 프레임워크이다.

   - POJO를 간단히 설명하자면 단순한 객체지향적인 개발 모델이다.

   - 이상적으로, POJO는 자바 언어 사양 외에 어떠한 제한에도 묶이지 않은 자바 오브젝트라고 할 수 있다.

 

2. IOC(제어역전)

   - 컨트롤의 제어권을 사용자가 가지는게 아니라 스프링이 관리한다.

   - 생성및 생명주기등 모든 것을 스프링이 관리.

   - IOC의 분류는 DL, DI로 나뉜다.

 

3. DI(의존성 주입)

   - 아래 의 단순한 예제가 의존성 주입방법 예제이다.

// MemberController 컨트롤러 클래스안에는 

// memberService 라는 객체가 존재한다.

// 스프링이 올라 올때 스프링이 애노테이션을 보고 객체를 생성해서 들고 있음
// 스프링 빈이 관리된다고 보면됨.
@Controller // 스프링이 어차피 관리 하기 때문에 그냥 지우지 않고 둔다
public class MemberController {



    // 생성자 주입1: 생성자를 통해서 멤버서비스가 멤버 컨트롤러에 들어오는것
    // 가장 많이 쓰는 방법
    private final MemberService memberService;
    @Autowired //멤버 서비스를 스프링이 스프링 컨텐이너의 멤버서비스를 가져다 연결 시킨다.
    public MemberController(MemberService memberService)
    {
        this.memberService = memberService;
    }

}

 

1. 의존성 주입이 아닌것

  MemberController생성할때 memberService를 MemberController 생성자 안에서

  만들어주면 일체형으로 나중에 해당 부분을 변경할 경우 불편함이 생기거나 모든 코드를 변경해야한다.

 

2. 의존성 주입

MemberController 생성할때 외부에서 memberService를 만들어 넣어주는 방식이면 분리형으로

언제든쉽게다른서비스로변경이가능하다.

   

- 각 클래간 필요로 하는 의존 관계를 컨테이너가 자동으로 연결.

   - 결합도를 낮추기 위해 사용

   - 재사용성 높여줌

   - 코드 단순환

   - 객체간 의존관계 설정가능

 

 

 

4. AOP(과전 지향 프로그래밍)

  - AOP(Aspect-Oriented Programming) 는 OOP를 보완하는 수단이다.

    흩어진 Aspect 를 모듈화 할 수 있는 프로그래밍 기법이다.

  - 따라서 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우

    해당 기능을 분리하여 관리할 수 있다.

 

6. MVC 패턴

 - model, view, control을 분리하는 기법 이외에서 MVP, MVVM 여러 패턴이 존재한다.

 - 자세한 내용은 따로 정리.

 

 

7. 공부하다가 추가되는 내용이 있으면 정리할예정.

 

 

참고: 토비의 스프링책, wiki

728x90
반응형

댓글