[TIL 19일 차] Sprint Mission3 - 디스코드: Bean 선언 및 Lombok 적용
오늘의 성취
- 개발 진행 상황
- 기존 Java 프로젝트를 Spring Boot 프로젝트로 초기화
File*Repository와Base*ServiceBean 등록 구현- Lombok 적용 : 도메인의 getter 메소드를
@Getter로 대체
- 문제 : 계속 빈 데이터가 출력됨
FileObjectStore를@Component로 설정할 시 Bean이 만들어지면,loadData가 되지 않아서, 인스턴스에 기존에 저장된 데이터가 없음- 해결 방안: Bean을 만들 때,
loadData가 된 인스턴스를 만들어야 함. ➡️config클래스로 Bean 등록
- Entity를 Bean으로 설정하지 않는 이유
- Entity는 Spring 컨테이너에서 공유해서 쓰는 객체가 아니라, 매 요청마다 생성되고 영속성 컨텍스트에서 관리되는 데이터 객체이기 때문
- “
File*Repository구현체를Repository인터페이스의 Bean으로 등록하세요.”의 의미- 구현체를 Bean으로 등록하되, 의존성 주입은 인터페이스 타입으로 이루어지게 하라. - “
File*Repository구현체를 Spring Bean으로 등록하고,*Repository인터페이스 타입으로 주입 가능하게 구성하세요.” - 사용과 주입은 인터페이스로 하라는 의미
- 구현체를 Bean으로 등록하되, 의존성 주입은 인터페이스 타입으로 이루어지게 하라. - “
@RequiredArgsConstructor- Lombok이 제공하는 어노테이션으로,
final필드나@NonNull필드에 대한 생성자를 자동 생성해준다. - 즉, 생성자 주입(Constructor Injection)을 가장 깔끔하게 처리할 수 있다.
- Lombok이 제공하는 어노테이션으로,
프로젝트 요구사항
2. 기본 요구사항
2-1. Spring 프로젝트 초기화
- Spring Initializr를 통해 zip 파일을 다운로드하세요.
- 빌드 시스템은 Gradle - Groovy를 사용합니다.
- 언어는 Java 17를 사용합니다.
- Spring Boot의 버전은
3.4.0입니다. - GroupId는
com.sprint.mission입니다. - ArtifactId와 Name은
discodeit입니다. - packaging 형식은
Jar입니다 - Dependency를 추가합니다.
- Lombok
- Spring Web
- zip 파일을 압축해제하고 원래 진행 중이던 프로젝트에 붙여넣기하세요. 일부 파일은 덮어쓰기할 수 있습니다.
application.properties파일을yaml형식으로 변경하세요.DiscodeitApplication의 main 메서드를 실행하고 로그를 확인해보세요.
2-2. Bean 선언 및 테스트
File*Repository구현체를Repository인터페이스의 Bean으로 등록하세요.Basic*Service구현체를Service인터페이스의 Bean으로 등록하세요.JavaApplication에서 테스트했던 코드를DiscodeitApplication에서 테스트해보세요.JavaApplication의main메소드를 제외한 모든 메소드를DiscodeitApplication클래스로 복사하세요.JavaApplication의main메소드에서 Service를 초기화하는 코드를 Spring Context를 활용하여 대체하세요.JavaApplication의main메소드의 셋업, 테스트 부분의 코드를DiscodeitApplication클래스로 복사하세요.
2-3. Spring 핵심 개념 이해하기
JavaApplication과DiscodeitApplication에서 Service를 초기화하는 방식의 차이에 대해 다음의 키워드를 중심으로 정리해보세요.- IoC Container
- Dependency Injection
- Bean
- 해당 내용은 PR에 첨부
JavaApplication에서는new키워드를 통해*Service객체를 생성했습니다.DiscodeitApplication에서는*Service에서@Service어노테이션을 붙여 서비스 생성을 IoC Container가 맡습니다.- Spring Boot 실행 시,
@Service어노테이션이 붙인 서비스가 Bean으로 생성되고, 이것을 Spring 컨테이너가 관리한다. - 서비스 사용 시,
@Service어노테이션으로 인해, 의존성을 주입(DI)해 생성자를 자동 생성한다.
2-4. Lombok 적용
- 도메인 모델의 getter 메소드를
@Getter로 대체해보세요. Basic*Service의 생성자를@RequiredArgsConstructor로 대체해보세요.
GitHub Repository 주소
https://github.com/JungH200000/10-sprint-mission/tree/sprint3
Leave a comment