빌드 관리 도구
프로그램 라이프 사이클
소스코드 작성 ➡ 컴파일 ➡ 바이트코드 ➡ 빌드 ➡ 실행
빌드, build
개발자 코드(바이트코드)와 라이브러리 코드(.jar, 바이트코드)를 결합하려 JVM이 실행할 수 있도록 완성하는 작업
메이븐 도구의 설정 파일
<dependencied>태그의 자식으로 <dependency>태그로 설정
invalid LOC header 문구가 떠있는 경우java.lang.lassNotFoundException: ~~ 예외 문구가 떠있는 경우c:\USER\{사용자이름}\.m2\repository\Java Source 폴더로 등록되어 있음
Java Source 폴더로 등록되어 있음
Log4J 라이브러리의 설정 파일
단위 테스트용 소스코드와 자원을 보관하는 폴더(패키지)
❌우리는 사용하지 않음❌
Tomcat Server 실행환경 라이브러리
servlet-api.jar, jsp-api.jar를 포함시켜 줌메이븐으로 추가된 라이브러리들을 보여주는 곳
사용자 폴더에 있는 .m2라이브러리 로컬 저장소 폴더와 연결되어 있음
프로젝트에 작성해둔 pom.xml 파일의 설정 항목에 영향을 받음
Java Runtime Environment 라이브러리, 자바 실행 환경
서버 도메인 URL의 루트 디렉토리와 연결된 폴더
프로젝트의 정적 응답용 자원들을 모아놓는 폴더 👉🏻 css, js, image 등
servlet-context.xml에 설정한 <resources> 태그에 적용되어 있음스프링 프로젝트에 대한 설정파일 또는 응답용 JSP파일(View)을 모아놓음
프로젝트에는 비어있는 폴더
스프링에서 사용되는 컨텍스트 정보를 설정
스프링에서 사용되는 외부 컨텍스트를 설정
웹 어플리케이션과 관련된 컨텍스트 설정 정보를 등록
외부 라이브러리를 이용한 동작 설정을 주로 적용
MVC패턴에서 사용되는 View(JSP파일)들을 보관하는 폴더
컨트롤러에서 forward하는 대상 파일들을 주로 보관
배포 관리자, Deployment Desceiptor, DD
프로젝트가 웹 서버에 배포될 때 필요한 설정을 적어두는 파일
요청&응답에 관련된 웹 서버 설정 항목을 넣음
DispatcherSevlet을 설정하고 있음
단위 테스트용 파일을 보관하는 폴더
❌우리는 사용하지 않음❌
자바 소스코드(.java)에 대한 컴파일 결과물(.class)이 모이는 폴더
서버로 배포되기 전 파일들이 모이는 곳
메이븐(MAVEN) 도구의 설정 파일
메이븐으로 추가할 라이브러리를 <dependency>태그를 이용하여 설정
1. Spring MVC
MVC 디자인패턴을 기반으로 만들어진 프레임워크
2. POJO 개발
Plain Old Java Object
3. AOP 관점지향 프로그래밍
Aspect Oriented Programming
👀 Example
모든 Controller에서 요청이 시작되면 요청 URL을 Console창에 출력
➡ 요청 URL 출력코드를 개발하고 모든 Controller에서 자동으로 실행되도록 AOP를 설정
4. IoC, 제어의 역전, 제어 반전
Inversion of Control
5. DI, 의존성 주입
Dependency Injection
객체가 작동하기 위해 필요한 외부 객체와의 연결
public class EmpContorller {
//EmpController객체는 EmpService 객체에 의존적
private EmpService empService = new EmpServiceImpl();
}
객체가 직접 의존성을 발생시키지 않고 외부의 도움을 받아 의존성이 주입되는 현상
여기까지 하고 코드친다~
Simple에 di 패키지 만들기
tire 인터페이스 / gold, silver는 class
dependency 먼저하고 constructor 하고 setter 함
다 하고 di.xml 만들엇삼 class 만들고 밑에 이거 spring에 등록하기 위해 만들기
이거 중 beans와 beans을 많이 쓰게 될 것 특히 bean
이렇게 체크하고 src로 넘어가보면
추가되어 있을 것~
ctrl + space를 눌러보면 이것도 늘어나 았음
버전이 안써있는걸 쓰면 디폴트(4.3)으로 들어감 -> 문서 유형 버전
그래서 이렇게 두번째줄 맨 뒤에 버전을 넣어줘도 안넣어줘도 됨우리는 컨텍스트 등록만 해볼꺼니까 beans 빼고 지울겡
servlet-context.xml 구경가보자 beans 사실 왜 갔는지 모르겠ㅇㅓ
an, re는 mvc꺼
setter 지우고 생성자버전으로 만들어볼게용
생성자 필요 di.xml.Car.jave 수정
이런 오류가 날 것
디폴트생성자가 없어서 di.xml 파일에서 오류나
이렇게,, 그래서 디폴트 생성자를 만들어줘야함~
그ㄹㅐ도 실행은 여전히 오류남
당연함! 매개변수로 생성자 전달(주입)을 안해줬음
생성자가 호출되는 시점은 바로 여기
얘가 호출되면 바로 로출 및 생성이 되는데 매개변수가 없는거야
그래서 bean에 매개변수도 같이 생성되도록 해줘야함
이런식으로 들어갈걸 직접 지정 / 문자열인 경우, 숫자인 경우
ref 속성을 이용해 bean으로 등록된걸 넣을 수 있음
매개변수가 여러개인 경우
이렇게 여러개 넣어주면 됨
이제 car1은 디폴트 생성자를 이용해서 setter로 의존성 주입하는거고, car2는 매개변수 있는 생성자를 통해 호출과 동시에 의존성 주입~
스프링 빈 설정 xml 파일(Bean Configuration XML)을 이용하여 스프링 빈을 등록
<bean> 태그를 이용<bean> 태그의 자식 태그를 이용하여 멤버필드에 DI할 수 있음멤버필드 DI없이 스프링 빈 등록
<bean id="등록할 스프링빈 이름" class="객체를 생성할 클래스" />
멤버필드 DI하며 스프링 빈 등록
<bean id="등록할 스프링빈 이름" class="객체를 생성할 클래스">
<!--Setter DI --!>
<property name="멤버필드명" ref="의존성 주입할 Bean이름"/>
<!-- Constructor DI --!>
<constructor-arg ref="의존성 주입할 bean 이름" />
</bean>
package autowired 만들었어 class Car 만들고용
멤버필드에 @Autowired 걸어주면 적당한 애 골라서 알아서 주입해준대
적당한 애를 고를 수 있도록 컨텍스트 정보 등록해줄게
아까 만든 Spring 어쩌구 파일 diAutiwired 이름으로 만들어줄게
이렇게 빈 등록~
그러고 Person을 만들어줄게용
컨텍스트 추가해주고
이거 추가해주기
근데 아직 끝이 아님~
빈 설정이 유일하지 않아서 생기는 문제래
di.tire.Tire과 맞는 bean을 찾지 못했대
싱글 매칭을 기대했는데 두개래 그래서 못골라서 못햇대 -> 에러 해석~
데이터타입 기반으로 자동적용하는데 지금 그 타입의 컨텍스트 정보가 골드랑 실버 두개라서 안돼 못골라~
둘 중 하나 주석처리해서 지워볼게
하나 지우면 됨
둘 다 되지롱
둘 중 하나 고르고 싶은 경우 둘 다 주면 못고르니까
@Autowired에다가 추가로 어노테이션을 해줘야해
이렇게 이름을 써주면 이름이랑 일치하는 애들 찾아다가 해준대
둘 다 주석 푼 상태에서 실챙하면 sTire가 자동선택~
DI가 진행될 바인딩 처리의 우선순위
1. byType 전략
2. byName 전략
@Qu 어쩌구 지우고 alt shift r 눌러서 한번에 이름을 sTire로 바꾸면
xml파일에서 둘 다 주석이 풀려있어도 에러가 나지 ㅏㅇㄶ음
반대로 해도 똑같은~ alt shift r 눌러서 한번에 이름을 gTire로 바꾸면
에러 안남
강사님꺼 그대로 임포트하면 설정 안맞아서 어려울 수 있대
패키지만 복붙해서 하는거 추천하신대