데이터베이스 연결 및 관리 / Spring JAVA

2025. 3. 5. 17:10·Cs기본지식/데이터베이스

자바와 DB 연결

자바는 독립적으로 DB에 접근할 수 없으며, JDBC를 사용하여 DB와 통신합니다.
MySQL, MSSQL, Oracle, DB2와 같은 DB에 접근하려면 각 벤더사에서 제공하는 클라이언트 프로그램 을 사용 합니다.

 

이때, java.sql 패키지를 통해 DB 연결과 SQL 실행을 할 수 있습니다.

이를 통해 DB 종류에 상관없이 일관된 방식으로 작업할 수 있으며, 

ANSI SQL을 사용하면 DB를 변경해도 쿼리 문법은 변하지 않습니다.

JDBC에서 제공하는 주요 구성 요소:

Connection: DB와 연결을 관리
Statement: SQL 쿼리를 실행
ResultSet: 쿼리 실행 결과를 저장

JDBC 프로그래밍

인터페이스를 사용하여 DB 연결, SQL 실행, 결과 처리는 동일하게 유지하면서
JDBC 드라이버만 바꾸면 다른 DB로 쉽게 변경

 

SQL 인젝션 발생

SQL 인젝션은 보안 문제를 일으킬 수 있는 주요 원인입니다.

이를 방지하기 위해서는 PreparedStatement를 사용하고, 직접 문자열을 조합하여 쿼리를 날리는 방식은 피해야 합니다.

 

*보안 문제 발생!!!

"SELECT * FROM members WHERE id = '" + id + "' AND password = '" + pw + "'"

Spring 및 IoC (Inversion of Control)

  • IoC 컨테이너: 객체의 생성과 생명주기를 관리합니다.
  • DI: 객체가 의존하는 다른 객체를 자동으로 주입하는 방식입니다.
Spring은 IoC (Inversion of Control) 컨테이너를 제공하여 객체 생성을 자동화합니다.
객체 생성 및 관리 책임을 Spring에 위임하고, **DI (Dependency Injection)**를 통해 객체 간의 의존 관계를 설정

 

Spring의 애노테이션

Spring에서는 객체를 자동으로 관리하기 위해 애노테이션을 사용합니다.

@Component, @Repository, @Service, @Controller: 이 애노테이션들은 클래스 선언 위에 작성하여
해당 클래스를 Spring IoC 컨테이너에 Bean으로 등록합니다.
@Bean: Java Configuration에서 메서드를 통해 객체를 Bean으로 등록합니다.
@Configuration: Java 기반으로 Bean 설정을 할 수 있게 해주는 애노테이션입니다.
@Scope: Bean의 생명주기를 설정합니다.

Spring Boot 설정 (application.properties)

Spring Boot에서는 설정을 application.properties 파일로 관리하며, 서버의 포트, 데이터베이스 연결 정보 등을 설정할 수 있습니다.

  • 예시:
spring.application.name=SpringBootTest
server.servlet.context-path=/eureka
server.port=80

DB Connection Pool (DBCP)

DB Connection Pool(DBCP)은 여러 DB 연결을 미리 생성하여 Pool에 저장하고, 필요할 때 재사용할 수 있도록 관리하는 기법입니다. 이를 통해 서버의 성능을 개선하고, DB 연결 수를 최적화합니다.

  • HikariCP: Spring Boot에서 기본적으로 제공하는 DBCP 라이브러리입니다.
  • 예시 설정:
spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/sys?serverTimezone=UTC
spring.datasource.hikari.username=eureka
spring.datasource.hikari.password=eureka
spring.datasource.hikari.pool-name=hikari-pool

MyBatis

MyBatis는 SQL 쿼리를 직접 작성하고, 이를 Java 객체에 매핑하여 사용하는 ORM 프레임워크입니다.

  • 설정 예시:
mybatis.type-aliases-package=com.uplus.eureka.model.dto
mybatis.mapper-locations=mapper/*.xml

Spring의 로그 설정

Spring Boot에서는 로그 레벨을 설정하여 다양한 로그를 관리할 수 있습니다. application.properties 파일을 통해 로그 레벨을 설정합니다.

  • 예시:
logging.level.root=info
logging.level.com.uplus.eureka=debug
logging.level.com.zaxxer.hikari.pool=info

Spring Boot Test

Spring Boot에서는 @SpringBootTest 애노테이션을 사용하여 통합 테스트를 할 수 있습니다. 이 애노테이션을 통해 Spring 애플리케이션 컨텍스트를 로드하고, DB 연결 및 Bean 주입을 테스트할 수 있습니다.

  • 예시:
@SpringBootTest(properties = {"spring.config.location=classpath:application.properties"})
@ComponentScan(basePackages = {"com.uplus.eureka"})
class SpringBootTestApplicationTests {

    private Logger log = LoggerFactory.getLogger(getClass());

    @Autowired
    private DataSource ds;

    @Test
    public void dsTest() {
        assertNotNull(ds);  // DataSource가 null이 아님을 확인
    }
}

기타 Spring 설정

  • Spring Boot는 의존성 관리가 쉬운 Maven을 사용하여 프로젝트의 의존 라이브러리를 관리합니다.
  • @ComponentScan: 지정된 패키지 내에서 Bean을 자동으로 등록합니다.

프론트엔드와 백엔드의 연결

  • **React (Frontend)**는 fetch 또는 AJAX를 사용하여 **Spring 서버 (Backend)**와 통신합니다.
  • Spring Server는 Web과 Model을 관리하고, DB 연결과 비즈니스 로직을 처리합니다.

     브라우저 => react , client ui =>  (fetch) =>  spring sever (web,model)

                                                      <= (ajax)

결론

Spring은 IoC 컨테이너를 통해 객체의 생성과 의존 관계를 자동으로 관리하고
DB 연결 풀과 MyBatis 같은 ORM 프레임워크를 통해 효율적으로 DB와 통신합니다.

**@Component**와 같은 애노테이션을 사용하면
Spring이 자동으로 클래스를 스캔하고 객체를 생성하여 container 에 직접 등록하지 않고 객체를 쉽게 관리

 

 

'Cs기본지식 > 데이터베이스' 카테고리의 다른 글

MySQL 데이터베이스 이해하기 / DDL, DML ,TCL  (0) 2025.03.05
MySQL 데이터베이스 이해하기 / 서브 쿼리  (0) 2025.03.04
MySQL 데이터베이스 이해하기 /Join 연산  (0) 2025.02.28
MySQL 데이터베이스 이해하기 / 집계함수와 그룹함수  (1) 2025.02.28
MySQL 데이터베이스 이해하기 / select 및 내장 함수  (0) 2025.02.27
'Cs기본지식/데이터베이스' 카테고리의 다른 글
  • MySQL 데이터베이스 이해하기 / DDL, DML ,TCL
  • MySQL 데이터베이스 이해하기 / 서브 쿼리
  • MySQL 데이터베이스 이해하기 /Join 연산
  • MySQL 데이터베이스 이해하기 / 집계함수와 그룹함수
startfront
startfront
startfront 님의 블로그 입니다.
  • startfront
    startfront 님의 블로그
    startfront
  • 전체
    오늘
    어제
    • 분류 전체보기 (42) N
      • 프로젝트 (5) N
        • 프로젝트 해보기 (1) N
        • 디자인 알아보기 (2)
        • 프로젝트의 기본 (2)
      • 백엔드의 이해 (4)
      • React (14)
      • 프론트엔드 기본 (2)
        • Html (1)
        • Css (0)
        • JavaScript (1)
      • Cs기본지식 (14)
        • 알고리즘 (8)
        • 데이터베이스 (6)
      • Java (3)
        • Java의 이해 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
startfront
데이터베이스 연결 및 관리 / Spring JAVA
상단으로

티스토리툴바