본문 바로가기
public void static main/Book

[토비의스프링] 8장-스프링이란 무엇인가?

by 햄리뮤 2025. 2. 28.
반응형

 

🌸 스프링의 철학과 목표 깊이 파헤치기

스프링의 본질 한눈에 보기

  • 철학: 자바의 객체지향 원리를 살려 복잡성을 단순화.
  • 목표: POJO 기반으로 엔터프라이즈 개발을 쉽게.
  • 특징: 오픈소스, 모든 개발 영역을 아우르는 프레임워크.
  • 해결: 비즈니스와 기술적 요구의 충돌을 해소.

🛠️ 스프링을 이해하는 핵심 포인트

1️⃣ 스프링이란?

  • 정의:
    • 오픈소스 소프트웨어: 전 세계 개발자가 기여하며 발전.
    • 애플리케이션 프레임워크: 웹, DB, 배치 등 모든 기술을 통합 지원.
  • 상세 설명:
    • 단순한 라이브러리가 아니라, 애플리케이션 전체를 설계하고 실행할 수 있는 기반 제공.
    • 예: 스프링 부트는 설정을 최소화해 개발 속도를 높임.
  • 역할: 자바 개발자가 엔터프라이즈 시스템을 만들 때 필수적인 도구와 구조 제공.

2️⃣ 엔터프라이즈 개발의 복잡성

  • 문제 원인:
    • 비즈니스 로직: 예를 들어, 주문 처리나 결제 같은 핵심 기능.
    • 기술적 요구: 트랜잭션 관리, DB 연결, 보안, 로깅 등 시스템 요구사항.
  • 기존 방식의 한계:
    • 복잡도가 증가하며 코드가 뒤엉킴.
    • 예: EJB(Enterprise JavaBeans)는 무거운 규약과 복잡한 설정으로 객체지향의 단순함을 잃음.
    • 결과적으로 자바의 캡슐화, 상속, 다형성 같은 장점을 활용하기 어려움.
  • 상세 예시:
    • DB 트랜잭션 코드와 비즈니스 로직이 섞이면, 로직 수정 시 트랜잭션 코드도 같이 손대야 함 → 유지보수 악몽.

3️⃣ 스프링의 해결책: POJO

  • POJO란?:
    • Plain Old Java Object. 특정 프레임워크나 환경에 종속되지 않은 순수 자바 객체.
    • 예: public class UserService { ... }처럼 간단한 클래스.
  • 왜 중요한가?:
    • 자바의 객체지향 원리를 살림: 느슨한 결합, 높은 응집도.
    • 외부 규약(EJB의 복잡한 인터페이스 구현 등)에 얽매이지 않음.
  • 스프링의 목표:
    • POJO를 사용해 복잡한 엔터프라이즈 시스템을 쉽고 효과적으로 구현.
  • 구체적 이점:
    • 코드가 간결해지고, 테스트 쉬움(목 객체로 대체 가능).
    • 환경(DB 종류, 서버 설정 등)이 바뀌어도 POJO는 수정 없이 재사용 가능.

🚀 스프링의 가능기술과 도구 심층 탐구

4️⃣ POJO 개발을 돕는 기술


스프링은 POJO를 중심으로 설계되며, 이를 실현하기 위해 세 가지 핵심 기술을 제공합니다:

① IoC/DI (제어의 역전 / 의존성 주입)

  • 정의:
    • IoC: 객체 생성과 관리를 개발자가 아닌 프레임워크(컨테이너)가 담당.
    • DI: 필요한 의존 객체를 외부에서 주입.
  • 상세 설명:
    • 예: UserServiceUserRepository에 의존 → 직접 new UserRepository() 하지 않고, 스프링이 주입.
    • @Autowired나 XML 설정으로 의존성 정의.
  • 장점:
    • 코드 간 결합도 낮춤 → 수정 시 영향 최소화.
    • 테스트 시 가짜 객체(목) 주입 가능.

② AOP (관점 지향 프로그래밍)

  • 정의:
    • 공통 관심사(로깅, 트랜잭션 등)를 비즈니스 로직과 분리.
  • 상세 설명:
    • 예: 모든 서비스 메소드에 트랜잭션 적용 → 각 메소드에 코드 추가 대신 AOP로 한 번에 처리.
    • @Aspect와 포인트컷으로 설정.
  • 장점:
    • 코드 중복 제거.
    • 핵심 로직에 집중 가능.

③ PSA (Portable Service Abstraction)

  • 정의:
    • 다양한 기술을 일관된 방식으로 사용할 수 있게 추상화.
  • 상세 설명:
    • 예: JDBC, JPA, MyBatis 등 DB 접근 방식이 달라도 스프링의 DataSource로 통일.
    • 캐시, 메일, 스케줄링 같은 서비스도 추상화 제공.
  • 장점:
    • 기술 변경 시 코드 수정 최소화.
    • POJO가 특정 구현에 얽매이지 않음.

5️⃣ 프레임워크와 컨테이너

  • 프레임워크:
    • 설명: 개발자가 따라야 할 설계 틀과 도구 제공.
    • 예시: MVC 패턴을 강제해 웹 개발 구조화.
    • 장점: 팀 내 코드 일관성 유지, 학습 곡선 단축.
  • 컨테이너:
    • 설명: POJO의 생명주기(생성, 초기화, 소멸)를 관리.
    • 예시: ApplicationContext가 빈(Bean)을 생성하고 DI 수행.
    • 장점: 설정 파일(XML, 어노테이션)만 수정해도 기능 확장 가능.

🌟 스프링의 철학적 가치와 실용성

  • 핵심 철학:
    • 자바의 객체지향적 장점을 극대화.
    • 불필요한 복잡성을 제거하며 개발자 경험 개선.
  • 개발자에게 주는 실용적 가치:
    • POJO로 단순화: 환경에 독립적인 코드를 작성해 유지보수성과 이식성 향상.
    • 기술 통합: 비즈니스 로직과 엔터프라이즈 요구를 자연스럽게 조화.
    • 예시: 트랜잭션 관리 코드를 AOP로 분리 → 서비스 로직은 비즈니스에만 집중.

📋 전체 흐름 요약

  1. 문제 인식: 엔터프라이즈 개발의 복잡성과 객체지향 상실.
  2. 해결책 제시: POJO로 자바의 순수함 되찾기.
  3. 스프링의 지원: IoC/DI, AOP, PSA로 POJO 활용 극대화.
  4. 결과: 복잡성 줄이고, 개발 효율성과 코드 품질 높임.

💡 핵심 키워드와 상세 한 줄 정리

  • POJO: "특정 규약 없이 자유로운 자바 객체로 복잡함을 덜어냄."
  • IoC/DI: "컨테이너가 객체를 관리하고 의존성을 주입해 유연성 UP."
  • AOP: "공통 로직을 분리해 비즈니스 코드 깔끔하게 유지."
  • PSA: "다양한 기술을 추상화해 환경 변화에 강한 코드 구현."
  • 컨테이너: "빈을 생성하고 관리하며 설정만으로 확장 가능."

 

반응형

댓글