주니어 백엔드 개발자가 반드시 알아야 할 실무 지식
9장 최소한 알고 있어야 할 서버 지식
개발자와 서버
- 서버라는 단어는 다양한 대상을 의미한다. 서버 프로그램을 구동하는 OS를 '서버', 아파치나 톰캣 같은 프로그램은 '서버 프로그램'이라고 부르자.
OS 계정과 권한 (Linux)
- root 계정은 OS를 설치하면 기본 생성되는 계정으로 모든 권한을 가진 관리자 계정이다.
- 모든 것을 다 할 수 있기 때문에 root 계정에 접근할 수 있는 인원에 제한을 둔다.
- 파일을 실행할 때 접근 거부가 발생하는 이유는 보통 읽기 권한이나 쓰기 실행 권한이 없기 때문이다.
- ls -l 명령어를 사용하면 권한을 포함한 여러 정보를 확인할 수 있다.
sudo로 권한 주기
- 일반적으로 운영체제의 root 권한은 일부 인프라 담당자만 갖고, 개발자는 일반 계정에 대한 권한만 갖는다.
- 하지만 개발자도 root 권한이 필요한 경우가 있는데 이럴 때 매번 인프라 담당자한테 작업 요청을 할 수도 없으니 사용하는 명령어가 sudo 이다.
- sudo 명령어를 사용하면 다른 사용자의 권한으로 프로그램을 실행할 수 있다.
- user1이라는 계정에 sudo로 실행할 수 있는 명령어를 지정해주면 user1이 sudo로 해당 명령어를 쓸 수 있다.
네트워크 정보 확인
nc 명령어로 연결 확인하기
- 특정 포트로 연결이 잘 되는지 확인할 때 사용할 수 있는 명령어로 nc가 있다.
nc -z -v www.daum.net 443 명령어는 443 포트로 연결이 잘 되는지 확인하는 명령어의 예시이다.
- UDP 포트가 열려있는지 확인해보려면 -u 옵션을 사용하면 된다.
netstat 명령어로 포트 사용 확인
netstat -lputn 명령어를 사용하면 현재 서버에서 열려 있는 서버 포트를 확인할 수 있다.
netstat -anp | grep 12931 현재 사용 중인 전체 포트를 확인하고 싶다면 -a 옵션을 확인하면 되고, 다음처럼 -anp 명령어와 grep을 함께 사용하면 현재 사용 중인 포트를 확인할 수 있다.
10장 모르면 답답해지는 네트워크 기초
IP 주소와 도메인
고정 IP와 동적 IP
- 고정 IP는 말 그대로 노드가 고정된 IP를 갖는다. 고정 IP를 사용하는 노드는 IP 주소를 직접 지정한다.
- 동적 IP는 노드가 네트워크에 연결할 때마다 IP를 할당한다. 동적 IP는 DHCP 서버를 통해 제공받는다. 가정에서 사용하는 공유기가 주로 동적 IP 방식을 사용한다.
NAT
- SNAT: 내부 네트워크에서 나가는 패킷의 사설 IP를 공인 IP로 변환한다.
- DNAT: 공인 IP로 들어온 패킷의 목적지를 사설 IP로 변환한다.
부록A 처음 해보는 성능 테스트를 위한 기본 정리
성능 테스트 종류
- 부하 테스트: 특정한 예상 부하에서 시스템이 어떻게 동작하는지 확인한다.
- 스트레스 테스트: 시스템의 최대 성능을 확인하기 위한 테스트. 예상을 뛰어넘는 부하 발생
- 지속 부하 테스트: 시스템이 지속적인 부하를 견딜 수 있는 지를 검증한다.
- 스파이크 테스트: 급격하게 트래픽이 변화할 때 시스템의 반응성과 안정성을 검증하는 테스트
포화점과 버클존
- 포화점: 성능이 저하되기 전의 최대 처리량
- 버클존: 포화점을 지나 성능이 걲이기 시작하는 구간
주요 측정 지표
응답 시간
처리량
- TPS(초당 트랜잭션 건수)처럼 초 단위로 얼마나 많은 요청을 처리했는지를 나타낸다. 테스트를 진행하는 동안 처리량은 변화하므로 최대, 평균, 최소 값을 함께 구한다.
성능 테스트 도구
부록B NOSQL 이해하기
NoSQL 사용하는 주된 이유
- 대용량 데이터나 분산 처리
- 고속의 읽기와 쓰기 성능
- 특정한 요구사항에 맞는 데이터 설계
- 비정형 데이터 처리 또는 유연한 스키마
NoSQL 종류
키-값 DB
- 대표적으로 Redis
- 주된 용도: 세션 관리, 캐시, 설정 관리
- 레디스는 큐 기능을 제공하고 있어 메시징 시스템으로도 활용이 가능하다.
문서 DB
- 문서 DB는 데이터를 (주로) JSON과 유사한 문서에 저장한다.
- 새로운 속성이 필요하면 추가하면 되고 중첩된 구조나 배열을 사용할 수 있다.
NoSQL 도입 시 고려 사항
- 트랜잭션 지원 여부를 고려한다.: 다수의 NoSQL은 RDBMS가 지원하는 수준의 트랜잭션을 지원하지 않는다.
- 데이터 모델이 요구사항에 적합하지 확인해야 한다.: NoSQL마다 지원하는 데이터 모델이 있다.
- 확장성과 성능 요구도 주요 고려 사항이다.: 성능보다 일관성이 중요한 서비스는 NoSQL의 일관성 특징이 요구를 충족시키는 지 확인해야 한다.
- 운영과 개발 역량을 확보해야 한다.: NoSQL을 도입할 때에는 팀이 가진 경험을 고려해야 하며 필요하다면 미리 학습해야 한다.