Spring Boot와 Oracle DB 통합하기
Overview
Spring Boot와 Oracle DB를 통합하는 과정은 데이터베이스 기반 애플리케이션을 구축할 때 자주 필요합니다. Spring Boot는 설정을 간소화하여 빠르게 애플리케이션을 시작할 수 있도록 해주며, Oracle DB는 대규모 애플리케이션에서 자주 사용되는 신뢰성 높은 관계형 데이터베이스 시스템입니다. 이 가이드는 Spring Boot 애플리케이션에서 Oracle DB를 사용하는 방법을 단계별로 설명합니다.
1. 프로젝트 설정
1.1 Spring Boot 프로젝트 생성
먼저, Spring Boot 프로젝트를 생성해야 합니다. Spring Initializr를 사용하면 쉽게 생성할 수 있습니다.
- Spring Initializr 웹사이트에 접속합니다.
- Project: Maven Project (또는 Gradle Project)
- Language: Java
- Spring Boot: 최신 안정 버전 선택
- Group: 예를 들어
com.example
- Artifact: 예를 들어
demo
- Dependencies: 다음 의존성을 추가합니다.
- Spring Web
- Spring Data JPA
- Oracle Driver
참고: Spring Data JPA
는 JPA를 통해 데이터베이스 작업을 간소화하고, Oracle Driver
는 Oracle 데이터베이스와의 연결을 가능하게 합니다.
1.2 Maven 의존성 추가
Spring Initializr에서 생성된 pom.xml
파일에 Oracle 데이터베이스 드라이버를 추가합니다. Maven Central Repository에서 Oracle JDBC 드라이버를 직접 다운로드할 수 없으므로, Oracle의 Maven 저장소를 사용해야 합니다.
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.8.0.0</version>
</dependency>
여기서 버전은 실제로 사용 중인 Oracle DB 버전에 맞게 조정해야 합니다. 최신 버전은 Oracle의 공식 웹사이트에서 확인할 수 있습니다.
2. 데이터베이스 연결 설정
2.1 application.properties 설정
Spring Boot 애플리케이션의 src/main/resources/application.properties
파일에 Oracle DB에 연결하기 위한 설정을 추가합니다.
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
여기서 spring.datasource.url
은 데이터베이스 URL을 지정합니다. localhost
는 데이터베이스 서버의 주소이며, 1521
은 기본 포트, XE
는 데이터베이스 이름입니다. 이 값은 데이터베이스 설정에 따라 달라질 수 있습니다.
spring.jpa.database-platform
은 Hibernate의 데이터베이스 방언을 설정합니다. Oracle 12c 이상의 버전에서는 Oracle12cDialect
를 사용합니다.
2.2 데이터베이스 접속 확인
애플리케이션을 시작할 때 데이터베이스 연결이 성공적으로 이루어졌는지 확인해야 합니다. 만약 연결 오류가 발생하면, 아래와 같은 오류 메시지가 출력될 수 있습니다.
오류 메시지 예시:
org.springframework.jdbc.BadSqlGrammarException: Invalid column name
이 경우, 데이터베이스 설정(예: URL, 사용자 이름, 비밀번호 등)을 다시 확인하고, 데이터베이스가 실제로 실행 중인지 확인합니다.
3. JPA 및 Entity 설정
3.1 Entity 클래스 작성
JPA를 사용하여 Oracle DB와 상호작용하기 위해서는 Entity 클래스를 정의해야 합니다. Entity 클래스는 데이터베이스 테이블과 매핑됩니다. 예를 들어, User
라는 테이블을 관리할 수 있는 User
Entity 클래스를 작성할 수 있습니다.
package com.example.demo.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
// getters and setters
}
3.2 Repository 인터페이스 작성
데이터베이스에 접근하기 위한 Repository 인터페이스를 작성합니다. Spring Data JPA는 이 인터페이스를 통해 CRUD 작업을 자동으로 처리해줍니다.
package com.example.demo.repository;
import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
// 추가적인 쿼리 메소드 정의 가능
}
이 인터페이스는 JpaRepository
를 확장하여 기본적인 CRUD 작업을 제공합니다. 추가적인 쿼리 메소드를 정의하려면 인터페이스에 메소드 이름을 정의하면 됩니다.
3.3 서비스 및 컨트롤러 작성
서비스 클래스와 컨트롤러 클래스를 작성하여 실제 비즈니스 로직과 웹 요청 처리를 구현합니다.
Service 클래스 예시:
package com.example.demo.service;
import com.example.demo.model.User;
import com.example.demo.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public List<User> getAllUsers() {
return userRepository.findAll();
}
public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
}
public User saveUser(User user) {
return userRepository.save(user);
}
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
}
Controller 클래스 예시:
package com.example.demo.controller;
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public List<User> getAllUsers() {
return userService.getAllUsers();
}
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
@PostMapping
public User createUser(@RequestBody User user) {
return userService.saveUser(user);
}
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
}
}
4. 예외 처리 및 디버깅
Spring Boot 애플리케이션에서 Oracle DB와의 통합 시 발생할 수 있는 일반적인 오류와 그 해결 방법을 알아봅니다.
4.1 데이터베이스 연결 오류
오류 메시지:
ORA-12154: TNS:could not resolve the connect identifier specified
해결 방법:
application.properties
파일의spring.datasource.url
이 올바른지 확인합니다.- TNS 이름이 올바르게 지정되었는지 확인합니다.
- Oracle DB가 실행 중인지, 네트워크 설정이 올바른지 점검합니다.
4.2 SQL 문법 오류
오류 메시지:
org.springframework.jdbc.BadSqlGrammarException: Invalid column name
해결 방법:
- Entity 클래스의 필드 이름과 데이터베이스 테이블의 컬럼 이름이 일치하는지 확인합니다.
- SQL 문법 오류가 발생할 경우, SQL 로그를 활성화하여 쿼리를 분석합니다.
참고문서
이 문서들을 통해 Spring Boot와 Oracle DB의 통합에 관한 자세한 정보를 얻을 수 있으며, 문제가 발생했을 때 참고할 수 있는 유용한 자료가 될 것입니다.
'Study Information Technology' 카테고리의 다른 글
Spring Boot와 JUnit 단위 테스트를 위한 완벽한 조합 (0) | 2024.08.13 |
---|---|
Spring Boot DevTools 개발을 더 편리하게 만드는 도구 (0) | 2024.08.13 |
Spring Boot와 Spring Cloud 현대 마이크로서비스 아키텍처의 핵심 (0) | 2024.08.13 |
Spring Boot Starter로 Spring Boot 애플리케이션 시작하기 (0) | 2024.08.13 |
Spring Boot와 PostgreSQL 연동하기 (3) | 2024.08.13 |