yooniiverse
개발 블로그
yooniiverse
전체 방문자
오늘
어제
  • 분류 전체보기
    • 운영체제
    • 네트워크
    • ~2023.02
      • 외부교육
      • 대외활동
      • 스터디
      • 동아리
      • TIL
      • IT지식
      • 기타
      • 트러블 슈팅
      • 프로그래밍
      • Python
      • Java
      • JS
      • DB(SQL)
      • JSP
      • Spring
      • 기술면접
      • 자바
      • 코딩테스트
      • 자료구조
      • 알고리즘
      • 백준 문제풀이
      • 인공지능
      • 머신러닝
      • 프로젝트
      • 안드로이드 앱개발
      • 웹개발
      • 웹 서비스
      • 웹퍼블리싱
      • Node.js 백엔드 개발
      • CS
      • 1일 1CS지식
      • 운영체제
      • 네트워크
      • 데이터베이스
      • 정보처리기사
      • 도서 리뷰
      • 개발 관련 도서
      • 기타 도서

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yooniiverse

개발 블로그

~2023.02/Spring

About Spring

2023. 1. 7. 13:26
스프링이 인기를 얻게 된 이유는 무엇인가
스프링의 중요한 특징들은 무엇인가

1. 스프링 프레임워크가 개발의 대세가 된 이유

1.1. 프레임워크

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

1.2. 이 뼈대가 왜 필요할까?

  • 개발자는 개인의 능력 차이가 큰 직종이고, 따라서 개발자의 구성에 따라 프로젝트 결과 역시 차이가 큼
  • 프레임워크는 바로 이런 상황을 극복하기 위한 코드의 결과물
  • 프레임워크를 이용한다는 의미는 프로그램의 기본 흐름이나 구조를 정하고, 모든 팀원이 이 구조에 자신의 코드를 추가하는 방식으로 개발하게 됨

1.3. 프레임워크의 장점

  • 회사는 일정한 품질이 보장되는 결과물을 얻을 수 있음
  • 개발자는 개발 시간을 단출할 수 있음

 

2. 스프링의 주요 특징

  • POJO 기반의 구성
  • 의존성 주입(DI)을 통한 객체 간의 관계 구성
  • AOP(Aspect-Oriented-Programming) 지원
  • 편리한 MVC 구조
  • WAS에 종속적이지 않은 개발 환경

2.1. POJO 기반의 구성

  • 스프링은 다른 프레임워크들과 달리 객체 간 관계를 구성할 때 별도의 API 등을 사용하지 않는 POJO(Plain Old Java Object)의 구성만으로도 가능하도록 제작됨
  • 즉, 일반적인 Java 코드를 이용해 객체를 구성하는 방식을 그대로 스프링에서 사용할 수 있음
  • 이것이 중요한 이유는 코드를 개발할 때 개발자가 특정 라이브러리나 컨테이너 기술에 종속적이지 않다는 것을 의미하기 때문
  • 개발자가 가장 일반적인 형태로 코드를 작성하고 실행할 수 있어 생산성에도 유리하고 코드에 대한 테스트 작업 역시 좀 더 유연하게 할 수 있다는 장점이 있음

2.2. 의존성 주입(DI)을 통한 객체 간의 관계 구성

제어의 역행

  • 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것
  • 대부분의 프레임워크에서 사용하는 방법으로, 개발자는 필요한 부분을 개발해 '끼워 넣기'의 형태로 개발하고 실행하게 됨
  • 조립된 코드의 최종 호출은 개발자가 아닌 프레임워크 내부의 결정대로 이뤄지게 되는데, 이런 현상을 '제어의 역행'이라고 표현함

의존성 주입

  • 제어의 역행이 일어날 때 스프링이 내부에 있는 객체(스프링에서는 빈(Bean)이라는 용어 사용)들 간의 관계를 관리할 때 사용하는 기법
  • 의존적 객체를 직접 생성하거나 제어하는 것이 아니라, 제어의 역행으로 특정 객체에 필요한 객체를 외부에서 결정해서 연결 시키는 것을 의미
  • 외부에서 필요한 객체를 결정하기 때문에 개발자는 의존적인 객체들과의 관계를 직접 처리할 필요가 없고, 인터페이스를 활용해 유연한 구조를 사용할 수 있음
  • 스프링은 의존성 주입을 프레임워크에서 처리하기 때문에 개발자는 자신이 만드는 객체나 클래스 외에는 신경쓰지 않고 코드를 만듦

의존성 주입의 종류

  1. 생성자를 통한 주입
  2. set 메소드를 이용한 주입

스프링은 두 방식 모두 사용할 수 있고, 이에 대한 처리 역시 간단한 애노테이션만으로 처리할 수 있음

2.3. AOP의 지원

스프링은 프레임워크를 이용한 개발에도 반복적인 코드를 줄이고,
핵심 비즈니스 로직에만 집중할 수 있는 방법을 제공함

횡단 관심사(cross-concern)

  • 스프링에서 대부분의 시스템이 공통으로 가지는 보안이나 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만 반드시 처리가 필요한 부분
  • 스프링은 AOP를 이용하여 이러한 횡단 관심사를 분리해서 제작하는 것이 가능함

AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)

  • 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임
  • 스프링은 AOP를 AspectJ 문법을 통해서 작성할 수 있음

AOP의 장점

  1. 개발자는 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있음
  2. 각 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화
  3. 원하는 관심사의 유지보수가 수월한 코드를 구성할 수 있음

2.4. 트랜잭션의 지원

  • 데이터베이스를 이용할 때 반드시 신경써야 하는 부분은 하나의 업무가 여러 작업으로 이뤄지는 경우의 트랜잭션 처리임
  • 스프링은 트랜잭션의 관리를 애노테이션이나 XML로 설정할 수 있음
  • 때문에 개발자가 매번 상황에 맞는 코드를 작성할 필요가 없도록 설계됨

'~2023.02 > Spring' 카테고리의 다른 글

[Spring]좋은 객체 지향 설계를 위한 5가지 원칙 - SOLID  (0) 2022.06.11
스프링 웹 개발 기초  (0) 2022.06.10
    '~2023.02/Spring' 카테고리의 다른 글
    • [Spring]좋은 객체 지향 설계를 위한 5가지 원칙 - SOLID
    • 스프링 웹 개발 기초
    yooniiverse
    yooniiverse

    티스토리툴바