| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- Hexagonal
- Transaction
- hexagonal architecture
- Layered Architecture
- JPA
- Spring
- transactional
- Adapter
- JDBC
- springboot
- 실무
- simplejpaRepository
- Spring Data JPA
- Today
- Total
Ezcho
[Spring] SpringBoot 본문
본문을 시작하기에 앞서 스프링 프레임워크의 주요 특징을 먼저 살펴보자.
1. 스프링 프레임워크의 주요 특징
1. POJO방식(Plain Old Java Object)
JavaEE의 EJB를 사용하면서 해당 플랫폼에 종속된 무거운 객체를 만드는것에 반발하며 나타난 용어
JavaEE의 EJB란 앤터프라이즈 애플리케이션의 비즈니스 로직을 컴포넌트 형태로 개발하고 관리하는데 사용되는 기술
EJB는 다음과 같은 세가지 유형이 있습니다.
1. Session Beans: 세션 빈은 클라이언트 요청에 응답하고, 트랜잭션관리, 보안 및 분산 컴포넌트 간 통신과 같은 기능을 처리
2. Entity Beans: DB엔티티를 표현하고 DB와 상호작용하기 위해 사용됩니다.
3. Message-Driven Beans
2. AOP(관점 지향 프로그래밍)
로깅, 트랜잭션, 보안 등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리
3. DI(의존성 주입)
프로그래밍 구성요소 간의 의존관계가 소스코드 내부가 아닌 외부에서 설정을 통해 정의되는 방식(build.gradle)
4. Ioc(제어역전)
전통적인 프로그래밍에서는 개발자가 작성한 프로그램이 외부 라이브러리의 코드를 호출해서 이용
제어역전은 외부라이브러리에서 개발자의 코드를 호출해서 사용한다. (스프링 프레임워크가 사용자의 코드를 호출)
5. 생명주기 관리
스프링 프레임워크는 Java객체의 생성, 소멸을 직접 관리함
2. SpringBoot
1. SpringBoot 프로젝트 생성과 종속성 추가
SpringBoot 프로젝트 생성과 종속성 추가 Gradle또는 Maven과 같은 빌드 도구를 사용하여 필요한 종속성을 추가.
2. 메인 클래스
Spring부트는 Spring과 다르게 메인클래스가 존재해야합니다. 내부에 main()메서드가 존재합니다.
main()메서드 내부에서는 SpringApplication.run()메서드를 호출해 애플리케이션을 실행합니다.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MainApp {
public static void main(String[] args) {
SpringApplication.run(MainApp.class, args);
}
}
3. application.properties(프로퍼티 설정)
application.properties나 application.yml과 같은 파일을 사용하여 애플리케이션 구성을 설정합니다.
여기서 DB연결정보나 포트설정과 같은 환경변수를 설정할 수 있습니다.
옵션 작성방식은 아래와 같습니다.
key=value
예시
# 서버 포트 설정
server.port=8080
# 데이터베이스 연결 정보 설정
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=secret
# 로깅 설정
logging.level.org.springframework=INFO
logging.level.com.example=DEBUG
프로퍼티를 설정하면 빌드과정에서 이 값들이 직접 확인되는것은 아닙니다. 런타임시에 app이 실행될 때 읽어집니다.
만약 properties에 db관련 설정을 잘못하면 빌드도중에 에러가 나지않나?
Spring Boot에서 데이터베이스 연결은 애플리케이션이 시작될 때 이루어집니다. 따라서 런타임 시에 잘못된 데이터베이스 연결 정보가 있을 때 에러가 발생하며, 이 에러는 애플리케이션을 시작하려고 할 때 발생합니다.
이건 빌드오류가 아니라 런타임 오류임
4. Build
이렇게 정의를하고 빌드를 하면 스프링부트는 아래와 같은 동작과정에 따라 실행됩니다.
1. 프로젝트 설정 및 종속성 정의
pom.xml or build.gradle에서 필요한 설정과 종속성을 정의(사용자가 직접 해야하는부분)
2. 의존성 다운로드
빌드 도구인 Maven이나 Gradle는 프로젝트에서 정의한 종속성을 검색하고 필요한 라이브러리와 jar파일을 다운로드
mvn clean install / gradlew build 명령을 사용해 라이브러리를 로컬 레포지토리에 설치
3. 컴파일과 테스트
빌드 도구는 소스코드를 컴파일하고 테스트를 실행합니다. (build디렉토리 안에 저장됨)
4. 애플리케이션 패키징
이제 프로젝트는 빌드 도구에 의해 패키징되어 실행가능한 Jar, War 파일로 패키징됩니다.
5. 애플레키이션 실행
만들어진 jar파일을 java -jar 과 같은 명령이나 스크립트를 통해 실행될 수 있습니다.
5. IDE의 RUN이란
IDE에서 Run 버튼을 클릭하는것은 전체 빌드과정을 거치는것은 아닌데, 그냥 단순히 Application 을 실행하는것에 해당됩ㄴ디ㅏ.
1. 프로젝트 로딩: IDE에서 프로젝트를 열면 프로젝트의 구조와 설정이 로딩됨
2. 컴파일: IDE는 프로젝트의 Java소스코드를 컴파일하여 클래스 파일을 생성
3. 실행: Run을 클릭하여 SpringApplication 클래스가 실행됨.
4. 애플리케이션 실행 및 테스트: Spring Boot 애플리케이션은 실행 중에 정의된 테스트를 수행하고, 필요한 빈(Bean)을 초기화하며, 설정 파일을 읽고, 요청을 처리합니다.
5. 애플리케이션 실행 결과 확인: IDE에서는 애플리케이션의 로그 및 콘솔 출력을 확인할 수 있으며, 웹 브라우저 또는 API 클라이언트를 통해 애플리케이션의 동작을 확인할 수 있습니다.
즉 패키징 과정이 포함되지않습니다. 개발결과를 빠르게 실행하기위해 사용하는것입니다.
3. POJO방식의 코드작성
일반적으로 SpringBoot에서는 POJO방식의 코드를 작성합니다.EJB <-> POJOPOJO란 Plain Old Java Object 이며 간단히 말해 특정 프레임워크와 라이브러리에 의존하지 않는 일반적인 자바 객체를 나타냅니다.자바 언어의 기본적인 객체지향 원칙에 따라 작성된 객체를 의미합니다.
1. 순수한 자바 클래스: POJO는 Java Class로 특정 프레임워크나 라이브러리에 종속되않는 순수한 자바객체 입니다.
2. 기본적인 데이터와 동작을 가지고있음: POJO는 필드(멤버 변수)와 그에 대한 게터와 세터 메서드를 포함하며, 이를 통해 데이터를 저장하고 접근할 수 있습니다.
3. 컨테이너나 프레임워크에서 독립적: Spring이나 JavaEE와 같은 컨테이너나 프레임워크에 독립적입니다. 이는 POJO를 여러 환경에서 재사용 할 수 있게 하며 테스트와 유지보수및 확장에 용이합니다.
EJB - CalculatorEJB는 EJB로서 @Stateless 어노테이션이 사용되었습니다. 이 클래스는 EJB 컨테이너에서 관리되며, 클라이언트가 이 서비스를 호출할 수 있습니다.
import javax.ejb.Stateless;
@Stateless
public class CalculatorEJB {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
}
POJO - 일반적인 Java 클래스
public class CalculatorPOJO {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
}
EJB는 여전히 특정한 상황에서 유용할 수 있으며, 일부 기업 환경에서는 여전히 사용되고 있습니다. 그러나 현대적인 자바 애플리케이션 개발에서는 더 단순하고 가벼운 컴포넌트 모델과 다양한 프레임워크 및 라이브러리의 활용을 통해 개발 생산성을 향상시키고 더 효과적인 애플리케이션을 개발하는 것이 일반적입니다.
'BE' 카테고리의 다른 글
| 오디오 업로드 데모 API, 이렇게 뚫린다 — 게이트웨이 개발 전략 (0) | 2025.08.27 |
|---|---|
| [Spring] Hexagonal vs Layerd Architecture (1) (1) | 2025.04.16 |