본문 바로가기
📇기타

안전한 개발 생활을 위한 매뉴얼(신입 개발자들 필독)

by 캔 2024. 1. 15.

개발자로 생활을 하다 보면 시스템에 중대한 손상을 발생시키거나 데이터 손실을 초래할 수 있는 위험한 순간을 마주하기도 한다. 시스템의 중대한 손상이나 데이터 손실은 팀과 조직에 치명적일 뿐만 아니라 사용자에게도 심각한 영향을 미칠 수 있다. 이런 상황을 방지하기 위해 안전한 개발 생활 매뉴얼을 작성해보고자 한다.

 

운영체제(리눅스)

1. root 계정 사용하지 않기

root 계정은 최상위 권한을 가지고 있어 오동작이나 실수로 인한 치명적인 상황을 초래할 수 있다. 따라서 개발 작업 시 root 계정을 사용하는 것은 피해야 한다. 보통은 별도의 인프라 조직에서 사용자 계정을 생성해 주겠지만, 담당 부서가 없거나 직접 서버 작업을 수행해야 하는 경우, 반드시 별도의 사용자 계정을 생성하여 사용하도록 하자.

 

2. rm 명령어 사용 제한

rm 명령어는 windows나 macOS와는 다르게 휴지통을 거치지 않고 삭제한다. 그렇기 때문에 한번 명령어를 실행하면 복원하기가 매우 어려울 수 있다. 그렇기 때문에 rm 명령어를 매우 제한적으로 사용하고 가능하다면 rm 명령어 사용을 막는 것이 좋다. 몇 가지 옵션을 제안해 본다.

 

- alias rm='echo "메시지"'로 rm 명령어 사용 금지 (가장 권장)

rm 명령어를 아예 사용하지 못하도록 막는 방법이다. 사용자 디렉토리의 .bashrc 파일이나 .bash_profile 파일에 alias rm='echo "메시지"'를 추가해 놓으면 다시 bash 셸에 접속해도 rm 명령어 사용 시 메시지를 출력하도록 설정할 수 있다.

 

- rm 별칭 `alias rm=rm -i --preserve-root` 사용

이렇게 하면 삭제 전 확인 후 삭제를 수행한다. 그렇지만 이런 식으로 사용하면 다른 사용 환경에서 평소처럼 그냥 rm 사용하다가 삭제가 진행돼버리는 수가 있다. 리눅스에서는 기본적으로 물어보지 않고 삭제를 진행한다는 걸 명심하자.

 

- mv 명령어를 대신 사용

mv 명령어를 사용하여 파일을 이동하는 대신 삭제하거나 변경하는 명령어 대신 사용한다. 이는 실수로 데이터를 손상시키는 위험을 줄일 수 있다. 삭제를 위한 공간(휴지통)을 만들고 일정 기간 후 삭제하도록 할 수 있다. 혹은 trash-cli 같은 도구를 사용하는 것도 한 방법이다.

 

DBMS

1. 데이터베이스 일반 사용자 drop 권한 제거

데이터베이스 사용자에게 drop 권한을 부여하는 것은 위험하다. 최소한의 권한만을 부여하고, 필요에 따라 권한을 추가하는 방식으로 운용해야 한다.

/* 사용자로부터 데이터베이스의 DROP 권한 회수 */
REVOKE DROP ON DATABASE DB명 FROM 사용자명;

/* 오라클은 데이터베이스가 아니고 테이블별로 회수 */
REVOKE DROP ON 테이블명 FROM 사용자명;


2. 위험한 쿼리 금지(where 절 없는 update, delete) 혹은 벌크 작업 금지

where 절 없이 사용되는 update, delete와 같은 위험한 쿼리를 사용하지 않도록 해야 하며, 벌크 작업도 조심스럽게 다뤄야 한다. DB에 update나 delete 작업 시 where 절이 없으면 수행할 수 없도록 트리거를 추가하여 무분별한 update나 delete 시도가 감지되면 막을 수 있다. 


3. 백업 및 복원 전략 사용

반드시 데이터베이스의 백업 및 복원 전략을 세워야 한다. 주기적인 백업은 데이터 손실 시 빠르게 복구할 수 있도록 돕는다. crontab을 활용하여 자동화된 백업 작업을 설정하는 것도 좋은 방법이다.

 

백업이 있어야 복원도 가능한다. 주기적으로 백업된 데이터를 테스트하여 정상적으로 복원이 가능한지 확인하는 작업이 필요하다. 각 DBMS 별 백업 방법을 숙지하고 복원 전략을 세워 놓자.

 

안전한 개발 생활을 위해서는 주의와 계획이 필요하다. 이러한 안전성을 고려한 접근 방식은 소프트웨어 개발 환경을 좀 더 안정적이고 신뢰성 있게 만들어 나갈 수 있도록 도와줄 것이다. 개발자 개개인이 이러한 가이드라인을 따르면서 팀 전체의 안전한 개발 문화를 구축하는 데 기여해 나갈 수 있기를 바란다.