Spring 학습 1일차 - 자바 웹 개발 첫경험을 위해

2021. 2. 7. 23:08·JAVA

www.youtube.com/playlist?list=PLq8wAnVUcTFUHYMzoV2RoFoY2HDTKru3T

 

스프링 프레임워크 강좌/강의 ALL

 

www.youtube.com

 


복습용 강의 정리 - 1강

 

위 강의의 학습로드맵 (이해 순서)

느슨한 결합력과 인터페이스 -> DI (Dependency injection) -> MVC
  AOP -> 트랜잭션
  Servlet Filter -> 인증과 권한

 

선행학습이 필요

ㅇ 자바

ㅇ MVC

ㅇ SQL

 

 

스프링의 매력

ㅇdependency injection

더보기

gmlwjd9405.github.io/2018/11/09/dependency-injection.html

 

[Design Pattern] DI란 (Dependency Injection) - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

위 사이트 좋다.

 


 

+위키백과의 '의존성 주입' 설명 정리

ㅇ 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉

ㅇ 의도 : 객체의 생성과 사용의 관심을 분리하는 것

ㄴ 가독성, 코드 재사용을 높인다.

ㅇ 어떤 서비스를 호출하려는 클라이언트는 그 서비스의 구성을 모른다.

이 때 서비스는 사용될 수 있는 객체를 말하고, 클라이언트는 다른 객체를 사용하는 객체이다.

ㅇ 클라이언트는 서비스 제공에 대한 책임을 외부 코드(주입자)로 위임한다.

 

ㅇ 의존성 주입은 프로그램 디자인이 '결합도'를 느슨하게 되도록 하고, '의존관계 역전 원칙'과 '단일 책임 원칙'을 따르도록 클라이언트의 생성에 대한 의존성을 클라이언트의 행위로부터 분리하는 것이다. 

ㄴ 어!! 아까 공부한 용어가 나온다. OOP의 5대 원칙 SOLID에서 S와 I에 해당하는 내용.

ㄴ 단일 책임 원칙 : 객체는 단 하나의 책임만 가져야 한다.

ㄴ 의존 역전 원칙 : 의존 관계를 맺을 때 이야기인데, 최대한 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 것이다.

ㄴ결합도 이야기는 아직 잘 이해가 안간다. "의존 관계 설정이 컴파일시가 아닌 실행시에 이루어져 모듈간의 결합도를 낮출 수 있다"라고 한다.

 

 

ㅇ 이해를 돕기 위한 내용 

 

ㅇ 적용 유형 - 이거 읽으니까 조금 더 알겠다.

ㄴ자바 배울 때 기억난다. 생성자로 의존성을 주입할 수 있고, 세터로 의존성을 주입할 수 있고, 인터페이스 구현을 통해 의존성을 주입할 수 있다. 

 

 

ㅇtransaction management

 

 

참고

--> Java EE의 기능을 커버한다. "자바로 웹개발 한다"고 하면 "Java SE + Java EE" 또는 "Java SE + Spring"인데, Java EE의 기능을 Spring이 커버한다.

--> 웹개발시 "MVC, 트랜잭션, 인증과 권한" 이 세가지만 되면 웬만한 건 만들 수 있다고 한다.

 

 

 


복습용 강의 정리 - 2강


2강 요약

 

2강에서는 느슨한 결합력과 인터페이스에 대한 설명을 한다. 

 

 

기업형 어플리케이션을 만든다고 하면 다양한 레이어를 만들게 된다.

그런 레이어들에 대한 유지보수를 어떻게 할 것이냐?

 

ㅇ 소스코드를 수정해서 유지보수 할 수 있지만 이는 위험이 있다!

ㄴ 소스코드가 항상 있어야 하는 거고,

ㄴ 소스코드는 자꾸 열어 수정해 배포하는 것은 위험부담이 있다.

 

그래서 이런 소스코드를 건들지 않고 변경할 수 있게끔 하는 외부 설정파일이 필요하다. 

Spring이 그럴 때 필요한 설정파일을 제공한다는 이야기를 하며 강의를 마치신다.

 


세부적인 내용

참고로 지금 작성하는 도식들은 강의 영상에 있는 내용과 멘트를 따라한 것이다.

강의 정말 좋다. 공부하실 분께 추천~.~

 

기업형 어플리케이션은 이런 레이어들로 구성된다.

Service 레이어 : 사용자 요구를 담당, 요구에 대한 데이터를 필요로 함

Data Access Object : 그 데이터소스에 접근하는 방법과 기술이 담겨 있다. 자바를 이용해서 데이터를 제공받을 수 있는 Dao.

 

만약 B1 내용이 변경된다면 어떻게 해야 할까?

 

ㅇ B1 소스코드를 구해 수정한다.

ㅇ B1은 두고 새로 하나 만든다. 덮쓰!

 

전자: 위험이 있다!

ㄴ 소스코드가 항상 있어야 하는 거고,

ㄴ 소스코드는 자꾸 열어 수정해 배포하는 것은 위험부담이 있다.

 

후자: 그럼 Service가 수정이 되어야 한다.

다음 접은글과 같이 수정이 되어야 한다는 말.

더보기

<Service의 수정이 이루어져야 한다면>

Private B1 b = new B1();

b.getData();

Private B2 b = new B2();

b.getData();

 

즉, 다음과 같은 수정이 이루어진다.

 

 

그렇지만 위 방법도 소스코드를 직접 건드려야 하기에 결합력이 높다.

변경사항을 수정해야 하는데, 소스코드를 구해서 수정을 해야만 한다면 결합력이 굉장히 높은 것이다.

소스코드 없이 바꿀 수 있을까? 즉, 결합력을 어떻게 낮출까?

 

-- 인터페이스의 이용과 외부파일의 필요성

자 먼저 인터페이스를 끼워넣어보면 이렇다.

이용하는 서비스는 달라지는 게 아니다.

인터페이스를 추가했다. 즉, 굳이 B1, B2라는 클래스명 이용할 필요 없이, 기능에만 집중한 B라는 이름으로 구현하고자 한다. 자료형 자체를 B 인터페이스형을 쓰자는 것. 

 

인터페이스를 추가했으니 이제 Service랑 Dao를 결합시키는 작업을 해야 하는데, 그건 UI가 하게 한다!

이걸 다음과 같이 설명했다.

 

private B b = new B2();

b.getData();

이게 아니라

 

B b = new B1();

service.setB(b)

이렇게!! 저 setB(b) 부분이 DI라고 한다. (아직 잘 모르겠다)

그~런~데~

저 보라색 표시 해놓은 B1.. 이 소스코드를 수정하지 않는 방식을 생각해보아야 한다.

이유는 아까 설명했다.

 

저런 소스코드를 수정하지 않는 방식?

저런 소스코드 없이 바꿀 수 있게 하기 위해서 어떻게 해야 할까? 

 

"객체 생성과 조립을 위한 외부 설정을 한다!"

저 코드를 그냥 들어내고, 생성할 객체를 외부파일, 외부설정에 의해서 저게 생성될 수 있도록 해주는 거다. (XML, Annotation 이라고 써두셨던데 아직 잘 모르겠다.)

그럼 이런게 어떻게 가능할까? 

강의를 참고하시라 하신다: "자바 객체지향 강의 33강 : 새로운 객체로 변경하기"

내일 보고 여기 이어서 쓰겠다.

새로 포스팅했다.

 

 

Spring이 이런 결합할 때 필요한 설정파일을 제공한다고 한다.

이제 다음 시간에 배울 것은, Spring하면 떠오른다고 하는 DI와 IOC컨테이너이다.

 

다음 포스팅에서 보자.

 


 

어 근데 1강에서 내가 이렇게 작성한 이력이 있다.

"결합도 이야기는 아직 잘 이해가 안간다. "의존 관계 설정이 컴파일시가 아닌 실행시에 이루어져 모듈간의 결합도를 낮출 수 있다"라고 한다."

 

그런데 2강을 듣고 나니까 조금 더 이해가 간다. 컴파일시가 아닌 실행시에 이루어진다는 말이 조금은 와닿는다. UI에 의존관계 설정을 넘긴다는 거지? 

반응형

'JAVA' 카테고리의 다른 글

클래스의 정렬(대소판정)기준 | comparable, compareTo, comparator, compare | 자연정렬(natural ordering)  (0) 2021.06.28
[Java] String.format() | 문자열 형식 지정하기 | %%%ds가 뭘까? | %%  (1) 2021.06.24
안드로이드 - 챕터10, 지도와 GPS  (0) 2021.01.28
안드로이드 생존코딩(오준석) - 챕터9 전자액자 Fragment 상세설명 - 안드로이드 스튜디오 4.1  (0) 2021.01.25
동반객체와 팩토리 패턴 | companion object, Factory Method Pattern  (0) 2021.01.24
'JAVA' 카테고리의 다른 글
  • 클래스의 정렬(대소판정)기준 | comparable, compareTo, comparator, compare | 자연정렬(natural ordering)
  • [Java] String.format() | 문자열 형식 지정하기 | %%%ds가 뭘까? | %%
  • 안드로이드 - 챕터10, 지도와 GPS
  • 안드로이드 생존코딩(오준석) - 챕터9 전자액자 Fragment 상세설명 - 안드로이드 스튜디오 4.1
히어로맛쿠키
히어로맛쿠키
  • 히어로맛쿠키
    yeny_lab
    히어로맛쿠키
  • 전체
    오늘
    어제
    • 분류 전체보기 (389)
      • 미분류글 (32)
        • ㅇ (2)
      • JAVA (84)
        • Effective Java (1)
        • Application (21)
      • 컴퓨터구조 & OS (28)
      • 자료구조 + 알고리즘 (43)
      • Database (12)
      • 컴파일러 (10)
      • 수학 (33)
        • 미분방정식 (12)
      • 데이터분석과 머신러닝 (38)
      • 기타 (59)
      • yyeeennyy (25)
  • 공지사항

    • ^o^/♡
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
히어로맛쿠키
Spring 학습 1일차 - 자바 웹 개발 첫경험을 위해
상단으로

티스토리툴바