[PostgreSQL] 연결 테스트

TNFUDS·2025년 11월 5일

FinTrack 프로젝트

목록 보기
2/14

지난 번에 도커에서 생성한 데이터베이스가 프로젝트와 잘 연결되는지 확인하고자 한다.

1단계: application.yml 설정

spring:
  datasource:
    url: ***
    username: ***
    password: ***
    driver-class-name: org.postgresql.Driver

  jpa:
    hibernate:
      ddl-auto: update   # 개발용 — 엔티티 기반으로 테이블 자동 생성
    properties:
      hibernate:
        format_sql: true
        show_sql: true

ddl-auto: update

엔티티 기반으로 테이블 자동 생성하는 코드이다.
주로 개발 시에 사용하고, 배포 이후에는 Flyway 등으로 마이그레이션을 관리할 것이다.


2단계:간단한 엔티티 작성

연결 테스트용으로 User 테이블을 만들었다.

import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.CreationTimestamp;

import java.time.LocalDateTime;

@Entity
@Getter @Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false, unique = true, length = 100)
    private String email;

    @Column(nullable = false)
    private String password;

    @Column(length = 50)
    private String nickname;

    @CreationTimestamp
    private LocalDateTime createdAt;
}

id, email, password, nickname, createdAt을 갖는 users 테이블을 만들었다.

@GeneratedValue(strategy = GenerationType.IDENTITY)

@Id로 식별자필드와 테이블의 PK를 매핑시켜놓으면 식별자 값을 자동 생성 시켜줄 수 있는 어노테이션이다.

@GeneratedValue에는 3가지 전략이 있고, JPA에게 전략 선택을 위임하는 옵션인 AUTO 옵션을 포함해 총 4가지 옵션이 있다.

1. GenerationType.AUTO

hibernate.dialect에 설정된 DB 방언 종류에 따라, hibernate가 자동으로 전략을 선택한다.
그러나 버전에 따라 선택되는 전략이 다를 수 있기 때문에 직접 지정하는 것을 권장한다고 한다.

2. GenerationType.IDENTITY

기본 키 생성을 데이터베이스에 위임한다.

3. GenerationType.SEQUENCE

DB의 시퀀스를 활용하여 Id값을 증가시킨다.

  • 시퀀스란?
  • 자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체

4. GenerationType.TABLE

키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내낸다.

참고
https://newwisdom.tistory.com/90
https://devcamus.tistory.com/16#--%--SEQUENCE%--%EC%A-%--%EB%-E%B-


3단계: Repository 작성


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

public interface UserRepository extends JpaRepository<User, Long> {
}

4단계: 실행 테스트용 Controller 작성

@RestController
@RequestMapping("/api/test")
public class TestController {
    private final UserRepository userRepository;

    public TestController(UserRepository userRepository){
        this.userRepository = userRepository;
    }

    @PostMapping("/create")
    public String createUser(@RequestParam String email){
        User user = User.builder()
                .email(email)
                .password("1234")
                .nickname("테스트유저")
                .build();

        userRepository.save(user);

        return "User created: " + email;
    }
}

5단계: Spring Security 잠시 비활성화

Spring Boot Security 의존성을 프로젝트에 포함했기 때문에
아무 설정도 안 하면 모든 요청이 “인증 필요” 상태로 처리된다.

이 상태에서 테스트를 위해 포스트맨에 요청을 보내면 Spring Security가 401 Unauthorized를 반환한다.
이를 방지하기 위해 잠시 비활성화할 코드를 작성했다.

@Configuration
public class SecurityConfig {
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
        http
                .csrf(csrf -> csrf.disable()) // CSRF 비활성화
                .authorizeHttpRequests(auth ->
                        auth.anyRequest().permitAll() // 모든 요청 허용
        )
                .httpBasic(Customizer.withDefaults()); //기본 HTTP 인증
        return http.build();
    }
}

6단계: Postman 확인

http://localhost:8080/api/test/create?email=test2@fintrack.com에 POST 요청한다.

잘 연결된 것을 확인할 수 있다.

터미널에서 직접 데이터베이스를 들어가 확인할 수도 있다.
SELECT * FROM USERS; 명령어를 통해 USERS 테이블을 확인할 수 있다.

이렇게 백엔드와 데이터베이스가 잘 연결된 것을 확인했다.

profile
내 세상을 넓혀가는 중

0개의 댓글