기본적인 Spring Boot 프로젝트 세팅하기

박정호·2025년 2월 4일

동일한 환경에서 실습을 진행하기 위해 아래 버전을 사용할 것을 권장한다.

  • Spring Boot는 3.x.x 버전
  • MySQL 8.x 버전
  • JDK 17
  1. Spring boot 프로젝트 세팅

    아래에서 name은 redis-test, dependency에는 lombok을 추가로 넣어준다.

  1. application.yml에 DB 연결을 위한 정보 작성하기
  • application.properties를 지우고 application.yml을 생성 application.yml
    # local 환경
    spring:
      profiles:
        default: local
      datasource:
        url: jdbc:mysql://localhost:3306/redis_test
        username: root
        password: password
        driver-class-name: com.mysql.cj.jdbc.Driver
      jpa:
        hibernate:
          ddl-auto: update
        show-sql: true
  1. Board 엔티티 만들기

    Board

    @Entity
    @Table(name = "boards")
    @Getter
    public class Board {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Long id;
    
        private String title;
    
        private String content;
    
        @CreatedDate
        @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
        @JsonSerialize(using = LocalDateTimeSerializer.class)
        @JsonDeserialize(using = LocalDateTimeDeserializer.class)
        private LocalDateTime createdAt;
    
    }
    
  1. 기본 Controller, Service, Repository 만들기

    BoardController

    @RequiredArgsConstructor
    @RestController
    @RequestMapping("boards")
    public class BoardController {
    
        private final BoardService boardService;
    
        @GetMapping()
        public List<Board> getBoards(@RequestParam(defaultValue = "1") int page,
                                     @RequestParam(defaultValue = "10") int size) {
            return boardService.getBoards(page, size);
        }
    }
    

BoardService

@RequiredArgsConstructor
@Service
public class BoardService {

    private final BoardRepository boardRepository;

    public List<Board> getBoards(int page, int size) {
        Pageable pageable = PageRequest.of(page - 1, size);
        Page<Board> pageOfBoards = boardRepository.findAllByOrderByCreatedAtDesc(pageable);

        return pageOfBoards.getContent();
    }
}

BoardRepository

public interface BoardRepository extends JpaRepository<Board, Long> {
    Page<Board> findAllByOrderByCreatedAtDesc(Pageable pageable);
}

사용할 database 생성하기

yml을 보면 database가 redis_test라고 되어있다. redis_test를 생성해주자

 datasource:
    url: jdbc:mysql://localhost:3306/redis_test

database 생성하기

# database 확인하기
show databases;

# database 생성하기
create database redis_test;

datagrip 연결하기

내가 생성한 DB의 정보와 맞게 기입해준다.

아래와 같이 succeded가 뜨면 성공이다.

더미데이터 넣기

조회 성능 테스트를 위한 더미데이터 백만건을 넣을 것이다.

아래의 insert문은 mysql 8.0이상에서만 가능한 로직이다.

-- 높은 재귀(반복) 횟수를 허용하도록 설정
-- (아래에서 생성할 더미 데이터의 개수와 맞춰서 작성하면 된다.)
SET SESSION cte_max_recursion_depth = 1000000; 

-- boards 테이블에 더미 데이터 삽입
INSERT INTO boards (title, content, created_at)
WITH RECURSIVE cte (n) AS
(
  SELECT 1
  UNION ALL
  SELECT n + 1 FROM cte WHERE n < 1000000 -- 생성하고 싶은 더미 데이터의 개수
)
SELECT
    CONCAT('Title', LPAD(n, 7, '0')) AS title,  -- 'Title' 다음에 7자리 숫자로 구성된 제목 생성
    CONCAT('Content', LPAD(n, 7, '0')) AS content,  -- 'Content' 다음에 7자리 숫자로 구성된 내용 생성
    TIMESTAMP(DATE_SUB(NOW(), INTERVAL FLOOR(RAND() * 3650 + 1) DAY) + INTERVAL FLOOR(RAND() * 86400) SECOND) AS created_at -- 최근 10년 내의 임의의 날짜와 시간 생성
FROM cte;

걸린 시간

31초 정도 걸렸다.

데이터가 잘 들어갔는지 확인까지 해보자

select count(*) from boards;

0개의 댓글