• Bean(빈)

    • 빈은 Spring이 관리하는 객체를 의미
    • Spring에서 빈(Bean)은 Spring IoC(Inversion of Control) 컨테이너가 인스턴스화, 관리, 구성하는 객체. 즉, Spring에 의해 싱글톤으로 생성되고 관리되는 객체를 빈이라 일컬음
    • Bean이 되기 위한 스프링 주요 어노테이션
      • @Component, @Service, @Repository, @Controller, @Bean 등
  • 컨트롤러

    Untitled

    • 이 계층은 사용자의 요청을 받고 응답을 반환하는 역할
    • @Controller가 붙은 클래스는 웹 요청을 처리하는 핸들러 메소드(@GetMapping, @PostMapping 등)를 포함
    • 컨트롤러에서 데이터 전송 객체(DTO) 사용
      • 사용자의 입력값을 받기 위해 주로 RequestDTO(Data Transfer Object) 또는 ResponseDTO를 사용
      • 엔티티는 데이터베이스의 테이블과 직접적으로 매핑되는 반면, DTO는 사용자의 요청과 응답 형태를 정의하는 데에 초점
  • 서비스

    • 이 계층은 시스템의 비즈니스 규칙을 구현하고, 로직을 처리
    • 컨트롤러에서 받은 DTO를 서비스 계층에 전달하고, 서비스 계층에서는 이 DTO를 기반으로 엔티티 객체를 생성하거나 업데이트
    • 대규모 서비스에서는 service 인터페이스를 두고, serviceImpl구현체를 별도로 두어 다형성 구현
  • 레포지토리

    • 데이터 접근 계층(Persistence Layer)을 처리하는 클래스. DAO계층
    • 이 계층은 주로 데이터베이스와의 통신을 담당
  • Entity

    • 엔티티는 데이터베이스 테이블과 매핑되는 자바 클래스
    • @Entity
      • 이 클래스가 JPA (Java Persistence API) 엔티티이고 JPA가 관리하는 엔티티임을 의미하는 어노테이션
      • jpa에서는 이 어노테이션이 붙은 클래스를 자동으로 스캔하여 JPA 엔티티로 등록
    • @Builder
      • 빌더 패턴이 사용가능하도록, 내부빌더 클래스를 자동으로 생성해주는 어노테이션
      • 빌더 패턴을 통해 매개변수 세팅을 순서와 개수를 선택적으로 유연하게 세팅할수 있게됨
  • IoC(Inversion of Control)의 주요개념

    • IoC는 "제어의 역전이라 번역. 이 개념은 객체의 생성과 생명 주기 관리를 개발자가 아닌 프레임워크가 담당한다는 것을 의미
    • IoC의 주요 개념
      • IOC컨테이너는 객체의 생명주기와 의존성을 관리하는 컨테이너. 객체 생성, 의존성 주입, 생명주기 관리 등을 자동으로 처리
    • 스프링 컨텍스트(Spring Context) 또는 애플리케이션 컨텍스트(Application Context)
      • IoC 컨테이너의 더 확장된 형태로, 스프링 애플리케이션에서 사용되는 모든 객체(빈)를 담고 있는 컨테이너
      • IoC 컨테이너의 기능인 객체생성과 의존성 관리외에 AOP 지원, 이벤트 발행, 리소스 관리 등 스프링 프레임워크의 다양한 기능을 제공
  • 리플렉션

    • IoC 컨테이너는 리플렉션을 사용하여 런타임에 클래스의 메타데이터를 읽고, 객체를 동적으로 생성하며, 의존성을 주입
      • 예시)@Autowired나 @Component 어노테이션이 붙은 클래스와 메소드를 찾고, 이를 기반으로 객체를 생성하고 의존성을 주입하는 과정에서 리플렉션이 사용
      • 리플렉션(Reflection)은 스프링의 근간이 되는 기술로서 리플렉션을 기반으로 한 다양한 기능들을 제공
    • 리플렉션은 프로그램이 자신의 구조를 분석하고 조작할 수 있는 기능
      • Java에서 리플렉션은 런타임에 클래스, 인터페이스, 필드, 메소드 등에 대한 정보를 검색하고, 이들을 런타임에 동적으로 조작할 수 있는 방법을 제공
    • 리플렉션의 주요 기능
      • 어노테이션 처리
        • 클래스, 메소드, 필드에 적용된 어노테이션 정보를 읽고 처리
      • 클래스 정보 검색
        • 리플렉션을 사용하여 어떤 객체의 클래스 이름, 상위 클래스, 구현된 인터페이스 등을 검색
      • 필드와 메소드 접근
        • 객체의 private, protected, public 필드나 메소드에 접근하고, 이들의 값을 읽거나 수정
      • 동적 객체 생성
        • 클래스 이름만 알고 있을 때, 그 클래스의 인스턴스를 동적으로 생성