| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 주유소
- VMware
- 에러
- 템플릿
- K&R
- VM
- 오토바이
- 잡담
- 인프라
- 개발기
- 일상
- 티스토리챌린지
- 휘발류
- Bloc
- Flutter
- C언어
- DART
- 가상머신
- podman
- 오블완
- virtualmachine
- FreeBSD
- 개발
- 퇴근길
- node.js
- ubuntu
- Linux
- 리눅스
- 객체지향프로그래밍
- 연습문제
- Today
- Total
그냥저냥
기본기의 재정의 | "할 줄 아는 것"과 "끝낼 줄 아는 것" 본문
기본기란 무엇일까?
우리는 어떤 분야에서든 “기본기가 부족하다.”라는 말을 종종 하거나, 타인으로 부터 듣습니다.
하지만 문득 이런 생각이 들었습니다.
기본기란 무엇을 의미하는 것일까?
고민을 해봤습니다.
대부분의 경우 기본기는 단순히 기초 지식이나 기술을 의미하는 것처럼 사용됩니다.
하지만 오랫동안 이 일을 하며 느낀 것은 조금 다르다고 생각됩니다.
기본기는 단순히 아는 것이 아니라 "어떤 일을 끝까지 완료할 수 있는 능력"에 더 가깝다고 생각합니다.
"할 줄 아는 것"과 "끝낼 줄 아는 것"
“할 줄 아는 것”은 말 그대로 아는 것이죠.
어떤 명령어를 알고 있고, 어떤 기술을 사용할 수 있으며, 어떤 도구를 다룰 수 있다는 의미입니다.
하지만 실전에서는 할 줄 안다고 해서 일을 끝낼 수 있는 경우는 많지 않습니다.
현실의 작업 환경에서는 예상하지 못한 오류나 환경 변화, 시스템 충돌 같은 변수들이 끊임없이 발생합니다.
역할과 지식
예를 들어 봅시다.
프론트엔드 개발자
프론트엔드 개발자의 역할은 웹을 통해 접속한 사용자가 실제로 보게 되는 UI를 구현하는 것이라 생각합니다.
프론트엔드의 역할을 완료하기 위해서는 최근 React나 Vue 같은 프레임워크를 익히게 됩니다.
그러나 이것만으로 부족하죠.
이러한 기술을 안다고 해서 곧바로 사용자에게 제공할 수 있는 화면을 완성할 수 있는 것은 아니라는 사실을 알게됩니다.
그래서 HTML, CSS, JavaScript를 익히고,
나아가서는 HTML, CSS, JavaScript가 동작하는 브라우저에 대해서 공부하는 자신을 발견할 수 있을 겁니다.
익히면서 여러가지 시행착오를 거치고 나야 실제로 동작하는 결과물을 만들 수 있다는 사실을 알게됩니다.
시스템 엔지니어
프론트엔드나 백엔드 개발자가 만든 프로그램이 안정적으로 운영되는 시스템을 구축하고 운영하는 일이죠.
이를 위해 하드웨어에 대한 이해와 리눅스 같은 운영체제에 대한 지식과 경험이 필요합니다.
여기에 더해 실제 기업 환경에서는 네트워크, 방화벽, 스토리지 같은 지식들도 같이 필요하게 됩니다.
하지만 여기서도 단순한 지식만으로는 충분하지 않습니다.
서로가 유기적으로 연결되어 있다는 사실을 깨달아야 합니다.
지식은 그저 시작일 뿐입니다.
작업을 완료하기 위해 필요한 것
내가 생각하는 기본기는 세 가지 요소로 이루어져 있다고 생각합니다.
지식, 절차, 그리고 영향도
먼저 지식이 필요합니다.
하지만 지식만으로는 충분하지 않죠.
지식이 재료라면 절차는 레시피라 할 수 있는데, 전체 작업의 흐름을 이해하는 것을 뜻합니다.
작업의 흐름을 이해하지 못하면 멈추게 되겠죠.
그리고 마지막으로 중요한 것이 영향도입니다.
내가 수행한 작업이, 다른 시스템이나 다른 사람의 업무에 어떤 영향을 미칠지 예측할 수 있는 능력을 말합니다.
예를 들어 이런 질문들이다.
- 이 코드를 수정하면 다른 모듈에는 어떤 영향이 있을까?
- 이 설정을 변경하면 어떤 서비스들에 영향을 미칠까?
이런 판단은 결국 수많은 시행착오와 실패를 통해 얻어지는 경험일 것입니다.
이 과정 속에 수많은 시도와 고생을 하게되죠.
하지만 이 과정은 반드시 필요하다고 생각합니다.
영향도를 이해하지 못하면 언제 터질지 모르는 시한폭탄과 같습니다.
반대로 이를 이해하는 사람은 리스크를 최소화하면서 가장 효율적인 선택을 할 수 있죠.
이러한 ‘영향도’의 중요성을 실감했던 일이 얼마 전 있었습니다.
사례: 그래픽 드라이버 업그레이드하며 겪은 일
얼마전에 그래픽 드라이버를 업그레이드 작업을 진행하였습니다.
그래픽 카드가 장착된 서버였는데, 이 서버에 Ollama 서비스를 설치하는 작업이었죠.
이 서버는 운영되는 서비스가 있었어요.
운영되는 중간에 Ollama 설치하였으나 잘 동작하지 않았습니다.
당시 서버에 설치된 CUDA 버전이 11.4버전이었는데, 이 때문에 그래픽 드라이버 업데이트가 필요했습니다.
CUDA 12.2 버전을 설치하기로 결정했습니다.
당시 CUDA 13.1 버전이 최신이었으나, 기존에 서비스에 영향을 줄 것 같아 최신 버전으로 선택하지 못했습니다.
방문 일정을 다시 잡아 설치를 진행하였죠.
파일을 서버에 전송하고, 미처 확인하지 못한 것이 있었어요.
RPM(Redhat Package Manager)으로 설치되어 있었던 것이었죠.
그러나 제가 준비한 것은 NVIDIA에서 제공하는 스크립트 형태였어요.
NVIDIA에서 제공하는 스크립트로 설치를 했으나 커널 모듈에 로드된 모듈을 때문에 실패하였죠.
순간 긴장되고 손이 떨렸어요.
운영되는 서버라 조심해야 했거든요.
우선은 기존에 한번 재부팅이 필요하고 시간은 약 1시간 소요된다고 전달했는데, 서버 재부팅 한번 더 필요하다고 전달하였어요.
당시 담당자도 짧은 시간이라 그 자리에서 승인을 해준 것 같았어요.
커널 모듈을 제거하고 재부팅, 이후 NVIDIA 드라이버 설치 후 재부팅하여 설치를 진행했습니다.
이 외에도 순간순간 변수가 있었으나 적절히 대응하였고, 설치는 마무리할 수 있었어요.
마무리
저는 기본기를 이렇게 정의하고 싶습니다.
기본기는 '기술력'이 아니라 '완결력'이다.
단순히 기술을 익히는 것을 넘어 전체 맥락을 이해하고 작업을 끝까지 완수할 수 있는 힘입니다.
내가 만든 결과물이 어떤 영향을 만들지까지 책임질 수 있을 때 비로소 기본기가 있다고 말할 수 있을 것입니다.
여러분이 생각하는 진짜 기본기는 무엇일까요?
'개발기' 카테고리의 다른 글
| 뻘짓거리 | 리눅스에서 가상 메모리가 고갈되면 어떤 일이 벌어질까? (C언어 테스트) (0) | 2026.03.06 |
|---|---|
| 회고 | 나의 임베디드 개발 경험 (0) | 2026.03.06 |
| Functional Programming in Scala 연습문제 2.1 (0) | 2025.10.12 |
| [Scala] Java 24 환경에서 Scala 실행 시 sun.misc.Unsafe 경고 발생 해결 방법 (Scala 3.8 로드맵) (0) | 2025.09.13 |
| [Javascript] Truthy/Falsy 값 (0) | 2025.02.28 |