🔅 02. 백엔드 개발
🔅 2.1 백엔드 개발 환경 설정
2.1.1 자바 8 설치 (생략)
2.1.2 이클립스 설치 (생략)
✔2.1.3 스프링 프레임워크와 의존성 주입
2.1.4 스프링 프레임워크와 디스패처 서블릿
2.1.5 스프링 부트 프로젝트 설정
2.1.6 메인 메서드와 @SpringBootApplication
2.1.7 빌드 자동화 툴 : Gradle과 라이브러리
2.1.8 디펜던시 라이브러리 추가
2.1.9 롬복
2.1.10 포스트맨 API 테스트
🚩 [사전지식] 스프링 프레임워크
오픈 소스의 경량 프레임워크
*** 용어설명
- 오픈 소스 : 소스코드가 공개 되어 있다는 뜻
- 경량 프레임워크 : 프레임워크 사용 시 메모리나 CPU 자원이 많이 들지 않거나 사용이 쉽고 간편한 경우
- 프레임워크 : 코드인데 개발자들이 확장해서 사용할 수 있는 코드. 확장해서 사용한다는 것은 프레임워크가 제공하는 클래스나 라이브러리를 사용하거나 프레임워크가 제공하는 클래스나 인터페이스를 상속 및 구현해 코드를 프레임워크의 일부로 실행하는 것을 의미.
스프링 프레임워크의 컴포넌트 :
🚩 2.1.3. 스프링 프레임워크와 의존성 주입
의존성 주입을 이해하기 위해 의존성이 무엇이고, 의존성 주입이 왜 필요한지 살펴보자.
Todo 애플리케이션을 만들 예정이므로 Todo 애플리케이션을 예로 들어보자.
/* (ex) 생성자 내부에서 오브젝트 초기화 */
public static void main(String[] args) {
TodoService service = new TodoService();
}
public class TodoService {
private final FileTodoPersistence persistence;
public TodoService(){
this.persistence = new FileTodoPersistence();
}
public void create(...) {
...
persistence.create(...);
}
}
✔ 가정
Todo 애플리케이션에는 TodoService 클래스가 있고 이 클래스가 Todo 목록을 관리하는 기능을 제공한다.
✔ 코드 설명
✔ 위의 예제의 문제 의존성 주입의 필요성
(가정)
Todo 목록을 파일에 저장하는 것이 아닌 DB에 저장하는 것으로 변경
👉 DatabaseTodoPersistence 를 구현
👉 TodoService에서 FileTodoPersistence 대신 DatabaseTodoPersistence로 자료형을 바꾸고 생성자에서 DatabaseTodoPersistence를 생성
👉 DB 저장하는 것은 생각보다 비싸서 가격이 저렴한 AWS S3으로 변경
👉 그런데 그 사이에 개발이 진전돼 DatabaseTodoPersistence를 사용하는 서비스가 100개 정도 생김
👉 100개의 클래스를 돌아다니면서 DatabaseTodoPersistence 대신 S3TodoPersistence를 생성하도록 수정
위의 가정과 같은 상황이 일어났을 때 해결책은 의존성 주입이다.
💡 의존성 주입
한 클래스가 의존하는 다른 클래스들을 외부에서 주입시킨다는 뜻
✔ 생성자를 이용한 의존성 주입, 서비스 코드 예제
public static void main(String[] args) {
ITodoPersistence persistence = new FileTodoPersistence();
TodoService service = new TodoService(persistence);
}
public class TodoService {
private final ITodoPersistence persistence; // 인터페이스
public TodoService (ITodoPersistence persistence){
this.persistence = persistence;
}
public void create(...) {
...
persistence.create(...);
}
}
✔ Setter를 이용한 의존성 주입, 서비스 코드 예제
public static void main(String[] args) {
ITodoPersistence persistence = new FileTodoPersistence(); // 초기화
TodoService service = new TodoService(); // 초기화
service.setITodoPersistence(persistence); // Setter을 이용해 의존하는 오브젝트 주입
}
public class TodoService {
private final ITodoPersistence persistence;
public void setITodoPersistence(ITodoPersistence persistence) {
this.persistence = persistence;
}
}
위의 예제처럼 오브젝트를 초기화한 후 그 다음 줄에서 Setter를 이용해 의존하는 오브젝트를 주입한다.
스프링 프레임워크는 의존성 주입을 전문적으로 해주는 의존성 주입 컨테이너(Dependency Inject Container)이다.
프로젝트의 규모가 커질수록, 관리해야 하는 오브젝트가 많아질수록 오브젝트를 생성하는 데 할애하는 시간이 늘어나는데, 이때 의존성 주입 컨테이너의 도움을 받으면 오브젝트 생성과 관리를 효율적으로 할 수 있다.
예시로 이해해보자.
/* Todo 예약, 알림 및 공유 기능을 위한 클래스의 예 */
public class MyService {
TodoService todoService;
ShareService shareService;
NotificationService notificationService;
ScheduledExecutorService scheduledExecutorService;
}
public class ShareService {
UserService
}
추가예정