[SpringBoot] 반갑다! 봄!
현재 김영한님의 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 들으면서 스프링 부트를 맛보는 중이다. 아직 공부중이고 틀린 내용이 많겠지만 고민의 과정을 작성하면서 공부해보려고 한다.(부디 너그러이 양해를!!)
들어가기 전에
스프링 부트란?
스프링 부트는 스프링을 쉽게 사용하기 위한 프레임워크다.
그럼 스프링은?
스프링은 자바 프로그래밍을 쉽게 해주기 위한 자바 프레임워크!
그래서 스프링 부트를 활용해서 스프링의 라이브러리 설정을 쉽게 할 수 있는 거다.
이 강의에선 MVC 패턴 라이브러리를 활용한 웹 페이지를 작성하는 것이고, 그 외에도 다양한 라이브러리가 있다고 한다.
1. 시작할 때부터 디렉터리 구조 완성
정적 콘텐츠 렌더링, 동적 콘텐츠 렌더링
프로젝트 생성부터 빌드하고 실행하는 과정부터 고난이었다. 항상 환경설정만 몇 시간이 걸리는지...
스프링 부트를 설정하고 다운로드받고 열면 알아서 gradle 빌드파일, gitignore, directory 구조까지 다 완성되어 있다. 오! 편하다!
겨우겨우 html 복붙하고 돌려서 브라우저에 띄우기 성공!
일단 초반은 내가 전에 부트 캠프하면서 배웠던 경험을 살려 빠르게 할 수 있었다.
이제 본격적인 개발을 해보자. 기본적인 회원 관리 예제부터 시작
처음 부트캠프에서 MVC 패턴으로 무작정 나누라고 할 때의 그 당혹감을 잊지 못한다. 나눠놓으니까 이해도 안되고 멘붕..
근데 한 번 그걸 힘들게 익히니 이제는 이렇게 디렉터리로 분리해놓으니 더 편하다. 훨씬 찾기 쉽다.
2. 컨테이너? 스프링 빈? 톰켓 서버?
스프링은 특이하게 스프링 빈이란 걸 컨테이너에 만들어서 자바 객체를 관리한다고 한다.
스프링 빈을 만든 다음 각각의 어노테이션을 통해 연결해주고 싱글톤으로 생성해서 서로 간 기능을 제공해준다.
로 현재 이해가 되는데 개념이 생소하다..
이 때 스프링 빈을 생성하고 연결해주는 두 가지 방법이 있다.
1. 컴포넌트 스캔
2. 자바코드로 직접
스프링 빈을 연결해주는 작업은 의존성 주입과 연관된 개념이다.
의존성 주입이란?
하나의 객체가 다른 객체의 의존성을 제공하는 테크닉
- 출처: 위키백과
의존성 주입 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 소프트웨어 엔지니어링에서 의존성 주입(dependency injection)은 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉이다. "의존성"은 예를 들어 서비스로 사용할
ko.wikipedia.org
지금 살펴보면 MemberService class에서 외부의 MemberRepository를 가져와서 사용하고 있다.
요렇게 해주는 이유는 memberRepository, 즉 멤버 레포를 같은 객체를 사용하기 위함이다.
Why? 동일한 객체를 사용해주면 메모리 활용도를 높일 수 있으니까
이렇게 하는 걸 의존성 주입이라고 한다.
그래서 @Component 태그를 사용하여 스프링이 각각의 태그를 가지고와서 스프링 컨테이너에 넣어준다.
이때 실행되는 class의 동일한 패키지 내에서만 같은 스프링 컨테이너로 묶어준다.
+) @Service, @Controller, @Repository 모두 @Component의 특수한 경우를 뜻한다.
자바 코드로 직접 하는 건 SpringConfig.java 파일을 만들어서 관리해주는 것으로
MemoryMemberRepository 코드에서 후에 연결되는 데이터베이스를 바꿔치기하기에 좋은 방법이다.