마트철수

[TIL_5] KB 부트캠프: Spring과 Vue로 연동하기 본문

KB IT's Your Life/KB 기자단

[TIL_5] KB 부트캠프: Spring과 Vue로 연동하기

마트스 2024. 9. 1. 15:47

 

 

[TIL_5] KB 부트캠프: 컴포넌트 백엔드

 
 
안녕하세요,
 
'Today I Learned' 5주차에서는
Spring과 Vue로 연동하기에 대해
작성해보고자 합니다.
 
MyBatis 데이터베이스 연동을 위해서,

Spring과 MySQL Database를 연동하고,

MyBatis와 Spring을 연동해 보는 방법을 알아보겠습니다.

 

▼ 이 게시판을 만들어보고 싶다면 ▼
 
좀 더 세부적인 내용은 가장 하단의 타임라인을 참고해주세요!
 
 


 

목차

  1. 스프링과 MySQL Database 연동
  2. 커넥션 풀
  3. 스프링과 MyBatis 연동
  4. MyBatis

현재 KB IT's Your Life에서 다루는 내용을 기반으로 작성하였으며,
하단엔 '~다' 체를 사용하였습니다.

#KB부트캠프 #KB코딩 #KB코딩테스트
 


1. 스프링과 MySQL Database 연동

 

데이터베이스 생성 및 계정 생성, 권한 설정

  •  scoula 사용자는 scoula_db 데이터베이스의 모든 데이터를 조회, 수정, 삭제할 수 있는 모든 권한을 가지게 된다.
  • create database scoula_db;
    • 이 명령어는 scoula_db라는 이름의 데이터베이스를 생성
    • 데이터베이스는 데이터를 저장하고 관리하기 위한 구조를 제공
  • create user 'scoula'@'%' identified by '1234';
    • 이 명령어는 'scoula'라는 사용자를 생성하며, 이 사용자는 비밀번호 '1234'로 데이터베이스에 접근 가능
    • '@'%' 부분은 이 사용자가 어떤 호스트에서도 데이터베이스에 접속할 수 있음을 의미
  • grant all privileges on scoula_db.* to 'scoula'@'%';
    • 이 명령어는 scoula 사용자에게 scoula_db 데이터베이스에 대한 모든 권한을 부여
create database scoula_db;

create user 'scoula'@'%' identified by '1234';

grant all privilage on scoula_db.* to 'scoula'@'%';

 

 

프로젝트의 JDBC 연결

 settings.gradle 이름 바꾸기

rootProject.name = '00'

 

 

Enable Annotation Processor 활성화

위 세가지 세팅은 시작 전, 되어있는지 필수로 확인!

 

 

2. 커넥션 풀

 

1 - 0. 왜 JDBC API를 사용하지 않고 Connection Pool을 설정할까?

  • 데이터베이스와 연결하는 작업은 비용이 많이 드는 작업
  • 예를 들어, 애플리케이션이 데이터베이스에 연결하려면 다음과 같은 과정이 필요
    • 데이터베이스 드라이버를 통해 커넥션을 요청
    • TCP/IP 연결을 통한 네트워크 통신 데이터베이스 인증 및 연결
    • 커넥션 객체 생성 및 반환
    • 이 과정을 매번 새로 실행한다면 비효율성 매우 큼!!

 

1 - 1. 커넥션 풀(Connection Pool)이란?

  • 데이터베이스 성능 최적화를 위한 필수 개념
  • 데이터베이스와 애플리케이션 간의 연결을 효율적으로 관리하는 방법 중 하나
    • 커넥션 풀은 애플리케이션이 시작될 때 일정 수의 커넥션 객체를 미리 생성하고, 필요할 때마다 이 커넥션 객체를 재사용하는 방식
    • 이를 통해 커넥션을 새로 생성하는 데 드는 시간을 줄이고 성능을 향상시킬 수 있음
Connection Poll 출처: KB IT's Your Life

 

1 - 2. 커넥션 풀 기본 동작 과정

  1. 초기화 단계: 애플리케이션이 시작될 때 미리 설정된 수만큼의 Connection 객체를 생성하여 풀에 저장
  2. 연결 요청: 애플리케이션이 데이터베이스 연결을 요청하면, 풀에서 사용 가능한 Connection 객체 제공
  3. 연결 반환: 작업이 완료되면 Connection 객체를 닫지 않고 다시 풀에 반환하여 재사용
  4. 풀 관리: 필요에 따라 커넥션의 수를 동적으로 조절하고, 유휴 상태의 커넥션을 정리하여 자원을 효율적으로 관리

 

1 - 3. 커넥션 풀 종류

  • 커넥션 풀은 직접 구현할 수도 있지만, 오픈소스 라이브러리를 사용하는 것이 일반적임
  • 대표적인 커넥션 풀 라이브러리
    • HikariCP: 가벼운 용량과 뛰어난 성능을 자랑하는 커넥션 풀로, Spring Boot 2.0 이후 기본 커넥션 풀로 사용
    • Apache Commons DBCP: 과거에 널리 사용되었던 커넥션 풀 라이브러리로, 여전히 많은 프로젝트에서 사용
    • Tomcat JDBC Pool: Tomcat 서버에서 기본적으로 사용하는 커넥션 풀 라이브러리

 

커넥션 풀 종류 출처: Dev_sHu 티스토리
예시 중 하나: Apache Tomcat (9.0.93)

 

1-4. Connection Pool 설정하기

  • 커넥션 풀을 설정하기 위해선 2가지 위치에서 코드를 수정해야 한다.

1) resources/application.properties

jdbc.driver = com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://127.0.0.1:3306/scoula_db
jdbc.username = scoula
jdbc.password=1234

 

 

2) RootConfig.java

package org.scoula.config

import javax.sql.DataSource;

@Configuration
@PropertySource({"classpath:/application.properties"})
public class RootConfig{
	@Value("${jdbc.driver}") String driver;
    @Value("${jdbc.url}") String url;
    @Value("${jdbc.username}") String username;
    @Value("${jdbc.password}") String password;
    
    @Bean
    public DataSource dataSourse(){
    	HikariConfig config = new HikariConfig();
        
        config.setDriverCLassName(driver);
        config.setJdbcUrl(url);
        config.setUsername(username);
        config.setPassword(password);
        
        HikariDataSourse dataSource = new HokariDataSource(config);
        return dataSource;
    }
}

 

 

수업 때에는 위 코드를 작성하는데 집중했는데요,
그랬더니 코드 하나하나가 무엇을 의미하는지 모르겠더라구요..
좀 긴 내용이 될 수 있겠지만 조금 더 자세히 알아보았습니다.


 

1. @Configuration 및 @PropertySource 어노테이션

  • @Configuration 어노테이션은 이 클래스가 스프링의 설정 클래스임을 명시
  • 즉, 이 클래스는 스프링 컨테이너에서 애플리케이션의 빈(bean) 정의 및 설정을 위한 소스
    •  @PropertySource({"classpath:/application.properties"})는 외부 설정 파일에서 애플리케이션 프로퍼티를 로드하기 위해 사용!
    • application.properties 파일에서 JDBC 연결에 필요한 설정 정보를 읽어오게 됨
    • 이로 인해 코드에서 설정을 하드코딩하지 않고, 외부 파일로 관리할 수 있어 유지보수가 용이해짐

@Configuration 및 @PropertySource 어노테이션

 

2. @Value 어노테이션을 통한 프로퍼티 값 주입

  • @Value 어노테이션은 application.properties 파일에 정의된 프로퍼티 값을 필드에 주입하는 역할
  • ${jdbc.url}은 프로퍼티 파일에서 jdbc.url이라는 키로 저장된 값을 url 변수에 할당됨!!
    • 주입된 값들은 이후 데이터베이스 커넥션을 설정하는 데 사용
    • 코드에서 설정 정보를 직접 입력할 필요가 없어 코드의 유연성과 보안이 향상!!

@Value 어노테이션을 통한 프로퍼티 값 주입


3. HikariConfig

  • dataSourse 메서드는 스프링 컨테이너에서 관리되는 DataSource 빈을 생성
  • 이 과정에서 HikariConfig와 HikariDataSource를 사용하여 데이터베이스 연결 풀을 설정
    • HikariConfig는 HikariCP 커넥션 풀의 설정을 담고 있음
    • 데이터베이스 드라이버, URL, 사용자명, 비밀번호를 설정
    • 이 설정을 기반으로 HikariDataSource 객체가 생성되며, 이 객체는 커넥션 풀을 관리하고 애플리케이션이 데이터베이스에 연결할 때마다 재사용 가능한 커넥션을 제공 !!

dataSourse 메서드 및 HikariConfig 와 HikariDataSource 의 사용

 

3. 스프링과 MyBatis 연동

 

왜 연동해야하는걸까?

  • MyBatis는 Java 애플리케이션에서 SQL, 저장 프로시저 및 고급 매핑을 지원하는 데이터 매퍼 프레임워크임.
  • Spring과 MyBatis를 연동하면 데이터베이스와의 통신을 더 효율적이고 유연하게 관리 가능!

 

MyBatis 관련 라이브러리 추가

 

  • mybatis/mybatis-spring:
    • 스프링에서 데이터베이스 작업을 처리하기 위한 기본 라이브러리
    • 데이터베이스 연결, JDBC 템플릿 제공
  • spring-jdbc/spring-tx:
    • 스프링에서 트랜잭션을 관리하기 위한 라이브러리
    • 트랜잭션 경계를 설정하고, 데이터 일관성을 유지하는 데 사용됩니다.

 

  •  

build.gradle

  • implementation 4가지 추가
    • springframework
    • mybatis

implementation / springframework / mybatis

SQLSessionFactory

▲ MyBatis의 주요 개념임!!

  • SQLSessionFactory:
    • MyBatis에서 SQLSession 객체를 생성하는 팩토리 역할
    • 모든 데이터베이스 작업의 시작점이 되는 객체를 생성함
  • SQLSession:
    • 데이터베이스와의 연결을 통해 SQL을 전달하고, 그 결과를 반환받는 객체
    • Connection 객체와 유사하게 SQLSession은 SQL 실행, 트랜잭션 관리, 커밋, 롤백 등을 처리

 

여기서 !! SQLSessionFactory의 역할을 더 자세하게 보자면..

SQLSessionFactory는 MyBatis의 모든 데이터베이스 연결의 시작점.

 

그래서 애플리케이션이 실행될 때 한 번 생성되며, 생성된 SQLSessionFactory를 통해 여러 SQLSession을 생성하고 관리.

 

이 과정을 통해 각 SQLSession은 데이터베이스 연결을 제어하고 SQL을 실행할 수 있게 된 것 !!

 

  •  

resources/mybatis/mybatis-config.xml

  • MyBatis의 설정을 위해 resources/mybatis/mybatis-config.xml 파일 작성
  • MyBatis의 전반적인 설정을 관리하는 곳
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

</configuration>

 

  • mybatis-config.xml 위치

resources/mybatis/mybatis-config.xml

 

config.RootConfig.java

  • config.RootConfig.java 파일에서 설정을 진행
  • Spring에서 MyBatis를 사용하기 위해 Java 설정 파일에 MyBatis 관련 설정을 추가

 

 

 

  • SqlSessionFactoryBean:
    • Spring과 MyBatis를 연동하기 위해 SqlSessionFactoryBean을 설정
    • 이 빈은 Spring의 IoC 컨테이너에서 관리되며, SQLSessionFactory를 생성하고 관리하는 역할
  • MapperScan 어노테이션:
    • MyBatis 매퍼 인터페이스를 자동으로 스캔하고 등록하기 위해 @MapperScan 어노테이션을 사용
    • 이 어노테이션은 지정된 패키지 내의 모든 매퍼 인터페이스를 스프링 빈으로 등록

 

 

스프링과 연동 처리

  • SQL과 그에 대한 처리를 지정하는 역할
  • XML과 인터페이스+어노테이션 형태로 작성

TimeMapper

 

 

위 데이터베이스 연동때와 동일하게 코드만 따라 치니깐,
내가 지금 왜 이 코드를 치고 있나 이해하지 못했었어요 ..
그래서 MyBatis가 무엇인지 설명하고 마무리하겠습니다.

 

 

4. MyBatis

 

Mybatid 새

MyBatis란?

  • MyBatis는 Java 기반의 ORM(Object-Relational Mapping) 프레임워크
  • 전통적인 ORM 프레임워크와 달리,  SQL 쿼리를 직접 작성하면서도 매핑 작업을 자동으로 처리해줌

MyBatis와 Spring 출처: KB IT's Your Life


MyBatis의 주요 특징

  • SQL 주도 개발: SQL 문장을 XML 또는 어노테이션을 통해 명시적으로 작성 가능
  • 유연한 매핑: 객체와 SQL 결과를 손쉽게 매핑하여 복잡한 데이터베이스 구조와 연동이 가능
  • 간단한 설정: MyBatis는 설정이 간단하고, 스프링과 같은 프레임워크와 쉽게 통합 가능

 

MyBatis는 ORM 프레임워크와 달리 SQL 쿼리를 직접 작성하면서도 매핑 작업을 자동으로 처리해준다니!
MyBatis를 간단히 설정해주고, Spring과 연동만 해주면 됨!
데이터베이스 중심의 개발에 매우 필수적인 도구!

 


 

5. 컴포넌트 백엔드 교육 타임라인 정리

아래 타임라인의 TIL은

위 내용 다음으로 진행된 수업내용이 적혀있습니다.

 

그러므로 아래 타임라인은 참고로만 봐주세요!

그리고 다음 포스팅은 컴포넌트 백엔드 교육의 마지막 포스팅이 될 것 같습니다.

 

Spring+Vue로 게시판을 마무리하면서,

이해하지 못한 개념을 뽑아서 자세히 다뤄볼 예정입니다! 


 
👩‍💻타임라인
 
1일차. Spring + Vue: 회원가입 창 만들기

2024.08.27 - [KB IT's Your Life/교육] - [075] Spring + Vue: 회원가입 창 만들기

 

2일차. Spring+Vue: 회원관리-로그인&로그아웃 구현

2024.08.28 - [KB IT's Your Life/교육] - [076] Spring+Vue: 회원관리- 로그인&로그아웃 구현

 

3일차. Spring+Vue: 정보수정 및 비밀번호 변경

2024.08.29 - [KB IT's Your Life/교육] - [077] Spring+Vue: 정보수정 및 비밀번호 변경


📒TIL을 마무리하며..

 
이제 본래 반을 떠나 프로젝트를 시작하게 되었습니다.

 

KB IT's Your Life의 장점이 아닐까 싶은(?)

프로젝트를 앞두고 있습니다.

 

처음 보는 팀원들과 아이디어를 공유하고,

하나의 목표를 향해 으쌰으쌰하는 게 얼마나 재밌고, 뜻깊은 과정인지 알기에 떨리기도 합니다.

 

해당 프로젝트 과정에서의 저의 역할을 올리고자 합니다!

주단위로 작성하면서, 제가 부족했던 점이 무엇인지 확인하려는 목표입니다.

 

위 내용이 '게시판'이라는 걸 구축하는 것에서

MySQL 연동이 어떠한 역할을 하는지 이해하는데 큰 도움이 되었길 바랍니다!

 

 

KB IT's Is Your Life 기자단 부트캠프 til