[용어 정리]
파라미터 (parameter)
Servlet에서 parameter는 브라우저로부터의 요청과 함께 전달된 데이터를 의미함
트랜잭션 (Transaction)
"DB의 상태를 변화시키기 위해 수행하는 작업단위"가 정의인데 이 설명으로는 오히려 더 헷갈려서 더 자세하게 정리를 해봤다.
트랜잭션은 하나의 행동(작업)이 아니라, 하나의 논리적인 작업을 처리하기 위해 묶여 있는 여러 작업들의 집합을 의미한다. 즉, 트랜잭션은 여러 작업(행동)을 묶은 하나의 작업 단위라고 이해하는게 맞다
트랜잭션의 특징
- 작업 단위: 여러 작업을 하나로 묶어서 처리하고, 모든 작업이 성공해야 트랜잭션이 완료된다 ( = Commit )
- 성공 or 실패: 트랜잭션 내의 모든 작업이 완료되어야만 데이터베이스에 반영되고, 중간에 실패하면 전체 작업이 취소된다.( = rollback )
요약:
- 트랜잭션은 하나의 행동을 의미하는 것이 아니라, 하나의 논리적 작업을 위해 여러 행동(작업)을 묶어놓은 작업 단위
- 트랜잭션 내의 작업들은 모두 성공해야만 데이터베이스에 적용된다(성공하면 COMMIT), 아니면 취소(실패 시 ROLLBACK)
총정리
#헷갈렸던 부분이 하나의 행동인지, 여러개의 행동(작업)을 말하는 건지 헷갈렸는데, 둘 다 해당돼서 더 정리가 안 되고 헷갈렸던 거 같다 (1개의 작업이 트랜잭션이 될 수도 있고 여러 개의 작업이 하나의 트랜잭션이 될 수도 있는거다)
DML ( Data Manipulation Language ) = 데이터 조작어
- SELECT
- INSERT
- UPDATE
- DELETE
위 4가지 DB 조작어들을 말한다
클래스패스 ( classpath )
class를 찾기 위한 경로
/mybatis-config.xml과 같은 경로
참조
데이터의 주소를 보내주는 것
# 간단한 개념들을 두루뭉실하게 알고 있으니까 개념이 더해졌을 때 이해하기가 힘들어졌고
# 그 개념들을 설명하라고 했을 때 생각보다 말로 설명을 못해서 간단한 개념들도 정
[mybatis]
SqlSession 클래스
: MyBatis에서 DB와 상호작용하기 위한 핵심 인터페이스
주요 기능
- SQL쿼리 실행 : DB의 데이터를 조회하거나 삽입, 수정, 삭제
- 트랜잭션 관리: commit과 rollback을 할 수 있게해줌
- 연결관리: SqlSession은 내부적으로 JDBC연결을 사용해서 DB와 상호작용을 함 (연결은 Mybatis가 자동으로 관리)
SqlSession 사용 흐름
1. SqlSessionFactory로 SqlSession생성
- SqlSessionFactory는 Mybatis설정파일(=mybatis-config.xml)을 기반으로 SqlSession을 생성하는 팩토리임
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// SqlSession팩토리빌더의 bulid()로 SqlFactory를 만든다
SqlSession sqlSession = sqlSessionFactory.openSession();
//만든 sqlSession팩토리로 sqlSession응애를 낳는다
2. SQL 쿼리 실행
- SqlSession으로 SQL쿼리를 실행하고 조회(select) / 추가(insert) / 삭제(delect) 한다
List<User> users = sqlSession.selectList("UserMapper.selectAllUsers");
// 위 코드에서는 여러개의 목록을 조회하기 때문에 List<>에 담아준 모습
3. 트랜잭션 처리
- 데이터베이스를 변경작업 후에는 반드시 트랜잭션을 커밋하거나 롤백해야 함
sqlSession.insert("UserMapper.insertUser", user); // 수정(추가)
sqlSession.commit(); // 트랜잭션 커밋
# 보통 if문으로 commit과 rollback을 나눈다
4. 자원해제
-모든 작업이 완료된 후에는 SqlSession을 닫아야 함
sqlSession.close(); //문 닫아요
# 닫지 않으면 메모리를 잡아먹는다고 한다
SqlSession 특징
mapper와 연동
mybatis에서는 mapper.xml파일이나 어노테이션(@)을 통해 SQL쿼리를 정의하고
이걸 sqlSession에서 호출해서 실행한다.
mapper의 name과 쿼리 ID를 사용해서 SQL을 호출하기 때문에 처음에 설정이 필요하다.
Resources.getResourceAsStream();
> MyBatis에서 자주 사용되는 메서드로, 클래스패스에서 resource파일(설정파일, XML파일 등)을 읽어 들여준다
> resource파일을 스트림(InputStream)형태로 반환해줌
Q. 왜 스트림 형태로 반환을 하지?
InputStream은 파일을 스트림방식으로 읽어들이는 방식이기 때문에, 파일의 내용을 한번에 메모리에 올리는 게 아니라서
필요할 때 필요한 부분만 조금씩 읽어들일 수 있음 << 이 방식은 파일이 큰 경우 메모리를 효율적으로 쓸 수 있게 해준다
Q. " 스트림방식으로 읽어들이는 방식"이 뭐지?
= 데이터를 한 번에 모두 읽지 않고, 필요할 때 조금씩 연속적으로 읽는 방식
파일을 읽는 방식에는 2가지가 있음
- 일괄 처리 방식
- 스트림 처리 방식
결론
클래스패스에 있는 파일의 크기가 커서 일괄처리하면 메모리 효율이 떨어지기 때문에
기능을 만든 사람이 알잘딱 한 것 같다