본문 바로가기

전체 글275

[Spring] ❌ No goals have been specified for this build (Maven) 예제 프로젝트 실행을 위해 Run을 시도했더니 아래와 같은 에러가 발생했다. No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format : or :[:]:. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-t.. 2022. 6. 3.
[Spring] AOP 프로그래밍 AOP(Aspect Oriented Programming) AOP는 여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 재사용성을 높여주는 프로그래밍 기법이다. 핵심 기능과 공통 기능의 구현을 분리함으로써 핵심 기능을 구현한 코드의 수정 없이 공통 기능을 적용할 수 있게 만들어 준다. 아래 예제와 함께 이해해보도록 하자. 1. 프로젝트 준비 메이븐 프로젝트의 pom.xml 파일에는 다음과 같이 aspectjweaver 의존을 추가한다. 이 모듈은 스프링이 AOP를 구현할 때 사용하는 모듈이다. org.springframework spring-context 5.0.2.RELEASE org.aspectj aspectjweaver 1.8.13 스프링 프레임워크의 AOP 기능은 spring-aop 모듈이 제공.. 2022. 6. 3.
[Spring] 빈(Bean) 🟢 IoC 컨테이너가 관리하는 객체를 '빈(Bean)'이라고 한다. 예를 들어 아래와 같이 new 키워드로 객체를 생성했다고 했을 때 이 인스턴스는 Bean이 아니다. OwnerController ownerController = new OwnerController(); 하지만 같은 ownerController 이지만 아래는 스프링 Bean이라 한다. applicationContext가 관리하는 객체에서 가져온 것이기 때문이다. ApplicationContext applicationContext; @Test public void getBean(){ OwnerController bean = applicationContext.getBean(OwnerController.class); assertThat(bean)... 2022. 6. 3.
[Spring] 컴포넌트 스캔 자동 주입과 함께 사용하는 추가 기능이 컴포넌트 스캔이다. 컴포넌트 스캔은 스프링이 직접 클래스를 검색해서 빈으로 등록해주는 기능이다. 설정 클래스에 빈으로 등록하지 않아도 원하는 클래스를 빈으로 등록할 수 있으므로 컴포넌트 스캔 기능을 사용하면 설정 코드가 크게 줄어든다. 1. @Component 애노테이션으로 스캔 대상 지정 스프링이 검색해서 빈으로 등록할 수 있으려면 클래스에 @Component 애노테이션을 붙여야 한다. @Component 애노테이션은 해당 클래스를 스캔 대상으로 표시한다. package spring; import java.util.Collection; import java.util.HashMap; import java.util.Map; import org.springframewo.. 2022. 6. 3.
[Spring] @Configuration 설정 클래스의 @Bean 설정과 싱글톤 스프링 Bean 설정과 싱글톤 먼저, 이전 포스트에서 작성한 AppCtx 클래스의 일부 코드를 살펴보자. import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import spring.ChangePasswordService; import spring.MemberDao; import spring.MemberInfoPrinter; import spring.MemberListPrinter; import spring.MemberPrinter; import spring.MemberRegisterService; import spring.VersionPrinter; @C.. 2022. 6. 3.
[Spring] Inversion of Control 제어의 역전 의존성에 대한 control이 뒤바뀌었다! 그럼 원래는 어떠했길래 뒤바뀐 것인가? 처음엔 잘 모를 수 있다. 의존성에 대한 제어권은 자기 자신이 들고 있는 것이다. 예를 들어 OwnerController는 OwnerRespository를 사용한다. 즉, OwnerRespository를 repository라는 레퍼런스 변수를 통해 사용한다. class OwnerController { private OwnerRepository repository = new OwnerRepository(); } 아래 코드를 보면 OwnerController는 OwnerRespository를 사용하지만 새로운 객체를 생성하지는 않는다. 생성자를 통해 누군가에 의해 받아온다! 의존성을 만드는 일은 더이상 OwnerC.. 2022. 6. 3.