의미 없는 도전은 없었다

오류 공장장·2024년 12월 11일

2024년 11월부터

목록 보기
6/8

깊이 없는 결과물

이게 의미가 있을까 싶은 순간들이 있었다.
그 순간들은 다시 내 앞에 나타났고
한 발걸음 더 내딛을 수 있었다.
그 한 발걸음은 세상을 다르게 바라볼 수 있게 했다.


1. 비속어 우회 탐지 모듈 개발

2022.07 ~ 2022.08


직접 벡터 할당에서 부터 시작

다른 사람들은 퍼셉트론이나 학습 모델들을 다루고자 했다.

나는 모델이 무엇인지, 퍼셉트론이 무엇인지 도저히 이해가지 않았다.
나는 기초부터 다지자라는 생각이었다.
'그 기초가 튼튼한 토대가 되겠지'

자모음에 벡터를 직접 할당하였다.
비슷하게 생긴 자모음, 문자, 숫자는
코사인 유사도가 높게 벡터를 할당하였다.

비속어가 담긴 말뭉치와 타겟 단어의 코사인 유사도를 비교했고
일정 수치 이상이면 비속어로 판단했다.

이 결과물은 파이썬으로 몇 줄 안되었다.

의미가 있을까..?

벡터와 코사인 유사도를 떠올리고,
스칼라 값으로 자모음을 다루다가,
자모음에 벡터를 할당하여 다루는
고된 여정의 결과물은 남들이 보기에는 별 것 없어 보였다.


2. 검색엔진 시도

2023.07 ~ 2023.08


이전보다 더 깊게

Indexing, Ranking, Querying를 이해하는 것부터 어려웠다.
그렇지만 Ranking은 반가운 부분이었다.
TF-IDF로 벡터를 표현하여 코사인 유사도로
문서와 사용자 쿼리 문장에 대한 유사도 순위를 매길 수 있었다.

의미가 있을까..?

거대한 검색엔진에 비해 초라한 수준의 검색기였다.
최신 학습 모델을 다루지는 않고
이런 고전적이고 기초적인 검색을 다루는 것이 의미있을까?


3. 학대 피해 아동을 위한 sw 개발

2023.02 ~ 2023.11


일단 개발은 했는데..

이렇게 긴 시간 프로젝트를 한 적은 처음이었다.
그것도 팀장이었다.

프로젝트 진행 중 모종의 계기로 뒤늦게
삶의 가치관을 찾기 시작하였다.
'난 나의 삶을 어떻게 살고 싶은 걸까?'

삶의 가치관을 확립한 순간도,
가치관을 실천한 순간도 아니었기에
팀장으로서 잘 수행했는지 자신이 없다.

다른 사람과의 경험 뿐만 아니라
기술적인 측면으로도 마찬가지였다.

일단 개발은 했는데..

JavaScript

우리는 채팅이 많으니
네트워크 IO 처리에 이점이 있다는 내용을 보고
자바스크립트로 시작했다.

개발하다보니 타입스크립트와 NestJS를 만났다.
여전히 자바스크립트를 이해하지 못 했기에
비동기로 동작할 때 난 대처할 수 없었다.

Promise, async, await은 이해가지 않았다.
난 gpt한테 의지할 수 밖에 없었다.
무력했다.

MSA

학습 모델을 활용하는 경우 독립된 다른 서비스로 개발하였다.
파이썬 기반의 기술 스택을 선정하고 개발하였다.
이때는 멋모르고 MSA라고 생각하고 진행했다.

Container

정확히는 기억나지 않지만,
그 때 당시에는 CI/CD로 배포하기 위해 컨테이너가 필요한 줄 알았다.

그래서 컨테이너를 다루기 시작했다.
0.0.0.0이 아닌 로컬 호스트로 실행해서
팀원과 고생한 한달이 생각난다.

개발은 했다.

막막한 순간 순간들을 넘기고 동작이 잘 되어 기뻤지만
마음이 복잡한 순간들이었다.

gpt한테 의존하는 무력한 순간이었고,
개발로는 미래가 없어보였고,
컨테이너나 DevOps에 대한 진로 고민은 생겼고,
내가 나아간 것은..
또다시 한 발자국이었다.


4. 기존 검색기에 다양한 시도

2023.12 ~ 2024.02


딱 한 발자국

가용성을 위한 과정과 의미 검색 반영, 성능 테스트 등 다양한 시도를 도전해보고 배우고 싶었다.

컨테이너 오케스트레이션, Apache JMeter, Jira, 프로메테우스, 그라파나 등
다양하게 한 발자국 나아갔다.
DB 이중화, 캐싱 등은 발을 내딛지조차 못 했다.

이전보다 더 깊게

단순한 TF-IDF가 아니라 의미를 반영할 수 있었다.
드디어 허깅페이스에 있는 BERT와 같은 최신 학습 모델들을 직접 사용해 보았다.

벡터를 직접 다루는 것에서
TF-IDF처럼 전문적으로 벡터를 다루는 것을 거쳐,
학습된 모델을 활용할 수 있게 되었다.

의미가 있을까..?

학습된 모델을 직접 개발한 것도 아니고,
멀티 클러스터에 멀티 노드로 진행한 것도 아니고,
제대로 부하테스트 성능 결과를 분석한 것도 아니고,
제대로 운영하고 시각화해서 모니터링한 것도 아니였다.

그렇기에 과거에 적힌 블로그 글들을 지울까 고민을 정말 많이 했다.
그렇지만, 그것은 다른 의미를 지니고 있었기에 남기기로 했다.


5. 동아리 지원

2024년 초


일상에서 새로운 도전

삶의 가치관을 확립하고 삶을 살아있게 살아가고 싶어졌다.
그렇게 동아리를 새롭게 도전했다.
자소서에는 확립된 삶의 가치관을 담았다.
면접에 갔지만 떨어졌다.


6. 다른 사람들의 삶을 둘러보며

동아리 지원 이후 얼마되지 않아


가치관 실천의 계기

수업에서 다른 사람들의 자소서를 보게 되었다.
나는 가치관을 문자로 작성했고,
다른 사람들은 저마다의 가치관이 담긴 삶을 담아내었다.

또다시 나에게 부끄러운 순간이었다.
동아리 면접에서 삶의 가치관을 실천하지 않은 삶을 평가받은 것이라고 생각했다.
동아리를 도전하고 탈락한 것은 다행이었다.

삶의 가치관을 실천할 때,
비로소 자유로워지고 삶의 의미를 찾을 수 있다고 생각하게 되었다.

내 삶의 가치관을 실천하는 것은
주변 인연들에게 이 마음이 담긴 인사와 관심뿐이었다.

이 인사만으로도 나는 삶의 의미를 찾기 시작했고,
주변 사람들에게도 변화를 주기 시작했다.
이렇게 스쳐지나가는 인연을 맺기 시작했다.

다만 여기에 반드시 한줄을 꼭 남겨야 할 것은
관성에 의해 본래의 마음가짐을 잊지 말자


7. 취업 지원

2024.12


채용 공고를 둘러보며

여러 삶의 가치관은 확립하고 있는데
직업관은 없었다.

취업 지원서를 작성할 때도
직업에 대한 뚜렷한 목표는 없었다.
면접 자기소개도 삶의 가치관과 그에 대한 노력을 말하는 것을 생각했다.

채용 공고를 보기 위해 둘러보던 중
단순 명문화된 미션과 비전이 아니라
회사의 가치관이 담긴 채용 공고 페이지들을 보게 되었다.

그곳에 담겨있는 실천 의지와 노력에서 느껴지는 인상은
회사에서 추구하는 가치관이 확고하게 느껴졌다.

미션, 비전이 아닌 가치관.
사람이 아닌 회사.
이에 대해 생각하게 되었다.

나의 개발자로서의 가치관을 확립하게 된 계기였다.
다시 올해 초로 돌아가서 살아온 삶의 과정을 살펴보고
개발자로서의 마음가짐을 다져보자


8. 블록체인 활용 의료 관리 SW 개발

2024.02 ~ 2024.06


또다시 새로운 도전?!

블록체인에 의료 데이터 해시값을 저장해보기로 했다.
의료 질의응답에 대한 맞춤형 설명을 위해 RAG 또한 기획하였다.
육각형 아키텍처를 도입하고자 하였다.

의미가 있을까..?

블록체인

블록체인을 검색기처럼 아주 단순히 개발해보았다.
블록체인이라고 부르기도 어려운 수준이긴 했지만 노력했다.
프로젝트에 사용되지는 않았지만 개인적으로 개발했다.

육각형 아키텍처

DB에 의존하는 비즈니스 로직 방향을 역전하고자 도입하였다.
전문적이지 않았기에 자신이 없었다.

이전보다 더 깊게

한편, 검색이 RAG로 새롭게 등장하였다.
LLM의 환각과 최신화되지 않은 문제에 대한 완화책으로 등장하는 RAG.
고전적이고 기초적인 검색의 경험이 최신의 RAG에 대한 이해를 높였다.

조금씩 조금씩 나아가고 있었다.


9. 기존 서버에 대한 새로운 시도

2024.07 ~ 2024.09


또다시 새로운 도전?!

기존의 서버를 대대적으로 감축하고 여러 새로운 시도를 도전했다.
또한, 그에 대한 일반 유저 기능 포함 운영자 프론트엔드 개발을 시도했다.

이전보다 더 깊게!

육각형 아키텍처

육각형 아키텍처의 DTO 의존성, 엔티티 간의 유연한 관계 설정 등
육각형 아키텍처에 좀 더 심도있게 다가갔다.

멀티 모듈 도입

JavaFX에서 멀티 모듈을 적용했고,
이는 백엔드에서 모듈러 아키텍처 시도로 이어졌다.

이는 중도에 포기하고 이후 MSA 전환 프로젝트가 진행되었지만,
그 자체로 모듈러 모놀리식에 대한 첫 발자국이 되었다.

스프링

JavaFX에서 스프링을 도입했고,
스프링의 정체성에 대해 생각해보게 되는 계기가 되었다.

병렬 프로그래밍

중도 개발 중단이 되기는 했지만,
부하테스트에 대한 AtomicInteger와 CompletableFuture,
로그 분석에 대한 생산자와 소비자 쓰레드, 블로킹 큐에 대해서도
고려해볼 수 있는 순간이 되었다.


10. 스칼라 시도

2024.10


또다시 새로운 도전?!

간결한 표현, 불변성, 분산 병렬 컴퓨팅 등
스칼라에 매료되었다.

그래서 창시자가 작성한 책을 고민 끝에 구매하며
빠르게 훑어보고 개발하고자 했다.

그런데 팀원과 같이 고민하기 어려웠던 타입스크립트,
팀원과 같이 할 수 있는 MSA 프로젝트,
취업 시기에 쉽게 볼 수 없는 스칼라 등
도전에 대한 마음을 금방 접게 되었다.

이전보다 더 깊게!

Java의 방향성?

Java switch 표현식과 instanceof가 보였다.
이것은 스칼라에 대한 패턴 매칭을 떠오르게 했다.

또한 Java의 함수형 인터페이스, 람다, 스트림을 넘어서
Record, switch 표현식, instanceof는
함수형 프로그래밍에 대한 의지를 보여주는 것인가 생각하게 만들었다.

고차함수와 리플렉션

이후, 스칼라의 경험은 최근에 블로그 글로 다시 등장했다.
스칼라에서 잠시 마주친 고차함수와 함께
Java의 리플렉션, 프레임워크를 들여다 볼 수 있었다.

한편, 컨테이너

한편, 모던 리눅스에 대해서 알게 되는 활동도 이 시기에 도전했다.
그로 인해 알게 된 것은 cgroups와 namespace였다.

cgroups를 통해 cpu, memory, network를 제어하고,
namespace를 통해 프로세스 목록에 대한 가시성을 제어한다는 것을 알게 되었다.

이전의 컨테이너 경험은 현재의 리눅스에 대한
이해도를 높일 수 있는 경험이 되었다.


11. MSA 전환

2024.11 ~ 현재


또다시 새로운 도전?!

팀원들과 MSA에 대해 알아보기 위해 또다시 새로운 도전장을 내밀었다.

이전에는 여러 서비스만 있으면 되는 줄 알았다.
네트워크 성능, 통신 실패, DB ACID, 관찰 가능성 등
복잡한 인스턴스 관리를 고려하지 못 했기에
이번에는 MSA의 복잡성과 장점을 판단할 수 있는 시간이 되길 기대하고 있다.

또, CI/CD에 k6를 통합하고 팀원과 공유하려는 새로운 도전을 하고자 한다.

이전보다 더 깊게

최근에 블로그에 작성한
JVM 성능 테스트를 위한 JIT 컴파일,
자바스크립트 엔진의 동작과 JavaFX,
고차 함수와 리플렉션에 대한 글을 돌이켜보면
확실히 조금씩 나아가고 있다고 확신한다.

좀 더 풀어내고 싶지만
문장력이 한계에 다다라서 여기쯤 마무리 짓기로 했다.

의미가 있을까..?

라는 질문은 매번 던지게 된다.

깊이 없는 도전으로 끝났을지라도 의미없는 과정은 아니였다.

벡터 직접 할당, 고전적 기초 검색기, 컨테이너, MSA, 자바스크립트, JavaFX 등
내 과거는 다시 내 앞에 나타났다.

그리고 다시 등장할 때는 나를 좀 더 성장하게 만들었다.
절대 의미 없는 시간은 없었다.

언제가는 다시 돌아왔고
한 발자국 나아갔고
그 한 발자국은 세상을 다르게 바라볼 수 있게 했다.

개발자로서의 가치관?

아무리 사소한 도전이라도 의미없는 도전이 아니다.

삶을 바꿀 수 있기에 도전은 신중해야 하지만,
아무리 사소한 도전이라도 의미없는 도전은 없다.

+
"세상을 넓게 바라보고, 사람을 깊이있게 이해하자."
profile
오류 그만 만들자!

0개의 댓글