- 스프링 프레임워크2024년 12월 24일
- imaginaring
- 작성자
- 2024.12.24.:39
특징
- IoC (Inversion of Control) - 의존성 주입
- 개발자가 아닌 스프링 컨테이너가 객체를 관리하고 의존성을 주입
- 객체 생성과 생명주기를 스프링이 제어하여 개발자는 로직에만 집중
- 예시
@Configuration public class AppConfig { @Bean(name = "sms") public SmsSender sender() { return new SmsSender(); } // 별도로 snsSender를 넘겨주지 않아도 컨테이너에서 알아서 해준다 @Bean(name = "notification") public NotificationService notificationService(SmsSender smsSender) { // DI return new NotificationService(smsSender); } } @SpringBootApplication public class TestappApplication { public static void main(String[] args) { NotificationService notification = context.getBean("notification", NotificationService.class); notification.notify("개발자야", "안녕"); } }
- AOP - 관점지향 프로그래밍
- 공통적으로 사용하는 기능(로깅, 트랜잭션 관리 등)을 비지니스 로직과 분리하여 모듈화함
- 코드 중복을 줄이고 유지보수를 쉽게 한다
- 내용이 많아서 추후에 별도로 글을 작성할 것
- 유연한 데이터 접근
- JPA, JDBC, Hibernate 등 다양한 데이터 엑세스 기술과 통합
- DB 연동시 복잡한 예외처리를 단순화, ORM(객체관계매핑)을 쉽게 지원함
- 트랜잭션 관리
- 트랜잭션 경계를 명시적으로 정의하지 않고도 관리 가능
- 선언형 트랜잭션을 통해 개발자가 트랜잭션 관리 코드 직접 작성 안해도 됨
- 모듈화된 아키텍처
- 핵심 컨테이너 외에도 다양한 모듈 제공
- Spring MVC : 웹 앱 개발
- Spring Data : 데이터 엑세스와 DB 연동
- Spring Security : 인증 및 권한
- Spring Boot : 빠른 앱 개발을 위한 경량화 프레임워크
- 핵심 컨테이너 외에도 다양한 모듈 제공
- 유연성과 확장성
- XML, Java Config, Annotation 등등 다양한 설정 방식 지원
스프링 프레임워크 주요 구성
- Core Container
- 핵심, IoC, DI(의존성주입) 제공
- BeanFactory, Application Context 포함
- Spring AOP
- Spring Data Access
- 데이터 엑세스 계층 단순화 도구 제공
- JDBC Template : 표준 JDBC의 복잡한 코드를 간단히 처리
- ORM 지원 : JPA, Hibernate 등 ORM 프레임워크와 통합
- 데이터 엑세스 계층 단순화 도구 제공
- Spring MVC - 모델뷰컨트롤러 패턴 웹 앱 개발 지원
- Restful, API 개발 쉽게 할 수 있따
- Spring Security - 인증 및 권한 부여 간편하게 구현 가능
- Spring boot - 경량화 프레임워크
- 내장 웹서버 (톰캣, 제티) 지원, 자동 설정, 간결한 프로젝트 설정 등 포함
설정방식
- XML기반 (레거시)
<bean id="myBean" class="com.example.MyBean"> <property name="name" value="Spring Framework"/> </bean>
- Java Config 기반
@Configuration public class AppConfig { @Bean public MyService myService() { return new MyService(); } }
- 어노테이션 기반 (가장 현대적, 이 블로그에서는 이 방식을 주로 씁니다)
@Component public class MyService { @Autowired private MyRepository repository; }
스프링 프레임워크의 장점
- 유연성: 다양한 모듈과 설정 방식 지원.
- 생산성: IoC, DI, AOP 등 개발 생산성을 높이는 기능 제공.
- 확장성: 다양한 서드파티 라이브러리 및 프레임워크와의 통합.
- 테스트 용이성: 의존성 주입과 Mock 지원으로 단위 테스트 작성이 쉬움.
- 커뮤니티 및 생태계: 방대한 문서, 예제 코드, 활발한 커뮤니티.
스프링 프레임워크의 단점
- 학습 곡선: 기능이 많아 초보자에게 복잡하게 느껴질 수 있음.
- 설정 복잡성: 스프링 초기 설정(XML 기반 등)이 번거로울 수 있음. (Spring Boot로 많이 해소됨)
- 오버헤드: 작은 프로젝트에 사용하기에는 지나치게 방대할 수 있음.
스프링 프레임워크와 스프링 부트의 차이
스프링 프레임워크 스프링 부트 프레임워크 핵심 기능 제공 스프링 프레임워크의 빠른 개발 도구 설정이 복잡하고 번거로울 수 있음 자동 설정 제공 (Auto Configuration) 웹 서버 별도 설치 필요 내장 웹 서버 제공 (Tomcat, Jetty 등) 설정 파일 작성 및 관리가 필요 최소 설정으로 애플리케이션 실행 가능 스프링 컨테이너
- BeanFactory
- 스프링 컨테이너의 가장 기본적인 구현체
- 빈을 지연로딩(Lazy Loading) 방식으로 생성
- 주로 리소스가 제한된 환경에서 사용
- ApplicationContext
- BeanFactory 확장 버전으로 대부분의 스프링 애플리케이션에서 사용
- 국제화 지원
- 이벤트 처리
- 구현체
- AnnotationConfigApplicationContext : 자바 기반 설정
- ClassPathXmlApplicationContext - XML 파일 기반 설정
- WebApplicationContext : 웹 어플리케이션 환경 지원
- 스프링 프레임워크 : 전체적인 플랫폼
- 스프링 컨테이너 : 이 플랫폼에서 객체 관리와 의존성 해결을 담당하는 핵심 도구
@Configuration public class AppConfig { @Bean public UserService userService() { return new UserServiceImpl(); } } @Service public class UserServiceImpl implements UserService { public void registerUser(String username) { System.out.println("User registered: " + username); } } public class Application { public static void main(String[] args) { // ApplicationContext를 사용하여 컨테이너 초기화 ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); // 컨테이너에서 빈 가져오기 UserService userService = context.getBean(UserService.class); // 메서드 실행 userService.registerUser("JohnDoe"); } }
다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)