[Spring Framework] Spring 핵심 원리 - 컴포넌트 스캔과 의존관계 자동 주입
2022.02.03
1. 컴포넌트 스캔과 의존관계 자동 주입 스프링 빈을 등록할 때 Java 코드의 @Bean이나 XML의 등을 이용해 설정 정보에 직접 등록할 빈을 명시했습니다. 그런데, 이렇게 등록해야할 스프링 빈이 수십, 수백개가 되면 일일이 등록하기도 귀찮고, 설정 파일도 커지는 문제가 발생합니다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공합니다. 탐색할 패키지의 시작 위치 지정 모든 Java 클래스를 다 컴포넌트 스캔하면 시간이 오래 걸립니다. 그래서 꼭 필요한 위치부터 탐색하도록 시작 위치를 지정할 수 있습니다. @ComponentScan( basePackages = "com.demo.core", basePackageClasses = AutoConfig.cl..
1. 개요 Spring이 제공하는 핵심 가치와 원리를 이해해야 합니다. 왜 Spring을 만들었고, Spring이 왜 이런 기능들을 제공하는지를 살펴봅니다. 과거 오픈 소스는 ‘사파’라 불렸고, 표준이 ‘정파’ 기술로 불렸습니다. EJB는 ‘정파’였기 때문에 여러 기업들에서 EJB를 많이 도입했습니다. EJB가 이론적으로는 정말 좋았지만, 현실적으로 너무 어렵고, 느렸습니다. 그리고 비쌌습니다. EJB 엔티티빈 → 하이버네이트 → JPA 지금 시점에 Java로 개발할 때의 메인이 되는 두 축은 Spring과 JPA입니다. Spring 프레임워크의 역사 (로드 존슨이 최초 만들었던 3만줄의 Spring 코드로부터 시작하였습니다.) 2003년, Spring 프레임워크 1.0 출시 - XML로 설정 2006년..
1. AOP (Aspect-Oriented Programming)란? AOP는 어플리케이션 전체에 걸쳐 사용되는 하나의 공통된 기능을 한 곳에서 관리할 수 있도록 하는 기법입니다. AOP는 관점 지향 프로그래밍이라는 말로 번역되는데, 이는 말그대로 관점에 따른 프로그래밍 방법을 말합니다. 쉽게 얘기해서, 비즈니스 로직을 살짝 다른 관점에서 생각해보자라는 것입니다. 비즈니스 로직을 담고있는 *Service 클래스를 기준으로 바라본다고 생각해보겠습니다. Board와 관련된 비즈니스 로직을 담당하는 BoardService와 Member와 관련된 비즈니스 로직을 담당하는 MemberService입니다. 하나의 서비스를 기준으로 바라보게되면 둘은 공통점이 없습니다. 하지만, 관점을 조금 달리해서 측면을 기준으로 ..
1. Mybatis란? Spring 카테고리에 글을 작성하지만 MyBatis는 Spring과 전혀 상관없는 독립적인 프레임워크라는걸 미리 말씀드립니다. 또한, MyBatis는 Java에 국한된 프레임워크가 아닙니다. C#, Ruby 등의 언어에서도 사용이 가능합니다.(저는 Java로만 써봤습니다 😅 ) MyBatis란 DAO 객체와 SQL문을 Mapping해주는 Persistence Framework입니다. (SQL Mapper라고도 부릅니다.) 즉, Data Access Layer에 속하는 프레임워크입니다. 혹시 JDBC를 이용해 DAO 객체를 만들어 보셨나요? JDBC 코드를 짜보신 분들은 아시겠지만, CRUD 메서드에서 80~90%는 중복 코드입니다. (정확한 수치는 아닙니다.. ㅎ) DriverM..
1. 인터셉터 - HandlerInterceptor 인터페이스 Interceptor는 Spring에서 제공하는 기능 중 하나입니다. (Spring Framework를 사용하지 않는다면 Filter로 대체할 수 있습니다.) 클라이언트가 URL 요청을 보내면 해당 URL 매핑을 가지는 Controller에서 해당 메서드를 실행시킬텐데, 이때, 요청 흐름 사이사이에 로직을 끼워넣을 수 있습니다. 보통 3가지 흐름에 로직을 끼워넣습니다. Controller의 요청 메서드를 실행시키기 전 Controller의 요청 메서드를 실행시킨 후 View 처리가 끝난 후 Interceptor는 HandlerInterceptor 인터페이스를 구현하여 만들 수 있습니다. 그중, 자주 사용되는 구현체는 HandlerInterce..