1. 소개
스프링 부트(Spring Boot)는 Java 기반의 프레임워크로, 빠르고 간편하게 애플리케이션을 개발할 수 있도록 도와줍니다. 본 강좌는 스프링 부트를 사용하여 블로그 웹 애플리케이션을 구축하는 과정에서 필요한 핵심 개념과 기술을 설명합니다. 이 강좌를 통해 데이터베이스와의 연동, REST API 설계, 프론트엔드와의 통신 등의 내용을 다룰 것입니다.
1.1. 강좌 목표
- 스프링 부트의 기본 개념 이해
- RESTful API 설계 및 구현
- JPA를 이용한 데이터베이스 연동 방법 습득
- 스프링 시큐리티를 활용한 사용자 인증 및 권한 관리
- 프론트엔드와의 통신을 통한 기능 구현
2. 환경 설정
스프링 부트 애플리케이션을 개발하기 위해서는 다음과 같은 개발 환경이 필요합니다.
2.1. 필수 요구 사항
- Java 11 이상
- Spring Boot 2.5 이상
- Maven 또는 Gradle (의존성 관리 도구)
- IDE (IntelliJ IDEA, Eclipse 등)
2.2. 개발 환경 구성
다음 단계에 따라 개발 환경을 구성합니다. JAVA JDK를 설치한 후, IDE를 설치하고, 필요한 플러그인과 라이브러리를 추가합니다.
3. 스프링 부트 프로젝트 생성
스프링 부트 프로젝트를 생성하는 방법에는 많은 방법이 있지만, 가장 간단한 방법은 Spring Initializr를 사용하는 것입니다.
3.1. Spring Initializr를 사용하여 프로젝트 생성
- 웹 브라우저에서 Spring Initializr 페이지를 엽니다.
- 프로젝트 메타데이터를 설정합니다.
-
Project
Maven Project 또는 Gradle Project를 선택
-
Language
Java를 선택
-
Spring Boot
최신 안정 버전을 선택
-
Project Metadata
Group과 Artifact를 설정합니다.
-
Dependencies
Web, JPA, H2 Database, Security를 추가합니다.
- Generate 버튼을 클릭하여 프로젝트를 다운로드합니다.
4. 프로젝트 구조 이해
스프링 부트 프로젝트의 구조는 일반적인 Maven 프로젝트와 동일하지만, 스프링 부트의 관습에 따라 약간의 차이가 있습니다. 다음은 기본 프로젝트 구조입니다.
└── demo ├── DemoApplication.java ├── controller ├── model ├── repository └── service
4.1. 주요 패키지 설명
- controller: 웹 요청을 처리하는 컨트롤러 클래스가 위치합니다.
- service: 비즈니스 로직을 구현하는 서비스 클래스가 위치합니다.
- repository: 데이터베이스와의 상호작용을 담당하는 리포지터리 클래스가 위치합니다.
- model: 데이터베이스 엔티티를 정의하는 클래스가 위치합니다.
5. 블로그 도메인 모델 설계
블로그 애플리케이션의 도메인 모델을 정의합니다. 이 모델에는 Post와 User 엔티티가 포함됩니다.
5.1. Post 엔티티
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String content;
@ManyToOne
private User author;
// Getters and Setters
}
5.2. User 엔티티
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
@OneToMany(mappedBy = "author")
private List posts;
// Getters and Setters
}
6. 리포지터리 인터페이스 생성
JPA를 사용하여 데이터베이스에 접근하기 위한 리포지터리 인터페이스를 생성합니다. Spring Data JPA를 사용하면 CRUD 작업을 쉽게 수행할 수 있습니다.
6.1. PostRepository
public interface PostRepository extends JpaRepository {
}
6.2. UserRepository
public interface UserRepository extends JpaRepository {
Optional findByUsername(String username);
}
7. 서비스 구현
서비스 레이어를 구현하여 비즈니스 로직을 처리합니다. 서비스는 리포지터리를 호출하여 DB 작업을 수행하고, 필요한 비즈니스 규칙을 적용합니다.
7.1. PostService
@Service
public class PostService {
@Autowired
private PostRepository postRepository;
public List getAllPosts() {
return postRepository.findAll();
}
public Post createPost(Post post) {
return postRepository.save(post);
}
}
7.2. UserService
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User findUserByUsername(String username) {
return userRepository.findByUsername(username).orElse(null);
}
public User createUser(User user) {
return userRepository.save(user);
}
}
8. 컨트롤러 구현
컨트롤러를 구현하여 사용자 요청을 처리합니다. RESTful 웹 서비스를 설계하여 클라이언트와 서버 간의 통신을 담당합니다.
8.1. PostController
@RestController
@RequestMapping("/api/posts")
public class PostController {
@Autowired
private PostService postService;
@GetMapping
public List getAllPosts() {
return postService.getAllPosts();
}
@PostMapping
public Post createPost(@RequestBody Post post) {
return postService.createPost(post);
}
}
8.2. UserController
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping
public User createUser(@RequestBody User user) {
return userService.createUser(user);
}
@GetMapping("/{username}")
public User getUserByUsername(@PathVariable String username) {
return userService.findUserByUsername(username);
}
}
9. 스프링 시큐리티 설정
사용자 인증 및 권한 관리를 위해 스프링 시큐리티를 설정합니다. 기본적인 시큐리티 설정을 통해 보호할 URL 및 사용자 인증 메커니즘을 설정합니다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/api/users").permitAll()
.anyRequest().authenticated()
.and()
.formLogin();
}
}
10. 애플리케이션 실행 및 테스트
이제 애플리케이션을 실행하고, Postman 등을 사용하여 API를 테스트할 준비가 되었습니다. 각 엔드포인트가 올바르게 작동하는지 확인합니다.
10.1. 애플리케이션 실행
IntelliJ IDEA의 경우, 메인 클래스에서 Run 아이콘을 클릭하여 애플리케이션을 실행하거나, 명령줄에서 다음 명령어로 실행할 수 있습니다.
./mvnw spring-boot:run
10.2. Postman을 통한 테스트
Postman을 사용하여 REST API를 테스트할 수 있습니다. 아래는 몇 가지 기본적인 테스트 예제입니다.
- GET /api/posts: 모든 포스트 가져오기
- POST /api/posts: 새 포스트 생성하기
- GET /api/users/{username}: 특정 사용자 정보 가져오기
- POST /api/users: 새 사용자 생성하기
11. 결론
본 강좌를 통해 스프링 부트를 사용하여 간단한 블로그 애플리케이션을 구축하는 방법을 배웠습니다. 이 예제를 통해 REST API 설계, 데이터베이스 연동, 서비스 및 컨트롤러 구현 등 다양한 주제를 다룰 수 있었습니다. 앞으로는 이와 같은 기초를 기반으로 더 복잡한 애플리케이션을 개발하는 데 도전해 보시기 바랍니다.