240108

MINJU KIM·2024년 1월 8일

Spring

목록 보기
3/13

새 프로젝트 생성

11버전으로 시작

버전 낮춰서 생성하면 그래들이 자동으로 다운로드 된다.


다운이 완료되면 구성편집 확인! 자동으로 들어갈 것이다.


https://mvnrepository.com/

메이븐 레포지토리에서 spring-core를 찾아서 다운

build.gradle안의 dependencies에 넣어준다.
복사해서 context랑 test도

변경 로드 해준다.


롬복 라이브러리

https://pig-programming.tistory.com/97

자바 클래스에서 반복적으로 작성되는 getter setter toString 생성자 코드 등의 소스들을 Annotation을 사용해 생략할 수 있도록 컴파일 시점에 자동으로 생성해주는 라이브러리.

플러그인에 거의 다 설정이 되어있다.

메이븐 레퍼지토리에서 검색해서 lombok, Apache Log4j Core,jstl도 추가해주자

https://mvnrepository.com/artifact/org.projectlombok/lombok/1.18.24

https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/2.17.2

https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl/1.2


resource 폴더에 log4j2.xml 파일 만들어준다.

(사진은 폴더를 잘못 만들었으나 main아래에 있는 거에 xml만 넣으면됨.)

그리고 밑에 넣어주기.

<configuration status="INFO">

    <Appenders>
        <!-- 콘솔 -->
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout charset="UTF-8" pattern="%d{hh:mm:ss} %5p [%c] %m%n"/>
        </Console>
    </Appenders>

    <loggers>
        <logger name="org.springframework" level="INFO" additivity="false">
            <appender-ref ref="console" />
        </logger>

        <logger name="com.example.springex" level="INFO" additivity="false">
            <appender-ref ref="console" />
        </logger>

<!--        <logger name="org.zerock.springex.mapper" level="TRACE" additivity="false">-->
<!--            <appender-ref ref="console" />-->
<!--        </logger>-->

        <root level="INFO" additivity="false">
            <AppenderRef ref="console"/>
        </root>

    </loggers>

</configuration>

넣어서 다시 업데이트!

설정 이어하자


web-inf에 root-context.xml 만들어주기

web.inf에서 , 적어서 root-context.xml을 읽게 해준다.

root-context.xml에 추가(db 설치/추가해주고 적어주자)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/c"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

  <context:component-scan base-package="com.example.springex"/>

  <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
      <property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
      <property name="jdbcUrl" value="jdbc:mariadb.jdbc.Driver"/>
      <property name="username" value="root"/>
      <property name="password" value="bitc5600"/>
      <property name="dataSourceProperties">
      <props>
          <prop key="cachePrepStmts">true</prop>
          <prop key="prepStmtCacheSize">250</prop>
          <prop key="prepStmtCacheSqlLimit">2048</prop>
      </props>
      </property>
  </bean>

  <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
      <constructor-arg ref="hikariConfig"/>
  </bean>
</beans>

마리아 DB

https://mariadb.com/kb/en/postdownload/
다운로드


비번: bitc5600로 설정했음!
밑에 꼭 체크해주자->설치

다운되었으면 Dbeaver로 실행


테스트 누르면 다운로드가 된다.

연결!

build.gradle에 db연결 추가해주기

build.gradle에
마리아db, 히카리cp 추가(메이븐 리포지토리 검색해서 추가해준다)

// DB
// https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client
implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '3.0.4'
// https://mvnrepository.com/artifact/com.zaxxer/HikariCP
implementation group: 'com.zaxxer', name: 'HikariCP', version: '5.0.1'

build.gradle에 MyBatis와 MyBatis spring도 추가 https://mvnrepository.com/artifact/org.mybatis/mybatis/3.5.9

https://mvnrepository.com/artifact/org.mybatis/mybatis-spring/2.0.7

  id 'java'
  id 'war'
}

group 'com.example'
version '1.0-SNAPSHOT'

repositories {
  mavenCentral()
}

ext {
  junitVersion = '5.9.2'
}

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

tasks.withType(JavaCompile) {
  options.encoding = 'UTF-8'
}

dependencies {
  compileOnly('javax.servlet:javax.servlet-api:4.0.1')

  testImplementation("org.junit.jupiter:junit-jupiter-api:${junitVersion}")
  testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${junitVersion}")

  /* LOMBOK */
  compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.24'
  annotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.24'
  testImplementation 'org.projectlombok:lombok:1.18.28'
  testAnnotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.24'

  /* SPRING */
  implementation group: 'org.springframework', name: 'spring-core', version: '5.3.19'
  implementation group: 'org.springframework', name: 'spring-context', version: '5.3.19'
  implementation group: 'org.springframework', name: 'spring-test', version: '5.3.19'
  implementation group: 'org.springframework', name: 'spring-webmvc', version: '5.3.19'
  implementation group: 'org.springframework', name: 'spring-jdbc', version: '5.3.19'
  implementation group: 'org.springframework', name: 'spring-tx', version: '5.3.19'


  /* LOG4J */
  implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.17.2'
  implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.17.2'
  implementation group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.17.2'

  implementation group: 'jstl', name: 'jstl', version: '1.2'

  /* DB */
  implementation group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '3.0.4'
  implementation group: 'com.zaxxer', name: 'HikariCP', version: '5.0.1'

  /* MyBatis */
  implementation group: 'org.mybatis', name: 'mybatis', version: '3.5.9'
  implementation group: 'org.mybatis', name: 'mybatis-spring', version: '2.0.7'
}

test {
  useJUnitPlatform()
}

root-context.xml에 추가

<context:component-scan base-package="com.example.springex"/>
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
    <property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
    <property name="jdbcUrl" value="jdbc:mariadb://localhost:3306/"/>
    <property name="username" value="root"/>
    <property name="password" value="bitc5600"/>
    <property name="dataSourceProperties">
        <props>
            <prop key="cachePrepStmts">true</prop>
            <prop key="prepStmtCacheSize">250</prop>
            <prop key="prepStmtCacheSqlLimit">2048</prop>
        </props>
    </property>
</bean>

<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
    <constructor-arg ref="hikariConfig"/>
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
</bean>

<mybatis:scan base-package="com.example.springex.mapper"></mybatis:scan>

TimeMapper에 대고 알트 엔터 누르면 test도 만들 수 있다.

TimeMapperTest.java

TimeMapperTest.java
package com.example.springex.mapper;

import lombok.extern.log4j.Log4j2;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;

import static org.junit.jupiter.api.Assertions.*;


@Log4j2
@ExtendWith(SpringExtension.class)
@ContextConfiguration(locations = "file:src/main/webapp/WEB-INF/root-context.xml")
class TimeMapperTest {
  @Autowired (required = false)
  private TimeMapper timeMapper;

  @Test
  public void testGetTime(){
      log.info(timeMapper.getTime());
  }


}

테스트를 돌리면 시간이 나온다.


log4j 개념

로그 레벨

https://cofs.tistory.com/354
https://myblog.opendocs.co.kr/archives/950
Log4j 2 제대로 사용하기 - 개념
https://velog.io/@bread_dd/Log4j-2-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-%EA%B0%9C%EB%85%90

로그레벨 순서

TRACE > DEBUG > INFO > WARN > ERROR > FATAL

  • TRACE
    DEBUG보다 더 세분화 된 정보를 지정

  • DEBUG
    프로그램 디버깅하기 위한 정보를 지정

  • INFO
    상태변경과 같은 정보성 메세지 지정

  • WARN
    처리 가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메세지 지정

  • ERROR
    요청을 처리 도중 문제가 발생한 경우

  • FATAL
    프로그램을 중단 할 수 있는 심각한 오류, 작동이 불가능할 경우

프로젝트 진행 시 대체로 개발가이드에는 DEBUG, INFO, WARN, ERROR 4가지를 구분하여 출력하도록 되어 있다.

Appender

MBatis(iBatis)

  • pstmt rs의 처리를 알아서 해준다.
  • close 처리(conn, pstmt, rs) 처리해준다.
  • sql 분리 : xml로 query 부분을 분리해서 사용한다.
    Mybatis는 독립된 라이브러리이다.
    Spring에서는 MyBatis와 연동을 쉽게 처리할 수 있는 라이브러리와 API를 제공한다.
  • MyBatis를 단독으로 개발하고 Spring에서 DAO를 작성해서 처리하는 방식.
  • MyBatis와 Spring을 연동하고 Mapper 인터페이스만 이용하는 방식.

0개의 댓글