5 things sysadmins should know about software development
시스템 개발자가 소프트웨어 개발에 대해 알아야 할 5가지
* Article (원문) (URL)
5 things sysadmins should know about software development
The opinions expressed on this website are those of each author, not of the author's employer or of Red Hat. The content published on this site are community contributions and are for informational purpose only AND ARE NOT, AND ARE NOT INTENDED TO BE, RED
www.redhat.com
Background (배경지식)
Edge Computing
- 클라우드 서비스와 같이 대규모 중앙 데이터센터에서 모든 컴퓨팅 파워를 제공하는 것이 아니라,
데이터가 생성된 곳과 가까운 Edge(말단) 영역에 소규모 컴퓨팅 파워를 설치해 데이터를 처리하는 방식이다.
Article Summary (기사 요약)
- Edge Computing, Machine Learning, Intelligent Application 기술이 발전함에 따라
개발 과정에서 시스템 개발자의 중요도는 나날히 높아지고 있다.
- 시스템 개발자가 소프트웨어 개발에 대해 알아야 할 5가지 요소는 아래와 같다:
1. Communication is key
- 전형적으로 소프트웨어 개발팀은 아래와 같은 구성원들로 이루어진다:
- Architects
- Data Engineers
- Data Scientists
- ML Engineers
- Software Engineers
- Front-End Developer
- Sysadmin
- 각각의 구성원들은 저마다의 역할에 Speialized되어 있기 때문에 종종 소통에 어려움을 겪곤 한다.
- 이러한 이유로 인해, Discovery Phase와 Planning Phase에 모든 구성원들이 참여해야 한다.
- 팀원간의 소통은 성공으로 향하는 Key이며, 올바른 질문을 적절한 대상에게 하는 것으로 시작된다:
- Data Engineers
- Query의 특성에 대한 질문을 할 수 있다.
- How many terabytes of data will be stored, processed, and pulled?
- Software Engineers
- 사용중인 라이브러리, 패키지에 대한 질문을 할 수 있다.
- What languages will they be coding in (Kotlin/Swift, Java, C)?
- Data Scientists
- 개발하는 애플리케이션에 머신러닝 모델이 필요한 경우, 그에 관한 내용을 질문할 수 있다.
- All Participants
- 역할에 따라 적절한 보안 정책을 적용하는 것이 중요하다.
- Who will need to access the database with a read-only policy?
- What about read-write?
- Which users will require access to environments or other platforms for this project?
2. Set expectations
- Infrastructure와 Hardware expectation(Specification)을 수립함으로써 미래에 발생할 수 있는 Conflict를 피할 수 있다.
- Developer는 Security Policy, Hardware Limitations, Available Resource와 같은 사항들을 Sysadmin에 의존한다.
- 개발 팀이 하드웨어 및 보안 목표를 빨리 달성할수록 충돌이 발생할 가능성은 줄어든다.
3. Expect deviations
- 개발 과정에서 소프트웨어 요구사항과 팀원 교체와 같은 변화가 일어나면
이러한 변화를 반영하여 Hardware Requirements, Security Permissions, Libraries와 같은 기존의 계획을 수정해야 한다.
4. Prepare to manage many dev environments
- 개발환경에 따라, 애플리케이션이 정상적으로 동작할수도, 동작하지 않을수도 있는데
이를 방지하기 위해 Remote Managed Environment 혹은 Virtual Environment를 활용할 수 있다.
- 대표적으로, Python 프로젝트에서는 virtualenv와 pip를 제공하고 있는데
이들은 필요한 패키지들이 명시된 requirements.txt을 통해
개발 환경을 Local 혹은 Remote Terminal 환경에서 간편히 설정할 수 있게 하고,
Popdman은 개발환경을 Containerized할 수 있게 한다.
- 또한, Git 혹은 DVC와 같은 도구들을 이용하여 버전 관리를 수행할 수 있다.
5. Use similar tools
- Sysadmin들의 생각과 달리, Developer들은 System Tool과 Technique들을 사용할 줄 안다.
- Developer들은 다양한 Scripting Language(Python, Perl 등)들을
ML Models과 Data-Processing Pipelines을 구현하는데 사용한다.
- Data Engineer와 Web Developer들은 Linux Command를 통해 Data를 변환하고(tr, paste 등)
Server간 Connection을 확인한다. (ping, curl 등)
- Tool에 대한 지식이 많을수록, 개발자들은 Security Policy와 Hardware에 대해 세심히 생각하게 된다.
Reference: RedHat; 5 things sysadmins should know about software development; Nicole Lama (URL)
