Posts Spring 리마인드
Post
Cancel

Spring 리마인드

kafka 스터디를 하면서 producer와 consumer를 spring boot로 구현하는 경우가 많다고 알고있는데 spring은 과거 web개발 프로젝트 때 사용을 해봤지만, spring boot는 새로 배워야할거 같아서 개발자 이동욱님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스라는 책도 읽고있다. 책이 실습 형식으로 구성되어있어 어렵지 않아 spring boot의 기초를 배우는데는 좋다. 하지만, Spring 사용이 3년이 지나다보니 AOP,IOC,DI 등 spring의 기본 개념과 JAVA의 Annotation이 생각이 나지 않아 글로 정리 하려고 한다.

1. Annotation(@) 이란?

어노테이션은 메타 데이터의 일종으로 이 코드가 어떤 용도로 사용될까 이 클래스는 어떤 역할을 하게 할까 라는 정보를 라벨링하는것으로. Spring에서 어노테이션은 AOP(관점 지향 프로그래밍)을 편리하게 구성 할 수 있게 해주며 정리 하자면 소스코드에 붙히는 라벨링과 같다. Spring은 이 라벨을 보고 내부적으로 코드를 생성해줘 개발자는 비즈니스 로직에만 집중 할 수 있도록 해준다.

2. AOP(Aspect Oriented Programming) 이란?

관점 지향이라고하면 말이 좀 어려운데 나는 관점보다는 기능이라고 이해하면 더 편한것 같다. AOP는 여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 높혀주는 프로그래밍 기법이다. AOP는 핵심 기능과 공통 기능을 분리하여 핵심 기능을 구현한 코드의 수정 없이 공통 기능을 적용할 수 있도록 만들어 준다. 예를 들어 내가 데이터를 가져오는 ETL코드를 작성했다고 하면 그 ETL처리의 데이터를 검증하는 코드를 ETL핵심 로직과 분리하여 만들어 데이터 검증 코드가 변경이 되어도(데이터 기준 계산 변경 sum -> avg) ETL 기능을 하는 코드는 수정하지않아도 된다. Spring은 핵심 코드가 수행되는 앞이나 뒤에 공통 코드를 실행 시킬 수 있도록 해준다.

3. IoC(Inversion of Control)

IoC란 한글로 번역하면 제어의 역전이라고 하는데 쉽게 말해 제어권이 바뀌었다 라고 할 수 있다. 그러면 어떤 제어가 어디에서 어디로 바뀌었다는 걸까? 원래 자바에서 객채를 생성하고 객체간의 의존관계를 연결하는 제어권은 개발자가 가지고 있었다. 하지만 Spring에서는 이러한 제어권을 Spring이 가져가 객체의 생성 및 생명주기 까지 관리한다. 이렇게 Spring이 객체의 제어권을 가져가 개발자는 객체 생성에 대해 신경 쓰지않고 비즈니스 코드에만 집중하여 변경에 유연한 코드 구조를 만들 수 있도록 해준다.

4. DI(Dependency Injection)

DI란 한글로 번역하면 의존성 주입이라고 하는데 여기서 의존이란 무었일까? 의존이란 객체 간의 의존 관계를 의미하는데 의존 관계란 A 객체와 B 객체간에 참조가 되었다는 말이다. A가 B에 의존관계가 있다면 B가 바뀐다면 A에도 영향이 가는 구조이다. Spring에서 DI를 하는 방법은 아래와 같다.

  • Field Injection : 필드에 @Autowired 어노테이션 붙히기.
  • Constructor based Injection : 생성자 생성으로 의존성 주입으로 현재 spring에서 가장 권장하는 방법이다.
  • Setter Based Injection : Setter 메소드에 @Autowired 어노테이션 붙히기.

DI를 보면 객체생성을 Spring에서 해주고 객체간 의존성을 주입해주는데 DI가 바로 위에서 설명한 IoC를 구현하는 방식중 하나로 Spring에서는 IoC 프로그래밍 모델 구현은 DI라는 방식을 통해서 구현하고 있는것이다.

This post is licensed under CC BY 4.0 by the author.

Contents

카프카 설치

스프링 부트에서 JPA 다루기

Comments powered by Disqus.