2달동안 열심히 강의를 듣고 이제 배운 지식을 응용하여 사이드 프로젝트를 만들어보자,,,,,,,,,,
나는 나만의 서적 관리 서비스를 만들어볼생각이다.
우선 순수Java로만 코드를 구현해보자.
개발 관련 코드를 다 업로드하지는 않을꺼같고 프로젝트 진행 중에 발생한 트러블 슈팅이나 지식 정리 쪽으로 포스팅할 생각.
도서 관련 CRUD 기능 구현 후 테스트,,,,
테스트 성공 ,,, 좋은 시작,,, 단건조회는 save 테스트할때 사용해서 save가 성공이니 단건조회도 성공,,
BookService의 코드를 보면 인터페이스에만 의존한거같지만 구현체에도 역시 의존하고있다. 현재 BookRepositoryImpl은 인메모리 방식인데 만약 나중에 인메모리 방식이 아닌 데이터베이스를 사용하여 저장하고싶어 DbRepositoryImpl이라는 방식을 개발했다면, Service로직의 new BookRepositryImpl도 수정해줘야하는 문제점이 있다. 지금은 1줄짜리 코드라 그냥 수정하면 되는거 아니야? 할 수도 있지만 이러한 형식인 즉, 구현체도 함께 선언해주고있는 코드들이 수백줄이라 생각하고 그 구현체들을 다 새로 개발했다고 치면수정하 생각에 끔찍하다.....
이렇게 BookService의 로직을 변경해서 repository의 저장방식 뭐로 바뀌든 BookService에서는 신경을 안쓰고싶은데 어떻게 해야할까?
(이제 점점 Spring의 개념이 등장)
바로 외부에서 구현체를 생성하고 "주입"시켜주는 것.
추상화에 의존하고 구체화에 의존하면 안된다를 항상 생각하고 개발!
Spring의 주요 개념 중 하나인 DI, IoC가 등장
config파일을 생성해서 의존성 주입을 해도되는데 나는 컴포넌트 스캔 방식과 @Autowired 어노테이션을 사용했다.
여기서 가져가야 할 키워드들은 의존성 주입 DI, 제어의 역전 IoC, 컴포넌트 스캔 등이 있는데 이들은 추가로 정리할 것이다.
이제 Spring을 적용해보자.
근데 문득 궁금한게 생겼다. @Bean으로 스프링 컨테이너에 등록하는 방법이랑 @Component를 통한 스프링 컨테이너에 등록하는데 둘의 차이점이 뭐지?
모르면 알아보자