수업 복습

Spring Framework

_김영인 2026. 1. 13. 17:52

1. 프레임워크와 스프링의 기본 개념

프레임워크란 무엇인가

프레임워크는 정해진 틀을 의미한다.
개발자가 모든 구조를 처음부터 설계하는 것이 아니라 이미 검증된 큰 틀 위에서 기능 구현에 집중하도록 돕는 도구다.

 

이 틀을 사용하면 다음과 같은 효과가 있다.

  • 개발자 역량의 상향 평준화
  • 구현 시간 단축
  • 개발 비용 절감
  • 코드 품질 유지
  • 유지보수 용이
  • 라이브러리 버전 관리가 쉬움

공을 들일 가치가 있는 구조를 제공하는 것이 프레임워크의 핵심 역할이다.


 

2. Spring Framework와 Spring Boot의 차이

 

Spring Framework

  • 설정이 명확하고 세밀함
  • XML 기반 설정 중심
  • 전역적인 설정 관리에 강점
  • 대신 가독성이 떨어질 수 있음

 

Spring Boot

  • 설정을 최소화한 스프링
  • 어노테이션(@) 기반 설정
  • 빠른 프로젝트 세팅
  • 시장에서는 “부트 딸깍”이라고 표현될 정도로 간편

 

설정 방식 비교

구분 Spring Spring Boot
설정 방식 XML Annotation
대표 설정 web.xml @WebServlet
가독성 낮은 편 코드와 함께 보이므로 높음
세밀한 제어 매우 강함 상대적으로 제한

Spring Boot는 생산성을, Spring Framework는 구조적 이해와 제어를 중시한다.


 

3. 개발 환경 세팅 개요

 

수업에서 진행한 기본 환경 구성은 다음과 같다.

  1. MySQL 설치
  2. MySQL Workbench 설치
  3. STS (Spring Tool Suite) 설치
    • 설치 중 안내창이 뜨면 Accept 선택

프로젝트 생성 시 입력 항목의 의미는 다음과 같다.

  • 회사 (조직) 이름
  • 프로젝트 이름
  • 애플리케이션 유형 (웹 / 앱 등 기능 단위)

 

4. 스프링 프로젝트 구조 이해

 

주요 디렉토리

  • src/main/java
    • 컨트롤러
    • 메인 실행 코드
  • src/main/resources
    • XML 설정 파일
    • properties 설정 파일
  • static
    • 정적 자원 위치
    • HTML, CSS, JS, 이미지, 에러 페이지 등
  • webapp
    • JSP 페이지 (프론트 화면)

 

설정 파일의 역할

  • .properties
    • 서버 설정 파일
    • XML과 매우 유사한 설정 역할
  • .xml
    • 컨테이너 설정 파일

 

구분하면 다음과 같다.

  • pom.xml → 스프링 컨테이너 설정
  • web.xml → 서블릿 컨테이너 (톰캣) 설정

 

5. 왜 스프링인가?

 

구글링을 해보면 과거에는 EJB가 있었지만 현재는 Spring이 사실상 표준이다.

  • React, Node 생태계에서도 Spring의 구조적 개념을 차용
  • 대한민국은 자바 기반 개발 비중이 매우 높음
  • Spring은 자바 기반 프레임워크의 핵심

스프링의 정의는 다음과 같이 요약된다.

IoC와 AOP를 지원하는 경량의 프레임워크


 

6. 경량 프레임워크와 POJO

 

경량 (Lightweight)이란

 

무겁고 복잡한 상속 구조가 아니라 순수 자바 객체 기반이라는 의미다.

 

POJO란

  • Plain Old Java Object
  • 아무 제약 없이 만든 일반 자바 객체
  • DTO, VO, 일반 클래스 등

 

POJO가 아닌 예

  • Servlet처럼 특정 기술에 강하게 의존하는 클래스
  • import 단계부터 특정 프레임워크가 강제되는 경우

 

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

 

OOP와 AOP의 차이

  • OOP: 객체 단위로 역할 분리
  • AOP: 객체와 무관하게 공통으로 반복되는 로직을 분리

 

예시: 결제 기능

 

결제 컨트롤러 내부에는 다음 흐름이 반복된다.

  1. 로그 기록
  2. 본인 인증
  3. 결제 처리
  4. 종료 로그 기록

회원가입, 댓글 삭제 기능도 구조는 동일하다.

  • 시작 로그
  • 권한 확인
  • 실제 기능 수행
  • 종료 로그

이처럼 기능과 무관하게 항상 등장하는 로직을 AOP에서는 횡단 관심사 (Concern) 라고 부른다.

  • 공통
  • 횡단
  • 관심사
  • 로직
  • 기능

모두 같은 맥락의 용어다.

 

AOP는 이러한 공통 로직을 “정해진 시점에 자동으로 실행되게 만드는 방식”이다.


 

8. IoC (제어의 역전)

 

IoC란 무엇인가

 

IoC는 객체 생성과 관리의 제어권이 개발자에서 프레임워크로 이동하는 개념이다.

  • 기존: 개발자가 new로 객체 생성
  • IoC: 프레임워크가 객체를 생성·관리

개발자는 더 이상 new를 직접 쓰지 않는다.


 

9. 컨테이너의 역할

 

컨테이너란

 

객체를 생성하고 관리하는 주체

  • 서블릿 컨테이너: 톰캣
  • 스프링 컨테이너: Bean 관리

 

서블릿 컨테이너 동작 순서

  1. web.xml 로드
  2. 클라이언트 요청 수신
  3. 요청에 맞는 객체 생성 및 메서드 호출
  4. 결과를 클라이언트에게 반환

 

개발자가 직접 다음 코드를 작성한 적은 없지만

FrontController fc = new FrontController(); fc.doGet();

 

이 작업은 이미 컨테이너가 대신 수행하고 있다.


 

10. IoC가 중요한 이유

 

1. 결합도 감소

  • 한 객체 변경 시 다른 객체가 함께 변경되는 정도가 결합도
  • 결합도가 낮을수록 클린 코드

 

2. 다형성 활용

  • 인터페이스 기반 설계
  • 동일한 메서드 호출, 다른 동작 결과

 

3. 디자인 패턴 활용

  • Factory Pattern
  • MVC Pattern
  • Template Pattern
  • Singleton Pattern

 

스프링 컨테이너는 기본적으로 싱글톤 패턴을 유지한다.


 

11. Bean과 스프링 컨테이너

 

Bean이란

  • 하나의 역할을 담당하는 객체
  • 기본적으로 POJO
  • 스프링이 관리하는 객체 단위

 

Bean Factory vs Spring Container

  • Bean Factory: 개발자가 직접 구현
  • Spring Container: 프레임워크가 제공

 

객체 요청 방식은 다음과 같다.

 
public Object getBean(String beanName)

 

12. 스프링 컨테이너 설정과 동작 방식

 

필수 설정 파일

  • applicationContext.xml

 

Bean 등록 예시

 
<bean class="text04.GalaxyPhone" id="ari" />
 

 

이는 다음 코드와 동일한 의미다.

new GalaxyPhone();

 

컨테이너 동작 순서

  1. 설정 파일 로드
  2. 컨테이너 실행
  3. 객체 요청 (lookup)
  4. 객체 반환 및 사용
  5. 컨테이너 종료 (권장)

 

13. 로딩 방식과 스코프

 

프리로딩 (즉시 로딩)

  • 컨테이너 시작 시 객체 생성
  • 기본 방식
  • 지연 없는 사용자 경험

 

레이지 로딩

  • 요청 시 객체 생성

 

스코프

  • Singleton: 기본값
  • Prototype: 요청할 때마다 새 객체 생성 (거의 사용하지 않음)

 

14. 생성자와 생명주기

  • 기본 생성자: 멤버 변수 초기화
  • initMethod: 생성자 역할을 대체하는 초기화 메서드

 

스프링은 단순한 라이브러리가 아니라

  • 객체 생성
  • 객체 연결
  • 공통 로직 관리
  • 구조 표준화

를 책임지는 애플리케이션 프레임워크다.

 

'수업 복습' 카테고리의 다른 글

Spring DI (의존성 주입)  (1) 2026.01.14
다형성 복습 및 과제  (0) 2026.01.13
커스텀 태그 복습  (0) 2025.12.01
팩토리 패턴 & 싱글톤 복습  (0) 2025.11.28
비동기 통신 & FC 패턴 복습  (0) 2025.11.27