Data Base
-
MongoDB 1 - Database 구조, Connection, NodeJS 서버에서 CRUDData Base/MongoDB 2024. 7. 12. 17:31
1. RDB와 MongoDB 계층구조 비교 2. Mongoose Connection2.1. MongoDB 드라이버 https://www.mongodb.com/ko-kr/docs/drivers/ MongoDB로 개발 시작 - MongoDB 드라이버공식 MongoDB 라이브러리 중 하나를 사용하여 애플리케이션을 MongoDB Atlas 배포서버 또는 자체 호스팅 MongoDB 클러스터에 연결할 수 있습니다. Atlas에 대해 자세히 알아보려면 MongoDB Atlas란 무엇인가www.mongodb.com위 링크에 각 언어 별로 MongoDB를 제어할 수 있는 드라이버를 제공한다. 2.2. MongoDB 노드 드라이버https://www.mongodb.com/ko-kr/docs/drivers/node/c..
-
Mongo DB - Compass CLI로 기본적인 CRUDData Base/MongoDB 2024. 7. 12. 11:10
Compass CLI로 기본적인 CRUD1.데이터베이스 생성과 collection 1.1. MogoDB 데이터 베이스 생성MongoDB는 db를 생성하지 않아도 해당 db의 데이터를 생성하면 해당 db가 생성이된다. 1.2. 명령어 db.users.insertOne()db.users.insertOne({name:"Sam Kim", email:"samail@gmail.com"})해당 명령어를 쳤을때 출력되는 결과는 해당 명령어가 성공했다는 의미이다. 1.3. 생성된 users데이터 모두 조회db.users.find()find() 함수를 사용하여 명령어를 실행하면 users에 관련된 데이터를 모두 조회해온다. 1.4. 새로고침위 과정을 모두 거치고 database를 새로고침하면 blog 데이터베이스가 생성..
-
MongoDB - 개념설명, 초기 설정, 데이터 저장·조회Data Base/MongoDB 2024. 4. 25. 15:08
MongoDB 개념설정과 초기설정RDB와 NoSQL 개념의 차이 RDB의 경우 데이터베이스에 테이블이 여러개 있지만 NoSQL MongoDB의 경우 컬렉션이 여러개 있다.각 컬렉션에는 레코드(record)가 아닌 도큐먼트(document)형태로 기록 된다. 레코드와 도큐먼트는 그 명칭이 다를 뿐만 아니라 데이터베이스의 핵심 철학에 큰 차이점이 있다. 큰 차이점은 RDB와 다르게 MongoDB의 경우는 스키마리스로 컬렉션의 문서 즉 데이터나 항목이 RDB처럼 항상 같은 구조를 가질 필요가 없다. RDB의 경우 User타입의 데이터는 id,이메일,이름,닉네임,비밀번호 등등 정해져있는 정보의 구조가 있었다면 NoSQL의 경우 User라는 한 컬렉션 안에 아무 유형의 데이터가 있어도 된다. 보통은 비슷한 구조..
-
스프링 DB - 트랜잭션 문제 해결(트랜잭션 템플릿)Data Base/스프링 DB 2023. 11. 28. 13:50
트랜잭션 문제 해결(트랜잭션 템플릿) 트랜잭션을 사용하는 로직을 살펴보녕 다음과 같은 패턴이 반복되는 것을 확인할 수 있다. 트랜잭션 사용 코드 TransactionStatus status = transactionMnager.getTransaction(new DefaultTransactionDefinition()); try{ //비지니스 로직 bizLogic(fromId,toId,money); //성공시 커밋 transactionManager.commit(status); }catch(Exception e){ //실패시 롤백 transactionManager.rollback(status); throw new IlleagalStateException(e); } 트랜잭션을 시작하고, 비지니스 로직을 실행하고,..
-
스프링 DB - 트랜잭션 문제 해결(트랜잭션 매니저2)Data Base/스프링 DB 2023. 11. 28. 11:49
트랜잭션 문제 해결 - 트랜잭션 매니저2 트랜잭션 매니저1 - 트랜잭션 시작 클라이언트의 요청으로 서비스 로직을 실행한다. 1.서비스 계층에서 `transactionManager.getTransaction( )`을 호출해서 트랜잭션을 시작한다. 2.트랜잭션을 시작하려면 먼저 데이터베이스 커넥션이 필요하다. 트랜잭션 매니저는 내부에서 데이터 소스를 사용해서커넥션을 생성한다. 3.커넥션을 수동 커밋모드로 변경해서 실제 데이터베이스 트랜잭션을 시작한다. 4.커넥션을 트랜잭션 동기화 매니저에 보관한다. 5.트랜잭션 동기화 매니저는 쓰레드 로컬에 커넥션을 보관한다. 따라 멀티 쓰레드 환경에서 안정하게 커넥션을 보관할 수 있다. 트랜잭션 매니저2 - 로직 실행 6.서비스는 비지니스 로직을 실행하서 리포지토리의 메서..
-
스프링 DB - 트랜잭션 문제 해결(트랜잭션 매니저1)Data Base/스프링 DB 2023. 11. 28. 10:58
트랜잭션 문제 해결(트랜잭션 매니저1) MemberRepositoryV3 package hello.jdbc.repository; import hello.jdbc.domain.Member; import lombok.extern.slf4j.Slf4j; import org.springframework.jdbc.datasource.DataSourceUtils; import org.springframework.jdbc.support.JdbcUtils; import javax.sql.DataSource; import java.sql.*; import java.util.NoSuchElementException; /** * 트랜잭션 - 트랜잭션 매니저 * DataSourceUtils.getConnection() * D..
-
스프링 DB - 트랜잭션 동기화Data Base/스프링 DB 2023. 11. 27. 15:01
트랜잭션 동기화 스프링이 제공하는 트랜잭션 매니저는 크게 2가지 역할을 한다. 트랜잭션 추상화 리소스 동기화 리소스 동기화 트랜잭션을 유지하려면 트랜잭션의 시작부터 끝까지 같은 데이터베이스 커넥션을 유지해야한다. 결국 같은 커넥션을 동기화(맞추어 사용)하기 위해서 이전 게시글에서 파라미터로 커넥션을 전달하는 방법을 사용했다. 파라미터로 커넥션을 전달하는 방법은 코드가 지저분해지는 것은 물론이고, 커넥션을 넘기는 메서드와 넘기지 않는 메서드를 중복해서 만들어야 하는 등 단점들이 많다. 커넥션과 세션 트랜잭션 매니저와 트랜잭션 동기화 매니저 스프링은 *트랜잭션 동기화 매니저*를 제공한다. 이것은 쓰레드 로컬(ThreadLocal)을 사용해서 커넥션을 동기화해준다. 트랜잭션매니저는 내부넹서 이 트랜잭션 동기화..
-
스프링 DB - 트랜잭션 추상화Data Base/스프링 DB 2023. 11. 27. 14:09
트래잭션 추상화 현재 서비스 계층은 트랜잭션을 사용하기 위해서 JDBC기술에 의존하고 있다. 향후 JDBC에서 JPA같은 다른 데이터 접근 기술로 변경하면, 서비스 계층 트랜잭션 관련 코드도 모두 함께 수정해야한다. 구현 기술에 따른 트랜잭션 사용법 트랜잭션은 원자적 단위의 비지니스 로직을 처리하기 위해 사용한다. 구현 기술마다 트랜잭션을 사용하는 방법이 다른다. JDBC : `con.setAutoCommit(false)` JPA : `transaction.begin()` JDBC 트랜잭션 코드 예시 public void accountTransfer(String fromId, String toId, int money) throws SQLException { Connection con = dataSourc..