Notice
Recent Posts
Recent Comments
07-05 02:38
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

Byeol Lo

1. Introduction to Spring Framework 본문

BackEnd/Spring

1. Introduction to Spring Framework

알 수 없는 사용자 2024. 6. 30. 00:16

https://docs.spring.io/spring-framework/docs/3.0.x/spring-framework-reference/html/index.html

 

Reference Documentation

Copyright © 2004-2010 Rod Johnson, Juergen Hoeller, Keith Donald, Colin Sampaleanu, Rob Harrop, Alef Arendsen, Thomas Risberg, Darren Davison, Dmitriy Kopylenko, Mark Pollack, Thierry Templier, Erwin Vervaet, Portia Tung, Ben Hale, Adrian Colyer, John Lew

docs.spring.io

 스프링는 자바를 사용하여 동적인 웹사이트를 개발하기 위한 여러가지 서비스를 담아놓은 프레임워크(소프트웨어, 서비스 개발 등을 위한 구조, 틀을 제공하는 액자, 청사진)이다. 22년 11월 기준 6.0 버전까지 나왔다.

 Spring은 기본적으로 웹 혹은 기업용 애플리케이션을 구축하기 위한 경량 솔루션으로 소개되며, 잠재적으로 모든 필요한 도구와 기능을 한 곳에서 제공하고, 모듈식이기 때문에 필요한 기능들만 불러와서 사용이 가능하다. Spring Framework는 Declarative Transaction Management, RMI나 웹 서비스를 통한 원격 액세스, 다양한 데이터 액세스 옵션을 지원한다. 또한 모든 기능을 갖춘 MVC 프레임워크를 제공하며 AOP를 소프트웨어에 투명하게 통합할 수 있다.

Declarative: 명시적으로 동작이나 기능을 선언하거나 정의하는 스타일
Aspect-Oriented Programming: 관점 지향 프로그래밍이라고 하며, 소프트웨어 개발에서 주요 기능(주관점)과 부가적인 기능(관점) 을 분리하여 코드를 모듈화하는 프로그래밍 패러다임 [AOP 글 참조]

 Spring은 Non-intrusive하게 설계되었기 때문에 도메인 로직 코드가 일반적으로 Spring 프레임워크에 종속되지 않는다. Integration Layer(예: Data Access Layer)에서는 데이터 액세스 기술과 Spring 라이브러리에 대한 일부 종속성이 존재하지만, 이 종속성을 나머지 코드 베이스에서 쉽게 분리할 수 있다.

 다음은 본론에 들어가기 전에 알아야 할 개념들을 설명한다.

 

SOLID

2024.06.11 - [BackEnd/Design Pattern] - SOLID

 

SOLID

객체 지향을 위한 설계에서 빼놓을 수 없는 설계 방식이다.Single Reponsibility Principle (SRP): 단일 책임 원칙Open/Closed Principle (OCP): 개방 폐쇄의 원칙Liskov Substitution Principle (LSP): 리스코프 치환 원칙Inter

seonghun120614.tistory.com

 

Singleton Pattern

2024.06.29 - [BackEnd/Design Pattern] - Singleton

 

Singleton

하나의 클래스는 오직 하나의 인스턴스만을 생성해야 한다.  장점으로는 하나의 인스턴스를 기반으로 공유를 한다면 생성 비용도 줄며, 메모리를 공유할 수 있지만, 단점으로는 의존성이 높아

seonghun120614.tistory.com

 

Factory Pattern

2024.06.30 - [BackEnd/Design Pattern] - Factory

 

Factory

객체 생성을 캡슐화하고, 클라이언트 코드로부터 객체의 생성 로직을 분리하자  객체 생성을 직접 하지 않고, 객체 생성을 담당하고 관리하는 별도의 팩토리 클래스에게 이 일을 위임시켜서

seonghun120614.tistory.com

 

Plain Old Java Objects(POJO)

 기본적으로 자바에 있는 순수 자바 객체를 의미한다. 자바 개발에서 특정 제한이나 조건 없이 순수하게 데이터를 표현하는 클래스를 가르키는 용어이다.

Ex 1)

public class User {
    private Long id;
    private String username;
    private String email;
    
    // 생성자, getter, setter 등 필요한 메서드들
}

Ex 2)

public class Product {
    private Long id;
    private String name;
    private BigDecimal price;
    
    // 생성자, getter, setter 등 필요한 메서드들
}

Ex 3)

public class Order {
    private Long orderId;
    private List<Product> products;
    private User user;
    private LocalDateTime orderDate;
    
    // 생성자, getter, setter 등 필요한 메서드들
}

POJO에서 어플리케이션을 구축하고 엔터프라이스 서비스를 Non-intrusive하게 적용할 수 있다. Spring의 장점으로는 다음과 같다.

Non-intrusive: 특정 기술이나 프레임워크를 사용하여 코드를 작성할 때, 기존 코드에 최소한의 변화나 영향을 미치도록 설계하는 것을 의미.
  • Transaction API 를 사용하지 않고도 Java 메서드를 실행해서 트랜잭션을 처리할 수 있음
  • 로컬에서 정의된 Java 메서드를 원격에서 호출할 수 있는 원격 프로시저로 만들 수 있음
  • JMX(Java Management Extensions) API 를 통해 관리 작업을 정의하고 실행할 필요 없이, 로컬 Java 메서드를 관리 작업으로 활용할 수 있음
  • JMS(Java Message Service) API를 처리할 필요 없이 로컬 Java 메서드를 메시지 핸들러로 만들 수 있음

 즉, 다양한 기술들이나 API들을 사용하지 않아도 Java 메서드를 활용할 수 있다면 트랜잭션 처리, 원격 호출, 관리 작업, 메시지 핸들링 등을 수행할 수 있다는 것이며 모든 것은 개발자의 편의를 위해 존재하게 되는 기능들이다.

 

Applet

 애플릿(Applet)은 자바 프로그램의 일종으로, 웹 브라우저 내에서 실행되도록 설계된 작은 애플리케이션을 말한다. 자바 애플릿은 주로 웹 페이지에 포함되어 사용자의 컴퓨터에서 실행된다.

  • 웹 브라우저에서 실행: 애플릿은 HTML 페이지에 포함되어 웹 브라우저 내에서 실행됨.
  • 제한된 권한: 보안상의 이유로, 로컬 시스템 자원에 대한 접근이 제한됨. 예를 들어, 파일 시스템에 접근하거나 네트워크 연결을 설정하는 등의 작업은 제한적이라는 뜻이다.
  • 간단한 GUI 구성: 그래픽 사용자 인터페이스(GUI)를 제공
  • 라이프사이클 관리: 특정 라이프사이클 메서드(init, start, stop, destroy)를 통해 생명주기를 관리하며, 브라우저가 애플릿을 초기화하거나 중지할 때 이 메서드들이 호출된다.

 애플릿은 동적인 콘텐츠를 제공하는 용도로 많이 사용되었지만, 보안 및 호환성 문제로 인해 현대 웹에서는 더이상 지원을 하지 않는다.

import java.applet.Applet;
import java.awt.Graphics;

public class HelloWorldApplet extends Applet {
    public void paint(Graphics g) {
        g.drawString("Hello, World!", 20, 20);
    }
}

 

Java Package

  • java.util: 컬렉션 프레임워크, 유틸리티 클래스들이 있다.
  • java.io 및 java.nio: 파일 입출력을 담당하도 있다
  • java.sql: 데이터베이스와 연동하기 위한 기본 라이브러리이다

 

Java Build Tools

 자바에는 보통 Maven, Gradle과 같은 빌드 도구를 사용하는데, Gradle을 요즘 많이 사용하고 있는 추세이다. Maven은 XML을 사용하여 프로젝트의 빌드 구성을 정의하고, pom.xml 파일에 프로젝트의 의존성, 빌드 설정, 플로그인 등을 기술하게 된다. 반면에, Gradle은 Groovy 또는 Kotlin DSL(도메인 특화 언어)를 사용하여 빌드 스크립트를 자성하며, build.gradle 파일 및 build.gradle.kts 파일에 프로젝트 configuration들을 정의하게 된다. 스크립트 기반으로 되어 있어서 Maven 보다 유연하며, 빌드 캐시, 증분 빌드, 병렬 빌드 기능을 지원하기 때문에 빌드 성능이 Maven 보다 빠르다.

 

Gradle

gradle은 groovy라는 스크립트 언어를 사용해서 다양한 블록(block)을 사용하여 빌드 스크립트를 넣어서, 이를 통해 프로젝트의 빌드 과정을 정의하고 관리한다.

plugins {
    id 'java'
    id 'application'
}

group 'com.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    implementation 'org.springframework:spring-core:5.3.8'
    testImplementation 'junit:junit:4.13.2'
}

application {
    mainClassName = 'com.example.Main'
}


tasks.register('hello') {
    doLast {
        println 'Hello, World!'
    }
}

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.5.4'
    }
}

sourceSets {
    main {
        java {
            srcDirs = ['src/main/java', 'src/shared/java']
        }
    }
}

configurations {
    myCustomConfig
}

dependencies {
    myCustomConfig 'org.apache.commons:commons-lang3:3.12.0'
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

version = '1.0.0'
group = 'com.example'

위 블록 부터 순서대로 설명하자면,

  • plugins 블록: 프로젝트에서 사용할 플로글인을 선언한다. Gradle의 기능을 확장하거나 특정 작업을 수행하도록 할 수 있다.
  • repositories 블록: 프로젝트의 의존성을 다운로드할 저장소를 정의한다. 주로 Maven Central, JCenter, Google 등의 저장소가 사용된다.
  • dependencies 블록: 프로젝트가 필요로 하는 외부 라이브러리나 모듈을 선언한다. 각 의존성은 프로젝트의 컴파일, 실행, 테스트에서 사용되어진다.
    • implementation: 컴파일 및 실행 시 필요한 의존성을 선언
    • testImplementation: 테스트 시에만 필요한 의존성을 선언
  • application 블록: 어플리케이션 플러그인을 사용할 때 어플리케이션의 실행 구성을 정의한다.
  • tasks 블록: 사용자 정의 작업을 선언하는 곳이다. Gradle에서 실행할 수 있는 작업을 작성할 때 사용한다.
  • buildscipt 블록: 빌드 스크립트 자체가 필요로 하는 의존성을 선언한다. 주로 플러그인 클래스 경로를 설정할 때 사용한다.
  • sourceSets 블록: 소스 코드와 관련된 설정을 정의한다. 추가 소스 디렉토리를 지정하거나 자주 사용하는 디렉토리를 설정할 수 있다.
  • configurations 블록: 의존성의 범위를 정의한다. 커스텀 의존성을 만들고자 할 때 사용한다.
  • extensions 블록: 플러그인에서 제공하는 확장 기능을 설정한다.
  • properties 블록: 프로젝트의 메타 데이터를 설정한다.

 

추후에 Gradle은 따로 정리한 글을 쓰겠습니다.

Comments