본문 바로가기

백엔드132

리눅스 메모리 사용률 확인 / 버퍼와 캐시 리눅스에서 free 명령어를 치면 아래와 같은 내용이 나온다. Mem 행 : 실제 메모리에 대한 상황 Swap 행 : Swap파일에 대한 정보 Mem 행 total : 물리적인 RAM 총량 used : 시스템에서 사용하고 있는 메모리 총량으로 buffers 와 cached 포함되어 있다. (2091704 = -/+ buffers/cache (used : 1665292 ) + Mem (buffers : 21344) + Mem (cached : 405068)) free : 남은 메모리 shared : 공유된 메모리 buffers : 응용 애플리케이션에 의해 버퍼된 메모리 cached : 추후에 사용하기 위해 데이터 캐싱에 사용한 메모리 -/+ buffers/cache 행 used : 실제 사용중인 메모리 (.. 2019. 9. 26.
SELECT ~ FOR UPDATE SELECT ~ FOR UPDATE란 SELECT ~ FOR UPDATE 구문은 "데이터 수정하려고 SELECT 하는 중이야~ 다른 사람들은 데이터에 손 대지 마!" 라고 할 수 있습니다. 좀 더 딱딱한 표현으로는 동시성 제어를 위하여 특정 데이터(ROW)에 대해 베타적 LOCK을 거는 기능입니다. 출처: https://dololak.tistory.com/446 2019. 9. 22.
Effective Java 맛보기 11탄 직렬화 자바 직렬화의 대안을 찾으라 직렬화는 위험하니 피해야 한다. 시스템을 밑바닥부터 설계한다면 JSON이나 프로토콜 버퍼와 같은 대안을 사용하자. 신뢰할 수 없는 데이터는 역직렬화하지 말자. 꼭 해야 한다면 객체 역직렬화 필터링을 사용하되, 이마저도 모든 공격을 막아줄 수는 없음을 기억하자. 클래스가 직렬화를 지원하도록 만들지 말고, 꼭 그렇게 만들어야 한다면 정말 신경써서 작성해야 한다. Serializable을 구현할지는 신중히 결정하라 Serializable은 구현한다고 선언하기는 아주 쉽지만, 그것은 눈속임일 뿐이다. 한 클래스의 여러 버전이 상호작용할 일이 없고 서버가 신뢰할 수 없는 데이터에 노출될 가능성이 없는 등, 보호된 환경에서만 쓰일 클래스가 아니라면 Serializable구현은 아.. 2019. 9. 21.
Effective Java 맛보기 10탄 동시성 공유중인 가변 데이터는 동기화해 사용하라 여러 스레드가 가변 데이터를 공유한다면 그 데이터를 읽고 쓰는 동작은 반드시 동기화 해야 한다. 동기화하지 않으면 한 스레드가 수행한 변경을 다른 스레드가 보지 못할 수도 있다. 공유되는 가변 데이터를 동기화하는 데 실패하면 응답 불가 상태에 빠지거나 안전 실패로 이어질 수 있다. 이는 디버깅 난이도가 가장 높은 문제에 속한다. 간헐적이거나 특정 타이밍에만 발생할 수도 있고, VM에 따라 현상이 달라지기도 한다. 베타적 실행은 필요 없고 스레드끼리의 통신만 필요하다면 volatile한정자만으로 동기화할 수 있다. 다만 올바로 사용하기가 까다롭다. 과동한 동기화는 피하라 교착상태와 데이터 훼손을 피하려면 동기화 영역 안에서 외계인 메서드를 절대 호출하지 말자.. 2019. 9. 21.
Effective Java 맛보기 9탄 예외 예외는 진짜 예외 상황에만 사용하라 예외는 예외 상황에서 쓸 의도로 설계 되었다. 정상적인 제어 흐름에서 사용해서는 안되며, 이를 프로그래머에게 강요하는 API를 만들어서도 안된다. 복구할 수 있는 상황에서는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라 복구할 수 있는 상황이면 검사 예외를, 프로그래밍 오류라면 비검사 예외를 던지자. 확실 하지 않다면 비검사 예외를 던지자. 검사 예외도 아니고 런타임 예외도 아닌 throwable은 정의하지도 말자. 검사 예외라면 복구에 필요한 정보를 알려주는 메서스도 제공하자. 필요 없는 검사 예외 사용은 피하라 꼭 필요한 곳에만 사용한다면 검사 예외는 프로그램의 안정성을 높여주지만, 남용하면 쓰기 고통스러운 API를 낳는다. API 호출자가 예외 상.. 2019. 9. 21.
728x90