Skip to content

Instantly share code, notes, and snippets.

@ShinGyeongseon367
Last active January 31, 2022 03:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ShinGyeongseon367/9b25fc94b7f771ae6ada6ae934c398dd to your computer and use it in GitHub Desktop.
Save ShinGyeongseon367/9b25fc94b7f771ae6ada6ae934c398dd to your computer and use it in GitHub Desktop.
스프링을 왜쓰고, 어떻게 생겨났을까 ?

최근 스프링을 공부하면서 왜 스프링을 사용할까 정말 궁금했다. 그리고 최근 듣는 강의(김영한의 스프링 완전 정리)에서 스프링이 생긴 배경을 알게되었다.

강의에서 강사가 그냥 배우는 것보다 왜 생겼는지 ?! 유래를 알면 배움에 깊이가 달라진다는 말에 큰 동감을 하였다. 때문에 만약 스프링에 대해 깊이 있는 이해를 원한다면 스프링의 배경을 알면 더욱 더 재미있게 공부할 수 있을 것 같은 기대에 아래의 글을 쓴다.

+ 저는 두괄식(결론이 글의 맨 앞에 등장)을 선호합니다. + 저는 정식 선생님이 아닙니다. 이 글은 약 30~40%만 신뢰해주세요.

+ 지적은 환영합니다.

1. 스프링은 왜 생긴걸까? 2. 스프링의 장점은 뭘까?

스프링은 왜 생긴걸까?

"스프링은 한 사람이 빡쳐서 만들었다."

위에서 말한 사람이 누군지 궁금하시지 않으신가요 ?? Juergen Hoeller 이라는 사람입니다.

저는 강의에서 사진으로 보여주었습니다.

Juergen Hoeller, Pivotal—Current and Future State of Java, SpringOne  Platform 2018 - YouTube

https://www.youtube.com/watch?v=onZJ8beVEtI (강의에서 보여주는 사진은 위 사진이 아닙니다.)

뭐 이렇게 생긴 아주 대단한 사람입니다. 그리고 여담으로 한 가지 말해드리면 위 이름은 코드에서도 많이 볼 수 있습니다. 궁금하시면 @Controller 확인해보세요.

!! 다시 돌아와서 오래전 시장은 EJB(Enterprise Java Bean) 요놈이 점유를 했다고 합니다. 그리고 사용하는 방법이 굉장히 어려웠다고 들었습니다. 그리고 위 사진의 인물이 EJB를 보면서 느낀점은 비효율적이고 , 비용도 많이 들고 ... 등등 대부분이 부정적인 생각을 갖고 있지 않았을까 ?!라고 생각합니다. (개인적인 의견입니다.)

Java를 통해서 1만 줄이 넘는 코드를 보여주면서 효율적인 코드를 공개합니다. 그리고 주변에서 Juergen의 소스를 보고 그냥 버리기는 아까웠고 같이 작업을 하자고 제의를 하고 그러면서 Spring을 만들었다고 합니다.

스프링의 장점은 뭘까?

지금까지 체감한 장점은 개발자의 부담을 덜어주는 것, 시간을 절약해주는 것 이라고생각한다.

스프링에 생긴 이유는 EJB의 단점을 보안하기 위해 등장하였다. 그래서 EJB보다 좋은 이유를 간단하게 보고 가고자한다. 그리고 이거는 그냥 넘어가도 상관없다.

지금 시장에서 스프링을 쓰는 것만 봐도 분위기상 스프링이 더 좋다는 것을 알 수 있다.

둘의 기본적인 차이점

첫째, 근본적이고 명백한 차이점은 EJB가 사양인 반면 Spring은 전체 프레임워크라는 것 입니다.

이 사양은 GlassFish, IBM WebSphere 및 JBoss/WildFly와 같은 많은 애플리케이션 서버에 의해 구현됩니다. 이것은 애플리케이션의 백엔드 개발을 위해 EJB 모델을 사용하기로 한 선택만으로는 충분하지 않다는 것을 의미합니다. 또한 사용할 애플리케이션 서버를 선택해야 합니다.

이론적으로 Enterprise Java Beans는 앱 서버 간에 이식 가능하지만 상호 운용성을 옵션으로 유지하려면 공급업체별 확장을 사용하지 않아야 한다는 전제 조건이 항상 있습니다.

둘째, 기술로서의 Spring은 광범위한 제품 포트폴리오 측면에서 EJB보다 Java EE에 더 가깝습니다 . EJB는 백엔드 작업만 지정하지만 Spring은 Java EE와 마찬가지로 UI 개발, RESTful API 및 Reactive 프로그래밍도 지원합니다.

https://www.baeldung.com/spring-bean-vs-ejb 위 내용은 스프링 문서를 응용하였으며 , 궁금한 사람들은 들어가서 보세요. 재밌습니다 :)

그리고 개인적으로 생각했던 스프링의 장점을 말해보도록 하겠다.

개인적으로 생각하는 점은 개발자가 개발에 더욱 더 집중할 수 있도록 해준다. 간단하게 예를 들면 JPA를 사용한다고 가정한다. 그리고 여러가지 설정들을 application.properties에서 간단하게 수정이 가능하며, DB 연동 , 스프링 빈 컨텍스트 관리 등을 효율적이면서 대신 수행해준다는 점이 개발자의 많은 시간을 절약해준다고 생각한다.

위에서 말한 장점은 내가 지금까지 스프링을 공부하면서 체감한 장점이다. 솔직히 DI(Dependency Ingection)의 드라마틱한 장점, SOLID(좋은 객체설계방법) 등을 체감하지는 못했다.

그래도 일단은 스프링에서 자랑하는 기술들이 무엇이 있는지 아래 스프링 공식문서를 참고길 바란다.

https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans 스프링 핵심기술 (나는 글로 봤을 때는 솔직히 무슨 느낌인지 모르겠다. 장점이라고는 하지만 체감하기전에는 놀랍지 않다. 아니다 ... 못 놀란다고 표현하는게 정확하지 않을까 생각한다. 0_0 )

+ 기억해야 할 기록 그래도 나름 공부하면서 스프링에게 놀란 점(?!)이라고 해야할지 아니면 그냥 객체지향설계(?!) 방식에 놀랐다고 해야할지 정확하게 모르겠지만

다형성의 목적을 정확하게 파악을 했다. 그래서 왜 Interface를 통한 기본적인 설계가 중요하게 되는지도 파악하게 되었다. 그러면 아래 간단하게 정리해보도록 하겠다. ( 아래 내용의 예시는 제가 그냥 생각하는 내용이기때문에 적절하지 않다고 생각하신다면 다른 포스팅에 좋은 예들이 많이 있으니 그런 글들을 참고해도 좋습니다.)

상황 # : 기업 배달의황족 지금 당신이 생각하고 있는 기업을 예로 들었습니다. 그리고 회원마다 한 달에 한 번 할인 쿠폰을 줍니다.

하지만 쿠폰의 혜택은 사용자의 등급에 따라 달라집니다. 챌린저 , 다이아, 플래, 골드, 실버, 등등

상황에 따른 조건이 존재

  1. 사용자들에게 할인 적용.

  2. 할인을 사용자 등급에 맞도록 혜택 제공.

    package com.prac.spring.discount;
    public interface DiscountPolicy { int discount(Member member, int price); }

DiscountPolicy
챌린저 '챌린저 등급에 맞는 할인율 구현체'
다이아몬드 '다이아몬드 등급에 맞는 할인율 구현체'
플래티넘 '플래티넘 등급에 맞는 할인율 구현체'
... ... 등등

위와 같이 인터페이스를 설계 후 구현체를 만들어준다. 그리고 다형성을 이용하여 적절하게 필요한 객체를 초기화를 시켜주는 것이다.


이렇게 내가 기억하고 싶은 내용과 스프링 과거가 궁금했던 당신에게 조금이라도 도움이 되었으면 좋겠다.

Written with StackEdit. 현재 이 글을 작성하면서 도움받은 마크다운 에디터(?!) 이다. 웹을 통해 제공해주기때문에 만약 당신도 마크다운 에디터를 찾고 있다면 요놈을 한 번 사용해보세요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment