너무너무 멋져 눈이눈이 부셔
스프링부트 기본 개념(프로젝트 시작하기) 본문
- 신선영 님의 “스프링 부트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란? : Web Application Sever (웹서버도 개념적으로 포함될 수 있음)
- 스프링의 경우 라이브러리 추가, 의존성 설정, 설정파일 등이 불편
- 스프링부트는 스프링을 기반으로 하는, 바로 출시할 수 있는 수준의 실행가능한, 단독 실행형 어플리케이션을 만듦.
- 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'
}
'Spring Boot > 개념 정리' 카테고리의 다른 글
스프링부트 객체 지향 설계(2)_ 회원가입 예제 (0) | 2023.09.03 |
---|---|
스프링부트 - 객체 지향 설계란 (1) | 2023.09.03 |