개발자 끄적끄적
Spring Boot 본문
<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 |