🌱 Spring 구조

    이번에 회사에서 새로운 프로젝트를 진행하는데, 사용하는 프밍 언어가 spring boot 여서 새롭게 공부를 시작하려고 한다!

    프로젝트하기 전에는 사용하려는 프로그래밍 언어에 대해서 파악하고 사용해야한다. (아는 선배가 말해준듯이 ) 

    기본적으로 내가 하는거에 있어서 왜 굳이? 이 언어를 사용해야 하는가는 알아야 하니까 ㅎ

     

    쨋든 그래서 이번 페이지에서. spring boot가 어떤 것이고, spring과 spring boot의 차이점, spring 구조에 대해서 살펴볼 것이다.

     

    • spring boot란?
    • spring boot와 spring의 차이점
    • spring 구조

    🧷 spring boot란?

    Java/Kotlin 기반의 웹 프레임워크로 2003년에  spring이 최초로 공개되었고, 2020년 12월 기준으로 스프링 프레임워크 프로젝트를 간편하게 설정할 수 있도록 도와주는 서브 프로젝트 스프링 부트가 있으며, 현재는 스프링 부트 위주로 기능이 추가되고 있다.!

     

    위에 처럼 말하면 너무 재미없으니 이름의 의미에 대해 알아가며 머리속에 넣어보자 ㅎ

     

    먼저 spring(스프링)이라는 이름의 유래는 이정네 Java EE(엔터프라이즈 에디션)의  스펙을 구현한 EJB가 기술의 복잡도가 증가해서 성능이 느렸던 것을 탎피하여, EJB 시정을 "겨울"에 밋대어 겨울 후의 "봄"으로 새로운 시작한다는 것을 의미하는 스프링(봄)이 되었다. 

     

     

    🧷  spring boot와 spring의 차이점

    매번 spring boot와. spring 의 차이점 이라곤 spring boot가  spring의 업데이트 버전? 더 좋은걸로만 알고 있었지

    자세하게 알아보지 않아서 이번 기회에 알아보려고 한다!

     

    첫 번째 차이점, Dependency

    Spring Framework의 경우 dependency를 설정해줄 때 설정 파일이 매우매우매우 길다.  또한 모든 dependency에 대한 버전관리도 하나하나 해줘야 한다.

    하지만?

    Spring Boot Framwork의 경우 dependency를 Spring Framework보다 쉽게 설정할 수 있고, 자동으로 버전관리도 해준다.

     

     번째 차이점, Configuration 

    Spring Framework의 경우 configuration설정을 할 때도 매우 길고, 모든 어노테이션 및 빈 등등을 설정해 줘야 한다.

    하지만?

    Spring Boot Framwork의 경우 application.properties파일(maven의 경우)이나 application.yml(gradle의 경우)파일에 설정하면 되므로 간편하다.

     

     

    번째 차이점, 편리한 배포 

    Spring Framework로 개발한 애플리케이션의 경우, war파일을 Web Application Server에 담아 배포한다. 

    하지만?

    Spring Boot Framwork의 경우 Tomcatdlsk Jetty같은 내장 WAS를 가지고 있기 때문에 jar 파일로 간현하게 배포할 수 있다. 

    Spring Framwork로 was를 정하고, 모든 설정을 마쳐 배포를 하는 것보다 훨씬 간단한 배포 방법이다.

     

     

     

     

    🧷 spring 구조

     

    위에 그림과 같이 스프링 프레임워크는 총 6개의 모듈도 구성되어 있다.

    Core  모듈

    - spring 프레임워크의 핵심 기능을 제공한다.

    - loc :  inversion of controld의 약자로  스프링에서는 일반적인 Java객체를 new로 생성하여 개발자가 관리하는 것이 아닌, Spring Container에 모두 맡긴다.

    여기서 Container는? 오브젝트의 생성과 관계설정, 사용, 제거 등의 작업을 대신 해준다하여 붙여진 이름이다.

    loC Container에 의해 관리되는 오브젝트들은 Bean 이라고 부른다.

    loC Container는 Bean을 저장한다고 하여, BeanFactory라고도 불린다.

     

    BeanFactory는 하나의 인터페이스이며, Application Context는 BeanFactory의 구현체를 상속받고 있는 인터페이스이다. 

    DAO 모듈

     

    Data Access Object의 약자로, 데이터베이스의 데이터에 접근하기 위해 생성하는 객체이다.

    데이터베이스에 접근하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용한다.

    간단하게, DB에 접속하여 데이터의 CRUD(생성, 읽기, 갱신, 삭제) 작업을 시행하는 클래스이다.

     

    ORM 모듈 

    • Object-Relational Mapping의 약자이며 자바의 객체와 관계형 DB를 맵핑하는 것으로 DB의 특정 테이블이 자바의 객체로 맵핑되어 SQL문을 일일이 작성하지 않고 객체로 구현할 수 있도록 하는 프로임워크이다.
    • 객체지향 언어의 객체와 관계형 데이터베이스의 데이터 사이에서 나타나는 미묘한 차이와 이로 인한 문제들을 극복하기 위해 등장한 개발 방법이다.
    • 객체지향적인 db 개발 방법이라고 말할 수 있다.
    • ORM을 구현한 프레임워크는 상당히 많다.
    • php 기반의 Laravel, python 기반의 Django, java 기반의 Spring 등

    AOP 모듈 

    Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다.

    관점 지향은 쉽게 말해서 어떠한 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다.

     

    모듈화 : 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다.

    예를 들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다.

    부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다.

     

    결국은 각각의 관점을 기준으로 로직을 모듈화 한다는 것은 !!!! -> 코드들을 부분적으로 나누어서 모듈화하겠다는 의미이다. 

     

    이때 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는데 이것을 흩어진 관심사라고 부른다.

     

     

     

    728x90
    반응형

    'Programming Language > JAVA' 카테고리의 다른 글

    📌 Jar 와 War 의 차이점 📌  (0) 2022.10.23

    댓글