TIL(2023.11.14)

JAKE·2023년 11월 14일

TIL

목록 보기
45/48
post-thumbnail

🏃‍♂️What I learned

1. 타임리프(Thymeleaf)

prefix, suffix 설정은 application.properties에서

  • xmlns:th="http://www.thymeleaf.org" 필수 -> th 속성을 사용하기 위한 네임스페이스

    타임리프 문법
    1) ${key} : 변수, Model 등으로 전달된 데이터의 key값 입력하면 value 출력
    2) *{key} : 선택 변수, 객체에 포함된 필드 출력 -> th:object랑 같이 사용
    3) th:text, th:value -> 지정된 내용을 text형식으로 내용, input의 value로 출력
    4) th:text, th:utext
       [[...]],    [(...)] -> 텍스트 출력(HTML 태그의 해석 차이(각각 innerText, innerHTML과 비슷))

    5) th:fragment="조각 이름"
    6) th:insert="~{조각파일 경로 :: 조각이름}" -> 해당 조각 삽입
    7) th:replace="~{조각파일 경로 :: 조각이름}" -> 해당 조각 교체
    8) 조각이 없을 경우 -> th:replace="~{html 파일 경로}"

    9) th:block : 유일한 자체 태그(마땅한 HTML태그 없을 때 사용, 다른 타임리프 수행 후 소멸)

    10) th:if="${조건}", th:unless="${조건}" -> if, else : true,false 조건으로도 사용 가능
    11) th:switch="${값}", th:case="${switch의 값 혹은 "*"}" -> "*"은 default

    12) th:href = "@{url}", th:src = "@{url}", th:action = "@{url}" -> 경로에 대한 표현식

    13) th:each="item : ${list}" -> 해당 요소를 list길이 만큼 반복

    14) 비교연산자 : lt(<), gt(>), le(<=), ge(>=), eq(==), ne(!=), not(!)
    15) 삼항연산자 : 조건식 ? true일때 반환값 : false일때 반환값
    16) elvis 연산자 : 값 ?: 값이 없을때 반환값
    17) No-operation 연산자 : 값 ?:_ -> 값이 없으면 html내부 태그 반환

    18) script th:inline="javascript" : JS영역에서 타임리프 적용 해석


2. DB연결

  • HikariCP : 다른 Connection에 비해 가벼워서 boot에서 많이 사용

DB연결은 2가지 방법으로 가능

1) application.properties 설정

application.properties은 외부설정 파일(디폴트로 설정)

  • 프로젝트 배포시 사용할 여러가지 설정 정의 -> 스프링이 자동으로 읽음
  • 개발환경(dev.properties)과 운영환경(prod.properties)에 따라 나눌 수 있음

  1-1) 오라클 DB와 연결 시킴

e.g.)
#오라클 DB 연결 정보
spring.datasource.hikari.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.hikari.jdbc-url=jdbc:oracle:thin:@IP주소:포트번호:DB이름
spring.datasource.hikari.username=계정명
spring.datasource.hikari.password=비밀번호
# HikariCP Connection Pool Properties
#풀이 연결을 사용할 수 있을 때까지 대기하는 최대 시간(ms)을 지정
spring.datasource.hikari.connection-timeout=30000
#풀의 최대 연결 수 설정
spring.datasource.hikari.maximum-pool-size=20
#연결이 풀에서 유휴 상태로 있을 수 있는 최대 시간(ms)을 지정
spring.datasource.hikari.idle-timeout=600000
#연결 풀의 이름을 지정
spring.datasource.hikari.pool-name=MyHikariCP
#자동 커밋 끄기
spring.datasource.hikari.auto-commit=false

  1-2) HikariCP로 커넥션 풀 생성 및 설정

e.g.)
# HikariCP Connection Pool Properties
#풀이 연결을 사용할 수 있을 때까지 대기하는 최대 시간(밀리초)을 지정합니다.
spring.datasource.hikari.connection-timeout=30000
#풀의 최대 연결 수 설정
spring.datasource.hikari.maximum-pool-size=50
# 연결이 풀에서 유휴 상태로 있을 수 있는 최대 시간(밀리초)을 지정합니다.
spring.datasource.hikari.idle-timeout=600000
#연결 풀의 이름을 설정합니다.
spring.datasource.hikari.pool-name=MyHikariCP

2) @Configuration 클래스 파일을 이용

  • file -> config.properties 파일을 새로 생성

    github에 계정, 암호 등이 업로드되는 문제 발생을 막기 위해 따로 생성하여 사용

  2-1) 오라클 DB와 연결

e.g.)
#오라클 DB 연결 정보
spring.datasource.hikari.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.hikari.jdbc-url=jdbc:oracle:thin:@IP주소:포트번호:DB이름
spring.datasource.hikari.username=계정명
spring.datasource.hikari.password=비밀번호
# HikariCP Connection Pool Properties
#풀이 연결을 사용할 수 있을 때까지 대기하는 최대 시간(ms)을 지정
spring.datasource.hikari.connection-timeout=30000
#풀의 최대 연결 수 설정
spring.datasource.hikari.maximum-pool-size=20
#연결이 풀에서 유휴 상태로 있을 수 있는 최대 시간(ms)을 지정
spring.datasource.hikari.idle-timeout=600000
#연결 풀의 이름을 지정
spring.datasource.hikari.pool-name=MyHikariCP
#자동 커밋 끄기
spring.datasource.hikari.auto-commit=false

  2-2) DBConfig클래스 생성하여 연결

package edu.kh.project.common.config;
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;
// 어플리케이션 스코프 객체

@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari")
public HikariConfig hikariConfig() {

	return new HikariConfig();
    // HikariConfig 객체를 만들어서 반환
}

@Bean
public DataSource dataSource(HikariConfig config) {

	DataSource dataSource = new HikariDataSource(config);
    
	return dataSource;
}

3. My-Batis 추가하기

1) gradle에 dependency 추가

implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.2’

2) 마이바티스 설정 파일 생성

file 생성 -> mybatis-config.xml (위치는 src/main/resources)

<?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" />
	</settings>
</configuration>

3) src/main/resources에 mappers 폴더 추가

4) DB연결도 2가지 방법으로 가능

  4-1) application.properties에서 설정 (DB연결을 application.properties에서 연결한 경우만 가능)

### 마이바티스 설정 ###

#마이바티스 설정 파일 경로
mybatis.config-location=classpath:mybatis-config.xml

#매퍼 파일 경로
mybatis.mapper-locations=classpath:/mappers/**.xml

#별칭을 지정할 파일이 포함된 패키지
#콤마(,) 구분하여 여러 패키지 작성, 별칭은 클래스명의 소문자로 자동 지정
mybatis.type-aliases-package=edu.kh.project.member.model.dto

  4-2) @Configuration 클래스 파일 이용 (DB연결을 DBConfig로 연결한 경우만 가능)

// 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("edu.kh.project.member.model.dto");
	
    // 마이바티스 설정 파일 경로 지정
    sessionFactoryBean.setConfigLocation(applicationContext.getResource("classpath:mybatis-config.xml"));

	// SqlSession 객체 반환
	return sessionFactoryBean.getObject();
}

// SqlSessionTemplate : 기본 SQL 실행 + 트랜잭션 처리
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sessionFactory) {

	return new SqlSessionTemplate(sessionFactory);
    
}

// DataSourceTransactionManager : 트랜잭션 매니저
@Bean
public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource) {

	return new DataSourceTransactionManager(dataSource);

}

4. 자주 쓰는 어노테이션 & dependency

# 어노테이션
  1. @Configuration
    -> 설정파일임을 명시 + Bean 등록
  2. @Bean
    -> 개발자가 수동으로 Bean 등록 (관리는 스프링이)
  3. @PropertySource("/classpath: 경로 ")
    -> "경로"에 있는 파일의 내용을 사용함
  4. @ConfigurationProperties(prefix = "레벨")
    -> "레벨"로 시작하는 설정을 모두 가져옴(필드, 메서드 다 가능)
  5. @Mapper
    -> Mapper 인터페이스임을 명시 + Bean 등록
  6. @Value(${"특정 레벨"})
    -> "특정 레벨" 값을 가져와서 대입 (필드에서만 사용 가능)

# Dependency
  1. implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    -> Spring Boot JDBC 관련 라이브러리 모음
  2. runtimeOnly 'com.oracle.database.jdbc:ojdbc8'
    -> 오라클 JDBC Driver
  3. annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
    -> @ConfigurationProperties를 사용 가능하게
  4. implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.2’
    -> Spring - Mybatis 관련 라이브러리 모음
  5. implementation group: 'org.springframework.boot', name: 'spring-boot-starter-mail', version: '3.1.0'
    -> email관련 설정
- dependency 추가 후엔 꼭 업데이트!

0개의 댓글