06/07 Spring(DI, 매퍼클래스/서비스클래스 구현) , (MySQL, MyBatis) 설정
DB 구축해놓기
선생님 계정에 수업용 서버로 들어갔다..
스프링에서 db 연동하기 위해서 DAO 분리해볼 것
DAO 를 따로 만들어야 함
이거랑 똑같이 notice DAO 만들거임
Dao는 업무적인 것을 담당하는 것이 아님
인터페이스 서비스 파일도 만들기
DAO가 따로 있으려면 업무적인 것을 따로 빼줘야 하는 것
DAO는 SQL을 자바 객체로 만들어준 것이라 생각하면 된다
dao 에 이름은 좀 바꿔보자
MyBatis 설정하기
데이터를 어디서 구해왔던 데이터가 필요한 것이지
서비스를 구현하는데 있어서 데이터 소스가 무엇인지에 대해서는 그렇게 중요하지 않다
1. 데이터 소스를 SQL에 특화시킬 필요가 없다
협업이니 데이터를 가져오는 기술을 같이 가지고 있어야 하는데
2. 데이터를 가져오는 것은 자바까지만 알면된다
3. 재사용 문제
데이터와 서비스를 나눠서 재사용이 가능해지게 된다
Service 단에서는 의미론적인 이름을 갖고 요청을 하는 작업을 서비스로 구현
다오는
얘가 구현해줌
그냥 라이브러리 받으면 최소한의 설정만 하면됨
근데 ->
설정을 포함하는 스타터 라이브러리를 가져오면 되겠다
세 개 받으면 된다
#MySQL Setting spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://hi.namoolab.com:9898/newlecture?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=UTC spring.datasource.username=newlecture spring.datasource.password=11111
-> 최소한의 설정 해준 것 , 사용자 계정, 서버 정보에 대한 설정
그냥 어노테이션으로 sql 정보만 알려주면 됨
콩보따리에 넣은 것
스프링은 큰 콩보따리를 가지고 있는데 거기서 꺼내쓰기만 하면됨
스프링은 di해주는 역할을 해줌 / 두개를 연결해주는
결합이 필요할 때 , 결합해주는 세팅하는 작업을 해줘야 하는데
그 코드를 스프링이 대신 해줌 -> DI
스프링의 원론적인 능력
B라는 제품을 만들다가 C를 썼다
B입장에서는 C가 부품
제품이 될수도 부품이 될 수도.. -> 모든 것을 Dependency로 본다
내가 만드는게 부품이 될수도 있으니까
그걸 결합해야 함
프레임이 A를 사용하려고 하면
세 가지의 방법은 있는데 어떠한 방식이던간에 A 는 부품임(dependency)
A()를 쓰다가 더 좋은 것이 나오거나 버전업을 해야하면
스프링 프레임워크가
dependency 설정과 결합을 알아서 해준다는 것
-> 요즘에는 어노테이션으로 바껴서
이렇게
IoC 컨테이너란?
결합의 의미를 더 포함하고 싶어서 IoC라고 이름지은 듯
결합 순서가 두가지가 역방향이다
이제 이 결합형 인 컨테이너에서 담고 꺼내쓰는 작업을 우리가 해야한다
담는 작업 -> 어노테이션으로!
꺼내쓰고 결합하는 지시자는 스프링이 가지고 있는 DI 기능을 이용해보자
mybatis는 어노테이션에 달려있는 쿼리문을 가지고 구현해서 장바구니에 담아놓는 걸로 끝
-> 그 다음부턴 스프링마음대로
우린 꺼내쓰는 작업만 하면되는데 그건 스프링 DI 기능써야됨
컨테이너에는 우리가 쓸 모든 기능들을 담아놔
우리는 서비스도 만들수도 있는데
가져다 쓰는 작업을 스프링이 인젝션해주고
우리는 걍 라이브러리 추가하고
이거만 하면되는거임
코드 변경 없이 xml 설정으로 바꿨고
오른쪽처럼 어노테이션으로 하면 간단히 됨
설정을 파일이 갖고 있음으로 해서 덮어쓰기만 하면 설정이 바뀐다
잘 불러와졌다!
세 가지가 다 가능하다면 제일 쉬운걸 쓰는게 최고..
세 가지 다 장점이 있겠지 -> 1, 2 번은 함수
필드 인젝션이 가장 쉬운가봄
-> 셋팅만 원하면 필드
초기화할일이 있다 -> 1
예외적일때 -> 2