전체 글
-
하루의 3단계잘 사는법 2022. 12. 29. 21:52
첫번째 단계(기상 후 6 - 9 시간) 8 - 9 시간 동안 최대한 주변을 밝게 유지하자 두번째 단계(기상 후 9 -16시간) 빛을 서서히 어둡게 하는 게 필요 노출되는 청색광을 점점 줄여야 한다. 마지막 단계(기상후 16 - 24시간) 빛을 최소한으로 줄여야합니다. 그렇지 않으면 일상에 많은 피해를 입게됩니다. 하지만 어쩔 수 없이 밤을 새워 일해야 하고 최대한의 집중을 원한다면 최대한 밝게 해주는 것이 좋습니다. 각성제 없이 깨어있는 팁은 다음과 같습니다. 1리터 정도의 물을 마신 후에 90분간 화장실에 가지 않는 것입니다. 방광이 뇌로 화장실을 가고 싶다는 신호를 보내며 각성하게 되는 것입니다. 불을 최대한 킵니다.
-
Copy On Write (COW) 란?운영체제 2022. 12. 18. 21:12
Copy On Write는 A라는 변수에 B라는 변수를 할당해주었을 때, 새로 메모리에 할당하는 것이 아니라, B의 메모리를 A가 공유하는 형태로 구성됩니다. 그러다가 A가 값이 수정될 때 새로 메모리에 할당이 되는 식으로 동작합니다. 예를 들어 코드로 보면 다음과 같습니다. std::string x("Hello"); std::string y = x; // x, y 는 같은 버퍼를 사용합니다. y += " World"; // y 에 값이 변경 되었으므로 y 는 다른 버퍼를 사용합니다.
-
MySQL Begin 과 Start TransactionDataBase/MySQL 2022. 12. 16. 19:32
START TRANSACTION 과 BEGIN 은 모두 새로운 트랜잭션을 만듭니다. COMMIT 은 현재 트랜잭션을 commit 한다는 의미로, 해당 트랜잭션을 영구적으로 반영되게 합니다. ROLLBACK 은 현재 트랜잭션을 다시 되돌린다는 의미로, 현재 트랜잭션의 변화를 취소한다는 의미입니다. SET autocommit 은 현재 세션에 대해 자동 반영을 비활성화 시키거나 활성화 시킵니다. 기본값으로 autocommit 은 활성화 되어 있습니다. 즉, 모든 SQL 구문은 START TRANSACTION , COMMIT 에 둘러 쌓인 것처럼 모든 구문은 원자성을 가지고 있습니다. autocommit 이 켜져있는 상태에서는 ROLLBACK 은 아무런 효과가 없습니다. 단, SQL 구문이 실행 중 문제가 있다..
-
Kotlin safe call언어/Kotlin 2022. 11. 29. 23:15
kotlin 에서는 java 와 다르게 null이 될 수 있는 타입과 null이 될 수 없는 타입을 완벽히 구분합니다. null 이 될 수 있는 타입은 일반 타입처럼 쓰고 (Int, String) null 이 될 수 있는 타입은 타입뒤에 물음표를 붙입니다. 만약 null 이 될 수 있는 타입을 호출한다면 어떻게 해야할까요? 이를 무시하고 그냥 호출한다면 NullPointerException 이 발생할 것입니다. 따라서 자바는 이때 if 를 사용해 null 을 방지합니다. public void printStringLength(String str) { if (str != null) { System.out.println("length of str is " + str.length) } else { System...
-
Kotlin 에 대해서 알게 된 것들언어/Kotlin 2022. 10. 11. 22:16
TL;DR 코틀린을 사용하면서 알게된 것을 적어놓습니다. 1. 함수이름에 `(백틱)을 사용하면 함수 이름에 스페이스( ), 괄호( 등을 사용할 수 있습니다. fun `create User (when user doesn't exist)` { //... logic } 실제 사용하는 메서드에서 이렇게 쓰는건 권장되지 않습니다. 메서드를 호출할 때 오히려 가독성 면에서 좋지 않을 수 있습니다. 하지만 테스트 코드를 짤 때는 해당 함수를 호출하는 용도가 아닌 테스트 코드 함수명으로 사용한다면 가독성을 높일 수 있습니다.
-
git merge, rebase, squash버전관리/Git,Github 2022. 8. 3. 23:49
Git Rebase, Merge, Squash 이번 포스팅에서는 Git 에서 브랜치를 합칠 때 사용할 수 있는 Merge 와 Rebase 그리고 여러 커밋을 하나의 커밋으로 합칠 수 있는 Squash 를 알아보도록 하겠습니다. 우선 다음과 같은 상황을 가정해보겠습니다. 개발팀이 공통으로 작업하는 repository 가 있습니다. 이 때 Master 라는 공동의 브랜치가 있고 어떤 기능을 구현하기 위해 개발자 A 가 my-branch라는 새로운 브랜치를 만들어서 코드 작업을 하려고 합니다. 이렇게 브랜치를 새롭게 만들려면 다음과 같은 명령어를 입력하면 됩니다. git branch my-branch git checkout my-branch # 명렁어를 한줄로 축약하면 다음과 같습니다. git checko..
-
B-Tree 와 B+Tree 의 차이점DataBase/MySQL 2022. 8. 2. 23:38
B-Tree 와 B+Tree 는 더 효율적이게 원하는 데이터를 탐색할 수 있는 자료구조의 일종 으로 주로 데이터베이스의 인덱스를 사용할 때 쓰이는 알고리즘입니다. 이번 포스팅에서는 B-Tree 와 그것의 변형된 알고리즘인 B+ Tree 에 대해 알아보겠습니다. Tree 는 DB에 한정짓지 않더라도 탐색 시간을 단축할 수 있다는 장점 때문에 자주 사용이됩니다. B-Tree 의 핵심은 데이터가 정렬 된 상태로 유지되어 있다는 것입니다. B-Tree 는 위 그림과 같이 생겼습니다. Binary-Tree 라고 오해를 하지만 Balanced-Tree 를 의미합니다. 자식이 2개 이상 가능합니다. B-tree 는 균형 트리로 루트로부터 리프까지의 거리가 일정한 트리 구조입니다. 이렇게 균형을 유지할 경우 어떤 데이..
-
체인지 버퍼DataBase/MySQL 2022. 8. 2. 20:18
RDBMS 에서 레코드가 INSERT 되거나 UPDATE될 때는 데이터 파일을 변경하는 작업 뿐 아니라 해당 테이블에 포함된 인덱스를 업데이트하는 작업도 필요합니다. 이때 인덱스를 업데이트 하는 작업은 랜덤하게 디스크를 읽는 작업을 선행해야 하므로 테이블에 인덱스가 많으면 이 작업은 많은 자원을 소모하게 됩니다. InnoDB 는 변경해야 할 인덱스 페이지가 버퍼 풀에 있으면 바로 업데이트를 하지만 그렇지 않고 디스크로 부터 읽어와서 업데이트를 해야 한다면 즉시 실행하지 않고 임시 공간에 저장해 두고 바로 사용자에게 결과를 반환하는 형태로 성능을 향상 시킵니다. 이때 사용하는 임시 메모리 공간을 체인지 버퍼 라고 합니다. 하지만 유니크 인덱스의 경우 중복 여부를 체크해야 하기 때문에 체인지 버퍼를 사용할 ..