안녕하세요! 이번 강좌에서는 스프링 부트(Spring Boot)를 이용한 백엔드 개발에 대해 자세히 알아보겠습니다. 우리는 블로그 애플리케이션을 개발하고, 그 과정에서 화면 구성 예제와 수정 및 생성 뷰를 만드는 방법을 배워볼 것입니다. 이 글은 초보자도 쉽게 따라 할 수 있도록 친절하게 설명하며, 각 단계별로 필요한 코드와 함께 세부사항을 다룰 것입니다.
1. 스프링 부트란?
스프링 부트는 스프링(Spring) 프레임워크를 기반으로 한 프로덕션급 애플리케이션을 쉽게 만들 수 있도록 도와주는 프레임워크입니다. 스프링 부트의 장점은 다음과 같습니다:
- 설정이 간편하다: 최소한의 설정으로 시작할 수 있습니다.
- 스프링 생태계와 통합이 용이하다: 다양한 스프링 프로젝트와 쉽게 통합할 수 있습니다.
- 외부 의존성 관리: Maven이나 Gradle을 이용하여 라이브러리 의존성을 손쉽게 관리할 수 있습니다.
- 자동 구성: 애플리케이션의 요구 사항에 따라 필요한 구성요소를 자동으로 설정합니다.
2. 개발 환경 구성
우선 스프링 부트를 사용하기 위한 개발 환경을 구성하겠습니다. 필요한 사항은 다음과 같습니다:
- Java JDK 11 이상
- IDE: IntelliJ IDEA 또는 Eclipse
- Maven 또는 Gradle
- Spring Boot Initializr (https://start.spring.io)
이제 각 항목을 설치하고, 스프링 부트 프로젝트를 생성해보겠습니다.
2.1 Java JDK 설치
Java JDK를 설치한 후, 터미널에서 아래 명령어로 버전을 확인합니다:
java -version
2.2 IDE 설치
IntelliJ IDEA 또는 Eclipse를 다운로드하고 설치합니다. IDE는 Java 개발에 필요한 도구와 기능을 제공합니다.
2.3 스프링 부트 프로젝트 생성
Spring Boot Initializr에 접속하여 다음과 같이 프로젝트를 설정합니다:
- Project: Maven Project
- Language: Java
- Spring Boot: 2.5.4 (최신 버전 선택)
- Project Metadata:
- Group: com.example
- Artifact: blog
- Name: blog
- Package name: com.example.blog
- Packaging: Jar
- Java: 11
- Dependencies: Spring Web, Spring Data JPA, H2 Database
설정이 완료되면 Generate 버튼을 클릭하여 프로젝트를 다운로드합니다. 다운로드한 zip 파일을 해제하고 IDE에서 프로젝트를 엽니다.
3. 애플리케이션 구조
스프링 부트 프로젝트를 생성한 후, 우리는 다음과 같은 구조를 갖게 됩니다:
blog
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── blog
│ │ │ ├── BlogApplication.java
│ │ │ ├── controller
│ │ │ ├── model
│ │ │ └── repository
│ │ └── resources
│ │ └── application.properties
└── pom.xml
4. 블로그 모델 만들기
블로그 앱의 기반이 되는 글을 작성하는 모델을 만들어보겠습니다. 아래와 같이 Post 클래스를 작성합니다:
package com.example.blog.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Post {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String content;
// getters and setters
}
위 코드는 JPA를 사용하여 데이터베이스와 매핑되는 Post 엔티티를 정의합니다. @Entity
애너테이션은 이 클래스가 데이터베이스 테이블에 대응함을 나타냅니다. @Id
는 기본 키, @GeneratedValue
는 ID 생성 전략을 의미합니다.
5. 리포지토리 생성
이제 데이터베이스와 상호작용하는 리포지토리를 생성합니다. PostRepository 인터페이스를 아래와 같이 작성합니다:
package com.example.blog.repository;
import com.example.blog.model.Post;
import org.springframework.data.jpa.repository.JpaRepository;
public interface PostRepository extends JpaRepository {
}
위 코드에서 JpaRepository
를 상속받음으로써 CRUD 메서드를 자동으로 제공받게 됩니다.
6. 서비스 계층 만들기
비즈니스 로직을 처리하기 위한 서비스 계층을 만듭니다. PostService 클래스를 아래와 같이 작성합니다:
package com.example.blog.service;
import com.example.blog.model.Post;
import com.example.blog.repository.PostRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class PostService {
private final PostRepository postRepository;
@Autowired
public PostService(PostRepository postRepository) {
this.postRepository = postRepository;
}
public List findAll() {
return postRepository.findAll();
}
public Post findById(Long id) {
return postRepository.findById(id).orElse(null);
}
public Post save(Post post) {
return postRepository.save(post);
}
}
7. 컨트롤러 생성
이제 HTTP 요청을 처리하는 컨트롤러를 생성합니다. PostController 클래스를 아래와 같이 작성합니다:
package com.example.blog.controller;
import com.example.blog.model.Post;
import com.example.blog.service.PostService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/posts")
public class PostController {
private final PostService postService;
@Autowired
public PostController(PostService postService) {
this.postService = postService;
}
@GetMapping
public List getAllPosts() {
return postService.findAll();
}
@PostMapping
public Post createPost(@RequestBody Post post) {
return postService.save(post);
}
@GetMapping("/{id}")
public Post getPost(@PathVariable Long id) {
return postService.findById(id);
}
}
8. 데이터베이스 설정
application.properties 파일에서 데이터베이스 설정을 추가합니다:
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
9. 수정 및 생성 뷰 만들기
이제 프론트엔드와 통신하기 위해 HTML 뷰를 만들어보겠습니다. 기본적인 HTML 양식을 아래와 같이 구성하겠습니다:
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>블로그 글 작성</title>
</head>
<body>
<h1>블로그 글 작성</h1>
<form id="postForm">
<label for="title">제목:</label>
<input type="text" id="title" name="title" required>
<br>
<label for="content">내용:</label>
<textarea id="content" name="content" required></textarea>
<br>
<button type="submit">작성하기</button>
</form>
<script>
document.getElementById("postForm").onsubmit = function(event) {
event.preventDefault();
let post = {
title: document.getElementById("title").value,
content: document.getElementById("content").value
};
fetch("/api/posts", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(post)
})
.then(response => response.json())
.then(data => {
console.log("Post created:", data);
alert("포스트가 생성되었습니다.");
})
.catch((error) => console.error('Error:', error));
}
</script>
</body>
</html>
10. 결론
이번 강좌에서는 스프링 부트를 사용하여 간단한 블로그 애플리케이션의 백엔드를 개발하는 방법을 알아보았습니다. 다양한 기술을 활용하여 데이터베이스와 연동하고, RESTful API를 통해 프론트엔드와 소통할 수 있는 기반을 구축하였습니다. 이 강좌를 바탕으로 더 나아가 자신의 프로젝트를 확장해나갈 수 있기를 바랍니다.
추가적인 질문이나 궁금증이 있으시면 댓글로 남겨주시기 바랍니다. 감사합니다!