하나의 서비스를 제공하기 위해 여러 스프링 관련 프로젝트를 엮어 사용한다!
보통 5가지의 프로젝트를 사용한다
1. 웹 애플리케이션 서버 개발: Spring Boot
내장 웹 서버(예: Tomcat, Jetty)를 제공하여 별도의 WAS(Web Application Server) 설정 없이 애플리케이션을 실행할 수 있다!
"Spring MVC 기반의 웹 애플리케이션"을 쉽게 개발 가능
+ application.properties or application.yml을 활용한 직관적인 설정
+ 자동 설정(Auto Configuration) 기능으로 개발 편의성 증가
보통 선택하는 의존성(dependencies)들로는 다음과 같다
- Spring Web
- Spring Data JPA
- Spring Configuration Processor
- Lombok
- H2 Database
📌 예제 코드
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
위 코드를 실행하면 내장된 Tomcat 서버와 함께 애플리케이션이 동작하게 된다!
누군가에게는 매우 익숙한 코드일 것이다 ;)
2. 클라우드 및 마이크로서비스 컴포넌트 개발: Spring Cloud
✅ 주요 기능
- 서비스 디스커버리: Eureka, Consul 등을 이용한 서비스 등록 및 검색
- API Gateway: Spring Cloud Gateway, Zuul을 이용한 API 요청 관리
- 분산 설정(Configuration Management): Spring Cloud Config를 활용한 환경 설정 관리
- 서킷 브레이커(Circuit Breaker): Resilience4j, Hystrix를 활용한 장애 대응
- 분산 트레이싱: Zipkin, Sleuth를 이용한 로그 및 요청 추적
📌 예제 코드 (Spring Cloud Config)
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
Spring Cloud Config Server를 실행하는 기본적인 코드!
3. 인증 / 보안, Oauth2: Spring Security
✅ 주요 기능
- 세션 기반 인증 및 권한 관리
- OAuth2, JWT 인증 지원
- CSRF, CORS 보호 기능 내장
- Spring Boot와 쉽게 통합 가능
📌 예제 코드 (Spring Security 설정)
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests(auth -> auth
.requestMatchers("/admin/**").hasRole("ADMIN")
.requestMatchers("/user/**").authenticated()
.anyRequest().permitAll()
)
.formLogin();
return http.build();
}
}
위 설정을 적용하면 /admin/** 경로는 관리자만 접근할 수 있고, /user/**는 인증된 사용자만 접근할 수 있다!
4. 데이터베이스 통신: Spring Data
✅ 주요 기능
- JPA(Java Persistence API) 지원
- 자동 CRUD Repository 제공 (JpaRepository 인터페이스 활용)
- MongoDB, Redis 등 NoSQL 데이터베이스 연동 지원
- 데이터 접근 계층의 간소화
📌 예제 코드 (Spring Data JPA)
@Entity
public class User {
@Id @GeneratedValue
private Long id;
private String name;
private String email;
// Getter, Setter 생략
}
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name);
}
위 코드를 사용하면, UserRepository 인터페이스만 선언해도 기본적인 CRUD 메서드를 사용할 수 있다~
5. 대용량 데이터 처리: Spring Batch
✅ 주요 기능
- 대량 데이터 처리 (ETL: Extract, Transform, Load)
- Chunk 기반 데이터 처리
- Job 및 Step 설정 지원
- 스케줄링(Task Scheduling) 기능 제공
📌 예제 코드 (Spring Batch 기본 설정)
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Bean
public Job job(JobRepository jobRepository, Step step) {
return new JobBuilder("exampleJob", jobRepository)
.start(step)
.build();
}
@Bean
public Step step(JobRepository jobRepository) {
return new StepBuilder("exampleStep", jobRepository)
.tasklet((contribution, chunkContext) -> {
System.out.println("Batch Job 실행 중");
return RepeatStatus.FINISHED;
})
.build();
}
}
위 코드는 가장 기본적인 Spring Batch 작업을 정의한 것으로, 실행 시 "Batch Job 실행 중"이 출력된다!!
나에게도 봄이.. 찾아올 날을 기다리며🍃
#SK, #SKALA, #SKALA1기
'프레임워크 > Spring' 카테고리의 다른 글
[Spring] HTTP 통신 흐름 과정 정리(w/MVC 패턴) (2) | 2025.03.19 |
---|---|
[Spring] 롬복(Lombok) 라이브러리 기능 (0) | 2025.02.04 |
[Spring] Maven vs Gradle (4) | 2024.10.06 |
[Spring] Gradle이란? (4) | 2024.10.06 |
[Spring] Maven이란? (3) | 2024.10.06 |