스택큐힙리스트

자바 스프링 게시판 DB 연동 본문

개발

자바 스프링 게시판 DB 연동

스택큐힙리스트 2025. 7. 14. 21:49
반응형

1. 목표

정적 게시판을 Spring Data JPA + H2(또는 MySQL) 데이터베이스와 연결해 실제 CRUD 뼈대로 업그레이드한다. 일단 H2로 빨리 확인한 뒤, 설정 몇 줄만 바꿔 MySQL·MariaDB로 옮길 수 있게 설계한다.

 

2. 의존성 추가

build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    runtimeOnly  'com.h2database:h2'          // ▶ H2
    // runtimeOnly 'com.mysql:mysql-connector-j'  // ▶ MySQL로 바꿀 경우
    compileOnly  'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
}

JPA + DB 드라이버만 더해 주면 끝. 자동 설정(Autoconfigure)이 나머지를 처리해 준다.


3. DB 설정

src/main/resources/application.yml

spring:
  datasource:
    url: jdbc:h2:mem:testdb      # ▶ H2 인메모리
    driver-class-name: org.h2.Driver
    username: sa
  jpa:
    hibernate:
      ddl-auto: update           # 테이블 자동 생성·수정
    show-sql: true               # 쿼리 콘솔 출력
# ▶ MySQL로 갈아탈 땐
# url: jdbc:mysql://localhost:3306/board?serverTimezone=Asia/Seoul
# driver-class-name: com.mysql.cj.jdbc.Driver
# username: root
# password: 비밀번호
  • ddl-auto: update는 개발 단계 전용 옵션. 운영에서는 validatenone을 추천.
  • H2 콘솔은 http://localhost:8080/h2-console (JDBC URL 동일).

4. 엔티티·리포지터리

Post.java

@Entity
@Getter @Setter @NoArgsConstructor
@AllArgsConstructor
public class Post {
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private String writer;
    @Lob                 // 긴 글 본문
    private String content;
}

PostRepository.java

public interface PostRepository extends JpaRepository<Post, Long> { }

JPA 인터페이스 하나로 CRUD 메서드 18개가 자동 생성된다. 따로 구현 클래스가 필요 없다.


5. 서비스(선택)

규모가 커질 때 비즈니스 로직을 모아 둘 계층:

@Service
@RequiredArgsConstructor
public class PostService {
    private final PostRepository repo;

    public List<Post> findAll()        { return repo.findAll(); }
    public Post       findOne(Long id) { return repo.findById(id).orElseThrow(); }
    public Post       save(Post post)  { return repo.save(post); }
}

6. 컨트롤러 수정

@Controller
@RequiredArgsConstructor
public class PostController {
    private final PostService svc;

    @GetMapping("/posts")
    String list(Model m) {
        m.addAttribute("posts", svc.findAll());
        return "posts";
    }

    @GetMapping("/posts/{id}")
    String detail(@PathVariable Long id, Model m) {
        m.addAttribute("post", svc.findOne(id));
        return "post";
    }
}
  • 기존 List<Post> 하드코딩을 JPA 호출로 대체.
  • Thymeleaf 템플릿은 어제 만든 그대로 사용한다.

7. 데이터 초기화 팁

data.sql

INSERT INTO post(title, writer, content)
VALUES ('첫 글', '관리자', 'DB 연결을 환영합니다 🎉');

애플리케이션 기동 시 자동으로 실행 → 초기 목록이 바로 표시된다.


8. MySQL·MariaDB로 전환하기

  1. MySQL 실행 & 스키마(board) 생성.
  2. application.yml에서 URL·드라이버·계정·비번만 교체.
  3. Gradle runtimeOnly 'com.mysql:mysql-connector-j' 주석 해제.
  4. ddl-auto: update가 테이블을 생성해 주면 끝!

9. 결과 확인

./gradlew bootRun
  • http://localhost:8080/posts → DB의 게시글 목록
  • 글 추가·수정·삭제 기능은 다음 차례에 구현 예정!

10. 오늘의 한 줄 요약

“Spring Data JPA + 드라이버 + application.yml 세 줄이면 DB 연동 완료!”

반응형
Comments