2023.06.19 TIL

2023. 6. 19. 20:10TIL(Today I Learned)

(1) Maven

- xml 파일을 하나 만들어서 maven 설정 파일을 만들어서 연결해주었더니 해당 경로에 lib 파일들이 들어오게 된 것임.

 

target : 결과물이 담기는 폴더

 

pom.xml : 프로젝트에 관련된 구조가 담겨있는 xml

 

 

(2) base-package

- base-package에 해당하는 경로에 클래스를 만들고 해당 클래스에 @Component로 달아줘야 스프링이 그것을 bean으로 등록해줌.

- 만약에 base-package의 경로를 바꿔버리면 beans에 값이 제대로 담기지 않는다. 

 

(3) 스프링 컨테이너에 객체를 등록하는 방법(bean 등록 방법)

- xml 파일에 작성

 

1. bean 태그를 이용한 등록

- <bean id = "MemberController" class="bean으로 등록할 클래스명">

- bean으로 등록하는 것은 객체를 만드는 것과 마찬가지다. 

- bean을 그냥 객체 그대로 만들어 담을 수도 있고, x라는 변수에 담아서 만들 수도 있다.

- 이런 식으로 어떤 객체의 이름을 지정해주는 것이 가능하다. 

- 이름 설정하는 방법은 <bean id="bean이름" class="bean으로 등록할 클래스명"></bean>

이렇게 등록할 수 있다.

 

 

2. 어노테이션을 이용한 등록

- @Component를 해당 클래스에 작성

- 해당 클래스를 스캔 하도록 설정 //component-scan으로 패키지 경로 지정

<context:component-scan base-package="com.kh.app" />

- bean 객체에서 Controller가 자동으로 담기는데 이름도 자동으로 CamelCase로 만들어준다.

- 이를 바꾸려면 @Controller(value = "바꾸고 싶은 이름")으로 붙여주면 된다.

- 경우에 따라서 어노테이션을 사용할 수 없을 때가 있다.(ex) sqlSessionTemplate -> 라이브러리의 클래스 파일에 가서 어노테이션을 달아줄 수 없기 때문이다. 그런 경우에는 1번 방법을 사용해야 한다. 

 

***** 중요한 점 ******

- 컨테이너는 2개(servlet-context.xml, root-context.xml)가 있다.

- 만약  bean 등록을 할 때, servlet container에 등록하고 싶을 때에는 servlet-context.xml에 작성하면 된다. 

- 만약 root-context를 작성하고 싶을 때, root-context.xml에 작성하면 된다.

- @Controller는 어떤 레이어에 해당하는 객체를 표현해준다.

- 어디에도 속하지 않을 것 같으면 @Component라고 달아주면 된다.

 

 

 

(4) 편리하게 VO 만드는 법(lombok)

- lombok은 vo에서 만들었던 getter/setter, toString 등등 다양한 메소드들을 편하게 만들 수 있게 해주는 라이브러리다.

- lombok은 getter/setter, toString을 알아서 만들어준다. 이클립스라던가, sts IDE 자체에 적용해주어야 한다.

 

(5) lombok 사용법

1. 일단 pom.xml에 lombok을 설치한다.

2. IDE 자체에 lombok을 깐다. D:\dev\mvn\mvnLib\org\projectlombok\lombok\1.18.28>java -jar lombok-1.18.28.jar

cmd에 이런 식으로 입력

3. 그러면 이런 화면이 뜰 것이다.

4. specify location 버튼을 눌러서 D:\dev\setup\spring-tool-suite-3.9.18.RELEASE-e4.21.0-win32-x86_64\sts-bundle\sts-3.9.18.RELEASE\sts.exe 이 경로로 설정한다.

 

 

5. 그리고 이런 식으로 사용하면 된다.

import lombok.Data;

@Data
public class MemberVo {
	private String id;
	private String pwd;
	private String nick;	
}

롬복을 사용하면 field 한 개를 추가해도 어노테이션을 가지고 전부 다 자동으로 처리한다.

 

@NoArgsConstructor -> 기본 생성자 생성

@AllArgsConstructor -> 모든 생성자 생성

@Getter -> get 메소드 생성

@Setter -> set 메소드 생성

@ToString -> toString 메소드 생성

@RequiredArgsConstructor -> 필요한 인자만 갖는 생성자(만약 칼럼 중 하나가 final이면 이 필드는 생성자를 통해서 무조건 세팅이 되어야함, final 키워드가 붙은 것을 인자로 받는 생성자)

 

-> 이 네가지의 어노테이션을 붙이는 건 번거로우니까 @Data에 전부다 모아놓았다.

 

 

(5) MemberService를 bean으로 만드는 이유

- spring이 알아서 MemberService와 MemberController을 연결해주게 하고 싶은데 memberService가 스프링 컨테이너에 존재해야 연결해줄 수 있기 때문이다.