Spring

Spring & SpringBoot 짧고 굵게 짚고가기

joohyukkim 2021. 9. 12. 13:04

Spring

  • Spring에는 상당히 많은 프로젝트들이 존재한다.
  • 단일 아키텍처 Monolithic에서 SpringCloud 활용 MSA 로 변환
  • 많이 사용되는 것들로는
    • 스프링부트
      • 스프링 클라우드
      • 스프링 데이터
      • 스프링 배치
      • 스프링 시큐리티
  • Spring의 과제는 "테스트의 용이성", "느슨한 결합"에 중점을 두고 개발
  • IoC의 등장 (Inversion of Control, 제어의 역행)
    • 스프링과 다른 프레임워크와 가장 큰 차이점이 IoC를 통한 개발 진행
  • AOP
    • AOP를 사용하여 로깅, 트랜잭션 관리, 시큐리티에서의 적용 등 AspectJ와 같이 완벽하게 구현된 AOP와 통 합하여 사용 가능하다.

IoC (Inversion of Control)

  • "제어의 역전"
  • Java객체를 new로 생성하여 개발자가 관리하는 것이 아닌 Spring Container에 모두 맡긴다.
  • 권한이 프레임워크로 넘어갔다 해서 제어의 역전이라고 한다. 스프링의 큰 특징이다.
  • 즉, 개발자에서 -> FrameWork로 객체 관리의 책임이 넘어갔기 때문이다.
  • @Bean 과 @Component 라는 개념일 알아야한다.DI (Dependency Injection)
    • 의존성으로부터 격리시켜 코드 테스트에 용이하다.
    • DI를 통하여, 불가능한 상황을 Mock와 같은 기술을 통하여 안정적으로 테스트가 가능하다.
    • 코드를 확장하거나 변경 할 때 영향을 최소화 한다. (추상화)
    • 순환참조를 막을 수 있다.

AOP

  • 관점지향 프로그램
  • 스프링 어플리케이션은 대부분 특별한 경우를 제외하고는 MVC 웹 어플리케이션에서는
    • web layer : RestAPI를 제공하며 Client 중심의 로직 적용
    • business layer : 내부 정책에 따른 Logic을 개발하며, 주로 해당 부분을 개발
    • data layer : 데이터 베이스 및 외부와의 연동을 처리
      로 정의
  • 주요 Annotation
    • @Aspect : 자바에서 널리 사용하는 AOP프레임워크에 포함되며, AOP를 정의하는 Class에 할당
    • @Pointcut : 기능을 어디에 적용시킬지, 메소드? Annotation? 등 AOP를 적용시킬 지점을 설정
    • @Before : 메소드 실행하기 이전
    • @After : 메소드가 성공적으로 실행 후, 예외가 발생 되더라도 실행
    • @AfterReturning : 메소드 호출 성공 실행시 (Not Throws)
    • @AfterThrowing : 메소드 호출 실패 예외 발생 (Throws)
    • @Around : Before / after 모두 제어

Spring Boot Annotations

요즘은 클라이언트가 따로 서버로 분리되어 백엔드(서버)쪽은 RestAPI로 데이터를 주고받는 스프링부트가 많이 사용된다.
아래는 스프링부트에서 많이 사용되는 어노테이션 목록으로 알아두면 좋다.

가장 기본적인 어노테이션

    @SpringBootApplication : Spring boot application으로 설정
    @Controller : View를 제공하는(템플릿) controller로 설정
    @RestController : REST API 를 제공하는 controller로 설정
    @RequestMapping : URL 주소를 매핑
    @GetMapping : Http Get메소드 주소 매핑
    @PostMapping : Http Post메소드 주소 매핑
    @PutMapping : Http Put메소드 주소 매핑
    @DeleteMapping : Http Delete메소드 주소 매핑
    @RequestParam : URL Query 파라미터 매핑
    @RequestBody : Http Body를 Parsing 맵핑
    @Valid : POJO Java Class의 검증

bean와 객체를 다루거나 DI관련 어노테이션

    @Configuration : 1개 이상의 bean을 등록 할 때 설정
    @Component : 1개의 Class 단위로 등록 할 때 사용
    @Bean : 1개의 외부 library로 생성한 객체를 등록 시 사용
    @Autowired : DI를 위한 곳에 사용
    @Qualifier : @Autowired 사용시 bean이 2개 이상일때 명시적 사용
    @Resource : @Autowired + @Qualifier 의 개념으로 이해

AOP

    @Aspect : AOP 적용시 사용
    @Before : AOP 메소드 이전 호출 지정
    @After : AOP 메소드 호출 이후 지정 예외 발생 포함
    @Around : AOP 이전/이후 모두 포함 예외 발생 포함
    @AfterReturning : AOP 메소드의 호출이 정상일 때 실행
    @AfterThrowing : AOP시 해당 메소드가 예외 발생시 지정