전체 글 63

동시성 문제와 동기화(synchronized)

동시성 문제두개 이상의 스레드가 공유자원을 여러 단계로 나누어 이용할 때 동시성 문제가 일어난다.   '잔액'이라는 공유자원을 사용하고 로직을 (1)잔액 확인 (2)잔액 출금 으로 나누어져있을 때  [한 번에 여러개의 스레드 실행할 경우]    한 스레드가 공유자원인 잔액의 값을 (2)출금 로직에서 변경했을 때    다른 스레드에서는 '잔액'을 처음으로 설정한 값을 기준으로(변경되지 않은 값을 기준으로) 검증을 하면 원치 않는 결과 초래 15:38:50.830 [ t2] 거래 시작 : BankAccountV115:38:50.830 [ t1] 거래 시작 : BankAccountV115:38:50.840 [ t1] [검증 시작] 출금액 : 800, 잔액 : 100015:38:..

JAVA 2024.11.24

멀티스레드 메모리 접근 방식/메모리 가시성/happens-before

실제 메모리의 접근 방식 각 CPU마다 캐시 메모리라는 것을 사용한다, 메인 메모리는 CPU입장에서 거리도 멀고, 속도도 상대적 느리다. 해당 캐시 메모리는 CPU의 빠른 연산을 위해 CPU와 가까이 붙어있고, 속도도 빠른 메모리이다. 보통 코어 단위로 캐시 메모리를 각각 보유하고있다.volatile을 사용하지 않을 경우 메인 메모리(힙 영역)에 있는 변수의 값을 각 캐시 메모리에서 불러오고, 그 이후 캐시 메모리에 있는 변수의 값을 사용하게 된다. 멀티스레드 환경에서 volatile 없이 변수의 값을 변경하는 경우 main 스레드에서 runFlag 변수의 값을 true 에서 false로 바꾸는 경우,메인메모리와 work스레드를 연산하는 CPU가 사용하는 캐시 메모리에 바로 반영이 되지 않는다.그러므로,..

JAVA 2024.11.21

[DB]NULL값 허용과 관계테이블

n대 n의 관계에서는 '관계테이블'이 필수, 1대 n의 관계에선 n(자식)쪽에 FK를 두면 된다 (단, n(자식)쪽이 먼저 데이터가 생성된다면 FK쪽에 null값이 들어올 수도 있다. -> 널값을 회피하기 위해  '관계테이블' 활용해도 됨  => 같은 활용으로 1대1관계에서도 관계테이블을 사용하는 경우가 있음) [예시]Orders(자식테이블 多) -부모테이블의 데이터가 먼저 발생해야 자식테이블에 있는 FK값이 null 값이 안됨. 단, 논리적으로 자식테이블이 부모테이블보다 먼저 발생되므로ORDERS 테이블의 FK 칼럼의 속성값이 null값이 올 수 밖에 없다.  이럴 경우 관계 테이블을 만들어서 null값을 회피해도 되지만, 데이터가 많지 않아, 낭비되는 메모리의 비율이 크지 않다면, 널값을 허용함으로..

SQL 2024.11.20

스레드와 Yield

여러 스레드가 동시에 접근하는 경우 동시성 컬렉션{ java.util.concurrent 패키지} 및 동시성 변수 volatile을 사용하는 것이 안전하다.  ConcurrentLinkedQueue : QUEUE 상속, concuurent 패키지 / 여러 스레드에 의해 자료구조가 수정될 수 있음volatile : 동시에 실행되는 여러 스레드에 의해 필드가 수정될 수 있음을 나타냄package thread.control.printer;import java.util.Queue;import java.util.Scanner;import java.util.concurrent.ConcurrentLinkedQueue;import static util.MyLogger.log;import static util.Threa..

JAVA 2024.11.18

SQL기출 오답풀이

3회독 헷갈리는 문항 정리페이지문제번호선택지71021227421371244115742175631,2,48169CUME_DISK .. OVER()의 정의    1. 데이터 모델링의 이해8번 선택지 1~ 31) 피터첸에 의해 erm 표기법 생성2) entity 도출 -> 배치 -> 관계 설정 -> 관계명 기술10번 선택지 2 ~ 32) 통계성 엔터티나 코드성 엔터티는 관계를 생략할 수 있다3) 엔터티는 두개 이상의 인스턴스를 가져야 한다." 한 엔터티는 두 개 이상의 인스턴스를 가지고, 하나의 인스턴스는 두 개 이상의 속성을 가진다. 또한 하나의 속성은 하나의 속성값을 가진다"15번 선택지 1엔터티의 구체적이고 자세한 정보를 나타냄 (상대적으로 접근)18번 1번, 3번(1) 시스템 카탈로그  - 사용자 테이..

SQL 2024.11.14

[Service & MySQL 에러] SQLIntegrityConstraintViolationException

Cause: java.sql.SQLIntegrityConstraintViolationException:Cannot delete or update a parent row: a foreign key constraint fails(`sakila`.`actor_file`, CONSTRAINT `FK__actor_file_actor` FOREIGN KEY (`actor_id`) REFERENCES `actor` (`actor_id`)) 트랜잭션 처리시, 중간 단계에서 쿼리가 정상적으로 실행되지 않을때 오류,  public void deleteActor(int actorId, String path) { // 1) filmActor 리스트 삭제 : 없을 수 있음 FilmActor fa = new FilmActor..

SPRING 2024.11.13

[2024-11-07]쿼리파라미터 전달, DB 기본값 Null

Controller -> View 쿼리 파라미터 전달※ 컨트롤러에서 뷰에서 변수 전달 뷰에서 requestParam으로 받은 값은Controller 에서 받은 paramRequest를 model.setAttribute를 하지 않을때 view에서 paramScope로 해도 된다. DB의 기본값이 NULL인 경우 - HTML에서 form 으로 필드를 입력할때, 아무것도 입력하지 않으면 공백이 값으로 들어간다 만약 DB에서 해당필드가 기본값이 NULL 으로 설정되어있으면 공백을 NULL로 치환해서 DB로 넘겨줘야한다 (※ 숫자라면 입력되지 않을시 0 boolean은 false .... 등등 각 타입마다 치환해야할 값이 다름) ★ NUll일때 기본값이 타입마다 다르므로 DB설계시 NULL을 피해서 설계하는게 좋..

SPRING 2024.11.08