React - SpringBoot 연결하기 (회원가입+todo리스트 만들기) 2

2024. 7. 15. 18:33React

 

mybatis-config.xml

<?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>
	<settings>
		<setting name="jdbcTypeForNull" value="NULL"/>
		
		<!-- todo_name underscore 표기법을 camelCase 표기법으로 변경 -->
		<setting name="mapUnderscoreToCamelCase" value="true"/>
	</settings>
</configuration>

 

 

config.properties

spring.datasource.hikari.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.hikari.jdbc-url=jdbc:oracle:thin:@localhost:1521/xe
spring.datasource.hikari.username=kh_WORKBOOK
spring.datasource.hikari.password=kh1234 


spring.datasource.hikari.connection-timeout=30000

spring.datasource.hikari.maximum-pool-size=5

spring.datasource.hikari.idle-timeout=600000

spring.datasource.hikari.pool-name=MyHikariCP

spring.datasource.hikari.auto-commit=false


spring.servlet.multipart.file-size-threshold = 52428800

spring.servlet.multipart.max-file-size = 10485760

spring.servlet.multipart.max-request-size = 52428800


spring.servlet.multipart.location = C:/Users/user1/Desktop
my.member.location = C:/Users/user1/Desktop/uploadImages/member/
my.member.webpath = /images/member/

my.board.location = C:/Users/user1/Desktop/uploadImages/board/
my.board.webpath = /images/board/

 

application.properties

server.port=9091

#logging.level.현재패키지명
#com.kh에서 시작하는 모든 코드의 정보를 출력
logging.level.com.kh=debug

#임시로 컴퓨터에 저장한 정보(세션) 추적 방식을 쿠키로 설정
#사용자의 세션 정보를 쿠키를 통해 관리
server.servlet.session.tracking-modes=cookie

#코드 변경시 폴더를 자동으로 재시작 -> 개발의 편의성 올리기
spring.devtools.livereload.enbled=true

#템플릿 파일이 변경될 때마다 자동으로 새로운 html 내용을 반영
spring.thymeleaf.cache=false

 

** 세션과 쿠키의 차이

 

쿠키(cookie) : 사용자의 브라우저(인터넷)에 저장
- 만료되는 시간 설정 가능. 사용자 컴퓨터에 작은 텍스트 파일로 데이터를 저장
- 보안이 취약하므로 민감한 정보 저장 x
- 로그인 상태 유지, 방문 기록, 사용자 설정 저장 등에 사용

세션(session) : 개발자 서버에 저장
- 사용자가 브라우저를 닫거나, 서버에서 세션을 만료 시킬 떄까지 유지
- 세션 만료 시간은 서버에서 설정 가능
- 사용자가 서버에 직접 접근할 수 없기 때문에 보안성이 높음
- 세션 ID만 사용자 쿠키로 전송되고, 이를 통해 세션을 식별
- 로그인 정보 유지, 장바구니 정보 저장, 사용자 맞춤형 서비스 제공 등에 사용

 

todo-mapper.xml

<?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">
<mapper namespace="com.kh.mapper.TodoMapper">
	<select id="idCheck">
		SELECT COUNT(*) FROM TODO_MEMBER WHERE ID = #{id}
	</select>
	
	<insert id="signup">
		INSERT INTO TODO_MEMBER VALUES(SEQ_TODO_MEMBER_NO.NEXTVAL, #{id}, #{pw}, #{name})
	</insert>
</mapper>

 

 

TodoMember

package com.kh.dto;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class TodoMember {

	private int todoMemberNo;
	private String id;
	private String pw;
	private String name;
}

 

TodoMapper

package com.kh.mapper;

import org.apache.ibatis.annotations.Mapper;

import com.kh.dto.TodoMember;

@Mapper
public interface TodoMapper {
	int idCheck(String id);
	int signup(TodoMember todoMember);
}

 

DBConfig

package com.kh.common.config;

import java.io.IOException;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

// 컴퓨터 설정, 구성
@Configuration
@PropertySource("classpath:/config.properties") //추후 변
public class DBConfig {

	@Autowired
	private ApplicationContext applicationContext; // 폴더 흐름
	//import org.springframework.context.ApplicationContext; 할 것.
	
	@Bean
	@ConfigurationProperties(prefix = "spring.datasource.hikari")
	public HikariConfig hikariConfig() { //주소 설정
		return new HikariConfig();
	}
	
	@Bean //Spring Context 스프링 안에서 관리되고 있는 기능임을 명시하는 설정
	public DataSource dataSource(HikariConfig config) { //연결된 db를 스프링에서 관리. -> 관리하는 용도로 등록한 것
		DataSource dataSource = new HikariDataSource(config);
		return dataSource;
	}
	
	//Mybatis 설정 추가
	//SqlSessionFactory : SqlSession을 만드는객체
	@Bean
	public SqlSessionFactory sessionFactory(DataSource dataSource) throws Exception {
		SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
		sessionFactoryBean.setDataSource(dataSource);
		
		//매퍼 파일이 모여있는 경로 설정
		sessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:/mappers/**.xml")); //추후 변경
		
		//별칭 지정해야하는 dto가 모여있는 패키지 지정
		sessionFactoryBean.setTypeAliasesPackage("com.kh.dto"); //추후 변경
		
		//mybatis 설정 파일 경로 지정
		sessionFactoryBean.setConfigLocation(applicationContext.getResource("classpath:mybatis-config.xml")); //추후 변경
		
		return sessionFactoryBean.getObject();
	}
	
	//기본 sql 실행 + Commit 처리 = 트랜잭션 처리. (commit = 최종 파일 저장)
	public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sessionFactory) {
		return new SqlSessionTemplate(sessionFactory);
	}
	
	//전반적인 Commit과 Rollback과 같은 관리를 해주는 트랜잭션 매니저
	//DataSourceTransactionManager = 트랜잭션 매니저
	@Bean
	public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource) {
		return new DataSourceTransactionManager(dataSource);
	}
}

 

** @PropertySource("classpath:/config.properties")
@PropertySource : properties 파일의 내용을 이용함을 명시
다른 properties 파일을 추가하고 싶다면 어노테이션을 추가

=> @PropertySource("classpath:/config2.properties")

 

** @ConfigurationProperties(prefix = "spring.datasource.hikari")

properties 파일의 내용을 이용해서 생성되는 bean을 설정하는 어노테이션

prefix = 시작 위치를 지정해서 'spring.datasource.hikari'로 시작하는 설정을 모두 적용
spring.datasource.hikari = Oracle DB 연결할 때 쓰는 풀. 빠르고 가벼움

 

**  sessionFactoryBean.setTypeAliasesPackage("com.kh.dto");

별칭 지정해야하는 dto가 모여있는 패키지 지정
해당 패키지에 있는 모든 클래스가 클래스명으로 별칭이 지정
aliase = 별칭, package 폴더 밑에 있는 파일 모두