[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)
  • 블로그 메뉴

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

  • 공지사항

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

  • 태그

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

  • 최근 글

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

티스토리툴바