-----------------------

데이터베이스에는

undo

redo

 

[홍길동 5000원] 일경우

10000원으로 업데이트하고 커밋을 아직 안했을 경우

undo 로그에는 [홍길동 5000원]의 값이 저장되어 있다 (커밋하기 전의 데이터)

롤백하면 undo로그에서 값을 가져온다

 

1번유저가 트랜잭션중

2번유저가 들어오면

select를 처음 끝 두번하게되면

처음엔 커밋전이라 5000원

끝엔 커밋후라  10000원을 보게된다

 

oracle은 READ COMMITTED

MySql은 Repeatable Read

한번 undo를 봤다면 끝까지 같은 값을 본다 - 정합성 문제가 발생하지 않는다

 

https://joont92.github.io/db/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EA%B2%A9%EB%A6%AC-%EC%88%98%EC%A4%80-isolation-level/

 

[db] 트랜잭션 격리 수준(isolation level)

트랜잭션 격리수준(isolation level)이란 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것이다. 즉, 간단하게 말해 특정 트랜잭션이 다른 트랜잭션에 ��

joont92.github.io

 

커밋 리드

언커밋 리드

 

겟인데어 41~ 강

 

--------------------------

'Database' 카테고리의 다른 글

데이터베이스 // 순위 매기기  (0) 2020.09.10
20200427 ResultSet  (0) 2020.04.27
200416 / 데이터베이스 용어 1  (0) 2020.04.16

 

----------------

컨트롤러는 무조건 서비스를 호출해야한다 (리파지토리 안됨)

----------------

디스패쳐 서블릿 - 프론트컨트롤러 - 컨트롤러들

-----------------

Controller는 뷰리졸버가 가능하다 (데이터를 주고받을 때 @ResponseBody)

RestController는 데이터만 리턴한다

----------------

// Controller, Repository, Configuration, Service, Component

// RestController, Bean

------------------

Service를 이용하면 트랜잭션이 발동함

Component는 특별한 역할이 없다

Bean은 클래스가 아닌 메서드에 묶인다

-------------------

https://private.tistory.com/39

 

스프링(Spring) - DI(Depedency Injection) 개념과 예제 : setter() 사용

예제 파일 : 이번 포스트에서는 스프링의 핵심 기능중 하나인 DI(Dependecy Injection)에 대해 알아보고 예제를 작성해보겠습니다. DI는 말 그대로 의존성을 주입시켜준다- 입니다. 객체를 직접 생성하

private.tistory.com

-----------------

 

 

 

 

 

 

 

----------

web.xml 에는 스프링 필터가 있다
종류가 많은데 중요한 것만 확인하자

message converter -> 기본전략이 xxx-from-urlencoded 즉 key=value 데이터만 파싱하려고한다
@RequestBody 를 걸어두면 들어오는 데이터를 확인하여 제이슨이면 메세지 컨버터를 체인지 한다
gson과 비슷한 오브젝트 매퍼가 동작된다 (그것을 동작시켜주는 것이 jackson이다)

 

추후에 메시지컨버터를 직접 바꿀 수도 있다

----------------

'Server > Spring Boot' 카테고리의 다른 글

spring boot // 블로그 연습  (0) 2020.07.27
spring boot // 주의사항  (0) 2020.07.27
spirng boot // 서비스 연습  (0) 2020.07.27
spring boot // 스프링 부트 세팅 요약  (0) 2020.07.27
spring boot // 퍼시스턴스  (0) 2020.07.27

'Server > Spring Boot' 카테고리의 다른 글

spring boot // 주의사항  (0) 2020.07.27
spring boot // web.xml  (0) 2020.07.27
spring boot // 스프링 부트 세팅 요약  (0) 2020.07.27
spring boot // 퍼시스턴스  (0) 2020.07.27
spring boot // dispatcherServlet / 어노테이션  (0) 2020.07.27

 

스프링 부트 세팅

Spring Web

SpringBoot Devtool

Lombok

MySQL

MYbatis

---------

JSTL

Tomcat-Embed-Jasper

-----------

테이블생성

------------

1 properties 
yml 확장자 변경
DB연결정보넣기
JSP view 경로 설정 (ViewResolver)

2 config 폴더생성
(복붙)
DataSourceConfig.java(참고 : yml 설정을 참고)
DataAccessConfig.java(참고 : DataSource와 Mapper)

3 Mapper 경로에 UserMapper.xml 생성 및 파일 세팅

4 User 클래스 만들기

5 UserRepository 만들기

6 jsp테스트 파일 만들기

7 TestController 생성 및 테스트

 

------------------

 

이름과 패키지명을 설정해준다

 

 

필요한 디펜던시를 고른다

 

 

외부에서 필요한 디펜던시들을 가져온다

 

 

 

 

 

 

 

 

외부 디펜던시들을 pom.xml에 넣는다

 

 

application.yml

server:
  port: 8000
  servlet:
    context-path: /blog

spring:  
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp
      
  datasource:
    url: jdbc:mysql://localhost:3306/spring?serverTimezone=Asia/Seoul
    username: spring
    password: bitc5600
    driver-class-name: com.mysql.cj.jdbc.Driver

properties파일을 yml로 바꾸고 세팅해준다

 

 

컨피그 파일을 만든다

 

 

 

 

DataAccessConfig.java

package com.cos.demo.config;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

@Configuration
@MapperScan(basePackages = "com.cos.blog.repository") // 옆의 경로 이하 파일을 메모리에 다띄워준다(@repo~~ 안해줘도됨)
public class DataAccessConfig {

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {

        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();

        sessionFactory.setDataSource(dataSource);
        sessionFactory.setMapperLocations(
        		new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
        return sessionFactory.getObject();
    }

    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
    
}

 

 

DataSourceConfig.java

package com.cos.demo.config;

import javax.sql.DataSource;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DataSourceConfig {

	@ConfigurationProperties(prefix="spring.datasource")
	public DataSource dataSource(){
    	return DataSourceBuilder.create().build();
	}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

---------------------

 

퍼시스턴스 - DB와 동기화 되어 있는 데이터 (DB에서 받은 데이터, DB내용과 똑같아야함)

 

 

dispatcherServlet

 

서블릿 매핑, 프론트컨트롤러, 라우팅 등을 관리하는 객체

request요청만 추적한다

----------------

어노테이션

 

@Controller는 요청이 오면 생성됨

즉, 컨트롤러가 떴을경우에는 request, response 를 불러 올 수 있다

 

나머지 어노테이션들은 미리 생성 되어 있고

@Controller는 요청이 오면 생성되니 순서를 잘기억하자

------------------------

 

@Controller는 사용자가 요청시에 뜬다

dispatherServlet은 요청이 오면

@Controller

@RestController

를 검색하여 메모리에 띄워서 실행시킨다

-------------------

다른 어노테이션은 서버 실행시에 미리 다 뜨는데

@Controller는 위와 같이 다르다

자바는 쓰레드를 많이 생성 할 수 있기 때문에

사용자가 동시에 요청할 경우, 즉 request할 때마다 띄우게 된다

---------------

레거시에서는 

루트컨텍스트/ 서블릿 컨텍스트 가 있어서

메모리에 뜨는 타이밍에 따라 관리한다

-------------

@Transactional

알아서 롤백 알아서 커밋됨

---------------

 

 

 

 

 

-------------------

sqlsession은 DBCP, MyBatis 과 연계되어 있다

datasource DBCP - 데이터베이스 커넥션 풀링 기술
MyBatis - rs 결과를 오브젝트나 컬렉션으로 들고 있는다 - persistence - 데이터베이스에 접근해서 데이터를 오브젝트화

DB - sqlsession - repository

 

----------------

+ Recent posts