MySQL을 다운받아보자.
https://dev.mysql.com/downloads/
- MySQL installer for Windows
//
사용자 추가를 해보자. (이건 나중에)
먼저, database를 추가해보자.
- 같은 db를 공유하기 위해
hi.namoolab.com
username : newlecture
//
USE newlecture 한 번 해야함
그리고 테이블명은 소대문자 가려서 이러면 오류남
테이블명은 소대문자를 구분해주자~!
MySQL은 테이블명이 파일명과도 같음
- 소대문자 구분해야함 (지금 선생님은 리눅스라. 만약 선생님 서버가 windows였으면 파일명이 다 소문자라 소대문자 상관 없었겠지만)
-> 스프링에서 사용하려는거니까 스프링으로 오자
(테이블) Notice (db)를 가지고 오기 위한 Notice dao를 만들어보자
dao는 데이터 서비스 담당
-> 직접 서비스 담당 하는거 추가
cf) 인터페이스 만드는게 맞다.
- 경험이 쌓일수록 top-down을 잘 만들게 될 것. (그리고 이렇게 만드는게 정리하기도 편하고 좋다. 구구주먹식으로 필요한 것들 Service에 추가하며 만드는 것보다)
DAO에는 4개만 있음
- get, insert, update, delete (이름은 지어주기 나름인 것 같고, '기능' 측면에서 볼 것)
- 데이터를 가지고 있는 컬렉션이라고 생각하면 됨
insert는 왜 겹치지..?
-> Dao에서의 인서는 sql식에서의 insert를 생각하면 되고, 여기 Service에서의 insert는 db단이 아니라 정말 사용자가 글을 작성하는 그 행위 자체!라고 이해하면 될 듯
17~43 (연결하게 하는거 빼고)
-> 반환 타입만 알면 되는거니까...
-> 사용자가 하는건 15번째줄. SQL식만 하면 되는 것!
MyBatis의 역할이 그런 것 - 내가 쿼리식만 작성하면 알~~아서 작성해준다.
rtti?
// MyBatis 라이브러리를 받아서 DAO를 구현해보자.
먼저 MyBatis를 알아보자.
'이전 방법'의 단점 3가지
1) 평생 SQL을 쓴다는 보장이 없음 (너무 특화된건 안좋다는)
2) 협업 (모든걸 다~잘해야해서 협업 시 안좋다는)
3) 재사용 문제
-> 나눈다.
최신글, 베스트글 이런 '서비스적'인건 다 Service
우리는 인터페이스만 현재 적었는데, 이전처럼 Jdbc.. 이러면서 구현해주려고 했더니만
MyBatis가 등장한 것!
- 최소한의 설정은 내가 해주어야함 (나머지는 Boot가 해준다.)
2가지 방법
1) 순수 MyBatis 가지고 와
2) Starter 가지고 와
프로젝트 우클릭 > 스프링 > add sarter
// 드라이버 받은 것
(전에 오라클도 드라이버가 있었는데, MySQL도 그런 드라이버가 필요해서~)
dependecy 하나 더 추가해주자.
프로젝트 우클릭 > maven > add dependency
//
jdbc 연결을 다 삭제해줄 수는 없는게, 최소한 이 정보는 있어야 하니까 적어주고~~
-> 15번째줄만 우리가 직접 알려주면 됨
믿어지지 않겠지만 끝남
- @Mapper 달아주고 (SQL 매핑해준다는 것. 즉, 콩자루에 "매핑 정보 여기 있어~~!" 하는 것)
- 함수 위에 @Select 해서 SQL식 넣어주면 됨...
//
컨트롤러가 DAO 이용해야함
객체명을 모르는데 직접 생성?하는 방법이 있고, 셋팅? 방법이 있고
1번 방법이 DI (Dependency Injection)
cf) 원~래 스프링이 하는 역할 = DI
- 두 개의 객체가 있을 때 결합시켜주는 역할
B라는 객체가 C를 이용
- 제품(B), 부품(B 입장에서 C는 부품. dependency)
dependency는 상대적임
만약 A가 등장하면 B는 부품이 되는거지
내가 만드는게 dependency(부품)이 될 수도 있는 것
// depednecy 생성 방법 3가지
f1() 구현하면서
1) A 생성하며 사용
2) 멤버로 A를 두고, 멤버 전용적으로 생성하는 방법
3) 누군가를 setter를 통해 / 생성자를 통해 셋팅해주는 방법
Q. 이 방법 중에 결합(분리형)이 있나?
DI란 dependency를 injection해주는 것
-> 3번 방법!
Q. 왜 DI로 사용할까? 왜 굳이 dependency를 넘겨받아서 사용할까?
- 핸드폰 예전엔 '배터리'를 탈부착했었는데, 장점을 생각해보자.
더 고성능의 기능으로 바꿔낄 수도 있고 ~
-> 꽂아 쓸 수 있게 함으로서 Fram은 자기 부품을 좋게 함으로서 성능이 좋아지는 것
1,2번 일치형보다 3번 분리형이 손이 더 많이 가긴 함.
- 누가 끼워주는거기 때문에 코드가 추가로 있어야 함
만약 기능 더 좋은거로 갈아끼워주려면 코드 바꿔야하는데, 배포 이미 한거면?
-> 코드 재배포해야...
바꿔끼는 로직 자체가 코드로 되어있으면 바꿔끼기가 어려워짐...
-> 코드 말고, 다른 방법 등장!
설정으로 뺀다.
근데 Spring이 일을 대신한 것!
- <property property> 이게 인젝션
이 보라색 코드를 스프링이 읽어서, 검정색을 만들어주는 것
- 실행 속도는 느리겠지만 코드를 내가 직접 하는 것보다 이렇게 설정을 해준는게 better
- 변경이 자유로우니 유지보수적으로 좋다.
요즘은 근데 바뀜
@component
cf) 남이 만든거면 또 아래 @bean 해줘야 하고
EJB라는 애들이 Bean Container라는 이름을 쓰고 있기에,
-> IoC 컨테이너
결합 DI (injection까지 해줌)
- 근데 부품은 상대적
- 각각으로도 꺼내 쓸 수 있고, 합쳐진걸 쓸 수도 있고
일체형 만들면 A가 우선이겠지.
- A 생성자에서? B = new B(); 해서 만들겠지
- 결합 순서가 A가 B를 만들고 결합하고, B가 C를 만들고 결합하고...
근데 조립은 얘기가 달라짐
- A부터 만들지 않음
- D 만들고 조립하고, C 만들고 조립하고 ...
왜 D부터 만들지?
-> D가 '부품'이니까.
반면 위에는 A부터 시작하는 이유는 A '제품'을 먼저 만들어야 아래 얘들이 사용할 수 있는거니까
// 꺼내쓰고 담는 작업을 굉장히 쉽게 할 수 있다.
담는건 굉장히 잘 알지
@component, controller 등... 아무거나 붙이고
- 내가 직접 안 만든건 @bean 붙여서 하고
cf) JH님 질문. catch하지 못함
- A, B 두 개 컨트롤러가 모두 ?를 사용할 경우 한 번만 ? 하면 된다?
cf)
12번째 줄을 이제 아래 함수들에서 다 사용 가능한거지 (15번째줄에서 밖에서 가지곤 온 것을 파란색 noticeDao로 바꾸어주는걸 했으니)
76일 - MyBatis를 활용한 DB 연결(1) (0) | 2021.06.08 |
---|---|
75일 - DI, @Autowired로 결합하는 과정 (0) | 2021.06.07 |
Dispatcher Servlet 흐름 정말 쉽게 이해하기 (feat. 텔레토비 동산, 청소기, 콩자루) (0) | 2021.06.06 |
74일 - tiles.xml에 preparer 기능 넣어 '디폴트값' 넣어주기 (with 'request에 값이 없을 때에만 되도록 조건문') (0) | 2021.06.04 |
74일 - POJO에서 model 만들어서 전달하는 방법 2가지 (ModelAndView, Model model //직접 포워딩은 하지 못한다는거), tiles.xml 집중화(*) (0) | 2021.06.04 |