본문 바로가기

분류 전체보기278

동기/비동기, 블로킹/논블로킹 이해하기 동기(synchronous 또는 sync)는 한 작업을 수행하다가 다른 작업을 수행할 때 그 작업이 끝나고 나서 처음 작업을 다시 재개하는 방식을 말한다. 처음 작업은 새로운 작업이 끝나는 것을 "대기"한다. 반면에 비동기(asynchrnous 또는 async)는 한 작업을 수행하다가 다른 작업을 수행해도 처음 작업을 중단하지 않고 "동시"에 진행할 수 있다. 동기는 한 작업의 끝과 다른 작업의 시작이 일치한다(같다)고 이해할 수 있다. 한편, 블로킹은 한 작업을 수행할 때 다른 작업을 수행할 수 없는 상태 혹은 그 상태를 발생시키는 특성을 말한다. 다른 작업에 대한 "제어권"이 없기 때문에 블로킹이 일어난다. 반면에, 논블로킹은 블로킹이 발생하지 않는 상태 혹은 블로킹을 발생시키지 않는 특성을 말한다... 2024. 1. 27.
안전한 개발 생활을 위한 매뉴얼(신입 개발자들 필독) 개발자로 생활을 하다 보면 시스템에 중대한 손상을 발생시키거나 데이터 손실을 초래할 수 있는 위험한 순간을 마주하기도 한다. 시스템의 중대한 손상이나 데이터 손실은 팀과 조직에 치명적일 뿐만 아니라 사용자에게도 심각한 영향을 미칠 수 있다. 이런 상황을 방지하기 위해 안전한 개발 생활 매뉴얼을 작성해보고자 한다. 운영체제(리눅스) 1. root 계정 사용하지 않기 root 계정은 최상위 권한을 가지고 있어 오동작이나 실수로 인한 치명적인 상황을 초래할 수 있다. 따라서 개발 작업 시 root 계정을 사용하는 것은 피해야 한다. 보통은 별도의 인프라 조직에서 사용자 계정을 생성해 주겠지만, 담당 부서가 없거나 직접 서버 작업을 수행해야 하는 경우, 반드시 별도의 사용자 계정을 생성하여 사용하도록 하자. 2.. 2024. 1. 15.
PSYThinktank 프로젝트 mustache 도입기 작년 말, 현재 운영 중인 사이드 프로젝트 중 하나인 PSYThinktank에 mustache를 도입했던 것을 회고해보려고 한다. 도입 이유 기존 프로젝트는 Java 1.8과 JSP를 사용하고 있었다. 하지만, 자바 최신 21 버전이 출시된 마당에 제일 오래된 LTS인 자바 8 버전은 너무 낡았다고 생각했다. 특히, 자바 11과 17을 거치면서 불변 컬렉션과 레코드 등 트렌드에 맞는 최신 문법을 사용할 수 없는 단점이 있었다. 그래서 자바 버전을 올리기로 결정하였다. 버전 상향을 결정하면서, 또 하나 결정해야 할 것이 있었다. 바로 패키징 방식을 war로 할 것이냐, jar로 할 것이냐였다. 기존에 외장 톰캣을 사용하고 있었기에 war로 패키징 후 톰캣 디렉터리에 파일을 추가해 주는 방식으로 배포하고 있.. 2024. 1. 7.
객체를 불변으로 만들기 위한 방어적 복사 참조형 변수를 멤버 변수로 사용하는 자바 객체의 경우 변수 취급에 주의해야 한다. 왜냐하면, 참조형 변수가 불변이 아닐 경우 외부에서 변경 가능해지는 등 부수효과가 크기 때문이다. 여기서는 가변 컬렉션의 예를 들어 이야기해보려고 한다. 컬렉션을 반환하는 getter가 단순히 멤버 필드를 그대로 반환할 경우 해당 필드가 참조형 변수이기 때문에 외부에서 요소를 추가, 수정, 삭제할 수 있게 된다. 이는 필드를 private으로 선언하여 객체를 은닉화한 이유를 없애버린다. 뿐만 아니라, 객체 생성 시 멤버 필드로 외부 컬렉션을 받아 올 경우, 해당 컬렉션을 외부에서 수정하면 같은 이유로 내부 멤버 컬렉션이 수정될 수 있다. 이러한 문제를 해결하기 위해 나온 개념이 방어적 복사이다. 외부에서 컬렉션이 수정될 것.. 2023. 12. 15.
728x90