잡학개발공간
article thumbnail

프레임워크?

  • 프레임워크는 어플리케이션 개발 시 반복적으로 사용되는 공통적인 부분을 미리 구성해 놓은 라이브러리의 집합.
  • SW 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합.
  • 프레임워크는 개발자가 특정 규약 또는 구조 내에서 개발을 진행하도록 도와, 빠르고 안정적인 개발을 지원한다.
  • 웹 어플리케이션을 개발하기 위해서는 많은 기능을 설계 작성해야하지만, 공통으로 사용되는 기본기능들을 일관되게 사용할 수 있으면 개발자는 웹 어플리케이션 기능 자체 개발에만 신경을 쓰면 되기 때문에 생산성이 높아진다.
  • Spring, Django, Ruby on Rails 모두 프레임워크의 예시다.

 

 

Spring 프레임워크 특징

IoC (제어의 역전)

  • 정의: 전통적으로 프로그램의 흐름을 개발자가 제어했으나, Spring에서는 프레임워크가 이를 대신 한다.
  • 사용자가 직접 new 키워드로 객체를 생성하는 대신 Spring 컨테이너가 객체를 생성 및 관리한다.

 

DI (의존성 주입)

  • 정의: 객체와 객체 사이의 의존 관계를 Spring 컨테이너가 대신 설정해주는 것
  • 예시: OrderServiceProductService에 의존하고 있다. 이 의존성은 생성자를 통해 주입된다.
@Service
public class OrderService {
    private final ProductService productService;

    @Autowired
    public OrderService(ProductService productService) {
        this.productService = productService;
    }
}
  • @Qualifier: 여러 Bean 중 특정 Bean을 지정하여 주입하고 싶을 때 사용

 

Ioc, DI의 직관적인 예시

상황: 친구와 커피를 마시러 카페에 감.

전통적인 방식

  • 친구가 카페에 도착하면, 직접 메뉴판을 보고 원하는 커피를 선택한다.
  • 선택한 커피에 따라, 필요한 재료와 조리 방법을 알아야 한다.
  • 커피를 만들기 위해 바리스타에게 직접 지시한다.

 

IoC 방식 

  • 카페에 도착하면, 나는 원하는 메뉴만 선택하면 된다.
  • 커피를 만들어 주는 것은 바리스타의 책임. 나는 결과물인 커피만 받아서 마신다.

 

DI 방식 

  • 내가 특별한 재료로 커피를 만들기를 원한다면 (예: 특별한 시럽)
  • 나는 바리스타에게 그 시럽을 주며, 그 시럽을 사용하여 커피를 만들어달라고 요청한다.
  • 바리스타는 내가 제공한 시럽을 사용하여 커피를 만들어 준다.

카페에서 바리스타가 커피 제조의 제어를 담당하는 것처럼, IoC는 프로그래밍에서도 객체의 제어와 관리를 외부 요소(프레임워크, 컨테이너)에게 맡기는 것을 의미한다. 그리고 DI는 필요한 재료나 구성 요소를 외부에서 제공받는 것처럼, 객체가 필요로 하는 의존성을 외부에서 주입받는 것을 의미한다.

 

 

AOP (관점지향 프로그래밍)

  • Aspect: 횡단 관심사를 모듈화한 코드 (예: 로깅, 트랜잭션 관리)
  • PointCut: 어떤 JoinPoint (메소드 실행 지점)에서 Aspect가 동작할지 정의
  • JoinPoint: 프로그램 실행 중 Aspect의 코드가 삽입될 수 있는 지점
  • Target: Aspect의 코드가 적용되는 객체
  • PointCut execution작성 방법: "execution([수식어] 리턴타입 [클래스이름].메소드이름(파라미터))"
  • Advice 타입:
    • before: 메소드 실행 전에 동작
    • after: 메소드 실행 후에 동작 (예외 발생 여부와 상관없이)
    • after returning: 메소드가 성공적으로 실행된 후에 동작
    • after throwing: 메소드에서 예외가 발생했을 때 동작

 

 

Spring Bean

  • POJO (Plain Old Java Object)
    • 정의: 특정 규약 또는 인터페이스에 의존하지 않은 순수한 자바 객체
    • 예시: public class Person { private String name; }
  • Bean 생명주기
    • Bean은 생성, 초기화, 사용, 소멸의 단계를 거친다
    • @PostConstruct, @PreDestroy 애너테이션을 사용하여 초기화 및 소멸 시 특정 로직을 실행할 수 있다.
  • 등록방식
    • Annotation: 클래스 위에 @Component, @Service 등의 애너테이션을 사용.
    • XML: <bean id="..." class="..."/> 형태로 등록.
    • Java: @Configuration 애너테이션과 함께 @Bean을 사용해 Java 코드 내에서 Bean을 등록.
  • Maven과 pom.xml
    • Maven: Java 프로젝트의 빌드, 관리 도구.
    • pom.xml: Maven 설정 파일. 의존성, 플러그인, 프로젝트 정보 등을 정의.
    • 예시:
      pom.xml에 Spring Core 라이브러리를 추가하는 방법.
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.0.0.RELEASE</version>
</dependency>

'Web 백엔드 > Spring' 카테고리의 다른 글

[Spring] Spring MVC 패턴  (1) 2023.10.23

검색 태그