본 강좌는 스프링 부트를 이용하여 간단한 블로그를 제작하는 과정을 안내합니다. 스프링 부트는 자바 언어로 개발된 프레임워크로, 쉽고 빠르게 웹 애플리케이션을 구축할 수 있도록 돕습니다. 이 강좌에서는 프로젝트 준비, 데이터베이스 설정, RESTful API 구현, 인증 및 인가, 클라이언트와의 연동 등을 단계별로 다룰 것입니다. 이 글을 통해 스프링 부트의 기초부터 고급 주제까지 폭넓게 배울 수 있습니다.
1. 프로젝트 준비하기
1.1 스프링 부트 소개
스프링 부트는 스프링 프레임워크의 프로젝트 중 하나로, 복잡한 설정 없이 빠르게 애플리케이션을 개발할 수 있게 해줍니다. 스프링 부트의 주요 장점은 다음과 같습니다:
- 변경 관련 복잡성 감소
- 자동 설정 기능을 통한 생산성 증대
- 마이크로서비스 아키텍처에 적합
- 내장 WAS(웹 애플리케이션 서버) 사용
1.2 개발 환경 설정
프로젝트를 시작하기 전에 개발 환경을 설정해야 합니다. 다음과 같은 도구를 설치하세요:
- Java Development Kit (JDK) – Java 11 이상 권장
- IDE – IntelliJ IDEA, Eclipse 또는 Spring Tool Suite
- Gradle 또는 Maven – 의존성 관리를 위한 빌드 도구
- 데이터베이스 – MySQL, PostgreSQL 등
1.3 스프링 부트 프로젝트 생성
스프링 부트 프로젝트를 생성하기 위해 Spring Initializr를 사용할 수 있습니다. 아래의 설정을 사용하여 생성합니다:
- Project: Maven Project
- Language: Java
- Spring Boot: 2.5.x (혹은 최신 버전)
- Group: com.example
- Artifact: blog
- Dependencies: Spring Web, Spring Data JPA, MySQL Driver, Spring Security
생성한 프로젝트를 IDE에서 열면, 기본적인 디렉토리 구조가 생성된 것을 확인할 수 있습니다.
2. 데이터베이스 설정
2.1 MySQL 설치
MySQL을 설치하고 데이터베이스를 생성합니다. 다음 명령어로 데이터베이스를 생성해봅시다:
CREATE DATABASE blogdb;
2.2 application.properties 설정
src/main/resources/application.properties 파일을 열고 데이터베이스 연결 정보를 설정합니다:
spring.datasource.url=jdbc:mysql://localhost:3306/blogdb
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
2.3 JPA 엔티티 생성
다음으로, 블로그의 데이터를 저장할 엔티티 클래스를 생성합니다. 예를 들어, Post 엔티티를 아래와 같이 작성합니다:
package com.example.blog.model;
import javax.persistence.*;
@Entity
@Table(name = "posts")
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String title;
@Column(nullable = false)
private String content;
// Getters and Setters
}
3. RESTful API 구현
3.1 컨트롤러 클래스 정의
블로그 포스트를 관리할 API를 만들기 위해 PostController 클래스를 작성합니다:
package com.example.blog.controller;
import com.example.blog.model.Post;
import com.example.blog.repository.PostRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/posts")
public class PostController {
@Autowired
private PostRepository postRepository;
@GetMapping
public List getAllPosts() {
return postRepository.findAll();
}
@PostMapping
public Post createPost(@RequestBody Post post) {
return postRepository.save(post);
}
@GetMapping("/{id}")
public ResponseEntity getPostById(@PathVariable Long id) {
Post post = postRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("Post not found with id " + id));
return ResponseEntity.ok(post);
}
@PutMapping("/{id}")
public ResponseEntity updatePost(@PathVariable Long id, @RequestBody Post postDetails) {
Post post = postRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("Post not found with id " + id));
post.setTitle(postDetails.getTitle());
post.setContent(postDetails.getContent());
Post updatedPost = postRepository.save(post);
return ResponseEntity.ok(updatedPost);
}
@DeleteMapping("/{id}")
public ResponseEntity deletePost(@PathVariable Long id) {
Post post = postRepository.findById(id)
.orElseThrow(() -> new ResourceNotFoundException("Post not found with id " + id));
postRepository.delete(post);
return ResponseEntity.noContent().build();
}
}
3.2 리포지토리 생성
Spring Data JPA를 사용하여 데이터베이스에 접근할 리포지토리를 생성합니다:
package com.example.blog.repository;
import com.example.blog.model.Post;
import org.springframework.data.jpa.repository.JpaRepository;
public interface PostRepository extends JpaRepository {
}
4. 인증 및 인가
4.1 Spring Security 설정
블로그 애플리케이션에 기본적인 인증 기능을 추가하기 위해 Spring Security를 설정합니다. WebSecurityConfig 클래스를 생성하고 아래와 같이 설정합니다:
package com.example.blog.config;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("/api/posts/**").authenticated()
.and()
.httpBasic();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
5. 클라이언트와의 연동
백엔드 API와 클라이언트 애플리케이션을 연동하여 블로그 애플리케이션을 완성합니다. React, Vue, Angular 등 다양한 프론트엔드 프레임워크를 사용하여 API와 데이터를 주고받을 수 있습니다. 다음은 Axios를 이용하여 프론트엔드에서 백엔드 API를 호출하는 예입니다:
import axios from 'axios';
const API_URL = 'http://localhost:8080/api/posts';
export const fetchPosts = async () => {
const response = await axios.get(API_URL, {
auth: {
username: 'user',
password: 'password'
}
});
return response.data;
};
// 다른 CRUD 함수 구현
6. 결론
이 강좌에서는 스프링 부트를 사용하여 기본적인 블로그 애플리케이션을 제작하는 과정을 살펴보았습니다. 프로젝트 준비부터 데이터베이스 설정, RESTful API 구현, 인증 및 인가, 클라이언트와의 연동까지 다양한 주제를 다루었습니다. 다양한 기술을 활용하여 자신만의 블로그를 만들 수 있도록 경험을 쌓기를 바랍니다.
추가적으로, 스프링 부트와 관련된 다양한 자료와 커뮤니티를 활용하여 더 많은 지식을 얻고 실력을 쌓는 것을 추천합니다. 이 강좌가 스프링 부트 개발의 첫 걸음이 되길 바랍니다!