Spring Eco
필수
- spring framework,
핵심 기술- 스프링 DI 컨테이너, AOP, 이벤트, 기타
웹 기술 - 스프링 MVC, 스프링 WebFlux
데이터 접근 기술- 트랜잭션, JDBC, ORM 지원, XML 지원
기술 통합- 캐시, 이메일, 원격접근, 스케줄링
테스트- 스프링 기반 테스트 지원
언어- 코틀린, 그루비
최근에는 스프링 부트를 통해서 스프링 프레임워크의 기술들을 편리하게 사용
- springboot
스프링을 편리하게 사용할 수 있도록 지원하고 최근에는 기본으로 사용
단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨
손쉬운 빌드 구성을 위한 starter 종속성 제공
스프링과 3rd party(외부) 라이브러리 자동 구성
메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
관례에 의한 간결한 설정
선택
- spring data
CRUD 를 편리하게 사용하게하는 기술
- spring section
세션 기능을 편리하게 사용하게하는 기술
- spring security
보안과 관련
- spring Rest Docs
API 문서를 편리하게 해줌
- spring arrayment
배치 처리에 특화된 기술
- spring cloud
클라우드에 특화된 기술
Spring Core 개념 4가지
- spring은 여러가지 기술들의 모음
- spring은 Java 기반의 Frame Work
- Java 언어의 가장 큰 특징 - 객체 지향 언어 object oriented
- spring은 객체 지향 언어가 가진 강력한 특징을 살고 개발하게 해주는 Frame Work
객체 지향 프로그래밍
객체 지향 프로그래밍은 프로그램을 명령어의 목록으로 보는 시각에서 벗어나
여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다.
각각의 객체는 메시지를 주고 받고, 데이터를 처리할 수 있다. (협력)
객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이 하게 만들기 때문에
대규모 소프트웨어 개발에 많이 사용된다.
⇒ 유연하고 변경이 용이? 다형성
객체 지향 특징
추상화 (Abstraction) 공통의 속성이나 기능을 묶어 이름을 붙이는 것
eg) 객체들을 묶는 클래스를 정의
캡슐화 (Encapsulation)
하나의 목적에 따라 데이터의 구조와 데이터를 다루는 방법들을 결합시켜 묶는 것
eg) 변수와 함수를 하나로 묶는 것 (외부에서는 오로지 함수를 통해서만 접근)
상속 (Inheritance)
상위 개념의 특징을 하위 개념이 물려받는 것
eg) 부모 클래스에서 특정 기능을 추가하고 싶다면 상속하여 특정 기능을
추가한 자식 클래스를 생성
다형성 (Polymorphism)
하나의 객체가 여러 가지 형태를 가질 수 있는 것
eg) 오버라이딩, 오버로딩
역할과 구현을 분리했기 때문에 운전자는 자동차 인터페이스 (역할)만 알 뿐, 그 내부 구조 (구현)는 몰라도 된다.
클라이언트에 영향을 주지 않고 새로운 기능을 제공하며, 무한히 확장할 수 있다.
→ 역할과 구현으로 구분했기 때문 (새로운 자동차가 나와도 클라이언트는 배우지 않아도 된다.)
로미오 역할을 하는 사람은 구현대체 가능므로 누구든 상관이 없다.
로미오 역할을 하는 사람은 역할만 안다면 줄리엣 역할을 누가 하는지 상관이 없다.
줄리엣 역할의 구현이 바뀐다 한들 로미오 역할에 영향을 주지 않음.
다른 대상으로 대체가 가능 → 유연하고 변경이 용이하다.
역할과 구현으로 구분
- 세상이 단순해지고, 유연해지며 변경도 편리해진다.
- 장점
클라이언트는 대상의 역할(인터페이스)만 알면 된다.
클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
클라이언트는 구현 대상의 내부 구조가 변경 되어도 영향을 받지 않는다.
클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.
-자바 언어
자바 언어의 다형성을 활용
- 역할 = 인터페이스
- 구현 = 인터페이스를 구현한 클래스, 구현 객체
객체를 설계할 때 역할과 구현을 명확히 분리
객체 설계시 역할(인터페이스)을 먼저 부여하고
그 역할을 수행하는 구현 객체 만들기
객체의 협력 관계
혼자 있는 객체는 없다.
- 클라이언트: 요청, 서버: 응답
- 수많은 객체 클라이언트와 객체 서버는 서로 협력 관계를 가진다
자바 언어의 다형성
- 오버라이딩 된 메서드가 실행
다형성의 본질
인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
다형성의 본질을 이해하려면 협력이라는 객체 사이의 관계에서 시작해야 한다.
→ 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.
역할과 구현을 분리
- 유연하고, 변경이 용이 → 확장 가능한 설계
- 클라이언트에 영향을 주지 않는 변경 가능
- 인터페이스를 안정적으로 잘 설계하는 것이 중요
- 한계: 역할(인터페이스) 자체가 변하면, 클라이언트, 서버 모두에 큰 변경이 발생한다.
스프링과 객체 지향
- 다형성이 가장 중요
- 스프링은 다형성을 극대화해서 이용할 수 있게 도와줌
- 스프링의 제어 역전(IoC), 의존관계 주입(DI)은 다형성을 활용해 역할과 구현을 편리하게 지원
- 스프링을 사용하면 공연 무대의 배우를 선택하듯이 구현을 편리하게 변경 가능
'Back-end Skill > Springboot' 카테고리의 다른 글
11월 12일 Spring 실시간강의 정리본 (0) | 2021.11.12 |
---|---|
11월 3일 spring 실시간 강의 정리본 (2) | 2021.11.11 |
TIL 11월 5일 spring 실시간 강의 정리본 (0) | 2021.11.11 |
11월 4일 spring 실시간강의 정리본 (0) | 2021.11.04 |
25일차 개발일지 _ About Spring #2 (0) | 2021.11.03 |