상세 컨텐츠

본문 제목

Spring을 통해서 도대체 뭐가 편리해진걸까 (업데이트 ing)

수업 일지/Spring

by NayC 2021. 6. 2. 13:53

본문

728x90

* 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 준비 - 비즈니스 서비스

DAO에는 4개! (예외를 넣게 되면 최....대한! SQL스러운 애로)

원-래 예전 방식이었다면 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)

 

jdbc 연결을 다 삭제해줄 수는 없는게,  최소한 이 정보는 있어야 하니까 적어주고~~ 

// 이렇게까지만 해주면 우리는 이제 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

 

(admin 아닌 그냥) NoticeController

14. 

- 이럼으로서 아래 함수들에서 다 noticeDao를 사용할 수 있지.

- NoticeDao dao라고만 적어도 됨 (김씨 집안 왔는데 '성'을 빼고 불러도 다 알 수 있는것처럼)

 

17. 

@Autowired

"네가 알아서 내게 맞는 (내 인터페이스는 NoticeDao)걸 IoC 컨테이너에서 꺼내줄래?

- 객체들 담겨있는 컨테이너에서 NoticeDao를 구현한게 있으면 가지고 오라는 것

 

27.

@ResponseBody 해줌으로서 -> 32. 뷰 페이지 찾는게 아니라 '그냥 이게 view'다 라고 해줄 수 있는거지 ~ 

다시 정상적으로는 이렇게 (그런데 Dao하고 Controller를 직접 연결은 x. 그래서 admin 내 NoticeController로 다시한 게 아래) 

// 

 

(잘 안보여서 이건 다시 캡쳐) 

728x90
반응형

관련글 더보기