JAVA Spring 프레임워크 란?

2023. 4. 29. 17:17·Spring Boot

프레임워크를 알아보기 전에 알아두면 좋을 것 들(필요지식 : JAVA,  JSP)

우리는 예전부터 프레임워크를 사용하고 있었다.

JAVA = Collection framework

JSP  = Mybatis(JAVA 랑 DB랑 연결해주는 친구)

 

(흔히 프레임워크랑 라이브러리와 혼동하는 사람들이 있다)

프레임워크랑 라이브러리의 차이점을 알아야 한다.

프레임 = 틀

워크 = 작업

라이브러리 ? = 

 

둘 다 선배 개발자 분들이 만들어 놓은 것 이다.

그럼 뭐가 다를까 ? 쉽게 설명하면 라이브러리들이 덩치가 커지면 프레임워크가 된다.

그렇다면 덩치가 커진다는 기준이 뭘까 ?

 

우리가 자동차 공장의 사장이라고 생각하자

기술자 3명을 뽑았다.

 

3명에게 자동차 설계도를 준다. 이사람들에게 자동차 설계도를 주고 "이거랑 똑같이 만들어 주세요" 라고한다.

 

이들은 자동차를 만들기위해 도구가 필요할 것이다 (망치 , 휠, 용접 등등)

 

자동차를 만들기위한 도구를, 그 도구를 먼저 만드는 것은 맨땅에 헤딩이다(날 코딩)

 

그래서 우리는 이런 도구들을 먼저 만들지 않고 그냥 사용한다 이것들을 라이브러리 라고한다.

 

자동차 = 어플리케이션

우리는 라이브러리를 사용해서 만들 뿐 이 만들어진 도구를 사용한다.

이미 있는 도구(라이브러리)를 기술자에게 줘서 같은 설계도를 보고 자동차를 각 1대 씩 만들어 3대가 나왔다.

 

이 자동차들은 다 똑같을까?

 

똑같은 기획안 설계도를 줘도 제작되는 서비스 코드 페이지가 같을까?

라이브러리를 제공해줘도 개개인의 실력차 등 으로 인해 자동차3대 다 다른 결과가 나온다.

 

나오는 제품들이 다 각 각 다르면 상품화가 될까?

기업 입장에서는 손해(개개인의 실력차가 나는 것이 기술자)

 

이런 문제들을 보완하기 위해 등장한 것이 프레임워크다.

 

프레임 = 틀 

 

회사 대표가 짜증나서 기술자 들의 실력차를 줄여보자 그래서 프레임워크 제공한다.

이제는 3개의 같은 설계도가 아니라 3개의 똑같은 자동차를 제공한다.

그러면 기술자들은 자동차의 서비스를 제작한다.

핸들, 전동 좌석, 블루투스

개발자가 아닌 사람이 홈페이지를 보면 다 똑같다고 생각한다 틀이 다 짜져있기 때문이다.

 

service 제작을 위해 getter. setter, toSring 재정의 해야한다. 어떤 개발자는 할 줄 알고 다른 개발자는 모를 것이다.

라이브러리를 사용한다 하더라도, 이것들은 직접 구현해야한다.

 

그런데 spring 프레임워크 에서는 @Data(어노테이션) 를 쓰면 모든 것이 재정의 되고 구현이된다.

이제 개발자들을 실력차도 줄어들었다(상향 평준화). 

@Data 도 어떻게 보면 라이브러리이다.

하지만 이것들이 매우 잘 구현이 되어있고 매우 다양하기 때문에 덩치가 크다는 표현을 쓸 수 있고 이를 프레임워크라고 한다

 

 라이브러리 프레임워크 차이점

덩치차이 이다.

어플리케션을 제작하기 위해 사용하는 도구가 라이브러리 라면 프레임 워크는 어플리케이션 안에서 수정 하고 코드를 추가하는 것이 프레임워크다.

 

mybatis 프레임워크를 생가해보면 xml에 저장 해놓은 select insert 태그에 쿼리를 작성하고 java 쪽에서 사용한다.

이것을 작업 할 때 실력차가 나나? NO

 

본론 프레임워크란?

 

 뼈대나 근간을 이루는 코드들의 묶음

개발자는 각 개개인의 능력 차이가 큰 직종이고, 개발자 구성에 따라

프로젝트 결과 역시 큰 차이를 낳는다. 이런 상황을 극복하기 이한 코드의 결과물이 바로 프레임워크다.

프로그램의 기존 흐름이나 구조를 정하고 모든 팀원이 이 구조에 자신의 코드를

추가하는 방식으로 개발하게 된다.

 

프레임워크의 장점

 

개발에 필요한 구조를 이미 코드로 만들어 놓았기 때문에, 실력이 부족한 개발자라고 하더라도

반쯤 완성한 상태에서 필요한 부분을 조립하는 형태의 개발이 가능하다. 회사 입장에서는 프레임워크를 사용하면

일정한 품질이 보장되는 결과물을 얻을 수 있고, 개발자 입장에서는 완성된 구조에 자신이 맡은 코드를 개발해서 넣기 때문에 개발 시간을 단축할 수 있다.

 

아직 spring 얘기는 하지도 않았다. 여태 프레임워크의 얘기만 했었다.

수 많은 프레임워크 중 왜 spring 프레임워크를 사용할까

 

그래도 편한 부분이 있으니 그런 단점을 감소하고 사용했다.

그 시점에 혜성 처럼 등장한 스프링 프레임워크!

 

스프림 프레임워크의 장점

 

처음 프로젝트 생성 시 필요한 것만  체크해서 담을 수 있다. 불필요한 것들이 제외 대서 가벼워진다.(경량 프레임워크)

예전 프레임워크는 다양한 경우를 처리 할 수 있는 기능을 가지도록 만들다 보니,

하나의 기능을 위해서 너무 많은 구조가 필요했다. 속도가 느려지고 서버 실행 시간이 너무 많이 걸렸다.

기술이 너무나 복잡하고 방대했기 때문에, 전체를 이해하고 개발하기에는 어려움이 많았다.

그래서 스프링 프레임워크가 등장했고, 특정 기능 위주로 간단한 jar 파일 등을 이요해서 모든 개발이 

가능하도록 구성 되어 있다.

 

 1. 경량 프레임워크(light-weight)

 2 . 복잡함에 반기를 들어서 만들어지 프레임워크

 3. 프로젝트 전체 구조를 설계할 때 유용한 프레임워크

 4. 다른 프레임워크들의 포용(여러 프레임워크를 혼용해서 사용가능)

 5. 개발 생산성과 개발도구의 지원

 

스프링 프레임워크의 특징

 1. POJO 기반의 구성

 2. 의존성 주입(DI)을 통한 객체간의 관계 구성

 3. AOP(Aspect-Oriented-Programming) 지원

 4. 편리한 MVC 구조

 5. WAS에 종속적이지 않은 개발 환경

 

1. [ POJO (Plain Old Java Object) 기반의 구성 ]

오랜된 방식의 간단한 자바 객체하는 의미이며, JAVA 코드에서 일반적으로 객체를 구성하는 방식을

스프링 프레임워크에서 그대로 사용할 수 있다는 말이다.

 

2. [ 의존성 주입(DI)을 통한 객체간의 관계 구성 ] 

의존성(Dependency)이란 하나의 객체가 다른 객체 없이 제대로 된 역할 할 수 없다는 것을 의미한다.

예를 들어 A객체가 B객체 없이 동작이 불가능한 상황을  'A가 B에 의존적이다'라고 표현한다.

 

주입(Injection)은 말 그대로 외부에서 밀어 넣는 것을 의미한다.

예를 들어 어떤 객체에서 필요로한 객체를 외부에서 밀어 넣는 것을 의미한다.

주입을 받는 입장에서는 어떤 객체인지 신경 쓸 필요가 없고 어떤 객체에 의존하든 자신의 역할은 변하지 않게 된다.

 

** 의존성

A  →→→→→→→→ B

a객체에서 b객체를 직접 생성 ex) A class { B b = new B( ); } b 밖에 못 쓴다. b의 자식들을 사용 못한다.

 

** 의존성 주입

A  →→→→→→→→ ?  ↔↔↔↔↔ B (     A : 야 나 B 필요해           ? : ok B 너 일로와     )

a 객체는 b객체가 필요하다는 신호만 보내고, b객체를 주입하는 것은 외부에서 이루어진다.

? 무엇일까

의존성 주입방식을 사용하기 위해서는  ? 라는 존재가 필요하게 된다.

스프링 프레임워크에서는 ApplicationContext가 ? 라는 존재이며,

필요한 객체들을 생성하고, 필요한 객체들을 주입해주는 역할을 한다.

따라서 개발자들은 기존의 프로그래밍과 달리 객체와 객체를 분리해서 사용하고,

이러한 객체들을 엮는(wiring)작업의 형태로 개발하게 된다.

 

ApplicationContext가 관리하는 객체들을 '빈(Bean)'이라 부르고,

빈과 빈 사이의 의존관계를 처리하는 방식으로 XML, 어노테이션, JAVA 방식을 이용할 수 있다.

 

3. [ AOP의 지원 (관점 지향 프로그래밍) ]

좋은 개발환경에서는 개발자가 비즈니스 로직에만 집중할 수 있게 한다.

스프링 프레임워크는 반복적인 코드를 제거해줌으로써 핵심 비지니스 로직에만 집중할 수 있도록 해준다.

 

보안이나 로그, 트렌잭션과 같이 비지니스 로직은 아니지만, 반드시 처리가 필요한 부분을

횡단 관심사(cross-concern)이라고 한다.

스프링 프레임워크는 이러한 횡단 관심사를 분리해서 제작하는 것이 가능하고

횡단 관심사를 모듈로 분리하는 프로그래밍을 AOP라고 한다.

이를 통해서 3가지의 이점이 생긴다.

1) 핵심 비지니스 로직에만 집중하여 코드 개발

2) 각 프로젝트마다 다른 관심사 적용 시 코드 수정 최소화

3) 원하는 관심사의 유지보수가 수월한 코드 구성 가능

 

4. PASS

 

 

5. [ 단위 테스트 (WAS에 종속적이지 않은 개발 환경) ] 

전체 Application을 실행하지 않아도 기능별 단위 테스트가 용이하기 때문에 버그를 줄이고

개발 시간을 단축할 수 있다.  

# 이전 JSP 에서는 요청한 값이 Null이면 DB Controller View 쪽을 하나 하나 다 출력해서 하고,

제대로 작동을 했는지 확인하기 위해 서버 실행하고 끄고를 무한 반복 했었다. 이제 Spring에서는

그런 삽질은 안 해도되면 단위테스트를 이용해서 자바 코드로 확인 할 수 있다. 

 

 

# 자 이제 스프링 부트를 알아보자

스프링 프레임워크를 사용함에 있어서 초기 설정 및 필요한 라이브러리에 대한 설정의 어려움이 많으며,

시간이 너무 많이 걸리기 때문에 자동설정(AutoConfiguration)과 개발에 필요한 모든 것을

관리해주는 스프링 부트를 선호한다. 각 코어 및 라이브러리의 버전들도 일치시켜야 하지만

스프링 부트를 사용하면 이러한 복잡성을 해결하기에도 좋다.

 

프로젝트 기본 경로

1) src / main / java : 서버단 JAVA 파일

2) test / main / java : 단위 테스트 JAVA 파일

3) src / main / resources : 설정 파일 및 View 단

4) src / main / resources / static : css, js, image 파일 경로

5) src / main / resources / templates : html 파일 경로

6) src / main / resources / application.properties : 서버, 경로 및 DB 설정 파일

7) pom.xml : 라이브러리 의존성 관리

 

 

 

 

 

 

 

 

'Spring Boot' 카테고리의 다른 글

JPA 단 방향(연관 관계)  (0) 2023.06.27
Get, Post, Redirect  (1) 2023.05.02
타임리프(Timeleaf)  (2) 2023.05.01
MVC 2  (1) 2023.05.01
Spring 의존성 주입  (0) 2023.04.30
'Spring Boot' 카테고리의 다른 글
  • Get, Post, Redirect
  • 타임리프(Timeleaf)
  • MVC 2
  • Spring 의존성 주입
JAVALA
JAVALA
워니‘s Diary
  • JAVALA
    정신줄 JAVA라
    JAVALA
  • 전체
    오늘
    어제
    • 분류 전체보기 (87)
      • Codding_Test (11)
        • BaekJoon (7)
        • Programmers (3)
      • Algorithm (11)
      • Daily (4)
        • memoir (4)
      • TroubleShooting (8)
        • InteliJ (1)
        • Server (1)
        • Infra (0)
        • DB (0)
      • Computer Science (1)
      • JAVA (8)
      • Javascript (0)
      • Spring Boot (7)
      • API (2)
      • Server (0)
      • DB (3)
        • ORACLE (1)
      • Infra (2)
      • Refactoring (1)
      • Plugin (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    제로베이스
    spring boot
    개발자
    자바 스프링
    개발자 비전공자
    프론트엔드 개발자
    개발자 부트캠프
    백엔드 개발자
    트리 자료구조
    springboot
    자바 알고리즘
    코딩테스트
    자바 메소드
    개발자 국비
    자바 스프링부트
    프로그래머스
    자바 클래스
    자바
    백준
    스프링부트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JAVALA
JAVA Spring 프레임워크 란?
상단으로

티스토리툴바