개발자 끄적끄적

Spring Boot 본문

웹프레임워크

Spring Boot

햏치 2024. 5. 16. 17:13

<Spring Boot>
- 스프링으로 애플레케이션을 만들 때에 필요한 '설정'을 '간편하게' 처리해주는 별도의 프레임워크
- '자체적인 웹 서버'를 내장하고 있어(=No need to install a separately) 빠르고 간편하게 배포 진행 가능
- 독립적으로 실행 가능한 Jar 파일로 프로젝트를 빌드할 수 있어(Perfom auto-configuration based on props files and JAR classpath), 클라우드 서비스 및 도커와 같은 가상화 환경에 빠르게 배포 가능
- ex) 예를 들어 쿠키나 세션 처리, 로그인/로그아웃 처리, 권한 처리, 데이터베이스 처리 등 웹 프로그램을 완성하기 위해 만들어야 할 기능이 정말 산더미처럼 많다. 하지만 웹 프레임워크를 사용하면 이런 기능들을 여러분이 일일이 만들 필요가 없다. 왜냐하면 웹 프레임워크에는 그런 기능들이 이미 만들어져 있기 때문이다. 그저 웹 프레임워크에 있는 기능을 익혀서 사용하기만 하면 된다. 쉽게 말해 웹 프레임워크는 웹 프로그램을 만들기 위한 스타터 키트라고 생각하면 된다. 그리고 자바로 만든 웹 프레임워크 중 하나가 바로 스프링 부트이다.






<Spring Boot 특징>
1. 간결한 설정
- Dependency의 버전을 넣을 필요가 없다 
  - spring-boot-starter-parent의 dependency에서 자동으로 설정
- XML 설정이 필요 없다

2. 내장 서버
- 내장 Tomcat, Jetty, Undertow를 제공하여 별도의 서버 설정 없이 애플리케이션을 실행 가능
- 배포을 위해 War 파일을 생성해서 Tomcat에 배포할 필요가 없고, JAR 파일에는 모든 의존성 라이브러리가 포함되어 있어 외부 서버 없이도 애플리케이션 실행 가능

3. 의존성 관리 간호솨
- 'starter' 의존성 통합 모듈을 제공하여 Maven/Gradel 설정 시 버전 관리가 간편하다

4. 운영 편의성
- 애플리케이션 상태 모니터링, 로깅, 보안, 설정 등 운영에 필요한 기능을 제공







<배포(Deploy)>
client - 개발용 로컬 서버 -> Production Server(On-Premise(회사 자체의 서버), Cloud)

배포 방법 : jar packaging 
  Terminal에서 
    - Windows환경 : mvnw.cmd 
    - Linux, MAC 환경 : mvnw
*w : 'wrapper'의 약자
*mvn : 'maven'의 약자







<SpringBoot Actuator>
- Spring Actuator는 스프링 부트가 제공하는 기능으로 지표 수집, 추적, 감사 등의 모니터링을 쉽게 할 수 있는 다양한 편의 기능을 제공한다
- 스프링 부트 애플리케이션에 액추에이터를 활성화하려면 의존성을 빌드에 추가
  - ex)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

- REST endpoints는 자동적으로 애플리케이션에 추가
  - actuator endpoints 
    - /beans
    - /mappings
    - ...

- By default, only '/health' is exposed
- Endpoints는 '/actuator'로 고정되있다
  - health endpoint : /actuator/health

*endpoints : 모니터링이나 조작을 할 수 있도록 하는 연결점이다
*endpoints는 사용 여부(enabled/disabled)를 결정할 수 있고 노출 여부(exposed)를 결정할 수 있다

- Endpoint ID(ex: localhost:8080/helloSpringBoot/actuator/○○○)
  - health : 애플리케이션 상태 -> 기본값일 때 '/health'만 노출'
  - beans : 스프링 애플리케이션이 등록된 빈
  - mappings : @RequestMapping이 된 리스트
  - metrixs : 메모리, 스레드 상태 등
  - enx : 현재 환경 설태
  - logger : logger 정보를 보고, logging level 변경도 가능
  - startup/shutdown : 애플리케이션 재기동






<Bean을 생성하고 설정하는 3가지 방법>
1. XML based configuration
- bean이라는 태그를 사용
- property : setter, getter를 통해 의존성 주입이 이루어진다
- ex) 소스코드가 있는 경우 -> Annotation을 달 수 있다
<bean id="userService" class="kr.ac.hansung.myapp.service.UserService"> //UserService는 class이름
<property name="userDao" ref="userDao"/>
</bean>

- ex) 소스코드가 없는 경우 -> Annotation을 달 수 없다
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
    <property name="driverClassName" value="cohttp://m.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test"/>
    <property name="username" value="root"/>
    <property name="password" value="secret"/>
</bean>

2. Annotation based configuration
- ex) 소스코드가 존재할 때 annotation 사용 가능
@Service
public class UserService
{
@Autowired //의존성 주입
private UserDao userDao;
...
{

- ex.1)
@Repository
public class JdbcUserDao
{
@Autowired //의존성 주입
private DataSource dataSource;
...
}

3. Java based configuration
@Configuration //Spring Java-based Configuration
public class AppConfig
{
    @Bean //Registering beans
    public UserService userService(UserDao dao){
        return  new UserService(dao); //리턴하는 객체를 bean으로 등록
    }
    @Bean //Registering beans
     public UserDao userDao(DataSource dataSource){
        return  new JdbcUserDao(dataSource); //bean으로 등록
    }
    @Bean //Registering beans
    public DataSource dataSource(){
        BasicDataSource dataSource = new BasicDataSource();

        dataSource.setDriverClassName("cohttp://m.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test");
        dataSource.setUsername("root");
        dataSource.setPassword("secret");
        return dataSource; //bean으로 등록
    }
}





<Configuring beans>
- @Configuration : Configuration classes라는 것을 알려 줌
  - @Component의 specialized
    - @Controller
    - @Service
    - @Repository
    - @Configuration 

- @Bean
  - @Bean은 객체를 리턴하는데, 반드시 bean으로 등록시켜야한다
  - bean의 메서드 이름은 bean의 ID이다
  - 메서드가 리턴하는 객체가 Spring bean이다

'웹프레임워크' 카테고리의 다른 글

Spring Boots First Application  (0) 2024.05.22
RestAPI와 예외상황 처리  (0) 2024.05.08
RestAPI  (0) 2024.05.01