너무너무 멋져 눈이눈이 부셔

스프링부트 기본 개념(프로젝트 시작하기) 본문

Spring Boot/개념 정리

스프링부트 기본 개념(프로젝트 시작하기)

강하다이녀석 2023. 8. 13. 00:10
  • 신선영 님의 “스프링 부트3 백엔드 개발자 되기” 책을 바탕으로 공부한 내용입니다.

기본 지식

  • ORM: 객체와 데이터베이스의 관계를 자동으로 매핑(연결)해주는 도구
  • JPA:
    • 자바에서 RDB를 사용하는 방식을 정의한 인터페이스
  • 사용언어: Java
    • 자바 애너테이션: 자바로 작성한 코드에 추가하는 표식 →보통 데이터에 대한 설명을 담고 있는 데이터(메타 데이터) 역할.
    • @Override: 선언 메서드가 오버라이드 되었음.
    • @Deprecated : 더이상 사용되지 않음
    • @SuppressWarning : 컴파일 경고를 무시함

스프링이 돌아가는 원리

제어의 역전과 의존성 주입

  • 제어의 역전 IOC
    • 객체의 생성과 관리를 개발자가 하는 것이 아니라 “프레임 워크”가 대신하는 것.
public class A {
	private B b;
}
  • DI(의존성 주입)
    • 제어의 역전을 위해 사용하는 방법. 어떤 클래스가 다른 클래스에 의존한다는 뜻.
    • 외부에서 객체를 주입받아 사용.
public class A{
	//A에서 B를 주입받음
 @Autowired //에너테이션: 스프링 컨테이너에 있는 빈(스프링 컨테이너에서 관리하는 객체)을 주입하는 역할
	B b;
} 
// 스프링 컨테이너 B가 객체를 만들어서 클래스 A에 줌. 
  • 스프링 컨테이너
    • 빈이 생성되고 소멸되기 까지의 생명주기를 관리.
    • 애너테이션을 사용해 빈을 주입받을 수 있게 DI를 지원.
    • 스프링에서 제공해주는 객체라고 생각하면 됨.
  • // 빈 등록 @Component public class Mybean{ }
  • 관점 지향 프로그래밍(AOP)
    • 프로그래밍에 대한 관심을 핵심관점, 부가관점으로 나누어서 관심 기준으로 모듈화하는 것을 의미.
    • ex) 계좌 이체/고객관리→ 핵심 관점 / 로깅, 데이터 베이스 연결→ 부가 관점
    • 부가 관점 코드를 모듈화 해서 개발할 수 있게 함. → 부가 관점 코드를 핵심 관점 코드에서 분리할 수 있음.
  • 이식 가능한 서비스 추상화. (PSA)
    • WAS란? : Web Application Sever (웹서버도 개념적으로 포함될 수 있음)
      • 동적인 로직을 처리해주는 어플리케이션 서버.
    • 스프링에서 제공하는 다양한 기술을 추상화 해서 어느 기술을 사용하던 일관된 방식으로 처리하도록 하는 것.
    • 데이터 베이스에 접근할 때 JPA, MyBatis…뭘 쓰든 일관된 방식으로 데이터베이스에 접근하도록 인터페이스를 지원.
    • WAS를 톰캣이 아닌 언더토우, 네티와 같은 다른 곳에서 실행해도
  • 스프링의 경우 라이브러리 추가, 의존성 설정, 설정파일 등이 불편
  • 스프링부트는 스프링을 기반으로 하는, 바로 출시할 수 있는 수준의 실행가능한, 단독 실행형 어플리케이션을 만듦.
  • WAS에 배포하지 않고도 실행할 수 있는 JAR(자바 아카이브) 파일로 웹 어츨리케이션을 개발할 수 있다.

스프링부트 스타터

spring-boot-starter-web: MVC이용해서  RESTful 웹서비스 개발할 때
-test :테스트
-validation : 유효성 검사
-actuator : 모니터링
-data-jpa : JPA 쓸 때

라이브러리 살펴보기

  • Gradle 의존성에 의해 필요한 라이브러리를 다 땡겨옴.
  •  

의존관계

 

*은 중복제거

tomcat(웹서버 내장 해줌. 자바 메인메서드만 실행해보 웹서버가 뜬다)

Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 한다. 스프링 부트 라이브러리

spring-boot-starter-web
spring-boot-starter-tomcat: 톰캣 (웹서버)
spring-webmvc: 스프링 웹 MVC
spring-boot-starter-thymeleaf: 타임리프 템플릿 엔진(View)
spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅
spring-boot
spring-core
spring-boot-starter-logging
logback, slf4j

테스트 라이브러리
spring-boot-starter-test
junit: 테스트 프레임워크
mockito: 목 라이브러리
assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
spring-test: 스프링 통합 테스트 지원
  • 의존성 확인 : 의존성 클릭한 다음 build.gradle 파일 확인하면 됨

자바 버전 (2는 자바 8이상, 3은 17이상)

  • “””로 감싼 텍스트를 사용하여 여러 줄 표시 가능
  • formatted()메서드
  • 레코드 : 데이터 전달을 목적으로 하는 객체를 더 빠르고 간편하게 만들기 위한 기능.
    • 상속 x , private final로 정의. getter 자동으로 만듦.
  • 패턴 매칭
  • switch-case문
  • 패키지 네임스페이스가 jakarta.*로 변경.

 

시작

build system

  • 소스 코드를 이용해서 실행 가능한 어플리케이션을 생성하는 과정을 자동화하는 프로그램.(의존성 내려받기, 코드 패키징, 컴파일, 테스트 실행 등)
  • Maven, Gadle: 요새는 Gradle 씀.
    • 가독성이 좋고 설정 간단, 다양한 언어 지원, 빌드-테스트 속도가 더 빠름.

구조 살펴보기

  • 각 계층(각 역할과 책임이 씨는 어떤 소프트웨어의 구성 요소)이 양 옆의 계층과 통신하는 구조. ← 소통은 하지만 직접 영향x

https://javasterling.com/spring-boot/spring-boot-architecture/

  • 프레젠테이션 계층
    • HTTP 요청을 받고 이 요청을 비즈니스 계층으로 전송.
  • 비즈니스 계층
    • 모든 비즈니스 로직 처리.(서비스를 만들기 위한 로직)
  • 퍼시스턴스 계층
    • 모든 DB관련 로직

프로젝트 구조

    • src 의 main 의 java: 실제 패키지랑 소스들
    • resource: 자바 파일 제외 나머지 설정들
    • 구조main: 실제 코드 작성

  • application.yml은 스프링 부트 서버가 실행되면 자동으로 로딩되는 파일. (DB 설정 정보, 로깅 설정 정보 등이 들어갈 수 있음)
  • test: 테스트 코드
  • build.gradle : 빌드 설정. 버전 설정, 의존성, 플러그인 설정 등
  • settings.gradle : 빌드 할 프로젝트의 정보 설정.

build.gradle

  • dependences : add했던거
  • testImplementation:테스트 라이브러리

mavenCentral()에서 라이브러리 받아라.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    runtimeOnly 'com.h2database:h2' //인메모리 데이터베이스
    compileOnly 'org.projectlombok:lombok' //롬복
    annotationProcessor 'org.projectlombok:lombok'
}