AA파트의 역할과 직무 및 기술
java개발을 10년차 이상하셨다면 AA파트로 전환이 가능할것으로 보입니다.
우선의 역할은
1. 아키텍트: 설계자 입니다.
- 직접 코딩하기전에 문서로 설계함으로서 사전에 전체적인 그림을 기리고
누락되는요소와 이슈들을 파악하여 시스템 구성과 솔루션을 통해 해결하는것입니다.
- 코딩시에 문제가 발견되면 시간이 많이 소요됨으로 구성도에서 이슈를 파악함으로
시간과 비용을 절감할수 있습니다.
2. 시스템설정: nginx,tomcat같은 WEB/WAS서버에 대한 설정을 합니다.
- 설치는 누구나 다 할수 있지만 상세설정에서는 업무개발시에 필요한 요건을
설정을 통해서 최적화할수 있습니다(가용성측면과 성능 층면 고려)
3. F/W개발: 보통 공통개발이라는 파트로 처음 시작하기도 합니다.
공통기능중에 F/W로 개발하면 경제성있는 구축이 가능함으로
Spring, Springboot의 주요 기능을 활용하도록 커스터마이징합니다.
4. 공통개발: 이부분은 개발자쪽에 가까워 지양하는 추세입니다.
- 개발할 기능을 분류하고 대/중/소 분류를 통해 공통 업무를 개발합니다.
- 보통 응용팀이 오기전에 미리 개발하거나 병렬로 처리하며
공통 기능임으로 TDD기반의 테스트를 수행하고 샘플코드와 사용자 문서를 제공합니다.
5. 배치개발: AA파트에서 독립적으로 배치를 개발하는 경우가 있습니다.
- 배치 개발은 시간단위로 독립적으로 수행하며 다른 업무와 연결이 있으나
테스트 등을 위해서 연계됨으로 전담자를 배치하는경우가 있습니다.
- 업무 난이도로는 제일 쉽다고 볼수 있으나 개발자와의 커뮤니케이션이 필요합니다.
- 최근에는 Airflow등을 사용시 기술적 복잡도가 증가함으로 충분한 시간이 필요합니다.
6. CI/CD구성: Jenkins등을 통해 자동배포를 구성합니다.
- 간단해 보이지만 CI/CD로 인하여 개발환경이 변경될수 있음으로
Eclipse등의 개발 구조와 동시에 진행함으로 AA의 가장 핵심적인 역할로 볼수 있습니다.
7. 솔루션연동: 솔루션 설치는 관련 업체에서 수행하나 연계는 담당자가 필요합니다.
- WBS상에서는 난이도가 높지 않게 판단하다. 설치의뢰부터 설치 테스트까지 지원이 필요함으로
생각보다는 시간소모가 큰편이라 일정수립이 매우 중요한 부분입니다.
- 업무상의 역할을 명확히 해야함으로 설치 업체가 방문시 해당 TASK모두 마치고 갈수 있도록
사전, 사후 처리를 담당함으로 업무를 잘알고 커뮤니케이션이 능숙해야 합니다.
기술부문
1. Jenkins: CI/CD의 기본으로 Eclipse및 IDE환경 구성이 매우 중요함으로 AA의 1순위 기술입니다.
- 최근에는 K8S, Docker등의 배포 환경으로 진화되고 있음으로 기존 jenkins배포에서 콘테이너 환경의
배포까지 한다면 베스트 입니다.
- 단 콘테이너 환경이나 cloud환경 배포는 스크립트 작성시 시간소요가 2~3배이상 소요됨으로
일정계획시 고려가 필요합니다.
- 특히 망분리 환경/ 퍼블릭/프라이빗 클라우드 환경에 따른 적용환경에 따라 추가 솔루션
넥서스등이 필요한 경우가 있습니다.
- 컨네이너 기반으로는 Docker, Nexus, ArgoCD등을 사용합니다.
2. Spring: java분야의 Spring을 잘하시면 e-gov프레임워크나 대기업솔루션 적용에도 무리가 없습니다.
- 특히 boot의 레퍼런스가 협소하여 spring 5.0이상의 레퍼런스 가이드를 참조하면 좋습니다.
- 디스패처, 인터셉터등의 활용이나 Spring계열의(Security등) 능숙함이 좋을수 있습니다.
3. Tomcat등 오픈소스: U2L이슈로 인한 오픈소스
- 세션클러스터링: Redis활용을 통해 세션클러스트링을 일반적으로 수행합니다.
- 클라우드 전환,콘테이너 기반전환: 상용의 장점을 못쓰게 됨으로 대체 기술이 필요합니다
- 버전 문제: 기존 Oracle에서 Mysql, Mariadb, Postgresql등으로 전환시 OS버전과 JAVA버전에 따른
드라이버 버전의 이슈가 많음으로 비교등의 정리가 필요합니다.
- openjdk: 탈 Java로 인한 오픈JAVA버전이슈와 미지원 기능을 체크할수 있습니다.
4. 다양한 솔루션: 연계 솔루션이 매우 다양하나 RestFul방식의 연계라면 어렵지 않게 접근할수 있습니다.
- 솔루션별로 망분리와 함께한 환경에대한 연결은 난이도가 높지 않으나 다양한 환경에대한 이슈경험이 필요합니다.
- 망분리로 인한 proxy(Haproxy, tinyproxy, squid)등 필요환경의 경험이 있는경우 좋습니다.
- 실제적으로 솔루션에 대한 난이도는 높지 않으나 전체 구성에 대한 고려가 필요합니다.
* 결론
Jenkins와 Spring은 필수이며 대체 기술도 많이 등장함으로 원리는 동일하다고 볼수 있습니다.
자동 배포 계획을 세우면 개발환경(eclipse)도 설정해서 공유하는것이 일반적입니다.
솔루션 연계도 보통 10개 이상인 프로젝트가 많아서 일정관리도 필요합니다.
*추가
AA의 역할은 기능뿐만 아니라 비기능 요소를 고려해야합니다.
능숙한 PM을 만나지 않았다면 요건에 따라 TASK를 상세화하는것도 AA의 몫입니다.
그래야 비기능요소를 도출해서 솔루션을 선정할수 있기때문입니다.
- 최근에는 최신기술에 목메이는 개발자들이 많다보니 접해보지 못한 환경도 있으나
원리는 동일하기 때문에 걱정하실 필요는 없습니다.
향후 방향성
- Docker, K8S, Cloud기반으로의 변화(개인적으로 해보시는것을 추천합니다)
- 콘테이너 기반배포는 기존 소스나 jar, war기반에서 이미지배포로 변화되고 있습니다
- IaC : 최근에 클라우드 영향으로 코드기반 인프라 생성으로 바뀌고 있습니다.
(예전기술부터 열거해보자면 ansible, chef, 최근 terraform)
AA는 공부하기 좋아하는 분들께 권하고 있죠. 신기술에 거부감없이 적용하실수 있다면 추천합니다.
자신의 경험과 기술의 능숙함을 이용하여 AA로 전환하는것을 권유드립니다.
개인적으로 이론부분에 대한 강의도 진행하고 있으며
전환교육 또는 전환하고 싶으신분은 아래 메일로 문의 주십시요
감사합니다
정두현 수석연구원 chungpe@cslee.co.kr