Spring을 통해서 도대체 뭐가 편리해진걸까 (업데이트 ing)
* 72일 *
1. Controller의 독립 -> 자유롭게 Controller를 적어줄 수 있게 됨.
우선 각각 Controller 만들 필요가 없다는 것
- 톰캣에 영향받는거 한 개(프론트 컨트롤러=Spring MVC 라이브러리= Dispatcher Servlet)만 남겨서 독립성을 지니게 함 (아이러니하게도 Spring에 종속되게 되었지만 ㅎㅎㅎ)


조선시대 방식
-> 각 서비스에 맞는 Controller를 만들어주고,
@어노테이션 해줘서 url 매핑해주고,
각각에 맞는 doGet, doPost로 해주고,
파라미터들 가지고 와서, 데이터 심고, 포워딩 해주고(get방식) ... or 리다이렉트해주고(post방식)
▼


함수 이름들 겹치있는게 있어서 패키지와 폴더를 구분해줬을 뿐...
하나의 Controller 안에! 함수를 기준으로 (예전으로 따지만 각각 있었던 Controller들이) 들어가있음.
2. 엄청나게 간단해진 입출력 과정
- get 요청의 쿼리스트링

예전같았으면 request.getParameter("x")로 해서 가지고 왔어야할 걸 가지고
-> 이제는 그냥 String x만으로 가지고 올 수 있다는점
- 여기서는 지금 s로 받아오는걸 d로 바로 변환해주는 String 기능을 이용해서 23, 24번째줄처럼 쓰인 것
* 75일 *
3. 미친듯이 간결해진 SQL 연결 (JDBC 이제 안녕)
먼저 흐름
(1) MySQL에 테이블 준비 (Notice 라는 테이블이 준비됨)
스프링 와서
(2) 인터페이스 NoticDao - SQL을 대신하는 녀석이라고 보면 됨 (쿼리식도 여기 적어줌)
인터페이스 NoticeService 준비 - 비즈니스 서비스


원-래 예전 방식이었다면 JdbcNoticeDao라고 해서 인터페이스인 NoticeDao를 구현해주는 클래스 하나를 새로 만들고, 각 함수마다 이렇게 jdbc 연결을 아주 길~~게 해줘야 했을 것.
MyBatis의 등장
객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와 주는 개발 프레임 워크로서 JDBC를 통해 데이터베이스에 엑세스하는 작업을 캡슐화하고 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하며 모든 JDBC 코드 및 매개 변수의 중복작업을 제거 합니다. 출처 : https://khj93.tistory.com/entry/MyBatis-MyBatis%EB%9E%80-%EA%B0%9C%EB%85%90-%EB%B0%8F-%ED%95%B5%EC%8B%AC-%EC%A0%95%EB%A6%AC |
프로젝트명 우클릭 > 스프링 > add starter 해서 라이브러리들 추가 (jdbc api, mySQL driver, mybatis framework)

// 이렇게까지만 해주면 우리는 이제 SQL 식만 써주면 되는 것!

믿어지지 않겠지만 끝남
- @Mapper 달아주고 (SQL 매핑해준다는 것. 즉, 콩자루에 "매핑 정보 여기 있어~~!" 하는 것)
- 함수 위에 @Select 해서 SQL식 넣어주면 됨...
-> 그러면 스프링이 알아서 반환타입에(<Notice>) 맞게 getList() 함수 구현해서 바구니(IoC 컨테이너)에 담아놓음.
// Controller <- Service <- Dao 의 흐름이라면 지금 Dao가 완성이 됐지.
이제 이걸 DI 해서 흐름을 봐보자.
cf) IoC 컨테이너 (우리가 계속 얘기했던 '콩자루')에 담고 꺼내쓰는 방법
(1) 담기
- @component, controller 등... 아무거나 붙이고
- 내가 직접 안 만든건 @bean 붙여서 하고
(2) 꺼내쓰기 (지금 하는 예시에서 보면, NoticeDao를 어떻게 꺼내올 수 있을까?)
- DI (꺼내는것 뿐만 아니라 '조립'도 한다는게 포인트)
cf) "내부가 아니라 외부에서 객체를 생성해서 넣어주는 것을 주입한다고 합니다."
출처 : https://medium.com/@jang.wangsu/di-dependency-injection-%EC%9D%B4%EB%9E%80-1b12fdefec4f

14.
- 이럼으로서 아래 함수들에서 다 noticeDao를 사용할 수 있지.
- NoticeDao dao라고만 적어도 됨 (김씨 집안 왔는데 '성'을 빼고 불러도 다 알 수 있는것처럼)
17.
@Autowired
"네가 알아서 내게 맞는 (내 인터페이스는 NoticeDao)걸 IoC 컨테이너에서 꺼내줄래?
- 객체들 담겨있는 컨테이너에서 NoticeDao를 구현한게 있으면 가지고 오라는 것
27.
@ResponseBody 해줌으로서 -> 32. 뷰 페이지 찾는게 아니라 '그냥 이게 view'다 라고 해줄 수 있는거지 ~

//

