스프링기본1_스프링의 시작과 객체프로그래밍

하도야지·2021년 6월 23일
0

Spring

목록 보기
1/12
post-thumbnail

1. 자바 진영의 추운 겨울과 스프링의 탄생

  1. 자바당 정파 기술 EJB(Enterprise Java Beans)
    -장점: 기술적으로 좋음
    -단점: 비쌈 / 복잡함 / 느림 / EJB에 의존적 (EJB지옥)
    -> POJO(Plain Old JAVA OBJECT) 라는 말도 나옴

  2. EJB엔티티빈 -> Hibernate -> JPA
    -표준 인터페이스 : JPA
    -구현체들 : 하이버네이트 / EclipseLink / 기타


2. 스프링의 탄생

  1. 2002년 로드 존슨 책 출간(J2EE DESIGN AND DEVELOPMENT)
  • EJB의 문제점 지적
  • EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여줌, 3만 라인 이상의 기반 기술을 예제코드로 선보임
  • 여기에 현 스프링 핵심 개념과 기반 코드가 들어가 있음
  • BeanFactory, ApplicationContext, POJO, 제어의 역전, 의존관계 주입
  1. 오픈소스 프로젝트 시작
  • 유겐휠러, 얀카로프
  • 스프링 이름의 유래 : EJB라는 겨울을 넘어 새로운 시작(봄)

3. 스프링이란?

1. 스프링의 생태계

  • 필수 : 스프링 프레임워크, 스프링부트
  • 선택 :
    스프링데이터 : db연동 관리 기능 제공
    스프링 세션 : 세션 기능 편리하게 제공
    스프링 시큐리티 : 보안관련기능 제공
    스프링Rest Docs : 문서관리 기능 제공
    스프링 배치 : 배치기능 제공
    스프링 클라우드 : 클라우드 기능 제공
    이외 ....

2. 스프링 프레임워크

  • 핵심기술 : 스프링 DI컨테이너, AOP, 이벤트, 기타
  • 웹기술 : 스프링 MVC, 스프링 WebFlux
  • 데이터 접근 기술 :트랜잭션, jdbc, ORM, XML
  • 기술통합 : 캐시, 이메일, 원격접근, 스케줄링
  • 테스트 : 스프링 기반 테스트 지원
  • 언어 : 코틀린, 그루비

3. 스프링부트

  • 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용
  • 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
    - tomcat 같은 웹서버를 내장해서 별도의 웹서버를 설치하지 않아도 됨 (ASIS : build > tomcat설치 > 이후 환경설정)
  • 손쉬운 빌드 구성을 위한 starter 종속성 제공
    (라이브러리 묶음을 제공)
  • 스프링과 3rd parth(외부) 라이브러리 자동 구성
  • 메트릭, 상태확인, 외부 구성 같은 프로덕션 준비 기능 제공
  • 관례에 의한 간결한 설정

    스프링부트는 스프링프레임워크의 여러 기능을 편리하게 사용할 수 있도록 제공하는것임
    스프링프레임워크를 제외하고 쓸수 는 없음

4. 스프링 단어?

  • 스프링이라는 단어는 문맥에 따라 다르게 사용됨
    -스프링 DI 컨테이너 기술
    -스프링 프레임워크
    -스프링 부트, 스프링프레임워크를 포함한 모든 생태계

5. 핵심개념

<오답>

  • 웹 어플리케이션 만들고, DB접근 편리하게 해주는 기술?
  • 전자정부 프레임워크?
  • 웹 서버도 자동으로 띄워주고?
  • 클라우드? 마이크로서비스?

<진짜 핵심>

  • 스프링은 자바 언어 기반의 프레임워크
  • 자바 언어의 가장 큰 특징 - 객체 지향 언어
  • 스프링은 객체지향언어가 가진 강력한 틍징을 살려내는 프레임워크
  • 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임 워크

04. 좋은 객체 지향 프로그래밍이란

1. 객체 지향 특징

  • 추상화
  • 캡슐화
  • 상속
  • 다형성

2. 객체 지향 프로그래밍

  • 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나, 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체메시지를 주고받고, 데이터를 처리할 수 있다.
  • 객체지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다.

3. 유연하고, 변경이 용이?

  • 레고 블럭 조립하듯이
  • 키보드, 마우스 갈아 끼우듯이
  • 컴퓨터 부품 갈아 끼우듯이
  • 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법

4. 다형성(polymorphism)

  • 다형성의 실세계 비유 : 역할과 구현 으로 구분****

-> 자동차가 바뀌어도 자동차의 역할은 그대로이기에, 운전자가 자동차를 운전할 수 있음
-> 운전자가 쉽게 사용하기 위함
-> 운전자(클라이언트)가 자동차의 내부구조에 대해 알 필요 없음

{*}역할과 구현을 분리

  • 역할과 구현으로 구분하면 세상이 단순해지고, 유연해지며, 변경도 편리해진다
  • 장점
    클라이언트는 대상의 역할(인터페이스)만 알면 된다
    클라이언트는 구현 대상의 내부 구조를 몰라도 된다.
    클라이언트는 구현 대상의 내부구조가 변경되어도 영향을 받지 않는다
    클라이언트는 구현 대상 자체를 변경해도 영향을 받지 않는다.
  • 자바언어
    자바 언어의 다형성을 활용
    --역할 : 인터페이스
    --구현 : 인터페이스를 구현할 클래스, 구현객체
    객체를 설계할 떄 역할과 구현을 명확히 분리
    객체 설계 시 역할(인터페이스)을 먼저 부여하고, 그 역할을 수행하는 구현 객체 만들기
  • 객체의 협력이라는 '관계'부터 생각
    -> 혼자 있는 객체는 없다
    -> 클라이언트 : 요청, 서버: 응답
    -> 수많은 객체 클라이언트와 객체서버는 관계를 가진다.

  • 자바 언어의 다형성
    -> 오버라이딩 된 메서드가 실행
    -> 다형성으로 인터페이스를 구현한 객체를 실행 시점에 유연하게 변경할 수 있다.
    -> 물론 클래스 상속 관계도 다형성, 오버라이딩 적용 가능
    (부모는 마음이 넓어서 자식 타입을 다 받을 수 있다 ㅋ)
    (자식은 부모마음을 몰라서 받을 수 없다 ㅋㅋ)

    • 다형성의 본질
      ->인터페이스를 구현한 객체 인스턴스를 실행 시점에 유연하게 변경할 수 있다.
      -> 다형성의 본질을 이해하려면 협력 이라는 객체사이의 관계에서 시작해야함
      -> 클라이언트를 변경하지 않고, 서버의 구현 기능을 유연하게 변경할 수 있다.
  • 한계
    -> 역할(인터페이스) 자체가 변하면, 클라이언트, 서버 모두에 큰 변경이 발생한다.
    --> 인터페이스를 안정적으로 잘 설계하는 것이 중요

5. 스프링과 객체 지향

  • 다형성이 가장 중요하다.
  • 스프링은 다형성을 극대화해서 이용할 수 있게 도와준다.
  • 스프링에서 이야기하는 제어의역전(Ioc), 의존관계 주입(DI)은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다.
  • 스프링을 사용하면 마치 레고 블럭 조립하듯이! 공연 무대의 배우를 선택하듯이! 구현을 편리하게 변경할 수 있다.
profile
프로그래머를 꿈꾸는 코더

0개의 댓글

관련 채용 정보