본문 바로가기
FrameWork & Runtime/Spring

<코드 프레소 웹 개발 트랙> Spring Boot 웹 개발 입문 [2]

by jaeaemin 2022. 2. 7.

 

 

Spring Service 

시스템의 핵심 비지니스 로직을 구현하는 계층

view의 종류와 database의 종류에 영향을 받지 않는 독립적인 계층 

영향을 받지 않도록 설계해야함 

예시로는 SNS 시스템의 경우 컨텐츠 정보 저장 , 컨텐츠 추천 , 회원관련 처리 

 

 

Service 구현 

  • 클래스에 @Service Annotation 사용
  • 파라미터로 전달 된 데이터들의 검증 작업 수행
  • Repository 계층을 활용하여 database에 접근
    • service 계층의 단일 메소드가 Transactiond의 단위가 된다.
  • 애플리케이션 세부 영역 별로 클래스를 생성하여 구현
    • user , post .. 
  • 인터페이스 사용이 권장되나, 다형성을 화용한 기능 확장 요구사항이 없다면 사용하지 않는 경우도 존재
  • 애플리케이션 세부 영역 별로 클래스를 생성항 구현한다.

 

웹의 동작 구성

Service의 구현의 코드 예시는 아래와 같다.

< Service 패키지에 신규 클래스 생성 > 

@Service 
public class PostService {
	public void getPost(Integer id) {
    	System.out.prinln("find post dat form databse by" + id);
        System.out.prinln("validate data from database");
        System.out.prinln("process data if necessary");
        }
    }
}

 

 

 

<PostController>에서 PostService를 사용하도록 수정 

 

 

 

<GET /post?id=1 호출 후 콘솔 로그 확인>

Point

> Service는 시스템의 핵심 비지니스 로직을 구현하는 계층

> View의 종류와 Database의 종류에 영향을 받지 않는 독립적인 계층

> 클래스에 @Service Annotation 사용

> 애플리케이션의 세부 영역별로 클래스를 생성하여 구현함 

 

 

 

 

 

 

스프링 빈과 의존성 주입 

 

객체의 활용과 의존성 

의존성(Dependency) 이란 ? 

    - 하나의 모듈(클래스, 패키지 등)이 다른 모듈을 사용하는 것을 의미함 

의존성의 예&nbsp; PostController가 PostService의 메소드 참조 상황&nbsp;

 

객체의 활용과 의존성 

  • 일반적으로 다른 객체의 기능을 사용하기 위해 멤버 변수에 new를 통해 객체를 생성하여서 참조함
  • 생성한 객체의 메소드에 호출함
  • 어떤 객체를 생성하여 사용할 것인지 코드 상에 명시하는 경우
    • compile-time 의존성이 생성 됨 

 

 

의존성 주입 ( DI, Dependency Injection ) 이란

객체 생성을 외부에서 대신 수행하고, 활용할 객체에 대한 의존성 설정을 외부에서 대신 해준다.

활용할 클래스(인터페이스) 타입의 멤버 변수만 선언 후 생성자를 구현한다.

   → new 키워드로 객체 생성을 직접하지 않는다.

의존성 주입 코드 예시

위의 코드를 살펴보면, new로 객체를 생성하는 것이 아닌, 외부의 생성자를 통해서 해당 클래스의 객체를 결정한다.

 

(정리) 의존성 주입(DI)란   

특정 클래스가 사용하는 구체적인 객체를 해당 클래스  코드상에 명시하는 것이 아닌 ,  Run-Time시 외부에서 생성자를 사용하는 곳에서 결정한뒤 넣어주는 것을 의미함 

 

 

라이브러리 vs 프레임워크

라이브러리 : 단순 활용가능한 도구들의 집합으로 개발자가 만든 클래스에서 호출하여 사용, 클래스들의 나열로 필요한 클래스를 불러서 사용하는 방식을 취하고 있습니다.

프레임워크 : 소스코드에 대한 제어권을 사용자가 아닌 소스코드가 가지게 된다.  프레임워크가 사용자의 코드를 사용 

 

 

Spring IoC 컨테이너 

 -> Spring Framework에서 객체의 생성과 관리의 역할을 하는 컴포넌트 

 

Spring Bean

 -> Spring IoC 컨테이너에 의해서 생성되어 관리되는 Java 객체

 -> 사용자가 지정하여 생성한 Java 객체가 아님 

 

 

의존성 주입을 위한 단계 

[1] Spring에 의해 객체가 생성 되게끔 Annotation 

   Spring Framework가 Component Scan이라는 단계에서 특정 Annotaion이 붙은 클래스들을 직접 객체로 생성해줌 ( Spring Bean을 통해서 )

 

[2] 사용할 객체를 멤버 변수와 생성자에 추가한다.

     아래 그림의 PostService 객체를 new로 생성하지 않고 Spring 에서 객체를 투입한다.

 

[3] 객체를 사용한다.

 

 

 

 

 

객체를 사용하는 또 다른 방법 

@Configuration  ,   @Bean Annotation 

 

  • Java 클래스에 @Configuration Annotation을 사용
    • 해당 클래스는 Spirng Framwork에 의해 설정 정보를 위한 클래스로 활용 된다.
@Configuration
public class AppConfig {

}
  •  @Configuration 클래스 내에 @Bean을 사용한 메소드로 Bean 생성이 가능하다.
    • Bean으로 등록할 객체를 생성 후 Return

 

 

 

 

의존성 주입

 

  • 의존성을 위의 그림의 순서로 이루어지고 이는 Spring IoC 컨테이너에 의해 설정된다.
  • 의존성은 하나의 모듈(클래스, 패키지 등)이 다른 모듈을 사용할 때 만들어지며, new 키워드로 객체를 직접 생성
  • Spring Framework은 객체를 생성하고 객체 간의 의존성을 연결하는 역할을 대신 수행 해 준다.
    • 의존성 주입
  • Spring IoC 컨테이너는 객체를 생성 관리하는 역할을 하는 컴포넌트이다.
  • Spring Bean은 Spring에 의해서 생성되고 관리되는 객체를 의미한다.

 

 

 

 

 

 



- 코드프레소  Java  웹  개발  체험단  활동  중    
- 코드프레소  웹개발 트랙의 "Spring Boot 웹개발 입문" 내용입니다.
- 코드프레소  URL: https://www.codepresso.kr/ 

반응형