728x90
반응형
1. MariaDB
1.1 MariaDB 설치
- 구글에 mariadb를 검색한다.
- 10.6.17버전(수업용)을 다운받는다.
- 비밀번호 설정
- 외부에서 접속할 수 있도록 체크
- UTF-8을 기본으로 사용하도록 설정(한글)
1.2 MariaDB > HeidSQL 신규 새션 만들기
- 신규 클릭
- 세션이름 바꾸기
- 암호설정
- 포트번호 확인
- 열기
1.3 MariaDB > HeidSQL 데이터베이스 생성
- 왼쪽 테이블에 마우스 우클릭 > 새로 생성 > 데이터베이스
- utf8mb4_general_ci로 생성한다.
- 문자 하나 표시하는데 4바이트를 사용하겠다.(요즘 추세)
1.4 MariaDB > HeidSQL 사용자 추가하기
- 추가
- 사용자 이름 변경
- 권한 변경
- 암호 입력
- 접근허용 전체권한 해제
- 객체 추가 > webdb > 권한 설정 > 저장
1.5 MariaDB > HeidSQL 세션 관리자 추가
- 신규
- 세션 이름 변경
- 사용자명 변경
- 암호 입력
- 포트 변경
- 데이터베이스 선택 : webdb
2. IntelliJ > MariaDB
2.1 Database 설정
- 포트 번호 변경
- 유저명 입력
- 비밀번호 입력
- database 입력
- Test Connection 클릭
2.2 쿼리 콘솔
- IntelliJ의 console에서 sql문을 입력해 볼 수 있다.
- HeidSQL은 처음에 권한 설정이나 데이터 베이스 만들 때 사용하고 이외엔 잘 안쓰게된다.
- 쿼리 콘솔 추가

2.3 build.gradle 설정
- 프로젝트를 처음 만들 때 추가했던 의존성들이 build.gradle의 dependencies안에 들어있다.
- 이후에 추가하고 수정 할 수 있다.
- 구글에 MariaDB Java Client 검색 후 Gradle코드 복사 후 dependencies에 추가해준다.
- 구글에 Log4j2 검색
- 왼쪽 탭에서 Gradle찾아서 코드 복사
- 디버그용으로 콘솔에 sysout으로 찍어 변수를 확인 했던 것을 간소화해주는 기능
- 메이븐 리포지트에서 'Log4j2 slf4j2' 검색하기 https://mvnrepository.com/search?q=Log4j2+slf4j2
- 어노테이션 관련 'lombok' 검색하기 https://mvnrepository.com/search?q=lombok
- db관련 hikaricp 검색하기 https://mvnrepository.com/search?q=hikaricp
dependencies {
compileOnly('jakarta.servlet:jakarta.servlet-api:5.0.0')
testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")
// https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client
implementation 'org.mariadb.jdbc:mariadb-java-client:3.1.4'
implementation 'org.apache.logging.log4j:log4j-api:2.23.1'
implementation 'org.apache.logging.log4j:log4j-core:2.23.1'
// https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j2-impl
implementation 'org.apache.logging.log4j:log4j-slf4j2-impl:2.23.1'
// https://mvnrepository.com/artifact/org.projectlombok/lombok
compileOnly 'org.projectlombok:lombok:1.18.30'
testCompileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.30'
testAnnotationProcessor 'org.projectlombok:lombok:1.18.30'
// https://mvnrepository.com/artifact/com.zaxxer/HikariCP
implementation 'com.zaxxer:HikariCP:5.0.1'
}
3. 기본 데이터베이스 용어
3.1 어썰션(Assertion) 이란?
- 프로그램의 특정 지점에 위치한 어써션은 해당 지점에서 개발자가 반드시 참(true)이어야 한다고 생각하는 사항을 표현한 논리식이다.
- 어써션이 위반되는 경우(즉, 논리식 결과가 거짓)는 프로그램에 버그나 기타 문제가 있는 것을 암시한다.
3.2 커넥션 풀(CP)
- 커넥션 풀(connection pool)은 데이터베이스와의 연결을 관리하기 위한 기술입니다. 애플리케이션이 데이터베이스와 통신할 때마다 새로운 연결을 만드는 것은 매우 비효율적이고 시간이 많이 걸립니다. 커넥션 풀은 이러한 문제를 해결하기 위해 사용됩니다.
- 커넥션 풀의 작동 원리:
- 사전 생성: 애플리케이션 시작 시, 커넥션 풀은 여러 개의 데이터베이스 연결을 미리 생성합니다.
- 재사용: 애플리케이션이 데이터베이스 연결을 요청하면, 커넥션 풀에서 사용 가능한 연결을 할당합니다. 작업이 끝나면, 연결은 종료되지 않고 풀에 반환되어 다음 요청 때 재사용될 수 있습니다.
- 관리: 커넥션 풀은 연결의 최대 개수, 최소 개수, 유휴 시간, 대기 시간 등을 관리하며, 필요에 따라 연결을 생성하거나 제거합니다.
- 커넥션 풀은 데이터베이스 작업이 빈번하게 발생하는 복잡한 시스템에서 특히 중요한 역할을 하며, 시스템의 안정성과 성능을 크게 향상시킬 수 있습니다.
- Hikari CP는 커넥션들의 설정을 하는데 도움을 주는 프레임워크이다.
- 공유자원 사용에 대한 동기화 처리를 해준다.
3.3 개념적인 객체 모양
- DTO (Data Transfer Object, 데이터 전송 객체)란 프로세스 간에 데이터를 전달하는 객체를 의미합니다.
- DAO(Data Access Object)
- "실제로 DB의 데이터에 접근하는 객체" DAO는 Service와 DB를 연결하는 역할을 한다.
- 실제로 DB에 접근하여 data를 삽입, 삭제, 조회, 수정 등 CRUD 기능을 수행합니다.
- VO(Value Object)
- 데이터베이스 테이블(Entity)과 동일한 형태로 만드는 Object.
- "변경 불가능하며 오직 읽기만 가능 (Read-Only)"
- setter는 없고 getter만 있다.
- 엔터티(Entity)
- 실제, 독립체라는 뜻으로 데이터 모델링에서 사용되는 객체라고 생각하시면 되겠습니다.
- 엔터티(Entity) : 엔터티는 데이터베이스 테이블이라고 생각하시면 이해가 편합니다.
- 인스턴스(Instance) : 인스턴스는 데이터베이스에 저장된 데이터 내용의 전체 집합을 의미합니다.
- 속성(Attribute) : 속성은 인스턴스의 구성요소로써 더 이상 분리되지 않는 단위로, 업무에 필요한 데이터를 저장할 수 있습니다.
댓글