반응형

1) 프로젝트 생성

다음 순서로 Spring Boot 프로젝트를 생성합니다.

 

 

2) main 밑에 디렉토리 생성

webapp/WEB-INF/jsp

 

3) application.properties 설정

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

 

4) build.gradle 설정

implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'javax.servlet:jstl'

반응형
반응형

@Configuration

 

한 개 이상의 @Bean을 제공하는 클래스에 명시하는 어노테이션으로, IOC Container에게 해당 클래스가 Bean으로 구성된 클래스라는 것을 알려줍니다.

 

@Bean

 

개발자가 직접 제어할 수 없는 외부 라이브러리들을 Bean으로 만들 때 사용합니다.

 

@Configuration
public class SpringConfig {

    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }
}

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


@Autowired

 

필드, 생성자, 수정자 메소드에 사용하는 어노테이션으로, 무조건적인 객체에 대한 의존성을 주입시킵니다.

 

@Component

 

Java Bean에 등록하지 않아도 자동 주입이 가능하도록 해주는 어노테이션입니다. 개발자가 직접 개발한 클래스를 Bean에 등록할 경우 @Component 어노테이션을 사용하면 됩니다.

 

@Controller에 @Component가 명시되어 있습니다.

 

@Autowired

 

스프링에서 빈 인스턴스가 생성된 후, @Autowired로 설정된 메소드, 필드가 자동으로 호출됩니다.

 

@Controller

 

해당 클래스가 Controller임을 명시합니다. @Component 어노테이션을 사용해도 상관 없지만 @Cotroller 어노테이션에 @Component 어노테이션의 기능이 포함되어 있고 @Controller를 사용함으로써 해당 클래스가 Controller 역할을 하는 것을 명확하게 알 수 있습니다.

 

@Controller
public class MemberController {

    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}

 

@Service

 

해당 클래스가 비즈니스 로직을 담은 Service 클래스임을 명시합니다. @Component 어노테이션을 사용해도 상관 없지만 @Sevice 어노테이션에 @Component 어노테이션의 기능이 포함되어 있고 @Service를 사용함으로써 해당 클래스가 Service의 역할을 하는 것을 명확하게 알 수 있습니다.

 

@Repository

 

해당 클래스가 Repository임을 명시합니다. @Component 어노테이션을 사용해도 상관 없지만 @Repository 어노테이션에 @Component 어노테이션의 기능이 포함되어 있고 @Repository를 사용함으로써 해당 클래스가 Repositorydml 역할을 하는 것을 명확하게 알 수 있습니다.

반응형
반응형

생성자 주입(Constructor Injection)

 

스프링에서 가장 권장하는 방식입니다. 단일 생성자인 경우에는 @Autowired 어노테이션을 붙이지 않아도 되지만 생성자가 2개 이상인 경우에는 생성자에 어노테이션을 붙여야 합니다.

 

@Controller
public class MemberController {

    private final MemberService memberService;
    
    public MemberController(MemberService memberService) {
        
        this.memberService = memberService;

    }
}

 

필드 주입(Field Injection)

 

의존성을 주입할 필드에 @Autowired 어노테이션을 붙이면 자동으로 의존성이 주입됩니다.

 

@Controller
public class MemberController {

    @Autowired
    private final MemberService memberService;
    
}

 

수정자 주입(Setter Injection)

 

Setter 네이밍 패턴을 따르는 메소드를 이용한 주입입니다. 반드시 Setter 메소드일 필요는 없으나 동일한 기능을 수행해야 하며, 일관성 있는 코드 설계를 위해 Setter 네이밍 패턴을 사용하는 것이 권장됩니다.

 

public class MemberController {

    private MemberService memberService;
    
    @Autowired
    public void setMemberService(MemberService memberService) {
    
        this.memberService = memberService;
        
    }

}

 

생성자 주입이 가장 권장되는 이유

 

인텔리제이에서 필드 주입 혹은 생성자 주입을 하면 @Autowired 어노테이션에 노란줄과 함께 경고 메시지가 나옵니다. 어노테이션만으로도 간단하게 주입할 수 있는데 생성자 주입이 가장 권장되는 이유는 개발을 할 때 여러 컴포넌트 간에 의존성이 생기고 순환 참조가 발생하는 경우 서로를 참조하게 되어 오류가 발생할 수 있는데 필드 주입과 생성자 주입은 이런 순환 참조의 문제가 발생하였을 때 어플리케이션 동작 초기에 알 수가 없습니다. 하지만 생성자 주입을 사용하는 경우, 순환 참조가 있을 시 어플리케이션이 구동조차 되지 않기 때문에 발생할 오류를 사전에 알 수 있습니다.

반응형
반응형

명령 프롬프트에서 SpringBoot 빌드 생성

 

1. Spring Boot Project가 생성된 폴더에서 cmd 실행

 

2. gradlew.bat 파일 실행

 

3. gradlew clean build 실행

 

4. build/libs 폴더로 이동

 

5. libs 폴더에서 java -jar (프로젝트명)-0.0.1-SNAPSHOT.jar으로 실행

 

* dir로 jar파일명을 확인하고 실행해야 합니다. 5번 단계의 jar 파일명은 SpringBoot 버전에 따라 다르게 생성됩니다.

 

 

gradle 폴더 삭제

 

프로젝트 폴더에서 cmd 실행 후 gradlew clean 실행

반응형

+ Recent posts