스프링 & 스프링 부트 개요
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- Java 기반 웹 애플리케이션 개발자
- 기존 XML 기반 설정을 사용하는 개발자
- DI, AOP, 자동 설정 기능을 활용한 개발자
- 난이도: 중급/고급 (DI, AOP, 자동 설정 개념 이해 필요)
핵심 요약
- 스프링 프레임워크는 의존성 주입(DI)과 AOP를 통해 모듈 간 결합도를 낮추고 유지보수성을 향상시킨다.
- 스프링 부트는 XML 설정 대신 애노테이션 기반 자동 설정을 제공하여 프로젝트 설정 시간을 절감한다.
- @RestController, @Autowired, @Service 등의 애노테이션을 통해 코드 간결성과 테스트 용이성을 달성할 수 있다.
섹션별 세부 요약
1. 스프링 프레임워크 개요
- 스프링은 Java 기반 기업용 애플리케이션 개발을 위한 인프라 제공을 목표로 한다.
- 의존성 주입(DI)은 new 키워드 대신 스프링 컨테이너가 객체를 생성 및 주입하여 결합도를 낮춘다.
- AOP는 로깅, 보안, 트랜잭션 등 공통 기능을 메인 로직과 분리하여 코드 재사용성 향상에 기여한다.
2. 스프링 부트의 자동 설정
- XML 설정 대신 pom.xml에 의존성 추가 후 application.properties 또는 application.yml 파일로 구성 가능.
- @RestController, @Service 등의 애노테이션을 통해 빈 생성 및 주입을 자동화하여 수동 설정 최소화.
- @Data, @Getter 등의 Lombok 애노테이션을 사용해 Getter/Setter 코드 생성을 생략 가능.
3. DI의 유형 및 장점
- 생성자 주입:
public Car(Engine engine)
- 세터 주입:
@Autowired public void setEngine(Engine engine)
- 필드 주입:
@Autowired private Engine engine
- DI의 장점:
- 수동 객체 생성 감소
- 결합도 낮추어 유지보수성 향상
4. AOP 예시
- AOP 없이 로깅 및 권한 체크 코드가 중복되어 복잡도 증가.
- AOP 사용 시
@Aspect
애노테이션을 통해 공통 로직을 분리하고 모듈화 가능. - LogBefore/LogAfter와 같은 어드바이스를 통해 메인 로직과 분리된 처리 가능.
5. JPA 및 스프링 보안
- JPA: ORM 규칙 정의만 제공하고, Hibernate와 같은 구현체가 실제 데이터베이스 연동.
- 스프링 보안: 로그인/로그아웃, 역할 기반 권한 관리, 암호화 기능 제공.
- 스프링 보안 통합:
spring-boot-starter-security
의존성 추가 후 URL 접근 규칙 설정 가능.
6. 결합도 비교
- 강결합:
Engine engine = new Engine()
→ 변경 시 모든 의존처 수정 필요. - 약결합:
@Autowired Engine engine
→ 의존성 주입으로 변경/테스트 용이.
결론
- 스프링 부트는 XML 설정 생략, 자동 구성, 애노테이션 기반 개발을 통해 프로젝트 초기 설정 시간을 대폭 단축.
- DI와 AOP를 활용하여 코드 중복 제거 및 유지보수성 향상이 가능.
- @RestController, @Autowired, Lombok 애노테이션 사용을 통해 개발 효율성 극대화.
- 스프링 보안 모듈을 활용해 로그인/권한 관리를 간단히 구현 가능.