자바와 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 |