지난 번에 도커에서 생성한 데이터베이스가 프로젝트와 잘 연결되는지 확인하고자 한다.
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 등으로 마이그레이션을 관리할 것이다.
연결 테스트용으로 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가지 옵션이 있다.
GenerationType.AUTOhibernate.dialect에 설정된 DB 방언 종류에 따라, hibernate가 자동으로 전략을 선택한다.
그러나 버전에 따라 선택되는 전략이 다를 수 있기 때문에 직접 지정하는 것을 권장한다고 한다.
GenerationType.IDENTITY기본 키 생성을 데이터베이스에 위임한다.
GenerationType.SEQUENCEDB의 시퀀스를 활용하여 Id값을 증가시킨다.
GenerationType.TABLE키 생성 전용 테이블을 하나 만들어서 데이터베이스 시퀀스를 흉내낸다.
참고
https://newwisdom.tistory.com/90
https://devcamus.tistory.com/16#--%--SEQUENCE%--%EC%A-%--%EB%-E%B-
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
@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;
}
}
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();
}
}
http://localhost:8080/api/test/create?email=test2@fintrack.com에 POST 요청한다.

잘 연결된 것을 확인할 수 있다.
터미널에서 직접 데이터베이스를 들어가 확인할 수도 있다.
SELECT * FROM USERS; 명령어를 통해 USERS 테이블을 확인할 수 있다.
이렇게 백엔드와 데이터베이스가 잘 연결된 것을 확인했다.