* 72일 *
- 톰캣에 영향받는거 한 개(프론트 컨트롤러=Spring MVC 라이브러리= Dispatcher Servlet)만 남겨서 독립성을 지니게 함 (아이러니하게도 Spring에 종속되게 되었지만 ㅎㅎㅎ)
조선시대 방식
-> 각 서비스에 맞는 Controller를 만들어주고,
@어노테이션 해줘서 url 매핑해주고,
각각에 맞는 doGet, doPost로 해주고,
파라미터들 가지고 와서, 데이터 심고, 포워딩 해주고(get방식) ... or 리다이렉트해주고(post방식)
함수 이름들 겹치있는게 있어서 패키지와 폴더를 구분해줬을 뿐...
하나의 Controller 안에! 함수를 기준으로 (예전으로 따지만 각각 있었던 Controller들이) 들어가있음.
예전같았으면 request.getParameter("x")로 해서 가지고 왔어야할 걸 가지고
-> 이제는 그냥 String x만으로 가지고 올 수 있다는점
- 여기서는 지금 s로 받아오는걸 d로 바로 변환해주는 String 기능을 이용해서 23, 24번째줄처럼 쓰인 것
* 75일 *
먼저 흐름
(1) MySQL에 테이블 준비 (Notice 라는 테이블이 준비됨)
스프링 와서
(2) 인터페이스 NoticDao - SQL을 대신하는 녀석이라고 보면 됨 (쿼리식도 여기 적어줌)
인터페이스 NoticeService 준비 - 비즈니스 서비스
원-래 예전 방식이었다면 JdbcNoticeDao라고 해서 인터페이스인 NoticeDao를 구현해주는 클래스 하나를 새로 만들고, 각 함수마다 이렇게 jdbc 연결을 아주 길~~게 해줘야 했을 것.
객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와 주는 개발 프레임 워크로서 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'다 라고 해줄 수 있는거지 ~
//
73일 - 경로를 값으로 받기, 파일 입출력, Tiles 개념 (0) | 2021.06.03 |
---|---|
72일 - cookie (서블릿에서 vs Spring에서), 생명주기 영역, 가시 영역 (2) | 2021.06.02 |
72일 - ★스프링이란 (=프론트 컨트롤러=Spring MVC 라이브러리= Dispatcher Servlet), devtool 라이브러리 추가하기, @GetMapping, @PostMapping (0) | 2021.06.02 |
71일 - 메이븐 vs 스프링 vs 스프링부트, @restController vs @Controller (1) | 2021.06.01 |
71일 - Boot 프로젝트 만들기, @Controller 통해 출력해보기 (feat. sts에 maven 프로젝트 실행) (2) | 2021.06.01 |