본문 바로가기

전체 글

(109)
Transaction 트랜잭션은 DBMS에서 SQL이 실행되는 것을 말한다. 트랜잭션 시작과 종료 트랜잭션은 시작하는 SQL 명령어는 start transaction이다. 트랜잭션을 성공적으로 종료하는 명령어는 commit. 트랜잭션을 취소하면서 종료하는 명령어는 rollback. 트랜잭션 속성 A: 원자성 => 트랜잭션은 전체 성공 또는 전체 실패를 보장한다. C: 일관성 => 트랜잭션이 끝나면 모순이 없는 상태여야한다. 즉, 중복되는 학번을 저장하려는 트랜잭션은 자동 취소된다 I: 독립성 => 여러개의 트랜잭션이 충돌되지 않음을 보장한다 D: 지속성 => 트랜잭션이 끝난 데이터는 시스템 장애 이유로 날라가는 일 없이 계속 보장이된다. DataBase Lock 예를 들어 어떤 트랜잭션에서 어느 레코드를 수정하는 도중에, 다..
성능 개선 clustered index 클러스터드 인덱스 순서로 레코드들이 하드디스크에 저장된다. 클러스터드 인덱스를 따로 지정하지 않으면, 기본 키(primary key)가 클러스터드 인덱스가 된다. 클러스터드 인덱스를 만들면, 조회할 레코드들이 하드디스크에서 서로 모여있기 때문에, 최소한의 하드디스크 읽기로 게시글 목록을 조회할 수 있다. 그리고 조회할 순서대로 레코드들이 저장되어 있기 때문에 하드디스크에서 순서대로 레코드를 읽을 수 있다. 따라서 읽어야할 데이터가 하드디스크에 순서대로 모여있으면 헤드 이동 없이 한 번에 읽을 수 있으므로 빠르다. 장점은 테이블의 모든 보조 인덱스가 클러스터링 인덱스를 가지고 있기 때문에 인덱스만으로 처리될 수 있는 경우가 많다(이를 커버링 인덱스라고 함) 단점은 테이블의 모든..
ORM ORM은 Object Relation Mappin의 약자다. Object는 객체, Relation은 관계형 데이터베이스의 데이터, Mapping은 객체와 관계형 데이터베이스의 데이터를 서로 변환해준다. 종류에는 Mybatis, JPA, Hibernate 등이있다. Mybatis vs JPA Mybatis의 장점 익숙한 SQL 문법으로 구현할 수 있다. DB 조회결과를 복잡한 객체 구조로 변환해야 할 때 ResultMap기능을 쓰면 편하다 Mybatis의 단점 구현해야할 소스코드양이 상대적으로 많다 관계형 데이터베이스에서만 사용가능하다 DBMS 제품마다 SQL 문법이 조금씩 다르다. 따라서 DBMS 제품을 교체하려면 SQL 문장도 수정해야 된다. JPA의 장점 SQL 문법을 사용하지 않아서 DBMS 제품을..
JSP tomcat-embed-jasper 의존성에 역할은 다음과 같다. 스프링 부트 앱에는 톰캣 서버가 내장되어 있다. 톰캣 서버는 servlet container 이다. 톰캣 서버는 servlet을 실행하는 서버이다. 톰캣에서 JSP 파일은, 먼저 servlet이로 변환(컴파일)된 후 실행된다. tomcat-embed-jasper는 JSP 파일을 servlet으로 변환하는 컴파일러이다. 이 것을 프로젝트에 추가하지 않고 실행하면, JSP 파일이 실행되지 않고, 웹브라우저에서 다운로드 될 것이다. 톰캣은 servlet만 실행할뿐, 다른 파일들은 웹브라우저로 그대로 전송하기 때문이다 실행과정 (1) 웹브라우저 -> 서버 HttpRequest (URL, request parameter) 서버 == servlet ..
RDB vs NoSQL DB RDB: 관계형 DB NoSQL: 관계형이 아닌 DB RDB의 장점 표현이 풍부하고 선언적인 언어인 SQL을 사용할 수있다. 트랜잭션을 통한 엄격한 데이터 처리 RDB의 단점 DB 서버 몇백대를 연결하여 하나의 DB처럼 운영하기 어렵다. NoSQL DB의 단점 DB 서버 몇백대를 연결하여 하나의 DB처럼 운영하기 편하다. NoSQL DB의 단점 SQL 언어를 사용하기 힘들다. 데이터 처리가 관계형 DB처럼 엄격하지는 않다
JDBC Java DataBase Connectivity의 약자로 자바 프로그램에서 DB와 관련된 작업을 처리할 수 있도록 도와준다. DBMS(DataBaseManagementSystem) 종류(Mysql, Mssql, Oracle..)에 상관없이 하나의 JDBC API를 두어 사용하여 DBMS 작업을 처리한다. JRE에 포함되어있다. 실행과정 Connection: 데이터베이스에 연결하기 위한 객체이다 PreparedStatement: SQL 명령을 실행하기 위한 객체이다. ResultSet: SQL 명령의 조회 결과 데이터를 전달해 주는 객체이다. 작업이 끝난 후, Connection 객체의 close 메소드는 반드시 호출해 주어야 한다. PreparedStatement, ResultSet 객체의 close 메..
Spring Web MVC WebMvcAutoConfiguration HiddenHttpMethodFilter.class는 Spring framwork에서 filter에 해당하는데, post, delete 등 HTTP 메서드 요청을 _method 라는 히든 파라미터로 어떤 메소드인지 값을 받아 올 수있다. 그리고 그 값을 받아와서 컨트롤러에서 @DeleteMapping 등 HandlerMapping을 할 수 있도록 도와준다. HttpPutFormContentFilter.class는 Http POST 폼만 폼데이터를 보낼 수 있도록 서블릿 스펙에 정의가 되어있는데 put과 patch도 post요청처럼 데이터를 꺼낼 수 있도록 도와준다. * 스프링 부트가 제공하는 MVC기능을 더 확장하고 싶을 때 `implements WebMvcCo..
Test spring-boot-strater-test 의존성 주입을 받으면, spring-boot-starter 의존성 폼에 따라서 여러가지 라이브러리들을 가져온다. junit, mockito 등등.. 그리고 spring-boot-starter의 parent에서 버전관리도 해준다. webEnvironment Mock: mock servlet environment. 내장 톰캣 구동 안한다 RANDON_PORT, DEFINED_PORT: 내장 톰캣 사용 함. NONE: 서블릿 환경 제공 안 함 @AutoCofigureMockMVC @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK): Mocking을 한 서블릿 컨테이너가 띄어진다. 그래서 disp..