SpringBoot

[SpringBoot] 기본 예제 코드

wwxs 2024. 10. 14. 09:08

Member 클래스

더보기
package org.example.springbootdeveloper;

import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Getter
@Entity
public class Member {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="id", updatable = false)
    private Long id;    // DB 테이블의 'id' 컬럼과 매칭

    @Column(name = "name", nullable = false)
    private String name;
}

 

TestController 클래스

더보기
package org.example.springbootdeveloper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class TestController {
 @Autowired
    TestService testService;

    @GetMapping("/test")
    public List<Member> getAllMembers() {
        List<Member> members = testService.getAllMembers();
        return members;
    }
}

 

TestService 클래스

더보기
package org.example.springbootdeveloper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

// 비즈니스 계층 코드
@Service
public class TestService {

    @Autowired
    MemberRepository memberRepository;  // 빈 주입

    public List<Member> getAllMembers() {
        return memberRepository.findAll();  // 멤버 목록을 가져오기
    }
}

 

MemberRepository 인터페이스

더보기
package org.example.springbootdeveloper;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
// DB에서 데이터를 가져오는 퍼시스턴스 계층
// : member 테이블에 접근해서 Member 클래스에 매핑하는 구현체
public interface MemberRepository extends JpaRepository<Member, Long> {

}

 

application.properties

더보기
server.port=8080

spring.datasource.url=jdb:mysql://localhost:3306/springboot_db
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# 애플리케이션 시작 시 테이블 자동 업데이트
spring.jpa.hibernate.ddl-auto=update

# 실행되는 SQL 쿼리를 콘솔에 출력
spring.jpa.show-sql=true

 

mysql

더보기
create DATABASE springboot_db;
use springboot_db;

create table member (
	id bigint auto_increment primary key not null,
	name varchar(255) not null
);

insert into member (name)
values
	('hdh'),
	('hgd'),
	('ayj');

 

build.gradle

더보기
plugins {
    id 'java'
    // 프로젝트에 사용할 스프링부트 플러그인 | 스프링의 의존성을 자동 관리하는 플러그인
    id 'org.springframework.boot' version '3.2.0'
    id 'io.spring.dependency-management' version '1.1.0'
}

group = 'org.example'
version = '1.0-SNAPSHOT'
sourceCompatibility = '17'  // 자바 소스 컴파일 버전

repositories {
    // 의존성을 받을 저장소 지정
    mavenCentral()
}

dependencies {
    // 프로젝트 개발에 필요한 기능인 의존성을 입력
    // : 스프링부트 웹 관련 기능 제공 | 테스트 기능을 제공
    implementation('org.springframework.boot:spring-boot-starter-web')
    testImplementation('org.springframework.boot:spring-boot-starter-test')

    // 스프링 데이터 JPA
    implementation('org.springframework.boot:spring-boot-starter-data-jpa')
    implementation('mysql:mysql-connector-java:8.1.0')

    // 데이터베이스 h2 사용
    runtimeOnly('com.h2database:h2')

    // 반복 메서드 작성 작업을 줄여주는 라이브러리
    compileOnly('org.projectlombok:lombok')
    annotationProcessor('org.projectlombok:lombok')
}

test {
    useJUnitPlatform()
}