[작성일: 2023. 04. 22]
Database
MySQL
- SQL 문법 기반
- 거의 모든 운영 체계에서 사용 가능
- 처리 속도가 빠르고 대용량 데이터 처리가 용이함
- 설치가 쉽고 사용법이 쉬움
- 구글, 링크드인, 아마존, 넷플릭스, 트위터
MariaDB
- MySQL을 개발한 개발자가 만든 DBMS
- MySQL과 매우 유사
- 상업용으로 무료
- MySQL의 단점을 상당 보완함
Oracle
- 오라클 회사에서 만든 데이터베이스
- 세계 점유율 1위
- 막강한 Q&A 사이트(metalink, askTom)
- 분산처리를 통해 대용량의 성능도 cover
- 실행계획을 제어할 수 있는 도구 제공(hint)
- /*+ */
PostgreSQL
- 대용량 처리를 위한 기능이 구현
- 보안을 위한 암호화, 접근제어, 접근감지
- 오픈 소스로 무료임.
- 인스타그램, 스카이프, 이케아, 트립어드바이저
MyBatis
- 데이터베이스 프로그래밍을 쉽게 할 수 있는 개발 framework
- 프로그램에 있는 SQL들을 한 구성 파일에 저장하여 프로그램 코드와 SQL을 분리할 수 있는 장점
- 코드의 간결성으로 인해 유지보수에 장점
log4jdbc-log4j2 라이브러리
- MyBatis는 내부적으로 JDBC의 PreparedStatement를 이용해서 SQL 처리
- 따라서 SQL에 전달되는 파라미터는 JDBC와 같이 ?로 치환되어 처리
- 복잡한 SQL의 경우 ?가 제대로 들어갔는지 확인하기 쉽지 않음.
- 내용을 확인하고자 log4jdbc-log4j2 라이브러리를 사용함.
설정내역
- pom.xml에 dependency 추가
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
- application.properties에 jdbc spy 설정
log4jdbc.spylogdelegator.name = net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
spring.datasource.hikari.driver-class-name = net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.hikari.jdbc-url = jdbc:log4jdbc:mariadb://localhost:3399:member
spring.datasource.hikari.username = root (본인 거)
spring.datasource.hikari.password = 1234 (본인 거)
- log level 설정
logging.level.root = info
- MyBatisConfig의 prefix를 spring.datasource.hikari로 변경
DB Connection Pool
- 일반적으로 데이터 연동은 어플리케이션에서 필요할 때마다 DB에 연결
- 매번 DB에 연결하므로 시간이 오래 걸림
- 웹 어플리케이션이 실행되면서 DB와의 연결을 미리 설정
- 필요할 때마다 연결 상태를 이용하여 빠르게 DB 접속 가능
- 연결 유지하는 기술을 Connection Pool이라고 함.
Spring에서의 CP
- Java에서는 기본적으로 DataSource라는 인터페이스를 이용하여 CP 관리
- Spring에서는 사용자가 직접 관리하지 않고 자동화된 기법을 제공
- SpringBoot 2.0 이전에는 tomcat-jdbc 이용
- 2.0 이후부터 HikariCP를 기본 옵션으로 채택
MyBatis와 연동되어 동작
[실습1]
아이디와 비밀번호를 입력받은 후 아이디가 admin일 경우 ex10_admin.html로 이동
아이디가 user인 경우 ex10_user.html로 이동
- ex10_admin.html : 관리자 페이지 출력
- ex10_user.html : 일반 회원 페이지 출력
[실습2]
이름을 입력하고 출근 또는 퇴근 버튼 클릭
출근 시간은 9시, 퇴근 시간은 18시
출근 버튼 클릭 시 9시가 넘으면 지각처리
퇴근 버튼 클릭 시 18시 이전이면 업무시간이라고 처리
🐣 해당 게시글은 입문 개발자가 요약/정리한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.