스프링 프레임워크의 차별점

  • 복잡함에 반기를 들어서 만들어진 프레임워크
  • 프로젝트 전체 구조를 설계할 때 유용한 프레임워크
  • 다른 프레임워크들의 포옹
  • 개발 생산성과 개발도구의 지원

 

주요 특징

  • POJO기반의 구성
  • 의존성 주입(DI)을 통한 객체간의 관계 구성
  • AOP(Aspect-Oriented-Programming) 지원
  • 편리한 MVC 구조
  • WAS의 종속적이지 않은 개발 환경

 

커넥션 풀이란?

  • 여러명의 사용자를 동시에 처리해야하는 웹 애플리케이션의 경우 DB연결을 이용할 때 사용
  • JAVA에서는 DataSource라는 인터페이스를 통해 사용
  • 여기서는 HikariCP 사용

 

MyBatis란?

  • SQL 매핑(Mapping) 프레임워크

 

전통적인 JDBC프로그램과 MyBatis의 차이점

전통적인 JDBC 프로그렘 MyBatis
- 직접 Connection을 맺고 마지막에 Close()로 닫아줘야함
- Preparedstatement 직접 생성 및 처리
- SetXXX등을 모두 개발자가 직접 처리
- SELECT의 경우 직접 ResultSet 처리
- 자동으로 Connection 처리
- MyBatis 내부적으로 처리
- #{prop}와 같이 속성을 지정하면 내부적으로 자동 처리
- 리턴 타입 지정 시 자동으로 객체 생성 및 ResultSet 처리

 

MyBatis

  • 가장 핵심적인 객체(SQLSession, SQLSessionFactory)
  • SQLSession : MyBatis에서 SQLSession을 통해서 Connection을 생성하거나 원하는 SQL을 전달하고, 결과를 리턴 받는 구조로 작성
  • SQLSessionFactory : 내부적으로 SQLSession을 만들어 내는 존재

 

Mapper

  • SQL과 그에 대한 처리를 지정하는 역할
  • XML과 인터페이스 + 어노테이션 형태로 작성
  • RootConfig.java 설정에서 @MapperScan 어노테이션을 사용해서 패키지를 인식하는 방식으로 처리

 

POJO(Plain Old Java Object)

  • 다른 프레임워크들과 달리 관계를 구성할 때 별도의 API를 사용하지 않음
  • 생산성에 유리, 코드 테스트를 좀 더 유연하게 가능
  • 개발자가 특정 라이브러리나 컨테이너 기술에 종속적이지 않음
  • 개발자가 특정 라이브러리나 컨테이너 기술에 종속적이지 않음

 

구조와 DI

  • 의존성 주입(DI)
  • 'Application Content'에서 존재가 필요한 객체 생성 후 필요한 객체들을 주입하는 역할을 하는 스프링의 구조
  • Application Content가 관리하는 객체 -> 빈(Bean)
  • 빈과 빈 사이의 의존관계를 처리하는 방식(XML 설정, 어노테이션 설정, Java 설정)

 

LOMBOK

  • 컴파일 시 코드를 작성해 주는 라이브러리
  • @Setter
  • @Data

 

@Setter

  • Setter 메소드를 생성해주는 역할
  • OnMethod 속성 : Setter 메소드를 생성시 추가할 어노테이션 지정

 

@Data

  • Lombok에서 가장 자주 사용되는 어노테이션
  • @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequireArgsConstructor를 모두 결합한 형태
// 생성자 선언 및 주입
public class Sample {
	private Chef chef;
    
    public Sample(Chef chef) {
    	this.chef = chef;
    }
}


// =============================================================================
// 생성자의 자동 주입
import org.springframework.stereotype.Component;

import lombok.Getter;
import lombok.ToString;

@Component
@ToString
@Getter
@AllArgsConstructor
public class Sample {
	private Chef chef;
}

 

Spring 관련 어노테이션

  • @Component
  • @Autowired

 

@Component

  • 해당 클래스가 스프링에서 객체로 만들어서 관리하는 대상임을 명시하는 어노테이션
  • @Component가 존재하는 클래스들을 객체로 생성해서 빈으로 관리하게 됨

 

@Autowired

  • 스프링 내부에서 자신이 특정한 객체에 의존적이므로 자신에게 해당 타입의 빈을 주입해주라는 표시
  • public class Test{
    	@Setter(onMehtod_ = { @Autowired }
        private Sample sample;
    }

+ Recent posts