낙관적 락, 비관적 락, Redisson Lock

낙관적 락 : 충돌이 잘 발생하지 않을거라는 낙관적인 생각으로 락을 거는 방식으로 엄밀히 말하면 락을 걸지 않고 저장할 때 저장 대상을 조회하여 존재하는지(변경되지 않았는지) 한 번 더 체크하여 데이터 변경이 이뤄지지 않았을 때 저장하고 변경됐다면 다시 데이터를 조회하여 저장하는 방식입니다. 비관적 락 : 충돌이 자주 발생할거라고 생각하고 락을 거는 방식으로 잦은 충돌이 발생할 경우 데드락이 발생할 수 있습니다. 데드락이 발생하면 조회, 저장 등 DB의 성능이 전체적으로 느려질 수 있어 충돌이 자주 발생하는 경우엔 좋지 못한 선택입니다.

JAVA Stream API에 대한 정리

Stream은 자바 8부터 도입된 모던 자바 API로 함수형(함수를 변수처럼 전달함) 프로그래밍을 제공한다.스트림은 생성 -> 중간연산 -> 최종연산(일종의 출력)으로 구성되어있다. 따라서 최종연산을 하지 않을 경우엔 스트림으로 가공한 데이터 소스(컬렉션, 배열 등)을 리턴받을 수 없다. 또한 스트림은 한 번 사용하는 것으로 설계되었기 때문에 한 번 terminal 연산이 호출되면 스트림은 consumed되고 다시 사용할 수 없다. 사전지식 - 제네릭에 대하여Stream API에는 아래와 같은 형식이 자주 등장한다. Stream map(Function mapper); ? super T : T이거나 T의 부모 클래스 중 하나. 주로 데이터를 소비할 때(consume) 사용한다.? extends R : ..

DB 개념 및 면접 내용 정리

- Index가 어떤 경우에 타고 안 타는지 알고 있는가? * Index를 타지 않는 경우컬럼에 함수 적용, 연산자 적용SELECT * FROM USER WHERE SUBSTR(user_id,3,5) = 'uz'SELECT * FROM USER WHERE user_id + 1%연산자 leftmostprefix가 아닐 경우 시작점을 잡을 수 없어 full scan을 타게된다SELECT * FROM USER WHERE user_id like '%cu%'컬럼 타입의 암묵적 형변환 발생SELECT * FROM USER WHERE user_id IN (1,2,3)user_id가 varchar일 때 암묵적 형변환 발생

JAVA 면접 질문 공부

ConcurrentHashMap 모든 operation은 thread-safe하지만 데이터를 get할 때는 필수조건으로 lock을 걸지 않는다. 이와 달리 HashMap은 멀티스레드 환경에서 안전하지 않아 동시성 문제가 발생할 수 있다. ConcurrentHashMap의 put 메소드를 보면 multi-thread 환경에서 어떻게 동시성을 보장하는지 알 수 있다. ConcurrentHashMap이 empty일 때는 lock을 잡지않는다.(CAS(Compare and Swap)) 특히 map 전체가 아닌 node단위로 lock을 건다.이 부분이 포인트인데 node 단위로 걸기 때문에 lock이 걸리지 않은 node를 조회, CUD 시 성능이 저하되지 않는다.

CSVParser, JSONParser 차이 및 학습

CSVParser, JSONParser를 공부하게 된 배경CSVParser를 이용해서 csv파일을 객체로 변환하려고 하고 있었음.. 할 수 있는 방법이 없고 뭔가 잘못됐다는걸 깨닫게 됨. CSV파일의 특성을 간과한채 무턱대고 파싱하려고함. CSVParserJSONParser 콤마 구분자로 이뤄져있는 csv파일계층구조를 나타낼 수 있는 형태를 지닌 json파일특징로그, 대용량 처리에 적합타입, 객체 형태로 표현할 수 있어 API를 통한 데이터 전달에 유리 CSV는 데이터 전달 비용과 성능이 중요할 때 JSON은 데이터의 의미와 구조가 중요할 때 사용한다. JSONParser는 대표적으로 3가지 종류가 있는데 json-simple, Jackson, Gson 그 중 json-simple은 경량 파서라..