데이터베이스

데이터베이스

동시성) 싱글벙글 게시글 좋아요 유니크 제약 조건을 이용하여 동시성 이슈 해결하기

문제 상황 이전에 낙관적 락을 이용하여 동시성 이슈를 해결하려고 했습니다. 저희 서비스는 낙관적 락을 이용하면 데드락(Deadlock)이 발생합니다. 그리고 여러 계정이 동시 요청이 왔을 때 성능 저하가 뚜렷합니다. 해결 방법 Like 엔티티 동시성 이슈 해결 Like 엔티티에 유니크 제약 조건을 걸어 Like 엔티티에 값이 중복되어 들어가는 것을 방지하겠습니다. LikeEntity @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Table(uniqueConstraints = { @UniqueConstraint( name = "user_board_post_unique", columnNames = { "user_id", "board_post_id"..

데이터베이스

동시성) 싱글벙글 게시글 좋아요 Lock을 이용하여 동시성 이슈, 데드락 해결하기

배경게시글 좋아요 로직에 문제가 발생했습니다. 텀을 두고 좋아요를 눌렀을 때 좋아요, 좋아요 취소에는 전혀 문제가 발생하지 않습니다. 동시에 많은 작업이 있을 때 동시성 문제가 발생합니다.좋아요 개수 문제, LikeEntity 중복값 저장 2가지 문제에 대해 다루겠습니다.제가 처음 작성한 로직은 게시글 좋아요 버튼을 누르면 Like Entity save 메서드가 실행이 되고, Like Entity에 값이 존재하면 delete가 되는 로직입니다. 원인 분석 먼저 하겠습니다.원인 분석MySQL 8.0 (innoDB)이며, 트랜잭션 격리 레벨은 디폴트값인 Repeatable Read입니다.게시글A를 찾는 SELECT 과정은 Lock을 얻는 과정이 발생하지 않기 때문에 두 트랜잭션 모두 같은 게시글A에 접근합니..

데이터베이스

Database - 과제4 JDBC

전화번호부 프로그램 만들기! *테이블의 생성은 자유! ================== 전화번호부 v1.0 ------------------------------ 1.전화번호등록 2.전화번호검색 3.전화번호모두보기 4.종료 ================== 메뉴> 1 ==전화번호등록== 이름: 나이: 주소: 전화번호: 메뉴> 2 ==전화번호검색== 이름: 검색정보출력 메뉴> 3 ==등록된 전화번호 정보== .. .. .. .. 메뉴> 4 프로그램 종료 package jdbcTest; import java.sql.*; import java.util.*; public class jdbcTest5 { public static void main(String[] args) { Scanner sc = new Sca..

데이터베이스

Database - JDBC연동

이클립스 jdbcTest 폴더 확인하면서 진행! 가장 처음은 내 자바 폴더안에 있는 오라클을 build path add external archives를 먼저 한 후, =======insert , update , delete문======= 1단계 import java.sql.*; 2단계 JDBC드라이버 로드 Class.forName("oracle.jdbc.driver.OracleDriver"); 3단계 DB연결하기 String url = "jdbc:oracle:thin:@localhost:1521:xe"; String user = "scott"; String pwd = "1234"; Connection conn = DriverManager.getConnection(url,user,pwd); ///////..

데이터베이스

Database - 데이터 삽입,수정,삭제

-INSERT 문 INSERT문의 기본 형식 INSERT INTO 테이블명 [컬럼명] VALUES [값} ex)INSERT INTO dept01 (deptno,dname,loc) VALUES(60,'회계과','서울') insert into STUDENT (name,age,addr,tel) values('홍길동',20,'서울','[02-1212-2323') +만약 컬럼의 순서를 다 알고 있는 상태에서 모든 데이터의 값을 넣으려면 컬럼을 생략하고 밸류의 값만 넣어서 작성할 수 있다. insert into student values ('둘리',30,'부천','032-2222-2222') +강제로 null값을 넣을 수 있따 물론 not null로 설정한 곳에 null을 넣으면 오류 insert into stud..

데이터베이스

Database - 테이블 생성

-테이블 생성 (CREATE) CREATE문의 기본 형식 CREATE TABLE 테이블명 (컬럼명 자료형 제약조건) CREATE TABLE STUDENT( NAME VARCHAR2(20) not null, AGE NUMBER(3), ADDR VARCHAR2(200), TEL VARCHAR2(50) not null ) -서브쿼리를 이용해서 테이블 복사 가능 create table emp02 as (select * from emp) + 테이블을 복사하는 것이 아니라 , 결과를 복사하는 것임 따라서 제약조건은 넣을 수 없다. -원하는 컬럼만 뽑아서 테이블 생성 가능하다. CREATE TABLE emp03 as (select empno,ename,job,sal from emp) -데이터는 빼고 구조만 복사 가능..

초보병일이
'데이터베이스' 카테고리의 글 목록