(1) 에디터/IDE
[기본]
사용 중인 에디터나 IDE로 프로젝트 단위를 관리할 수 있다.
다양한 플러그인을 설치하고, 환경 설정을 한 후 실무에 적절히 활용할 수 있다.
[심화]
빌드와 디버깅을 능숙하게 연동하고 활용할 수 있으며, 소스코드 편집부터 빌드, 실행, 디버깅에 필요한 단축키를 활용할 수 있다.
사용 중인 도구의 개발 환경 최적화를 위해 환경 설정 파일을 입맛에 맞게 수정할 수 있다.
(2) 생산성 향상 > tmux,screen
[기본]
가상 터미널을 사용하는 tmux 또는 screen 도구가 어떤 이점을 제공하는지 설명할 수 있다.
[심화]
원격 환경에서 tmux/screen의 session 환경을 영속적으로 사용할 수 있도록 설정, 구동 및 활용할 수 있다.
(3) 생산성 향상 > Tig
[기본]
Tig를 사용하면 어떤 도움을 받을 수 있는지 설명할 수 있다.
[심화]
Tig로 git command와 동일한 액션을 수행할 수 있다.
(4) 형상 관리
[기본]
GitHub repository를 clone하고 코드를 수정하여 pull request를 생성하는 기본 과정을 수행할 수 있고, 이 과정에서 사용되는 명령어를 이해하고 있다.
workspace, index, local repository, remote repository 를 명확히 구분하고 활용할 수 있다.
PR을 리뷰하고 직접 merge해 본 경험이 있다.
conflict를 해결하고 merge해 본 경험이 있다.
merge와 rebase의 차이를 이해하고, 각각 필요한 상황을 명확하게 인지해 실무에 활용할 수 있다.
reset과 revert의 차이를 알고, reset의 3가지 옵션인 soft, mixed, hard를 이해하고 있다.
Git flow, GitHub flow, GitLab flow 등 각 브랜치 전략의 특성과 장단점을 이해하고 현업에 활용할 수 있다.
(5) 데이터베이스 이론
[기본]
index, transaction, key 등의 기초 개념을 이해하고 실무와 연계하여 활용할 수 있다.
transaction의 ACID 특성을 숙지하고 있으며, 4가지 특성을 명확히 구분해 설명할 수 있다.
RDBMS와 NoSQL의 차이를 이해하고, 용도에 맞게 실무에 도입할 수 있다.
RDBMS의 조인 처리 방식인 nested loop, sorted merge, hash join을 이해하고 실행 계획을 확인할 수 있다.
정규화와 비정규화의 개념과 장단점을 이해하고, 데이터베이스 설계 시 적절히 활용할 수 있다.
[심화]
database partitioning과 sharding의 개념과 차이를 숙지하고 있고, 실무에서 그러한 처리가 필요한 사례를 특정할 수 있다.
(6) SQL
[기본]
CREATE, ALTER, DROP, TRUNCATE 등 DDL query를 작성하고, 데이터베이스 스키마, 테이블, 뷰, 인덱스 등을 능숙하게 조작할 수 있다.
다양한 요구 사항에 맞추어 DML query를 작성하고 실무에 활용할 수 있다.
join의 종류와 각각의 특성을 명확히 이해하고 쿼리를 작성할 수 있다.
쿼리 성능에 직결되는 SQL 작성 형태를 충분히 인지하고 있으며, 이를 기반으로 실무에서 쿼리 성능을 직접 튜닝할 수 있다.
(7) MySQL
[기본]
MySQL에서 지원하는 column type의 종류와 특성, 각각의 용도를 명확히 구분해 실무에 적용할 수 있다.
MySQL에서 지원하는 character set와 collation을 이해하고 필요한 설정값을 적절히 선택할 수 있다.
query plan을 분석하고 쿼리 튜닝을 진행할 수 있다.
MyISAM, InnoDB, Memory 등 MySQL에서 제공하는 주요 Storage Engine의 특성을 이해하고 실무에 활용할 수 있다.
transaction isolation level의 종류와 설정값을 잘 알고 있다.
lock의 종류와 발생하는 경우를 잘 알고, 성능상의 이슈가 없도록 활용할 수 있다.
[심화]
MySQL database의 상태를 가늠할 수 있는 주요 status값을 모니터링하고 이슈에 대응할 수 있다.
MMM(Multi-Master Replication Manager)의 동작 원리와 장단점을 충분히 숙지하고 있다.
(8) Oracle
[기본]
Oracle에서 지원하는 column type의 종류와 특성, 각각의 용도를 명확히 구분해 실무에 적용할 수 있다.
query plan을 분석하고 쿼리 튜닝을 진행할 수 있다.
lock의 종류와 발생하는 경우를 잘 알고 성능상의 이슈가 없도록 활용할 수 있다.
transaction isolation level 종류와 설정값을 잘 알고 있다.
[심화]
Oracle 이중화 구성 중 RAC와 HA 구성 방식을 설명할 수 있다.
(9) MongoDB
[기본]
기본적인 document find부터 시작해, 다소 복잡한 aggregation 요청까지 능숙하게 수행할 수 있다.
document 탐색을 위한 query plan을 분석하고 조회 성능을 튜닝할 수 있다.
sharded cluster 환경 아래서 발생하는 몇 가지 제약 사항을 이해하고 실무에 활용할 수 있다.
[심화]
Mongo DB HA 구성에서 non-sharded cluster와 sharded cluster의 차이, P-S-S, P-S-A 멤버 구성의 차이를 이해하고 현업에 활용할 수 있다.
(10) HBase
[기본]
HBase의 기본적인 아키텍처를 이해하고 있으며, 다른 데이터베이스와의 차이점을 알고 실무에 활용할 수 있다.
프로젝트에 HBase를 연동한 후 데이터를 능숙하게 조회하거나 조작할 수 있다.
데이터 분산 및 조회 성능 등을 고려해 적절한 row key를 정의하고 활용할 수 있다
[심화]
Apache Phoenix와 연계해 SQL 친화적인 조회 기반을 마련할 수 있다.
(11) HDFS
[기본]
HDFS를 저장소로 선택하기에 적절한 케이스를 특정하고 실무에 활용할 수 있다.
HDFS NameNode와 DataNode의 역할을 명확히 구분할 수 있다.
HDFS block size 기본값이 128MB로 비교적 큰 이유와 이것이 탐색 성능에 미치는 영향을 설명할 수 있다.
dfs 명령어 또는 각종 인터페이스를 활용해 기본적인 파일 조작을 수행할 수 있다.
YARN을 이해하고, 요구 사항에 맞춰 Map-Reduce, Spark 등 적절한 YARN 애플리케이션을 제출할 수 있다.
YARN Resource Manager Web UI를 통해 제출한 애플리케이션의 상태와 로그를 확인하고 적절히 조작할 수 있다.
[심화]
Hadoop 관련 설정 파일의 위치를 알고 있으며, 주요 XML 설정 속성의 의미를 이해하고 있다.
Hadoop에서 지원하는 HDFS HA 구성을 이해하고, Active NameNode와 Standby NameNode의 역할을 명확히 구분할 수 있다.
(12) Spark
[기본]
deploy mode(local, client, cluster)의 차이점을 명확히 이해하고 활용할 수 있다.
driver-memory, executor-memory, executor-cores, num-executors 등 job에 할당해야 하는 리소스를 적절히 예측하고 조정할 수 있다.
Spark를 이용해 batch, streaming 요구 사항을 능숙하게 구현할 수 있다.
Spark Streaming과 Structured Streaming의 차이를 이해하고 특성에 맞게 활용할 수 있다.
RDD와 DataFrame, DataSet의 차이를 이해하고, 각 특성에 맞게 활용할 수 있다.
[심화]
job 실행 시 shuffling이 미치는 영향을 이해하고 있으며, 적절히 성능 튜닝을 진행할 수 있다.
(13) Kafka
[기본]
Kafka와 다른 메시지 큐 시스템의 차이점을 명확히 이해하고 용도에 맞게 활용할 수 있다.
Kafka broker, producer, consumer 각각의 주요 설정과 그 역할을 충분히 이해하고 활용할 수 있다.
Kafka topic의 partition 수, replication factor, ISR 설정이 미치는 영향을 이해하고, 적절한 튜닝 수치를 제안할 수 있다.
[심화]
at-least-once, exactly-once를 보장하기 위해 어떤 설정이 필요한지 알고 있다.
유사시 consumer group offset을 확인하고 필요에 따라 적절히 reset할 수 있다.
(14) ActiveMQ
[기본]
ActiveMQ 메시지 브로커의 동작 원리를 이해하고 간단한 producer와 consumer를 구현할 수 있다.
topic과 queue의 차이를 이해하고, pub-sub 또는 message queue의 각 용도에 맞게 활용할 수 있다.
[심화]
ActiveMQ에서 지원하는 다양한 transport 설정 유형을 이해하고, 필요한 통신 환경 또는 용도에 맞게 설정할 수 있다.
failover 처리와 관련된 설정을 이해하고 현업에 활용할 수 있다.
(15) RabbitMQ
[기본]
exchange, queue, binding 등 RabbitMQ 메시지 브로커를 구성하는 주요 개념을 정확히 이해하고 있다.
RabbitMQ를 활용해 실제 동작하는 producer와 consumer를 구현할 수 있다.
direct, fanout, topic, headers 등, RabbitMQ에서 지원하는 exchange 유형별 차이를 이해하고 용도에 맞게 활용할 수 있다.
[심화]
RabbitMQ HA 구성을 이해하고 직접 클러스터를 구성할 수 있다.
(16) Redis
[기본]
Redis Cluster에 key-value를 저장하거나 읽어들이는 구간을 직접 구현할 수 있다.
Redis에서 지원하는 주요 명령어를 이해하고 용도에 맞게 활용할 수 있다.
Redis에서 지원하는 자료 구조의 종류를 이해하고 각각의 용도에 맞게 활용할 수 있다.
Redis CLI를 능숙하게 활용할 수 있다.
[심화]
big key problem 등 성능에 악영향을 주는 사례들을 이해하고 예방할 수 있다.
Redis Cluster의 상태를 가늠할 수 있는 주요 메트릭을 이해하고 모니터링할 수 있다.
(17) ELK
[기본]
Elasticsearch index를 구성하고, document 발행/조회를 능숙하게 수행할 수 있다.
field data type별 특징을 이해하고, 필요에 따라 적절한 mapping 설정을 추가할 수 있다.
index template을 활용해 인덱스 생성 관리를 효율화할 수 있다.
Logstash 설치 후, 필요한 input, output 플러그인을 선택해 설정할 수 있다.
Kibana 설치 후 index pattern 및 필요한 설정값을 추가할 수 있다.
Kibana Discover 화면에서 능숙하게 document를 탐색하고 필요한 dashboard를 구성할 수 있다.
[심화]
Elasticsearch Hot-Warm 아키텍처를 이해하고, 자주 접근하는 index에 대한 효율적인 색인 관리를 수행할 수 있다.
Elasticsearch ILM 정책을 이해하고 적절한 인덱스 수명 주기를 설정할 수 있다.
(18) Filebeat (Elastic beats)
[기본]
Filebeat와 Logstash의 차이를 이해하고, 용도에 맞는 솔루션을 선택할 수 있다.
로그 수집이 필요한 서버에 Filebeat를 설치할 수 있다.
Log, Kafka 등 적절한 input type을 선택하고, 관련 설정값을 추가할 수 있다.
ES, Logstash, Kafka, Redis 등 필요한 output type을 특정하고, 관련 설정값을 추가할 수 있다.
(19) Fluentd
[기본]
Fluentd와 Fluent Bit의 차이를 명확하게 인지하고, 용도에 맞는 솔루션을 선택해 활용할 수 있다.
Fluentd 설치와 기본적인 설정 작업을 수행할 수 있다.
Fluentd로 로그를 수집해 가공한 후 원하는 목적지에 전달할 수 있다.
Fluentd에서 지원하는 주요 플러그인과 설정값을 이해하고 능숙하게 활용할 수 있다.
(20) Linux
[기본]
리눅스 OS의 종류를 알고 있다.
프로세스, 스레드, 태스크와 메모리 관리, 파일 시스템 등의 개념을 이해하고 있다.
df, ps, netstat, sar, top 등의 기본 명령어로 리눅스 시스템의 상태(파일 시스템, 네트워크, 메모리, 프로세스 등)를 확인할 수 있다.
[심화]
load avg/run queue, free/buff/cache, file descriptor/socket 등, 리눅스 시스템의 부하 지표를 모두 이해하고 설명할 수 있다.
sysctl.conf, limits.conf 등 커널 파라미터를 조절해 서버 성능을 튜닝할 수 있다.
리눅스에서 동작하는 프로세스에 strace, gdb 등을 이용하여 attach해서 시스템 콜을 분석할 수 있다.
(21) Linux Kernel
[기본]
리눅스의 기본 구조, 커널/유저 영역의 구분과 역할을 이해하고 있다.
리눅스 커널 버전을 확인하고 업데이트할 수 있다.
시그널을 이해하고 그 종류를 설명할 수 있다.
[심화]
시스템 로그를 통해 커널 패닉 상황을 확인하고 조치할 수 있다.
리눅스 커널의 IO 스케줄러 방식을 이해하고 설명할 수 있다.
가상 메모리 등 메모리 관리 방식을 설명할 수 있다.
ext3, ext4, xfs, VFS 등 파일 시스템의 종류와 특징을 설명할 수 있다.
(22) Linux System Programming
[기본]
bash 등의 셸 프로그래밍 언어로 배치 스크립트를 작성하고 작성된 스크립트를 이해할 수 있다.
파일을 열고, 쓰고, 닫는 등 파일을 다루는 프로그램을 작성할 수 있다.
프로세스의 개념을 이해하고, 프로세스를 생성, 실행, 종료하는 프로그램을 작성할 수 있다.
기본 시그널을 처리하는 프로그램을 작성할 수 있다.
[심화]
POSIX의 개념, System Call API의 종류와 동작 방식을 이해하고 있다.
IO 멀티 플렉싱 방식을 이해하고 멀티 플렉싱을 이용하는 프로그램을 작성할 수 있다.
하드 링크와 소프트 링크의 차이, 파일 속성 등을 이해하고, 이것을 프로그램으로 작성할 수 있다.
고급 시그널을 처리하는 프로그램을 작성할 수 있다.
(23) Linux(명령어 위주)
[기본]
기본 명령어를 알고 있으며, man page를 활용해 상세 옵션을 살펴보고 활용할 수 있다.
표준 입출력과 파이프, 리다이렉션의 개념을 이해하고 활용할 수 있다.
기본적인 리눅스 명령어를 모두 알고 활용할 수 있다.
파일 작업, 디렉터리 작업
텍스트 처리, 정규 표현식
apt-get, yum, rpm 등의 리눅스 소프트웨어 패키지 도구를 활용해 업데이트할 수 있다.
(24) Shell script
[기본]
source, export, HOME, PATH, PS1, PS2, LD_LIBRARY_PATH 등 리눅스 환경 변수를 이해하고 있다.
rc, profile 파일을 이용해 자신만의 개발 환경을 구성할 수 있다.
bash, zsh 등 셸 스크립트 언어의 기본 문법을 알고 있으며, 이를 이용해 매개변수 전달, 종료 상태 확인, 반복문 사용 등을 스크립트로 작성할 수 있다.
리눅스 명령어를 조합해 원하는 작업을 효율적으로 처리하는 스크립트를 작성할 수 있다.
(25) 네트워크
[기본]
네트워크 용어의 개념과 동작 구조, 필요성을 이해하고 있다.
현재 프로젝트 혹은 소속 조직의 네트워크 구축 환경이 어떤지 파악하고 있다.
[심화]
(L4/L7) HAProxy에 대해서 이해하고 있고, client IP를 전달하기 위한 설정을 할 수 있다.
(DNS) 필요시 NTree 요청으로 사내와 사외 DNS를 다르게 설정해 통신할 수 있다.
(DNS) 네이버 망과 파이낸셜 망 등 서로 다른 운영망에서 DNS를 관리할 수 있다.
(GSLB) IDC 이중화를 이해하고 있고, NTree 요청으로 GSLB를 설정할 수 있다.
(GSLB) 글로벌 환경에서 클라이언트 요청이 지역적으로 가까운 서버의 IP로 분기 처리되도록 설정할 수 있다.
(26) TCP/UDP
[기본]
TCP와 UDP가 각각 무엇인지, 둘 간의 차이점은 무엇인지 이해하고 있다.
(27) HTTP/HTTPS
[기본]
HTTP의 기본 동작 과정과 주요 구성 요소를 이해하고 설명할 수 있다.
HTTP의 주요 메서드를 이해하고 설명할 수 있다.
(28) REST
[기본]
REST의 개념을 알고 있으며, 구성 요소와 특징을 설명할 수 있다.
RESTful과 REST API의 개념을 이해하고 있다.
(29) 프로토콜 > gRPC, Websocket, GraphQL
[기본]
각 프로토콜의 개념과 스펙을 알고 있으며, 현재 담당하는 프로젝트 혹은 소속 조직에서 어떤 프로토콜을 사용하고 있는지 파악하고 있다.
(30) 전송 포맷 > JSON, XML
[기본]
데이터 포맷이 어떻게 구성되어 있는지 알고 있으며, 데이터를 표현, 전송하기 위해 직접 사용해 본 경험이 있다.
(31) 웹 서버
[기본]
로컬 개발 환경과 서버 환경에서 웹 서버를 설치할 수 있다.
기본적인 HTTP 동작을 할 수 있도록 설정할 수 있다.
웹 서버와 WAS를 연동할 수 있다.
필요시 날짜별, 도메인별로 액세스 로그와 오류 로그를 남기도록 설정할 수 있다.
[심화]
현재 조직, 프로젝트에서 사용 중인 웹 서버가 어떻게 구성되어 있는지 파악하고 있으며, 내부 동작 구조를 알고 있다.
SSL 인증서를 설치하고, HTTPS가 동작하도록 설정할 수 있다.
리버스 프록시를 구성할 수 있다.
필요시 특정 도메인과 URL을 리다이렉트시킬 수 있다.
x-forwarded-for와 x-real-ip 등을 활용해 client IP를 정확하게 가져올 수 있다.
(Apache) prefork, worker, event 방식을 이해하고, 필요에 따라 사용할 수 있다.
(Nginx) Apache와 동작 모드가 어떻게 다른지 이해하고 있다.
(32) Jenkins
[기본]
CI/CD의 개념을 이해하고 있으며, 필요성을 설명할 수 있다.
조직에서 사용하고 있는 Jenkins job 또는 Pipeline의 내용을 이해하고 실행할 수 있으며, 필요한 경우 수정할 수 있다.
(33) Docker
[기본]
container의 개념, VM과의 차이점을 설명할 수 있다.
Docker 이미지를 빌드하고 이 이미지로 Docker 컨테이너를 실행할 수 있다.
multi-stage build의 개념을 알고 활용할 수 있다.
(34) Ansible
[기본]
inventory, module, task, playbook 등의 기본 개념을 이해하고 있다.
조직에서 사용하는 playbook의 내용을 이해하고 실행할 수 있으며, 상황에 맞춰 수정할 수 있다.
(35) Kubernetes
[기본]
Pod와 container의 차이와 관계를 설명할 수 있다.
Pod의 수명 주기를 설명할 수 있다. 특히, Pod가 생성된 후, 그리고 삭제될 때 어떤 순서로 어떤 작업이 일어나는지 설명할 수 있다.
Deployment와 StatefulSet, Job, CronJob의 차이를 이해하고 각각 어떤 경우에 사용해야 하는 지 설명할 수 있다.
Service를 생성하고, 이 Service의 도메인 또는 VIP를 통해서 Pod에 접근하도록 구성할 수 있다.
Pod가 준비(ready)되지 않을 때 Pod의 상태, 이벤트, 컨테이너 로그 등을 확인해 원인을 파악할 수 있다.
liveness probe와 readiness probe가 무엇인지, 그리고 이 probe들이 실패했을 때 어떤 일이 일어나는지 설명할 수 있다.
(36) Helm
[기본]
이미 존재하는 Helm chart로 Helm release를 생성, 갱신, 삭제할 수 있다.
Helm value를 사용하는 Helm chart를 작성할 수 있으며, Helm chart 배포 시 Helm value를 전달하는 방법을 알고 있다.
if, range 등의 흐름 제어 구조를 사용해 Helm chart를 작성할 수 있다.
(37) 테스트 개념
[기본]
단위 테스트, 통합 테스트, 인수 테스트, 성능 테스트 등 각 테스트의 역할과 특성을 명확하게 인지하고 실무에 활용할 수 있다.
테스트 자동화가 필요한 이유를 인지하고, 일련의 테스트 자동화 환경을 직접 구축할 수 있다.
현재 참여 중인 프로젝트에서 코드 작성 이후에 수행되는 테스트 과정을 잘 이해하고 설명할 수 있다.
(38) nGrinder
[기본]
nGrinder를 활용해서 성능 테스트 환경을 구축하고, 요구 사항에 맞는 스크립트를 작성할 수 있다.
에이전트, 에이전트별 가상 사용자, Ramp-Up 등 주요 테스트 설정을 이해하고 요구 사항에 맞춰 활용할 수 있다.
nGrinder 실행 결과를 분석하고, 그 결과를 성능 튜닝 작업에 활용할 수 있다.
(39) 코드 퀄리티
[기본]
정적 분석이 무엇이고, 왜 필요한지 이해하고 있다.
정적 분석과 동적 분석의 차이점을 알고 있다.
프로그래밍 언어별로 어떤 정적 분석 도구가 있는지 알고 있으며, 정적 분석 도구를 활용해 본 경험이 있다.
코드 커버리지(code coverage)의 개념을 알고 있다.
코드 커버리지가 왜 중요한지 설명할 수 있다.
[심화]
정적 분석 도구와 코드 커버리지 측정 도구를 서비스에 적용한 경험이 있다.
SonarQube를 사용해 현재 진행 중인 프로젝트의 코드 커버리지를 살펴본 경험이 있다.
테스트 코드 작성 등, 코드 커버리지를 높이기 위한 조치를 취해 본 경험이 있다.
(40) 코드 리뷰/PR
[기본]
코드 리뷰의 중요성과 이점을 설명할 수 있다.
코드 리뷰를 할 때 어떤 요소를 중점적으로 리뷰해야 하는지 이해하고 있다.
현재 팀 내에서 적극적으로 코드 리뷰에 임하고 있다.
동료들과 코드 리뷰를 할 때 다음과 같은 사항을 고려하고 있다.
코드 컨벤션, 테스트 코드, 동일 기능에 대한 중복 개발 여부 등
PR 병합 규칙(merge, rebase merge, squash merge 등)
(41) 좋은 commit 메시지
[기본]
협업 간 좋은 커밋 메시지가 필요한 이유가 무엇인지 알고 있다.
팀에서 정한 커밋 메시지 규칙을 숙지하고 있다.
예) 커밋 기능 구분, 커밋 메시지 작성 언어, GitHub 이슈 번호 등
(42) 아키텍처
[기본]
자신이 담당하고 있는 서비스의 아키텍처를 이해하고, 설명할 수 있다.
(43) 이중화/고가용성
[기본]
서비스의 고가용성(HA)을 위한 이중화에 대한 개념을 이해하고 있다.
단일 장애점(SPOF)이 왜 서비스 장애로 이어질 수 있는지 취약점을 설명할 수 있다.
이중화 방식 중 active-standby, active-active 구성을 설명할 수 있다.
[심화]
이중화 구성 시 발생할 수 있는 장비 장애, 애플리케이션 장애, 네트워크 장애 등 다양한 장애 상황을 설명할 수 있다.
서비스 장애 발생 시 즉각적으로 failover를 수행해 대응할 수 있다.
스토리지 혹은 DB 이중화 전략을 수립할 수 있다.
(44) 대용량 분산 처리
[기본]
중앙 처리 방식 대비 분산 처리 방식의 장단점을 설명할 수 있다.
일반적인 분산 처리 모델인 3-Tier 아키텍처를 설명할 수 있다.
sharding, mapreduce, queuing 등의 대용량 데이터 처리 기술을 알고 있다.
[심화]
HDFS 파일 시스템을 이해하고 있다.
Hadoop 시스템의 요소별 기능을 이해하고 있다.
빅데이터 처리를 위한 시스템을 구성하고 운영해 본 경험이 있다.
(45) MSA
[기본]
모놀리식 아키텍처와 마이크로서비스 아키텍처의 차이점을 이해하고 있다.
모놀리식 아키텍처를 MSA로 전환하면 어떤 이점이 있는지 설명할 수 있다.
[심화]
MSA 모듈 간의 통신을 위한 프로토콜을 설계하고 개발할 수 있다.
분산된 서비스 모듈 간의 트랜잭션을 유지하는 방법을 알고 구현할 수 있다.
MSA가 적용된 실제 운영 환경에서 유연하게 배포하기 위한 전략을 세울 수 있다.
(46) EDA(Event Driven Architecture)
[기본]
MSA가 도입된 시스템에서 EDA가 필요한 이유를 이해하고 있다.
event generator, event channel, event processor 등, EDA의 구성 요소를 설명할 수 있다.
[심화]
EDA가 적용된 마이크로서비스 시스템(EDM)의 토폴로지를 구성할 수 있다.
이벤트 로그를 저장하고, 트랜잭션을 처리해 최종적인 일관성(eventual consistency)을 유지할 수 있는 시스템을 구축할 수 있다.
(47) 동기/비동기 통신
[기본]
동기, 비동기 방식의 특징과 차이점을 설명할 수 있다.
블록, 논블록 방식의 특징과 차이점을 설명할 수 있다.
[심화]
동기/비동기, 블록/논블록 방식의 조합으로 적절한 I/O 처리를 선택해 구현할 수 있다.
(48) OOP
[기본]
OOP 클래스와 객체의 차이를 알고 있다.
OOP의 주요 특징인 캡슐화, 상속화, 추상화, 다형성의 개념을 알고 있다.
[심화]
UML을 이용해 객체 지향 프로그램을 설계할 수 있다.
SOLID 원칙을 알고 OOP 설계에 반영할 수 있다.
(49) 디자인 패턴
[기본]
디자인 패턴을 적용해서 해결할 수 있는 문제들을 이해하고 있다.
GoF가 체계화한 디자인 패턴을 알고 있다.
[심화]
GoF가 분류한 디자인 패턴의 방식들을 설명할 수 있다.
실제 서비스에 적절한 디자인 패턴을 적용해 개발할 수 있다.
(50) 리팩토링
[기본]
리팩토링의 의미와 필요성을 설명할 수 있다.
리팩토링에 사용되는 일반적인 규칙을 설명할 수 있다.
[심화]
레거시 코드를 리팩토링할 때 발생할 수 있는 문제점을 미리 파악 할 수 있다.
실제 서비스 코드에 리팩토링을 적용하고, 성능을 향상시키는 작업을 진행할 수 있다.
(51) DDD
[기본]
DDD에서 설명하는 도메인의 개념을 이해하고 설명할 수 있다.
DDD에서 bounded-context의 의미를 이해하고 있다.
DDD가 어떻게 모듈 간 의존성 최소화와 응집성 최대화를 이끌어 내는지 이해하고 있다.
[심화]
domain event를 활용해 도메인 간 강결합을 끊고 이벤트 기반으로 처리하는 방법을 알고 적용할 수 있다.
aggregate, aggregate root의 개념과 서로 간의 관계를 알고 있다.
(JAVA) JPA를 이용해 도메인 모델과 리포지토리를 구현할 수 있다.
(52) 클린 코드
[기본]
코드를 가독성 있게 작성하는 것이 중요한 이유를 설명할 수 있다.
클린 코드를 작성할 때 사용되는 원칙을 설명할 수 있다.
프로그램 설계의 품질을 높여주는 규칙을 설명할 수 있다.
[심화]
기술 부채가 언제 발생할 수 있는지 이해하고 있다.
기술 부채가 발생했을 때 조치할 수 있는 해결 방안을 세워 적용할 수 있다.
(53) 모니터링
[기본]
모니터링을 위해 수집해야 하는 메트릭의 종류와 해석 방법을 설명할 수 있다.
현재 조직에서 활용 중인 모니터링 시스템의 구조와 구축 환경을 잘 이해하고 있으며, 부분적으로 수정, 활용할 수 있다.
(54) IIMS
IIMS 연동 방식을 이해하고 있다.
(55) TDD
[기본]
TDD의 기본 개념이 무엇인지, 왜 필요한지 설명할 수 있다.
테스트 코드 작성을 기반으로 클래스를 설계하고 개발할 수 있다.
[심화]
코드 리뷰 및 리팩토링 진행 간 테스트 주도 개발을 활용하고 있다.
mock 객체를 활용한 테스트 코드 작성으로 테스트 자동화가 어려운 환경에서 테스트 편의성을 갖출 수 있다.
(56) Agile, Scrum
[기본]
애자일(agile) 조직이란 무엇인지, 애자일 방법론에는 어떤 것들이 있는지 이해하고 있다.
프로젝트 관리에 있어서 스크럼(scrum) 방식이 어떻게 동작하는지 알고 있으며, 점진적으로 프로젝트를 발전시켜 나가기 위해 팀원들과 어떤 과정을 수행하는지 이해하고 있다.
[심화]
제품 담당자로서 스크럼 팀을 운영해 본 경험이 있으며, 제품/스프린트 백로그들을 관리하면서 제품 개발을 이끌어 갈 수 있다.
(57) 소프트웨어 개발 프로세스
[기본]
소프트웨어 개발 방법론의 종류와 각각의 장점, 유의 사항을 이해하고 있다.
각 개발 방법론으로 얻을 수 있는 기대 효과가 무엇인지, 우리 조직에서는 어떤 식으로 적용하고 있는지 설명할 수 있다.
(58) 문서
[기본]
프로젝트, 개발, 연구 내용을 동료에게 공유하고 히스토리를 보존하기 위해 이해하기 쉽고 구조화된 문서로 작성할 수 있다.
문서화를 위한 도구를 프로젝트에 활용할 수 있다.
[심화]
추가, 수정, 삭제 등의 변경 내역을 추적할 수 있도록 문서 버전 관리를 진행하고 있다.
진행 중인 프로젝트의 변경 사항이 즉각 반영될 수 있는, 문서화 도구의 산출물 자동화 기능을 활용하고 있다.