용어

  • 의존성(Dependency) : 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미.
  • context : 스프링이 사용하는 메모리 영역

1. 프레임워크

  • 뼈대나 근간을 이루는 코드들의 묶음
  • 프레임워크를 이용한다는 의미는 프로그램의 기본 흐름이나 구조를 정하고, 모든 팀원이 이 구조에 자신의 코드를 추가하는 방식으로 개발하게 된다는 것.

프레임워크의 장점

  1. 개발에 필요한 구조를 이미 코드로 만들어 놓았기 때문에, 반쯤 완성한 상태에서 필요한 부분을 조립하는 형태의 개발이 가능하다는 점
  2. 일정한 품질이 보장되는 결과물을 얻을 수 있음
  3. 개발 시간을 단축할 수 있음
  4. 프로젝트의 전체 구조를 설계할 때 유용한 프레임워크.
    • 다른 프레임워크들은 웹 영역이나 데이터베이스 영역 등의 전문적인 영역에 대해서만 지원하는 경우가 많았으나, 스프링은 어느 한 분야에 집중하지 않고, 전체를 설계하는 용도로 사용될 수 있었음
  5. 기본 뼈대를 흔들지 않고, 여러 종류의 프레임워크를 혼용해서 사용할 수 있다는 점.
    ⇒ 스프링은 다른 프레임워크들과의 통합을 지원했기 때문에.

2. 스프링의 주요 특성

  1. 경량 프레임워크: 서버 중심의 Heavy weight 프레임워크와 반대되는 개념으로, 클라이언트 중심의 개발을 하는 프레임워크.

  2. POJO(Plain Old Java Object)기반의 구성
    • 객체 간의 관계를 구성할 때 별도의 API 등을 사용하지 않는 POJO의 구성만으로 가능하도록 제작되어 있음.
      ⇒ 일반적인 JAVA 코드를 이용해서 객체를 구성하는 방식을 그대로 스프링에서 사용할 수 있다는 뜻.
    • 이로 인해 개발자는 가장 일반적인 형태로 코드를 작성하고 실행할 수 있기 때문에
      1) 생산성에서도 유리하고, 2) 테스트 작업 역시 좀 더 유연하게 할 수 있음.
  3. 의존성 주입(DI: Dependency Injection)에 적합한 구조
    • 어떤 객체가 필요한 객체를 외부에서 밀어 넣는다는 의미.
    • 클래스간의 의존관계를 스프링 컨테이너가 자동으로 연결해주는 것.
    • 장점 : 1) 주입을 받는 입장에서는 어떤 객체인지 신경 쓸 필요가 없음 2) 어떤 객체에 의존하든 자신의 역할은 변하지 않음
    • ApplicationContext : 필요한 객체를 생성하고, 필요한 객체들을 주입하는 역할을 해줌
      Bean : ApplicationContext가 관리하는 객체들을 의미
    • 빈과 빈 사이의 의존관계를 처리하는 방식으로 1)XML설정 2)어노테이션 설정 3)Java설정 방식을 이용할 수 있음
  4. AOP(Aspect Oriented Programming)의 지원
  5. 트랜잭션의 지원
    • 트랜잭션 처리 방식:
      1) 클래스, 메서드위에 @Transactional 이 추가되면, 이 클래스에 트랜잭션 기능이 적용된 proxy 객체(특정 객체를 감싸서 객체에 가해지는 작업을 중간에서 가로채는 객체로, 가로채진 작업은 Proxy 자체에서 처리되기도 하고, 원래 객체가 처리하도록 그대로 전달되기도 함)가 생성됨
      2) 이 proxy 객체는 @Transactional이 포함된 메소드가 호출 될 경우, PlatformTransactionManager를 사용하여 트랜잭션을 시작하고, 정상 여부에 따라 Commit 또는 Rollback
    • 스프링은 트랜잭션의 관리를 어노테이션이나 xml로 설정할 수 있기 때문에 매번 상황에 맞는 코드를 작성할 필요가 없음

References