[Spring 기본] Spring을 시작하며

2022. 10. 12. 15:38·Spring/Spring 기본
728x90
반응형

Spring 개발을 시작한지 거의 2년이 다되어 가지만, 아직 Spring 이란 친구와 너무 먼 사이 같다고 느끼는 찰나에

해당 강의를 만나게 되었습니다. 스프링 핵심 원리강의는 어느정도 현업을 하다가 와서 그런지 정말 잘 짜여진 강의

라고 느껴졌고, Spring 이 어떤 친구인지 조금 더 자세히 알아볼 수 있는 시간이 되었던 것 같습니다. 항상 정리를

하며 복습을 해야 진짜 공부한 것이라고 생각해서, 포스트를 작성하게 되었으니, 그냥 글 읽듯이 쭉쭉 읽으시며 조

금은 도움이 되었으면 좋겠습니다.

 

 

 

Spring 

 

Spring 이란 Java 언어를 기반으로 한 웹 프레임워크 이지만, 웹 뿐만 아니라 (아직 웹 외의 프로그램은 본 적 없습

니다) 다양한 앱을 만들기 위한 Framework 입니다. Spring 이란 영역은 너무 넓기 때문에, 무엇을 말하냐라고 할

때는 다소 추상적일 수 있지만, Spring 모든 기술을 포함한 Spring 생태계를 말한다고 보시면 될 것 같습니다. 대표

적인 Spring 제공 기술들을 살펴보겠습니다. 

 

Spring Framework    - Spring 기능의 기반이 되는 핵심 코드들을 모아놓은 집약체 

Spring Boot    - Spring의 기술들을 편리하게 지원하는 프레임워크, Tomcat 을 내장하여 WAS 연동을 지원

Spring Data    - Database 와의 통신을 지원해주는 기술

Spring Session    - 웹 세션 기술을 편리하게 쓸 수 있도록 지원해주는 기술

Spring Security    - Authentication, Authorization 측면에서 앱의 보안을 강화해주는 기술

Spring Batch    - 대규모 데이터 처리를 위한 기술.

...

 

그밖의 많은 Spring 기술들이 Spring 생태계를 이루고 있습니다. 이 모든 Spring에 전반적으로 깔려 있는 핵심 원

리들을 이해해야 추후 많은 기술들을 소화하는데 밑거름이 됩니다. 저 역시 해당 강의를 들으면서 지금까지 접했던

많은 내용들을 보았고, 그제서야 Spring 이 내부적으로 무슨 일을 했는지 이해할 수 있었습니다. (IoC, DI, AOP

등) 

 

 

 

Spring 의 간단한 역사

 

예전에 사용하던 Java 기반 프레임워크 기술은 EJB (Enterprise Java Bean) 이였습니다. 역사는 지루하니 간단히

살펴보겠습니다. 이 EJB 는 너무 어려웠고, 이를 제대로 만들기 위해 Rod Johnson 이란 사람이 Spring

Framework 를 만들게 되었고, 핵심 기술인 Database 통신 기술을 Gavin King 이란 사람이 Hibernate 를 만들게

되었습니다.

 

해당 기술들은 전 세계적으로 열광하게 되었고, 이들은 Java 프레임워크의 새로운 시작이란 의미로 Spring 이라고

이름을 짓게 되었습니다. 왜 Spring 이 이렇게 주목을 받았는지가, 중요한 요소입니다. 

 

 

 

Spring 핵심 원리

 

본 강의를 통들어 가장 강조되는 부분은, 바로 Spring 은 Java Framework 이며, OOP 언어란 점입니다. Spring

Framework 은 이 객체 지향 언어가 가진 강력한 특징을 살려내는, 좋은 객체지향 앱을 설계할 수 있도록 도와주는

프레임워크입니다. 즉, Rod Johnson은 EJB 가 Java의 순수한 OOP 특성을 다 잃어버린다고 판단하였고, OOP의

가치를 확실히 살릴 수 있도록 만들고 싶었던 것입니다.

 

 

 

객체 지향 언어 (Object Oriented Programming) 

 

객체지향의 정의부터 살펴보자면, '컴퓨터 프로그램을 명령어의 목록으로 보는 시각으로부터 벗어나, 여러 개의 독

립된 단위인 [객체]들의 모임으로 파악하는 것' 입니다. 즉, 위에서 아래로 내려오는 딱딱한 명령어들의 집합에서 벗

어나, 메인 코드 안에서 많은 객체들이 서로 데이터를 주고 받으며 협력관계를 통해 설계되는 언어를 말합니다. (개

인적으로 이 객체 지향적인 관점이, 우리 실생활과 가장 비슷한 언어라고 생각이 듭니다) 

 

이 객체 지향 언어를 가장 유연하게 만드는 중요한 요소 중 하나는 바로 다형성 (Polymorphism) 입니다. 혹시라도

OOP, 다형성 등의 용어들이 이해가 안되신다면, 필히 Java 에 대한 학습 후 진행하셔야 합니다. 

 

 

다형성에 대하여

 

 

위 그림처럼, 우리 실생활에서 자동차라는 큰 분류가 있습니다. 우리들은 이 자동차라는 객체를 통해서 운전이라는

행동을 수행하게 됩니다. 이 추상적인 자동차라는 객체를, 더욱 구체화시킨다면 K3, Tesla, Avante 등 수많은 모델

들이 존재할 것입니다. 중요한 점은, 이 모델들이 바뀌어도, 일부 기능들은 개선될 수 있으나, 핵심 로직들은 변하지

않는다는 점입니다. 객체 지향 언어에서는, 운전자가 이 자동차라는 추상 객체 (Interface) 를 사용(의존)하더라도,

실질적으로 구현하는 K3 와 같은 객체 (Class) 를 사용하게 됩니다. 하지만, 수행하는 운전 (method) 이란 로직은

변하지 않습니다. 

 

차를 Avante 로 바꾼다고 해도 뭐가 변할까요? 운전을 수행함에 있어서는 변함이 없습니다. Tesla 로 바꾸면 자율

주행이라는 새로운 로직 (method) 이 추가될 수는 있으나, 운전을 수행함에 있어서는 역시 변함이 없습니다.

 

이렇게 해당 인터페이스 (서버) 를 요청하는 객체(클라이언트)에게 영향을 주지 않고 새로운 기능을 제공할 수 있는

것이 다형성의 핵심입니다. 이를 [역할과 구현의 분리] 라고 합니다.

 

다음과 같은 예시를 보겠습니다. 

 

 

역할과 구현에 대하여

 

 

로미오와 줄리엣 공연에는, 배우 A씨와 B씨가 로미오 역할을 하고, 배우 C씨와 D씨가 줄리엣 역할을 하게 됩니다.

이 때, 로미오 역할을 A씨가 한다고, 줄리엣 역할을 D씨가 한다고 연극이 변하지 않습니다. 역할을 구현하는 배우

A~D씨들은 누구든지 해당 역할을 수행할 수 있습니다. 

 

객체 관점에서도 항상 서로 서버가 되기도 하고, 클라이언트가 되기도 하며, 항상 협력 관계에 있습니다. 이 협력 관

계들을 통해 OOP 로 설계를 하면 즉, 역할과 구현을 구분하면, 앱은 단순해지고, 유연해지고, 변경도 편리해집니

다. Client 는 Server의 내부 사정은 알 필요 없이, 해당 Server 역할을 할 수 있는 객체만 있으면 되며, 내부 구조가

변경되어도 아무 영향을 받지 않아야 하는 것이, 다형성의 핵심입니다. 

 

안정적인 OOP, 안정적인 Interface 를 설계하기 위해선, 이 [역할과 구현의 분리] 를 항상 명심해야 합니다. 객체 지향 설계의 5대 원칙인 SOLID에 대해서 더 자세히 안다면, 이 Spring 이 얼마나 OOP를 위한 Framework 인지 확

인할 수 있습니다. 

 

 

 

포스트 요약

 

  • Spring 은 OOP 의 성능을 극대화시켜줄 수 있도록 설계된 Framework 입니다. 
  • 제대로 된 OOP 설계를 위해선 [역할과 구현의 분리]를 잘 이해하여야 하며, Spring 에서는 IoC, DI 를 통해서 이를 편리하게 성취할 수 있습니다. 

 

출처

 

 

[스프링 기본]으로 엮인 모든 포스트들은 교육 사이트 인프런의 지식공유자이신 김영한님의 [스프링 핵심 원리] 강

의를 기반으로 작성되었습니다. 열심히 정리하고 스스로 공부하기 위해 만든 포스트이지만, 제대로 공부하고 싶으

시면 해당 강의를 꼭 들으시는 것을 추천드립니다. 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

 

728x90
반응형

'Spring > Spring 기본' 카테고리의 다른 글

[Spring 기본] Component Scan을 통한 Bean 자동화 관리  (0) 2022.10.17
[Spring 기본] Spring Container의 Singleton 전략  (0) 2022.10.14
[Spring 기본] Container와 Bean과 조금 더 친해져보자  (0) 2022.10.13
[Spring 기본] Spring의 객체 지향 IoC, DI, Bean, Container  (0) 2022.10.13
[Spring 기본] 앱 기본 설계, Config 클래스 및 주입의 시작  (0) 2022.10.13
'Spring/Spring 기본' 카테고리의 다른 글
  • [Spring 기본] Spring Container의 Singleton 전략
  • [Spring 기본] Container와 Bean과 조금 더 친해져보자
  • [Spring 기본] Spring의 객체 지향 IoC, DI, Bean, Container
  • [Spring 기본] 앱 기본 설계, Config 클래스 및 주입의 시작
문케이크
문케이크
    반응형
  • 문케이크
    누구나 개발할 수 있다
    문케이크
  • 전체
    오늘
    어제
    • 전체 보기 (122)
      • CS 이론 (13)
        • 운영체제 (8)
        • 네트워크 (2)
        • 알고리즘 (0)
        • Storage (3)
      • Spring (26)
        • Spring 기본 (12)
        • Spring 심화 (0)
        • JPA (11)
        • Spring Security (3)
      • 리액티브 (0)
        • RxJava (0)
      • SW 설계 (14)
        • OOP (0)
        • UML (3)
        • OOAD (0)
        • Design Pattern (11)
      • Java (8)
      • 웹 운영 (17)
        • AWS (15)
        • 운영 구축 (2)
      • Testing (3)
        • Unit (3)
      • Extra (3)
        • API 적용 (1)
      • 인프라 기술 (5)
        • Kubernetes (2)
        • Elasticsearch (3)
      • Logging (7)
        • Spring (5)
        • 인프라 (2)
      • 일상 (2)
        • 음식점 리뷰 (2)
        • Extra (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 문케이크의 블로그
  • 인기 글

  • 태그

    lombok
    BEAN
    decorator
    elasticsearch
    n+1
    lazy loading
    Composite
    spring boot
    Spring
    객체지향
    Setter
    composition
    Configuration
    runtime exception
    k8s
    JPA
    OOP
    GoF
    디자인 패턴
    Java
    SRP
    mockito
    junit
    OOAD
    analyzer
    김영한
    spring container
    Design Pattern
    di
    단위테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
문케이크
[Spring 기본] Spring을 시작하며
상단으로

티스토리툴바