Daily Dev Q&A

스프링 프레임 워크

awake123 2025. 12. 22. 18:18

1. 스프링 프레임 워크란

 

**스프링 프레임워크(Spring Framework)**는
자바(Java) 기반 엔터프라이즈 애플리케이션을 효율적으로 개발하기 위한 오픈소스 프레임워크입니다.
핵심 목적은 객체 간 결합도를 낮추고(유연성↑), 반복 작업을 줄이며(생산성↑), 테스트와 유지보수를 쉽게 만드는 것입니다.

 

 

1) IoC (Inversion of Control, 제어의 역전)

  • 객체를 개발자가 직접 new 하지 않음
  • 스프링 컨테이너가 객체 생성과 생명주기를 관리
  • 코드가 프레임워크에 덜 의존 → 변경에 강함
@Component
public class ServiceA {
    // 객체 생성 안 함
}

 

 

2) DI (Dependency Injection, 의존성 주입)

  • 객체가 필요한 의존 객체를 외부에서 주입
  • 결합도 감소, 테스트 용이
@RequiredArgsConstructor
@Service
public class OrderService {
    private final OrderRepository orderRepository;
}

 

3) AOP (Aspect Oriented Programming)

  • 공통 관심사 분리
  • 로깅, 트랜잭션, 보안 등을 핵심 로직과 분리
@Transactional
public void save() { }

 

 

스프링 vs 스프링 부트

  • Spring Framework
    • 기능이 많고 유연하지만 설정이 복잡
  • Spring Boot
    • 스프링을 쉽게 쓰게 만든 도구
    • 자동 설정, 내장 서버, 빠른 시작

왜 스프링을 쓰는가 (현실적인 이유)

  • 대규모 서비스에 검증됨
  • 유지보수·테스트에 강함
  • 생태계 방대 (JPA, Security, Batch 등)
  • 국내·해외 채용 시장 사실상 표준

 

2. 스프링을 실무에서 사용하지 못한다면.

 

“스프링을 실무에서 사용하지 못한다면 → 백엔드 개발자로서 실무 투입이 매우 어렵다”
특히 국내 Java 백엔드 시장에서는 거의 불가능에 가깝습니다.

 

그 이유로는 

 

1) 실무 요구 자체가 스프링 전제

대부분 채용 공고는 암묵적으로 아래를 기본값으로 둡니다.

  • Spring Boot
  • Spring MVC
  • Spring Data JPA
  • @Transactional
  • DI / IoC 이해

=> *“자바는 할 줄 압니다”*는
스프링을 못 쓰면 의미가 거의 없습니다.

 

 

2) 단순 문법 문제가 아님

스프링을 못 쓴다는 건 보통 이런 상태입니다.

  • @Service, @Repository 역할 구분 불가
  • 트랜잭션 경계 설정 못함
  • DI 설계 감각 없음
  • 테스트 코드 작성 불가
  • 계층 분리 개념이 흐림

이건 툴 미숙이 아니라
=>서버 애플리케이션 설계 역량 부족으로 평가됩니다.

 

3)  “다른 프레임워크 하면 되지 않나요?”의 현실

이론적으로는 가능하지만 현실은 다릅니다.

대안현실
순수 Servlet 실무 거의 없음
Node.js Java 포지션과 분리
Python (Django) 주니어 진입 장벽 높음
Go 신입 거의 안 씀

=> Java를 선택했다면 스프링은 선택이 아니라 필수입니다.

 

 

 

3.스프링이 제공하는 최적화와 효율성

 

1) 객체 생성·관리 최적화 (IoC / DI)

문제 (스프링 없을 때)

  • 객체 생성 위치가 분산됨
  • new 남발 → 결합도 증가
  • 교체·테스트 비용 폭증

스프링의 최적화

  • 싱글톤 컨테이너 기본 관리
  • 객체 재사용 → 메모리 절약
  • 의존성 변경 시 코드 수정 최소화
@Service // 기본 싱글톤
public class OrderService { }

 

=>객체 생성 비용 + 관리 비용 감소

2) 트랜잭션 처리 최적화

문제

  • try-catch + commit/rollback 직접 관리
  • 예외 누락 시 데이터 꼬임
  • 코드 가독성 최악

스프링의 최적화

  • 선언적 트랜잭션 (@Transactional)
  • 런타임 예외 기준 자동 rollback
  • 커넥션 효율적 재사용
@Transactional
public void saveOrder() { }

 

=>정합성 유지 + 개발자 실수 제거

3) AOP 기반 공통 로직 분리

문제

  • 로깅, 권한, 시간 측정 코드 중복
  • 핵심 로직 가독성 붕괴

스프링의 최적화

  • 프록시 기반 AOP
  • 핵심 비즈니스 로직 집중
@Around("execution(* service..*(..))")

 

=>중복 제거 + 코드 응집도 상승

4) 데이터 접근 성능 최적화 (Spring Data JPA)

제공 최적화 요소

  • 1차 캐시 (영속성 컨텍스트)
  • 쓰기 지연 (Batch Insert)
  • 변경 감지 (Dirty Checking)
member.setName("변경");
// update 쿼리 자동 처리

=>불필요한 SQL 감소 = DB 부하 감소

5) 웹 요청 처리 효율 (Spring MVC)

최적화 포인트

  • DispatcherServlet 중앙 제어
  • 스레드 재사용 (서블릿 컨테이너)
  • 파라미터 바인딩 자동화
@GetMapping("/users/{id}")
public UserDto get(@PathVariable Long id)

=>요청 처리 비용 감소 + 코드 간결

6) 예외 처리 & 안정성 최적화

  • 전역 예외 처리 (@ControllerAdvice)
  • 일관된 에러 응답
  • 장애 지점 추적 용이

=>운영 안정성 ↑ / 장애 대응 시간 ↓

7) 테스트 효율 극대화

  • DI 기반 Mock 주입 가능
  • 단위 테스트/통합 테스트 분리
@MockBean
private UserRepository userRepository;

 

=>테스트 작성 비용 감소 + 품질 상승

 

4. 면접관이 해당 질문을 한다면 그 의도는. 

 

1) “이 사람이 스프링을 써본 사람인가?”

  • 의도: 공식 문서 암기 vs 실무 사용 경험 구분
  • 보고 싶은 신호
    • “CPU 최적화” 같은 추상적 얘기 X
    • 트랜잭션, 객체 생명주기, 중복 제거 같은 현실적 얘기 O

=> 실무자는
“스프링의 최적화는 성능보다 실수 방지·유지보수 비용 감소 쪽이 큽니다”라고 답함

 

2) “프레임워크의 역할을 과대평가하지는 않는가?”

  • 의도: 스프링을 만능으로 보는지 확인
  • 보고 싶은 신호
    • “스프링이 알아서 성능 다 잡아줍니다” X
    • “설계를 단순화해 잘못된 최적화를 줄여준다” O

=> 면접관은
**‘스프링이 뭘 해주고, 뭘 안 해주는지’**를 아는지를 봅니다.

 

 

 

3) “이 사람이 왜 이 구조를 쓰는지 알고 있나?”

  • 의도: 관성적인 사용자인지 판단
  • 보고 싶은 신호
    • DI → 결합도 감소
    • AOP → 공통 로직 분리
    • @Transactional → 정합성·커넥션 관리

=> “왜 쓰는지” 설명 못 하면
복붙 개발자로 분류됩니다.

 

4) “문제 생겼을 때 원인 추적이 가능한가?”

  • 의도: 장애 대응 가능성 평가
  • 보고 싶은 신호
    • 프록시/AOP/트랜잭션 경계 이해
    • “이 지점에서 프록시 때문에 동작이 달라질 수 있다”는 인식

=> 이 질문은
**‘운영 중 문제를 혼자 해결할 수 있나?’**를 보는 질문입니다.

 

 

5) “우리 팀에 바로 투입해도 되는가?”

  • 의도: 온보딩 비용 계산
  • 합격 신호
    • 스프링이 개발 속도·안정성·협업 효율을 높인다는 설명
    • 코드 품질 관점의 최적화 언급

 

 

 

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

자바 가상 머신  (0) 2026.01.07
spring의 예외처리방식  (0) 2025.12.30
트랜잭션  (0) 2025.12.21
람다표현식  (0) 2025.12.19
자바의 접근 제어자(Access Modifier)  (0) 2025.12.09