본문 바로가기

SpringBoot

SpringBoot 용어 및 기분 구조

반응형

1. Spring vs SpringBoot

1) Spring FrameWork 스프링(Spring)은 자바 기반의 오픈 소스 프레임워크로, 엔터프라이즈급 애플리케이션을 개발하기 위한 다양한 기능을 제공한다. 스프링은 IoC (Inversion of Control, 제어의 역전)과 AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍)를 기반으로 하며, 객체 지향 개발을 강조하고, 모듈성, 확장성, 유연성, 테스트 용이성 등을 갖춘 애플리케이션 개발을 위한 프레임워크이다.

2) SpringBoot FrameWork 스프링 부트(Spring Boot)는 스프링을 사용하는 애플리케이션을 보다 쉽게 개발할 수 있도록 지원하는 프로젝트이다. 스프링 부트는 스프링 기반의 애플리케이션을 개발할 때, 설정이나 빌드 과정 등을 자동화하여 개발자가 직접 처리할 필요 없이 보다 빠르고 편리하게 개발할 수 있도록 지원한다.

또한, 스프링 부트는 내장형 서버(Tomcat, Jetty 등)를 지원하여 애플리케이션을 간단하게 실행할 수 있으며, Spring Data, Spring Security, Spring Batch 등 스프링 생태계의 다양한 모듈을 쉽게 사용할 수 있다. 스프링 부트는 스프링을 기반으로 하지만, 스프링보다는 개발 생산성 측면에서 더 강조된다.

SprigBoot FrameWork 주요 기능>

  • Build Web
  • including RESTful
  • applications using Spring MVC
  • Uses Apache Tomcat as the default embedded container

2. Spring Boot(Spring) 특징

1) Bean 정의 스프링은 빈(Bean)을 정의하여 객체들의 생명주기를 관리한다.

빈은 스프링 컨테이너에 의해 생성되고 관리되는 객체로, 스프링 컨테이너는 빈의 라이프사이클, 의존성 관리 등을 담당한다. 빈은 XML, 자바 어노테이션, 자바 설정 파일 등을 통해 정의될 수 있다.

2) IoC 컨테이너 스프링의 핵심 기능 중 하나인 IoC 컨테이너는 빈의 생성, 관리, 의존성 주입 등을 담당한다.

개발자는 빈을 직접 생성하는 대신, 스프링 컨테이너에 빈의 생성과 관리를 위임할 수 있다. IoC 컨테이너는 빈의 라이프사이클을 관리하고, 필요에 따라 빈을 생성하거나 소멸시키며, 의존성을 주입하여 빈들 간의 관계를 관리한다.

*IoC(Inversion of Control) 스프링에서는 IoC(Inversion of Control)라는 개념을 도입하여 객체를 생성하고, 필요한 의존 객체를 주입하는 방식을 사용한다. 이 방식에서는 객체 생성과 의존 객체 주입의 제어권이 개발자가 아닌 스프링 프레임워크에게 넘어가기 때문에, IoC라고 부른다.

3) 의존성 주입(Dependency Injection) 스프링은 빈들 간의 의존성을 관리하기 위해 의존성 주입(Dependency Injection) 기능을 제공한다.

DI는 주로 @Autowired 어노테이션을 이용하여 구현한다. @Autowired 어노테이션은 필요한 의존 객체를 자동으로 주입해주는 기능을 한다. 예를 들어, @Autowired 어노테이션을 사용하여 UserRepository 인터페이스를 구현한 객체를 주입받아 사용할 수 있다.

이를 통해 개발자는 빈을 직접 생성하거나 관리하지 않고, 스프링 컨테이너가 자동으로 의존성을 주입하여 빈들 간의 관계를 해결한다. 이를 통해 빈들 간의 의존성을 느슨하게 결합하고, 코드의 재사용성과 테스트 용이성을 높일 수 있다.

쉽게 해석하면, 생성자나 Setter를 사용하여 필드를 초기화하던 작업을 의존성을 주입한다고 이해할 수 있다. 이러한 행위를 스프링에서는 @Autowired 어노테이션을 이용하여 편리하게 의존성을 주입할 수 있다.

4) AOP (Aspect-Oriented Programming) 스프링은 AOP를 지원하여 애플리케이션의 여러 모듈에서 공통적으로 발생하는 횡단 관심사(Cross-cutting Concerns)를 분리하여 관리할 수 있다.

AOP는 메소드 실행, 예외 처리, 트랜잭션 관리 등과 같은 횡단 관심사를 모듈화하여 재사용성을 높이고 중복 코드를 줄이는 등의 이점을 제공한다. 스프링은 AOP를 통해 횡단 관심사를 별도의 모듈로 분리하여 적용할 수 있도록 지원한다.

5) 이벤트 리스너 (Event Listener) 스프링은 이벤트와 리스너를 통한 이벤트 기반의 프로그래밍을 지원한다.

이벤트는 애플리케이션 내에서 발생하는 상황을 나타내며, 리스너는 이벤트를 감지하여 특정 로직을 실행하는 역할을 담당한다. 스프링의 이벤트 리스너를 활용하면 애플리케이션의 다양한 이벤트에 대한 처리를 유연하게 구현할 수 있다.

6) 스프링 MVC (Model-View-Controller) 스프링은 웹 애플리케이션 개발을 위한 MVC 아키텍처를 제공한다.

MVC는 모델(Model), 뷰(View), 컨트롤러(Controller)로 구성되며, 웹 요청을 처리하고 응답을 생성하는 역할을 수행한다. 스프링 MVC는 빠르고 확장 가능한 웹 애플리케이션을 개발하기 위한 다양한 기능과 설정 옵션을 제공한다.

7) 데이터 액세스 스프링은 데이터베이스 액세스를 위한 다양한 기술과 API를 제공한다.

JDBC, JPA, MyBatis, Hibernate 등의 데이터 액세스 기술을 통해 데이터베이스와의 연동을 간편하게 처리할 수 있다. 또한 트랜잭션 관리, 데이터베이스 연결 풀링, 캐싱 등의 고급 기능도 제공한다.

8) 보안 스프링은 애플리케이션의 보안을 위한 다양한 기능을 제공한다.

인증(Authentication), 인가(Authorization), CSRF(Cross-Site Request Forgery) 방어, XSS(Cross-Site Scripting) 방어 등의 보안 기능을 제공하여 애플리케이션의 보안을 강화할 수 있다.

3. SpringBoot 실행

package test.day02;

// 클래스명 첫글자는 무조건 대문자 설정!
// 변수, 객체명, 함수명은 카멜표기법 기반!
// 패키지, URL은 소문자로 기입!
// Spring 실행클래스는 이 외 다른 클래스(MVC)보다 상위에 존재해야만 실행됨!

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringStart {
    public static void main(String[] args) {
        SpringApplication.run(SpringStart.class);
    }
}

 

4. SpirngBoot 사용을 위한 기본 세팅 [IntelliJ 무료 사용 기반]

아래 설정으로 build.gradle 등록

  1. Project: Gradle - Groovy
  2. Language: Java
  3. Spring Boot version: 2.7.10
  4. Java version: 8

5. build.gradle 기본 세팅

plugins { // 연결고리
    id 'java' // Java 연결
    id 'org.springframework.boot' version '2.7.10' // springframework.boot 연결
    id 'io.spring.dependency-management' version '1.0.15.RELEASE' // spring.dependency-management 연결
}

group = 'com.example' //artifact(애플리케이션) 배포에 사용
version = '0.0.1-SNAPSHOT' // project version
sourceCompatibility = '1.8' // java version

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories { // gradle이 라이브러리 다운로드 하는 곳
    mavenCentral()
}

// 프로젝트에서 사용할 라이브러리 명시하면 gradle이 repositories에서 라이브러리 다운 및 설치 진행
dependencies { 
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.mysql:mysql-connector-j'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') { // 단위 테스트 실행
    useJUnitPlatform()
}

6. application.properties 기본 세팅

💡 application.properties 미설정 오류(내용: DB연동 실패)

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class

Consider the following: If you want an embedded database (H2, HSQL or Derby), please put it on the classpath. If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

</aside>


# 해결방벙: resources에 File 생성(File name: application.properties)
# = 뒤에 띄어쓰기 사용 X (띄어쓰기도 유효자리로 인식함)

# application.properties 스프링 프로젝트의 설정 파일

# 스트링부트 내장톰캣 (기본값: 8080)
# 주의사항: Eclipse랑 동시사용 불가 (종료하고 사용하기)
server.port =8080

# DB 연결 (사용할 DB 정의, 주소 입력, name 및 password 입력)
spring.datasource.driverClassName =com.mysql.cj.jdbc.Driver
spring.datasource.url =jdbc:mysql://localhost:3306/springweb
spring.datasource.username =root
spring.datasource.password =1234

# JPA 관련 설정
# 1. JPA 실행 시 자동으로, 테이블 생성 [create 1회 사용 후 주석처리 => 이후 update 사용]
spring.jpa.hibernate.ddl-auto = create
#spring.jpa.hibernate.ddl-auto = update
# 2. JPA가 자동으로 작성한 SQL console 출력하도록 설정
spring.jpa.properties.hibernate.show_sql = true
spring.jpa.properties.hibernate.format_sql = true

7. Layered Architecture (MVC Model)

Spring Boot Layered Architecture (detail)

8. Basic File Structure

Spring Basic File Structure

9. Taland API Tester: API 테스트 도구

chrome-extension://aejoelaoggembcahagimdiliamlcdmfm/index.html#requests

 

반응형