개발자들이 다르게 행동하기를 바라는 것은 무엇입니까? [닫은]


35

개발자는 코드, UI, 데이터 구조 등을 생각하면서 대부분의 시간을 소비하지만 배포 할 때까지 sysadmins 및 DBA에 대한 내 앱의 의미를 고려하지 않는 경향이 있습니다. 앱.

먼저 미안합니다. 두 번째로, 당신과 내가 다루는 다른 개발자들이 다르게하고 싶은 것은 무엇입니까? 삶을 편하게 만들고 문제를 줄이며 협력을 장려하며 충돌, 성능 문제 및 구성 악몽을 줄이는 것은 무엇입니까?

답변:


34
  1. 0 일부터 보안에 대해 생각하고 구축하십시오.
  2. 소스 코드, 문서, 구성 등 모든 것에 대해 버전 제어를 사용하십시오.
  3. 설명서, 설명서, 설명서
  4. 플랫폼 네이티브 패키징을 사용한 깨끗한 설치 및 제거
  5. 라이브러리 및 실행 파일에서 구성 데이터 분리
  6. 테스트 및 마이그레이션을 위해 서로 다른 버전을 병렬로 실행하도록 지원
  7. 강력하고 구성 가능한 로깅
  8. 가볍고 정확하며 안전한 모니터링
  9. 응용 프로그램 검사 점 및 백업
  10. 응용 프로그램은 메모리 부족, 파일 시스템 가득 참, 네트워크 다운, 구성 파일 누락 / 손상, 시간 차이와 같은 문제에 어떻게 반응합니까?
  11. 항상 별도의 개발, 테스트 및 프로덕션 환경이 있습니다. 모든 무료 VM 소프트웨어를 사용하면 변명의 여지가 없습니다!

응용 프로그램의 작동 상태가 작동 중지 또는 중지보다 많을 수 있습니다. 상태 다이어그램을 그립니다. 대부분의 응용 프로그램에는 다음과 같은 상태가 있습니다.

  • 내려가는
  • 초기화
  • 회복
  • 받아 들일 수없는 일
  • 기다리는
  • 검사 점
  • 가공
  • 마무리
  • 종료
  • 내려가는

각 상태에서 시스템이 충돌하면 어떻게되는지 생각해보십시오. sysadmin은 상태 전환을 어떻게 모니터링하고 제어합니까?


4
와우. 그 상태 다이어그램 아이디어는 굉장합니다. 오늘의 멋진 정답 스 니펫으로 추천합니다!
quux

단순한 선택 : 보안은 디자인 문제에 가깝습니다. 먼저 컨텍스트에서 "보안"의 의미 (사용자가 수행 할 수있는 작업, 비밀 등)를 정의해야합니다. 그렇지 않으면 ... 작은 개발자가 할 수있다
sleske

17

SA에서 "사용자"를 구별하십시오.

"사용자"는 소프트웨어 사용법을 알아야합니다. 사용자는 소프트웨어 설치 방법과 같은 것을 신경 쓰지 않습니다.

SA는 소프트웨어 사용 방법을 신경 쓰지 않지만 소프트웨어 설치 방법에 대한 중요한 세부 정보를 알아야합니다.

각 역할과 관련된 정보를 포함하여 각 역할별로 문서를 별도로 작성하십시오.


3
관리자는 네트워크의 각 측면뿐만 아니라 워크 스테이션과 응용 프로그램에서 실행되는 응용 프로그램의 즉각적인 전문가 여야한다고 언급 할 가치가 있다고 생각합니다. 재무 담당자가 급여 소프트웨어 업데이트를 수행하는 방법을 물어 보면 쉽게 할 수 있고, 물류를 통해 주문을 할 수없는 이유를 묻는다면, 프로세스에 어떤 일이 벌어지고 있는지 정확히 아는 것은 우리에게 달려 있습니다. 주문. 각 시스템이 실제로 서로 대화하는 방식에 대한 문서는 쉽게 잊혀 질 수 있다고 생각합니다. 관리자가 작업의 복잡한 세부 사항을 모르기 때문에 "멍청한"것처럼
보이게

9

내 소원 중 하나는 예외 및 오류 코드에 적절한 메시지를 포함시키는 것입니다. 응용 프로그램을 개발하지 않은 사람에게는 완전히 불투명합니다 JimmyNotAtHomeException: it's late!.

그러나와 같은 메시지 Unable to find jimmy - initial manual call_mother procedure는 매우 도움이됩니다.


2
동의한다. 여러 로그 수준을 가지고 로그에 들어가는 내용을 문서화하십시오!
클린턴 블랙 모어

불행히도 일부 회사의 경우 암호 오류 메시지는 지원 계약을 판매하는 비즈니스 모델의 일부입니다. 그들은 당신이 정말로 이해하기를 원하지 않습니다.
knweiss

8

커뮤니케이션, 커뮤니케이션, 커뮤니케이션. sysadmin과 개발자 사이의 모든 문제는 항상 통신 부족으로 추적 할 수 있습니다. 프로젝트 이전에 시스템 관리자 (또는 그 대표자)와 개발자들이 모여 훌륭한 프레임 워크 토론을했다면 SOOOOOOOOOO 많은 문제를 피할 수있었습니다. 응용 프로그램이 App 서버 + DB 서버 + 인터페이스 서버 등으로 분리되어 있기 때문에 개발중인 하나의 상자에있는 모든 사람을 개발하여 화염에 빠지는 것을보기 때문에 얼마나 많은 것들이 파울 링되는지 말할 수 없습니다. 이 주제를 제기 해 주셔서 감사합니다.


8

프로젝트 초기에 참여하십시오. 기능적 사양 단계에서 실제와 같이 초기에.

다른 사람은 모든 PC에 수동으로 설치해야한다고 언급했지만 구성 및 구성 변경에도 동일하게 적용됩니다. 클라이언트 쪽의 연결 문자열과 같은 것을 저장하기로 선택하고 정기적으로 업데이트 해야하는 경우 아마도 당신을 죽이고 싶을 것입니다 .

같은 이유로 중앙에서 적절하게 관리 및 구성 할 수있는 기술을 선택하십시오. 우리가 사용하는 모든 중앙 관리 도구와 잘 통합되는지 확인하십시오.

항상 최저 공통 분모를 사용하여 테스트하십시오. 이는 가장 원시적 인 OS, 응용 프로그램 제품군 및 브라우저 플랫폼에서 일반적으로 사용되는 비 관리자입니다. 우리는 마지막 순간에 모든 사용자에게 필요한 브라우저 업그레이드가 마음에 들지 않습니다.

일이 잘못 될 때 우리를 탓하지 마십시오. 예전에는 앱이 깨질 때마다 개발자가 즉시 손가락을 가리킬 것입니다. "새 패치를 설치했는데 브라우저를 업그레이드하지 않으며 보안이 너무 엄격합니다." 이것은 파괴적인 분위기를 생성합니다. 우리는 실제로 같은 편이며 문제를 해결하기 위해 당신과 함께 일하고 싶지만 그러한 상황에서는 할 수 없습니다.


나는 두 번 공감할 수 있었다 :-).
sleske

7

엘리트가되지 마십시오.

"내 시간을 허비하지 말아라. 당신은 단지 dogsbody sysadmin 일 뿐이다 . 나는 소프트웨어를 작성하고 당신은 단지 그것을 서비스한다. 그래서 당신의 사소한 문제를 해결하고 내가 말한대로하라."

개발자는 실제로 그 말을 한 번만 말했습니다 (1). 이메일로. 대규모 메일 그룹에 참조되었습니다. 그 의미는 분명하다. 개발자로서 그는 전체 소프트웨어 세계의 주인이자 주인이었다. 그리고 나는 그에게 귀중한 시간을 낭비하기에 너무 사소한 일을 처리하기 위해 단순히 일꾼으로 고용되었습니다. 물론 이것은 거의 최악의 예이지만, 이전과 이후의 많은 개발자들로부터 그 의견에 대한 강하고 약한 반향을 들었습니다 (2).

당신은 나보다 더 많은 돈을 벌 수 있습니다 (그러나 그것을 가정하지 마십시오!). 그러나 사용자가 사용하는 시스템을 구축, 운영 및 유지 관리하려면 팀이 필요합니다. 궁극적으로 우리 모두가 그들을 제공합니다.

나는 당신의 직업과 기술이 나의 것과 다릅니다. 나는 당신의 능력을 존중합니다. 초등하고 어리석은 것처럼 보일지라도 내 질문에 대답하기를 바랍니다. 기쁜 마음으로이 예의를 돌려 드리겠습니다!

많은 나쁜 (또는 단순히 무관심한) 개발자들이 다양한 포럼에서 말하고 생각하고 게시했기 때문에 나는 미친 파워 트립에 있지 않습니다. 그러나 나의 관심사는 당신의 것과 다르며, 나의 질문과 제안은 나의 자존심에 도움이되지 않습니다. 실제로 내 임무는 앱을 최고의 실행 상태로 유지하고 모든 사용자에게 응답하고 사용 가능한 상태로 유지함으로써 더 나은 모습을 만드는 것입니다. 그러기 위해서는 나머지 네트워크와 시스템도 최고 수준으로 유지해야합니다.

나는 당신이 과거에 어리 석고, 힘이 넘치고, 그리고 / 또는 평범한 게으른 관리자를 만났다는 것을 완전히 알고 있습니다. 나는 하나가 아닌 하나처럼 보이려고 노력하고 있습니다. 만약 당신이이 가능성을위한 여지를 남겨두고 당신이 그것을 볼 때 그것을 인정한다면, 나는 당신이 다른 멍청한 놈들이 여전히 그들의 sysadmin이 멍청한 것에 대해 연기하고있는 동안 당신이 필요한 것을 얻을 것이라고 확신합니다.


(1) 또한 자신의 프로그램 (소프트웨어 요구 사항 작성 및 관리 도구)이 설치 및 실행을 위해 도메인 관리자 권한이 필요하다고 주장했습니다. 그것은이었다 주요 보안 위험.

(2) 필요할 때 가르치고 필요할 때 배울 수있는 많은 훌륭한 개발자들과도 일했습니다.


맙소사, 정말 바보 야 말하는 것은 나쁘지만, 그 장소를 둘러 보는 것은 수치
스럽습니다.

동의했다. 그 개발자는 정말로 그들의 상급자 (바람직하게 CCed ;-)에 의해 철저히 씹어 졌어 야했다.
sleske

6

시스템 관리자가해야 할 일이 있는지 확인하고 업무를 수행하도록하십시오. 많은 회사들이 무능한 시스템 관리자를 가지고 있으며 이것은 종종 현실적이지 않습니다. 그러나 오만한 개발자는 시스템 관리자가 자신의 역량을 입증 한 후에도 시스템 그룹의 조언을 무시하는 것을 보았습니다.

sysadmins를 사용하여 새 시스템 설계에 대해 논의하십시오. 종종 귀중한 통찰력이 있습니다. 개발자는 종종 sysadmins와의 토론을보고 초기 요구 사항을 "조기 최적화"라고합니다. 실제로 개발 그룹 책임자는 쓰기 집중적 또는 읽기 집중적 부하인지 여부를 설명하는 정도까지 sysadmins 및 DBA가있는 새로운 데이터베이스 서버의 요구 사항에 대해 논의하는 데 시간이 낭비되었다고 말합니다. 필요한 스토리지 용량

sysadmins의 성능 문제에 대해 논의하십시오. 솔직히 시스템 관리자 만이 시스템의 성능 메트릭을 올바르게 해석 할 수 있습니다. 필자는 개발자가 "free"로보고 된 사용 가능한 메모리가 10 번째 시간이 지난 후에도 "free"의 출력이 설명되기 때문에 항상 메모리가 누수된다고 결정하는 것을 보았습니다.

sysadmins와상의하지 않고 결론을 도출하지 마십시오. 개발자들이 "데이터베이스는 항상 디스크에 묶여있다"(iostat가 존재한다는 것을 몰랐 음), "RAID 5가 트랜잭션 워크로드에 더 빠르다"(이동 한 데이터베이스 시스템의 기억에 근거)와 같은 이론에 얽매어있는 것을 보았다. 한 하드웨어 플랫폼에서 다른 하드웨어 플랫폼으로-읽기 집약적 인 워크로드였으며, RAID5 솔루션은 더 많은 컨트롤러에 더 많은 드라이브가 확산되었지만 이러한 세부 사항을 잊어 버렸고 결론 만 기억했습니다.)

sysadmins와상의하지 않고 시스템 문제에 대한 솔루션을 설계하지 마십시오. 개발자가 솔루션을 설계하고 작은 구현 지원을 요구하는 병리학 환경에서 일했습니다. Unix 그룹의 책임자 인 Unix 그룹의 책임자 인 나 자신 외에 Unix 그룹의 구성원은 개발자가 전체 인프라 기능을 만들려는 동료가 아닌 "고객"으로 취급하기를 원했습니다. 고객이 항상 옳다는 것은 그들이 무엇을하고 있었는지 왜 의심하지 않는 것을 의미했습니다. 올바른 해결책을 결정할 수 있도록 설명 된 문제를 주장 할 유일한 사람이었습니다. 이와 같은 병리학적인 환경을 조성하는 방식으로 행동하지 마십시오. 순 이익은 아닙니다. 대신 시스템 관리자가 방어 적으로 행동하고 모든 사람이 고통을 겪게됩니다.

당신은 더 이상 학교에 없습니다. 이들은 실제 시스템이며 이상적인 방식으로 작동하지 않습니다. 예를 들어 모든 것이 대기 시간이없는 것은 아닙니다. sysadmin이 클러스터링 솔루션이 정치적 목적만을위한 것이라고 경고하고 시스템의 추가 복잡성이 전체적인 안정성을 떨어 뜨리면 심각하게 생각하십시오. 실제 장애 모드를 설계해야합니다. 예를 들어 TCP를 통해 통신하는 서버를 잃어 버릴 경우 연결이 재설정되지 않을 수 있습니다. Sysadmin은 실제 장애 모드를 이해합니다.

sysadmin이 말한 내용을 듣거나 sysadmins가 무능하며 해고되어야한다고 경영진에 불만을 제기하십시오. sysadmin을 무시하는 것은 의미가 없습니다.

응용 프로그램 배포 방법을 고려하십시오. sysadmins와이 문제를 논의하는 것이 합리적이라는 것을 인식하십시오. 단일 구성 파일을 기반으로하는 100 개의 서버가 동일하고 중앙 위치에 이러한 구성 파일의 마스터 사본을 저장하는 것이 좋습니다. 응용 프로그램을 쉽게 다시 배포 할 수 있다면 모든 사람이 얼마나 나아질 수 있는지 알아보십시오. 시스템에 문제가있는 경우 1 분 안에 여분의 공간으로 다시 배치하거나 고장난 시스템을 수리하는 동안 몇 년을 기다리시겠습니까? 응용 프로그램을 다시 배포 할 수 있으면 OS를보다 쉽고 안전하게 업그레이드 할 수 있습니다. 앞으로이 문제에 관심이있을 수 있습니다.

OS로 인한 것으로 생각되는 문제가있는 경우 즉시 sysadmin을 호출하여 체크 아웃하는 것이 좋습니다. 그러나 객관적인 조사 결과 아무 것도 드러나지 않으면 문제를 설명 할 의무가 있습니다.

"느리게 응답하는 것과"전혀 응답하지 않는 것 사이에는 차이가 있음을 이해하십시오.


3

개발중인 OS (en)에 대해 예측 가능한 방식으로 변경하여 예측 가능한 방식으로 구성하고 배치합니다. 이것은 모든 것을 의미합니다. 예를 들어 : OpenLDAP에는 이상한 로그 레벨 방법이 있습니다. 특정 IMAP 서버에는 구성 파일이 없지만 옵션이 컴파일되어 있어야합니다. 어떤 패키지는 그것들이 하나의 특정 디렉토리 경로에 있기를 원하며, 이는 특정 운영 체제의 규칙을 어길 수밖에 없습니다. 이 모든 것들이 내 평소 구성에서 사마귀로 눈에.니다.

그것은 일반적인 규칙이지만, 당신이 특별하다고 가정하지 않으므로 소프트웨어 패키지가 필요한 소프트웨어에 내재 된 충분한 이유가 없다면 소프트웨어 패키지가 일반적으로 플랫폼에서 작동하는 방식에 대한 일반적인 규칙을 어기는 것이 좋습니다. "강력하다고 생각한다"는 것은 모든 사람의 일반적인 설정을 깨뜨리기에 충분하지 않습니다. 소프트웨어가 수행하려는 기능에 연결된 이유 여야합니다.


3

앱과 관련된 서버 간 통신이있는 경우 설계 단계에서 하나 이상의 sysadmin을 포함 시키십시오. 또한 다른 서비스 (SQL, SMTP, HTTP 등)에 대한 종속성을 명확하게 문서화하십시오. 예상 한대로 작동하지 않을 때 수행 할 작업을 추측하거나 도와 드릴 수 없습니다.


3

자동화 된 방식으로 수십 또는 수백 개의 시스템에 소프트웨어를 배포 할 수있게하십시오. 조직에 소프트웨어 패키지가 필요한 경우 sysadmins는 모든 상자에 수동으로 소프트웨어를 설치할 시간이 거의 없습니다. 파일에 라이센스 정보가 필요한 경우 파일을 제공하는 방법을 문서화하면 큰 이점이 있습니다.

어도비는 역사적 으로 작업하기가 정말 힘든 일부 설치 프로그램을 가지고있었습니다 . 그보다 더 높은 조준하십시오!


2

첫날부터 확장에 대해 생각하십시오. Sysadmin은 성능 문제로 돈 / 하드웨어를 던져서 놀라운 일을 할 수 있지만 때로는 잠금에 대해 생각할 때 도움이되지 않는 경우가 있습니다. 때로는 잠금 문제에서 벗어날 수 없습니다. 그래도 물어 주셔서 감사합니다 :)

아 64 비트 가능하고 멀티 스레드도 시도하십시오 :)



2

다른 모든 것을 넘어 서면 ...

  • 시뮬레이션 된 프로덕션 환경 (라이브 서버와 동일한 구성의 개발 서버 또는 VM)을 요청한 후이를 사용하여 릴리스 프로세스를 테스트하십시오. 그런 다음 변경 목록 및 적용 순서를 포함하여이 릴리스 프로세스를 제공하십시오 (예 : 1. 유지 보수 모드 시작, 2. SQL 업데이트 적용, 3. X 버전으로 소스 업데이트, 4. 유지 보수 모드 종료, 5.기도)
  • 데이터 무결성을 유지하기 위해 사용자를 쫓아 낼 수있는 유지 관리 모드가 있는지 확인하십시오. 사용자가 로그인하여 트랜잭션을 실행하는 여러 서버에서 대규모 시스템 업데이트를 실행하지 않기를 원합니다. 이는 대부분의 경우 실패의 레시피입니다.
  • 다소 표준화 된 개발 모델을 사용하십시오. 예를 들어, 회사의 모든 새로운 응용 프로그램 (웹 그룹)은 Zend Framework를 사용합니다.
  • 변경 범위에 대한 아이디어를 얻을 수있는 수정 된 버그 목록을 포함하여 읽을 수있는 변경 로그를 제공하십시오. 때때로 우리는 다른 관점을 가지고 있기 때문에 잠재적 인 문제를 식별 할 수 있습니다.

2

비현실적이지만, 개발자가 세상에서 느슨해지기 전에 프로덕션 sysadmin 또는 dba 역할을 수행하도록 강요한다면 도움이 될 것입니다.

내가 다루는 많은 특수 응용 프로그램은 관리되는 환경에서의 설치에 대한 단서가 없거나 데이터베이스 디자인의 잔혹성을 커밋합니다.


완전히 동의. 나는 개발자이지만 몇 달 동안 관리자로 일했으며 매우 귀중한 경험을 발견했습니다. 정말 당신의 시야를 넓 힙니다.
sleske

1

1) 오류를 자세히 기록하는 로그 파일. 또는 ELMAH와 같은 좋은 오류 추적 시스템.

2) 설치, 구현 및 SA 안내서에 대한 자세한 설명서.

3) 다른 놀라운 SA에서 위에서 언급 한 것들을 추가하십시오. :)

그것이 내가 지금 생각할 수있는 전부입니다.


1

책은 그것을 풀어 라! 제작 과정에서 무엇이 잘못 될 수 있는지에 대한 다양한 공포 이야기가 있습니다. 그것을 읽으면 작업을 염두에두고 디자인 할 때 영감 / 아이디어를 제공 할 수 있습니다. (개발 및 운영 측면에서 일한 Michael Nygard가 작성했습니다.)


1
  • 사양없이 개발하지 마십시오
  • 문서화 (또는 문서를 작성하는 사람이 정확하게 수행하도록 보장)
  • 고객을 지원하는 것을 두려워하지 마십시오 (더 높은 수준의 지원으로)

1

내 경험상 가장 큰 차이는 개발자가 1 일부터 배포에 대해 생각하는 것입니다. 프로덕션 / 고객 환경에서 새로운 기능을 생각하기 시작하면 그 기능이 어떻게 배포 될지에 대해 생각하기 시작합니다. 환경 및 운영 방법.

일단 개발 프로세스에 들어가면 너무 늦지는 않지만, 시점을 그 시점으로 전환하기까지 시간이 걸릴 수 있습니다. 그들은 코드베이스가 강제로 직면 할 때까지 코드베이스를 얼마나 추상적으로보고 있는지 알지 못합니다. 그들의 마음에, 그것은 단지 "구성 요소"입니다. 이전 버전 (또는 이전 버전)의 소프트웨어를 실행하여 기존 환경에 배포하는 방법이 특히 중요 합니다. 배포 논의는 새로운 기능을 수용하도록 아키텍처를 조정하는 방법에 상당한 영향을 줄 수 있습니다.


나는 당신의 의견에 동의합니다. 배포 엔지니어로서 배포 중에 엔지니어가 내 견해 만 가지고 있으면 더 간단해질 수있는 엄청난 양의 복잡한 문제를 처리합니다.
djangofan

0

아직 보지 않은 것이 구성 가능합니다. 모든 종류의 구성 파일을 사용하는 앱이 있다면 모든 것을 구성 할 수 있습니다.
우리 회사에서는 데이터베이스를 내보낼 간단한 앱을 작성했습니다. 다음 주에는 작은 부분을 끌 수 있도록 다시 작성했습니다. 그 후 매주 나는 작은 기능을 변경하기 위해 부품을 다시 작성하고 다시 작성해야했습니다. xml 구성 파일을 거의 추가하지 않았으므로 이제 재배치하기가 더 쉽습니다.
구성 파일을 좋아합니다.


0

개발자가 QA 작업과 더 잘 분리되기를 바랍니다. 개발자가 작업중 인 프로젝트에 대해 단위 테스트 사례를 만들 수 있으면 좋을 것이라고 생각하지만 그 테스트가 QA로 전달되면 좋을 것입니다. 실제로 개발자가 결국 DEV에 혜택을주기 때문에 QA 엔지니어에게 약간의 도움을 줄 때 좋습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.