전체 글
Happy Hacking!
-
Isolation Level과 MVCC 여태 한 트랜잭션 내에서 SELECT문을 실행하면 s-lock을 거는줄 알았다. 그 이유는, ACID 특성 중, Isolation에 의해 다른 트랜잭션에서 수정한 결과가 현재 트랜잭션에 영향을 미쳐선 안된다고 생각했기 때문이다. 그러나, InnoDB로 실제로 실행해본 결과 s-lock을 걸지 않음을 알 수 있었다. 그럼에도 불구하고 다른 트랜잭션에서 수정한 결과가 현재 트랜잭션에 반영되지 않음을 볼 수 있었다. 그 이유는 뭘까? 바로 그건 트랜잭션 격리 수준(Isolation Level) 때문이다. InnoDB의 default isolation level은 REPEATABLE_READ이다. 때문에 다른 커넥션에서 수정한 결과가 현재 커넥션에 간섭할 수 없다. 그렇다..
Isolation Level과 MVCCIsolation Level과 MVCC 여태 한 트랜잭션 내에서 SELECT문을 실행하면 s-lock을 거는줄 알았다. 그 이유는, ACID 특성 중, Isolation에 의해 다른 트랜잭션에서 수정한 결과가 현재 트랜잭션에 영향을 미쳐선 안된다고 생각했기 때문이다. 그러나, InnoDB로 실제로 실행해본 결과 s-lock을 걸지 않음을 알 수 있었다. 그럼에도 불구하고 다른 트랜잭션에서 수정한 결과가 현재 트랜잭션에 반영되지 않음을 볼 수 있었다. 그 이유는 뭘까? 바로 그건 트랜잭션 격리 수준(Isolation Level) 때문이다. InnoDB의 default isolation level은 REPEATABLE_READ이다. 때문에 다른 커넥션에서 수정한 결과가 현재 커넥션에 간섭할 수 없다. 그렇다..
2023.09.16 -
알라딘 온라인 중고를 활용하면 좋은 퀄리티의 책을 합리적인 가격으로 구할 수 있다. 중고가로 구할 때 문제가 되는 점은, 배송비다. 위 경우만 해도 5000원 중 3300원이 배송비기 때문에 생각보다 많은 비중을 끼친다. 배송비를 아낄 수 있는 가장 좋은 방법은, 같은 판매자에게서 구매하는 것이다. 그런데 내가 사고싶은 책이 여럿 있을 때 어떤 판매자가 중복되는지, 그런다 하더라도 어떤 조합의 가격이 더 낮은지 일일이 비교해야 한다. 여기서 문제점을 발견해 기술로 해결해보면 어떨까 해서 기능을 구현해 보았다. 정의한 문제 : 온라인 중고 구매시 배송비 포함한 최저가 조합을 찾기 번거롭다. 레포 : https://github.com/JerryK026/aladin-best-price 처음에는 그 날 바로 만..
알라딘 최저가 계산기 회고알라딘 온라인 중고를 활용하면 좋은 퀄리티의 책을 합리적인 가격으로 구할 수 있다. 중고가로 구할 때 문제가 되는 점은, 배송비다. 위 경우만 해도 5000원 중 3300원이 배송비기 때문에 생각보다 많은 비중을 끼친다. 배송비를 아낄 수 있는 가장 좋은 방법은, 같은 판매자에게서 구매하는 것이다. 그런데 내가 사고싶은 책이 여럿 있을 때 어떤 판매자가 중복되는지, 그런다 하더라도 어떤 조합의 가격이 더 낮은지 일일이 비교해야 한다. 여기서 문제점을 발견해 기술로 해결해보면 어떨까 해서 기능을 구현해 보았다. 정의한 문제 : 온라인 중고 구매시 배송비 포함한 최저가 조합을 찾기 번거롭다. 레포 : https://github.com/JerryK026/aladin-best-price 처음에는 그 날 바로 만..
2023.09.13 -
n-way-handshake는 왜 알아야 할까? 오늘은 왜 tcp 혹은 n-way-handshake에 대해서 공부해야 할까? 라는 의문점이 생겨서 여러 자료들을 취합해 보며 나름대로 공부하고 정리하게 되었다. handshake란 connection을 만들기 위한 절차를 말한다. 사실 여기서 connection이란 말부터 모호하다. 그냥 연결이라고 하자기에는 감이 잘 오지 않는다. TCP에 대해 정의한 RFC 793에 따르는 Connection의 정의는 다음과 같다. Connections: The reliability and flow control mechanisms described above require that TCPs initialize and maintain certain status infor..
n-way-handshake는 왜 알아야 할까? / 기술적 겸손함n-way-handshake는 왜 알아야 할까? 오늘은 왜 tcp 혹은 n-way-handshake에 대해서 공부해야 할까? 라는 의문점이 생겨서 여러 자료들을 취합해 보며 나름대로 공부하고 정리하게 되었다. handshake란 connection을 만들기 위한 절차를 말한다. 사실 여기서 connection이란 말부터 모호하다. 그냥 연결이라고 하자기에는 감이 잘 오지 않는다. TCP에 대해 정의한 RFC 793에 따르는 Connection의 정의는 다음과 같다. Connections: The reliability and flow control mechanisms described above require that TCPs initialize and maintain certain status infor..
2023.08.31 -
이 내용은 인프런의 "리눅스 성능 분석 시작하기"의 일부임을 미리 밝힙니다. 저 같은 경우에는 docker에 ubuntu 환경을 띄워 환경을 구성했습니다. 만약 따라하실 분의 경우 docker run할 때 `--privileged` 옵션을 주어야 dmesg 내용을 확인할 수 있습니다. uptime Linux에서 uptime 명령어로 load average를 파악할 수 있다. load average란 서버가 받고 있는 부하 평균을 의미한다. 예를 들어 1이라면 그 시간동안 작업이 할당된 프로세스 수를 말한다. 즉, 이 값이 CPU 수보다 높다면 CPU는 자기가 가능한 정도 이상의 일을 하고 있는 것이고 그만큼의 지연이 발생하게 된다. load average는 상대적인 수치이다. CPU 개수당 부하를 의미하..
load average를 파악하는 uptime과 커널 메시지를 출력하는 dmesg이 내용은 인프런의 "리눅스 성능 분석 시작하기"의 일부임을 미리 밝힙니다. 저 같은 경우에는 docker에 ubuntu 환경을 띄워 환경을 구성했습니다. 만약 따라하실 분의 경우 docker run할 때 `--privileged` 옵션을 주어야 dmesg 내용을 확인할 수 있습니다. uptime Linux에서 uptime 명령어로 load average를 파악할 수 있다. load average란 서버가 받고 있는 부하 평균을 의미한다. 예를 들어 1이라면 그 시간동안 작업이 할당된 프로세스 수를 말한다. 즉, 이 값이 CPU 수보다 높다면 CPU는 자기가 가능한 정도 이상의 일을 하고 있는 것이고 그만큼의 지연이 발생하게 된다. load average는 상대적인 수치이다. CPU 개수당 부하를 의미하..
2023.08.26 -
파일 시스템 파일 파일(File)이란 관련된 정보가 모여있는 단위라고 할 수 있다. 파일은 보조기억 장치에 저장되고, OS의 파일 시스템(File System)에 의해 관리된다. 기본적으로 애플리케이션은 파일을 직접 다룰 수 없다. 따라서 OS에 System Call로 요청해야 한다. 파일 생성 / 삭제 / 열기 / 닫기 / 읽기 / 쓰기 syscall들이 존재한다. 파일 시스템은 OS 내부 프로그램이며, 파일 별로 메타데이터를 관리한다. 메타데이터에는 파일 유형(확장자), 크기, 보호, 생성 날짜, 마지막 접근 날짜, 생성자, 소유자, 경로 등이 있다 디렉터리는 내부에 담겨 있는 대상과 관련된 정보를 관리하는 파일이다. 트리 구조로 관리한다. 최상단을 루트 디렉터리라고 부른다. Windows에선 폴더라..
파일 시스템파일 시스템 파일 파일(File)이란 관련된 정보가 모여있는 단위라고 할 수 있다. 파일은 보조기억 장치에 저장되고, OS의 파일 시스템(File System)에 의해 관리된다. 기본적으로 애플리케이션은 파일을 직접 다룰 수 없다. 따라서 OS에 System Call로 요청해야 한다. 파일 생성 / 삭제 / 열기 / 닫기 / 읽기 / 쓰기 syscall들이 존재한다. 파일 시스템은 OS 내부 프로그램이며, 파일 별로 메타데이터를 관리한다. 메타데이터에는 파일 유형(확장자), 크기, 보호, 생성 날짜, 마지막 접근 날짜, 생성자, 소유자, 경로 등이 있다 디렉터리는 내부에 담겨 있는 대상과 관련된 정보를 관리하는 파일이다. 트리 구조로 관리한다. 최상단을 루트 디렉터리라고 부른다. Windows에선 폴더라..
2023.08.25 -
Kotlin에서 RestAssured 사용하기 이번에 토이 프로젝트를 하면서 Kotlin + RestAssured 조합을 처음 다뤄보게 되었다. RestAssured를 사용하며 인수테스트를 작성할 때, 망규님이 작성하신 양식을 조금 변형해서 사용하고 있었는데, 이번에 Kotlin에서 사용하려다가 문제를 겪어서 그 이야기를 해볼까 한다 참조 : https://mangkyu.tistory.com/264 톰캣을 실제로 띄우는 RestAssured 환경에서는 스프링 컨테이너와 서블릿 컨테이너(톰캣) 다른 쓰레드에서 실행되기 때문에 @Transactional의 롤백이 동작하지 않는다. 따라서 테스트 메서드 마다 테이블의 레코드들을 모두 정리하는 쿼리를 날려서 해결하는데, 이를 @AcceptanceTest 라는 애..
Kotlin에서 RestAssured 사용하기Kotlin에서 RestAssured 사용하기 이번에 토이 프로젝트를 하면서 Kotlin + RestAssured 조합을 처음 다뤄보게 되었다. RestAssured를 사용하며 인수테스트를 작성할 때, 망규님이 작성하신 양식을 조금 변형해서 사용하고 있었는데, 이번에 Kotlin에서 사용하려다가 문제를 겪어서 그 이야기를 해볼까 한다 참조 : https://mangkyu.tistory.com/264 톰캣을 실제로 띄우는 RestAssured 환경에서는 스프링 컨테이너와 서블릿 컨테이너(톰캣) 다른 쓰레드에서 실행되기 때문에 @Transactional의 롤백이 동작하지 않는다. 따라서 테스트 메서드 마다 테이블의 레코드들을 모두 정리하는 쿼리를 날려서 해결하는데, 이를 @AcceptanceTest 라는 애..
2023.08.24