상세 컨텐츠

본문 제목

75일 - MySQL 다운, NoticeDao, NoticeService(비즈니스 로직) 인터페이스 생성, DI 개념

수업 일지/Spring

by NayC 2021. 6. 7. 09:36

본문

728x90

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는 데이터 서비스 담당

-> 직접 서비스 담당 하는거 추가

class를 interface로 바꿈. interface를 만들어 해보자 (이게 정석!)

 

cf) 인터페이스 만드는게 맞다.

- 경험이 쌓일수록 top-down을 잘 만들게 될 것. (그리고 이렇게 만드는게 정리하기도 편하고 좋다. 구구주먹식으로 필요한 것들 Service에 추가하며 만드는 것보다)

DAO에는 4개만 있음

- get, insert, update, delete (이름은 지어주기 나름인 것 같고, '기능' 측면에서 볼 것) 

- 데이터를 가지고 있는 컬렉션이라고 생각하면 됨

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

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 

+ mybatis frameworkd도 추가해주기
pom.xml 가서 확인도 하고~

// 드라이버 받은 것 

(전에 오라클도 드라이버가 있었는데, 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로 바꾸어주는걸 했으니)

 

728x90
반응형

관련글 더보기