Daily Dev Q&A: Spring Framework

2025. 12. 23. 15:24·Archive/Daily Dev Q&A

Topic (오늘의 주제)

Spring Framework의 3대 핵심 요소 (POJO, AOP, PSA)

Why (왜 사용하는가? 왜 중요한가?)

  • 실무: 엔터프라이즈 급 개발에서 발생하는 반복적인 코드(Boilerplate)를 제거하고, 비즈니스 로직에만 집중할 수 있게 해줍니다. (예: DB 연결, 트랜잭션 관리 등)
  • 구조적 의미: **POJO(Plain Old Java Object)**를 기반으로 하여, 특정 기술이나 환경에 종속되지 않는 유연하고 가벼운 애플리케이션을 구축하게 합니다.
  • 면접 의도: 단순히 "편해서 쓴다"가 아니라, Spring이 해결하고자 했던 EJB(과거 기술)의 복잡성 문제와 이를 해결하기 위한 **3가지 핵심 전략(Triagle)**을 이해하는지 묻습니다.

Core Concept (핵심 개념 정리)

Spring은 POJO를 지향하며 이를 위해 아래 3가지 핵심 기술을 제공합니다.

요소 내용
개념 정의 Spring Framework: 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로, POJO(순수 자바 객체)를 사용하여 엔터프라이즈 수준의 서비스를 제공하는 컨테이너.
핵심 3요소 (The Spring Triangle) 1. IoC/DI (제어의 역전/의존성 주입): 객체 간의 결합도를 낮춤. (부품 조립)

2. AOP (관점 지향 프로그래밍): 핵심 로직과 부가 기능(로그, 트랜잭션)을 분리.

3. PSA (서비스 추상화): 환경(DB, 라이브러리)이 바뀌어도 코드를 수정할 필요 없게 추상화 계층을 제공.
동작 방식 개발자가 POJO로 비즈니스 로직을 작성하고 메타데이터(설정)를 제공하면, Spring 컨테이너가 이를 엮어서(Wiring) 실행 가능한 애플리케이션으로 만듦.
장점/단점 장점: 생산성 향상, 유지보수 용이, 테스트 용이, 거대한 생태계(Security, Batch, Data 등).

단점: 설정이 복잡할 수 있음(Spring Boot가 이를 해결), 내부 동작(Proxy 등)을 모르면 트러블슈팅이 어려움.
비교 vs EJB (Legacy): EJB는 무겁고 특정 클래스 상속이 필수였으나, Spring은 가볍고 상속이 필요 없는 POJO 방식.

vs Spring Boot: Spring Framework를 더 쉽게 쓰기 위한 '도구/확장판' (자동 설정, 내장 톰캣 지원).

Interview Answer Version (면접 답변식 요약)

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

핵심 철학은 POJO 프로그래밍을 지향하는 것이며, 이를 위해 객체의 생명주기를 관리하는 IoC/DI, 공통 관심사를 분리하는 AOP, 그리고 기술 구현체에 의존하지 않게 하는 PSA라는 3가지 핵심 기술을 제공합니다.

이를 통해 개발자는 복잡한 인프라 기술보다 비즈니스 로직 구현에 집중할 수 있습니다."

Practical Tip (사용시 주의할 점 or 활용 예)

1. AOP의 함정: 내부 호출(Self-Invocation) 문제

Spring의 AOP(트랜잭션 등)는 기본적으로 Proxy(대리자) 패턴을 사용합니다. 프록시 객체가 요청을 가로채서 부가 기능을 수행한 뒤 실제 객체를 호출하는 방식입니다.

  • 문제 상황: 같은 클래스 내부의 메서드끼리 호출(this.method())할 때는 프록시를 거치지 않고 바로 호출(Direct Call)하므로 AOP(@Transactional 등)가 적용되지 않습니다.
  • Java
    @Service
    public class PayService {
    
        public void pay() {
            // 여기서 insertHistory를 호출하면 @Transactional이 무시됨!
            // this.insertHistory() 로 호출되기 때문 (프록시 통과 X)
            insertHistory(); 
        }
    
        @Transactional
        public void insertHistory() {
            // 로직...
        }
    }
    
  • 해결책: 내부 호출을 피하고 별도의 Service 클래스로 분리하거나, 자기 자신을 주입받아 호출해야 합니다.

2. Spring vs Spring Boot 구분

  • 면접관이나 동료가 "Spring 할 줄 아세요?"라고 물을 때, 오로지 "Spring Boot"의 자동 설정(Annotation) 기능만 알고 있다면 위험합니다.
  • Boot는 Spring을 편하게 띄워주는 래퍼(Wrapper)일 뿐, 근본적인 동작 원리(Bean Lifecycle, Scope, MVC 구조)는 Spring Framework 그 자체임을 인지해야 합니다.

예상 꼬리질문 정리

  1. Q: Spring AOP는 어떻게 동작하나요? (Proxy 패턴)
    • 핵심 키워드: JDK Dynamic Proxy(인터페이스 기반) vs CGLIB(클래스 기반), 런타임 위빙.
  2. Q: PSA(Portable Service Abstraction)의 예시를 들어주세요.
    • 핵심 키워드: @Transactional (JDBC, JTA, Hibernate 등 어떤 기술을 써도 코드는 동일), Spring Cache, Slf4j(로깅).
  3. Q: Spring Boot와 Spring Framework의 가장 큰 차이점은 무엇인가요?
    • 핵심 키워드: Auto Configuration(자동 설정), Starter Dependency(의존성 관리 단순화), Embedded WAS(내장 톰캣).

'Archive > Daily Dev Q&A' 카테고리의 다른 글

Daily Dev Q&A: Spring Boot  (0) 2025.12.26
Daily Dev Q&A: IoC & DI  (0) 2025.12.26
Daily Dev Q&A: 트랜잭션 (Transaction)  (0) 2025.12.22
Daily Dev Q&A: DDL, DML, DCL  (0) 2025.12.18
Dailly Dev Q&A: 정규화  (0) 2025.12.18
'Archive/Daily Dev Q&A' 카테고리의 다른 글
  • Daily Dev Q&A: Spring Boot
  • Daily Dev Q&A: IoC & DI
  • Daily Dev Q&A: 트랜잭션 (Transaction)
  • Daily Dev Q&A: DDL, DML, DCL
tlsgkstj
tlsgkstj
짱구의 성장 일기
  • tlsgkstj
    코딩하는 짱구
    tlsgkstj
  • 전체
    오늘
    어제
    • 분류 전체보기 (159)
      • About (1)
      • Projects (35)
        • Personal Projects (21)
        • Team Projects (14)
      • Engineering (20)
        • CS & Tools (0)
        • Backend Core (15)
        • Frontend (1)
        • Infra & Cloud (2)
        • AI & Tools (1)
      • Trouble Shooting & Issues (0)
      • Growth & Career (38)
        • Interview Prep (0)
        • Retrospectives (38)
      • Archive (65)
        • TIL (8)
        • Daily Dev Q&A (56)
  • 블로그 메뉴

    • 홈
    • About
    • Projects
    • Tech Stack
    • Dev Log
    • GitHub
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    DevFestIncheon2025
    jpa
    데브페스트
    프로젝트회고
    til
    프로덕트개발자
    Project_Review
    경기기후바이브코딩
    network
    java
    커리어리셋
    spring
    devlog
    aws_s3
    REACT
    클로드코드
    Spring비교
    backend
    SpringBoot
    OrphanRemova
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
tlsgkstj
Daily Dev Q&A: Spring Framework
상단으로

티스토리툴바