나를 프로그래밍 해보자.

teo.v·2024년 1월 5일
81

테오의 프론트엔드

목록 보기
43/48
post-thumbnail

프롤로그

2023년이 끝나고 새로운 해가 밝았습니다. 지난 10여년간 눈만 뜨면 새로운 것들이 태어나고, 시시각각으로 변화하던 프론트엔드씬은 이제 어느정도 안정이 되어가면서 예전보다는 다소 변화의 속도는 줄어든 것 같습니다. 클라이언트 브라우저씬의 무대에서 이제는 서버사이드와 프론트엔드 간의 경계가 중요한 화두가 되었고, AI의 등장으로 인해서 프론트엔드에 어떤 변화를 맞이 하게 될지 궁금한 해가 되었네요.

블로그 글을 써야겠다는 생각은 하고 있었지만 뭔가 기술적인 새로움이나 적어봄직한 내용들이 없어서 주제를 찾다가 제 커뮤니티 “개발자유머” 채널에 올린 Programmer Minset 짤을 보면서 프론트엔드 기술과 관련된 이야기 말고 소프트 스킬 중에서도 뭔가 마인드에 대한 이야기들을 좀 해보면 좋겠다 라는 생각이 들어 기존과는 다소 새로운 주제의 글을 좀 적어보려고 합니다.

개발자 유머 짤 : Programmer Mindset

개발자라면 공감할 유머 자료라고 생각합니다. 우리는 항상, 적어도 저는, (시간과 돈만 준다면) 세상에서 개발 못할 것 없는 최고의 자신감 넘치는 개발자 (중2병)가 된 기분을 느끼다가도, 갑자기 세상 모든 개발자들이 나보다 뛰어나 보이고 내가 맡은 프로젝트는 내가 아니라 다른 사람 덕분에 성공했고 내 자신이 갑자기 너무나 초라하게 느껴지는 임포스터 증후군 (Imposter Syndrome)과 같은 기분사이를 왔다갔다 하며 감정적 롤러코스터를 타곤합니다.

임포스터 증후군 (Imposter Syndrome)

임포스터 증후군 : ‘가면현상’ 이라고 번역되는 이 말은 자신의 성공이나 현재 위치에 대해서 이건 진짜 나의 실력이나 참모습이 아니다며 언젠가 이 가면이 벗겨지고 제 형편없는 실력이 들통날지도 모른다는 두려운 심리 상태를 얘기합니다. 정리하자면, 자신의 성취를 자신의 능력과 연결시키지 못하고 자신의 능력을 낮춰서 생각하는 현상을 말합니다.

이런 심리학적 용어가 개발자와 관련된 글에 자주 등장하고 커뮤니티에 이러한 짤들과 공감을 받는 이야기라면 적어도 나한테만 이런건 아니라는 생각에 한편으로 위안이 되곤합니다. 특히 개발자라는 직업의 특성상 프로젝트의 성공 여부에 대한 성과의 차이가 극명한데, 프로젝트의 성공이 대부분 기술적 성공보다는 사업적 성공에 포커스가 되는 만큼 개발자의 기여여부가 온전히 반영이 되기 어려운 구조다보니 개발자라는 직업이 이러한 감정을 더 잘 느끼는 것 같습니다.

다행히 이런 감정의 폭이 위아래로 요동치며 왔다 갔다 하는 것은 결국은 적분(?)하면 0으로 수렴을 하는 것이기에 이러한 변화는 사실 꽤나 건강한 상태라고 할 수 있겠지만, 특정 상태에 너무 오래 머물거나, 특히 번아웃과 같이 힘든 상황이 오래 지속이 되면서 한번 내려가버린 자신감이 다시 올라오지 않을때는 상당히 괴롭습니다. 단순히 ‘괴롭다’는 3글자로 표현하는 것 이상의 감정상태를 느끼게 되죠.

저 또한 개발자로 살아오면서 이러한 심리상태, 특히나 개인사업을 접어야 했을 때, 구직/이직에 실패했을 때, 내가 맡은 프로젝트가 사업적 성공을 하지 못하고 정리해야 할 때, 내가 한 실수가 큰 손해로 이어졌을때 등 몇 번씩 이러한 시기를 겪어보았고 또 극복을 하고 또 더 깊은 곳으로도 떨어지는 경험을 해봤습니다.

이 글은 그러한 심리적 문제에서 어떻게 극복을 하면 좋을까에 대한 내용을 적어보려고 합니다. 결론적으로 가장 이러한 문제를 극복하기에 가장 좋은 정답은 이미 여러분도 알고 있을 1) 운동을 하세요. 2) 그리고 취미를 가지세요. 입니다. 시대를 막론하고 애기하는 어른들의 얘기는 사실 잘 틀리지 않습니다. (웃음)

그렇지만 보통 이러한 부정적인 심리상태에 오래 빠져있으면 운동을 한다거나 취미를 가질만한 에너지 자체를 소실하기 마련입니다. 저 또한 블로그에 쓰는 내용인만큼 뻔한 말로 끝낼 수는 없겠죠? 그래서 도움이 될만한 몇가지 이론(?)들에 대한 이야기들을 해볼까 합니다.

이 글이 개발자로 살아가면서 힘들고 지친 마음을 겪고 있을 누군가에게 도움이 되기를 바랍니다.

개발자 입장에서 바라본 심리학, 뇌과학, 자기 계발서

주의 : 앞으로 설명할 이론들은 최대한 나름대로 책을 통해서 얻은 지식이긴 합니다만 여기 저기에서 짜집기를 한 것이니 엄밀하게는 틀릴 수 있습니다. 학문이 아니라 그냥 팀의 사수나 동료가 해줄 수 있는 일종의 개똥철학 중 하나라고 생각해주세요. (틀린 이론이 있다면 댓글로 PR 주세요!)

저는 정신적으로 지치고 마음이 약해지면 책을 보곤 했습니다. 그리고 “우울할 때 뇌 과학” 과 같은 내 상황에 맞는 제목에 끌려서 책을 고르곤 합니다. 그러다보면 주로 심리학, 뇌 과학, 자기 계발서등을 읽게 됩니다. 부자가 되는 방법을 제외한 나머지 대부분의 이러한 책들이 현재 베스트셀러에 있기 때문에 찾아보는게 어렵지는 않습니다.

저는 제가 개발자라서 그런지 몰라도 이러한 철학이나 심리학, 뇌과학, 자기 계발서 등을 읽다보면 이게 힐링이나 혹은 지식이나 학문, 혹은 진리로 들린다라기 보다는 하나의 ‘프레임워크’나 ‘패러다임’ 같은 느낌으로 읽게 됩니다. 가령 객체 지향 프로그래밍이나 함수형 프로그래밍, 혹은 MVI 아키텍쳐나 새로운 상태관리 라이브러리 혹은 클린코드나 리팩토리 책, 혹은 TDD 같이 말이죠.

뭐랄까 개발을 하는데 정답이 없긴 하지만 내가 해보니까 이런 방식이 더 좋은 거 같아서 이렇게 정리해봤어. 너도 이렇게 한번 해볼래? 이런 느낌이랄까요? 개발을 하는데 대신 인생을 살아보니까 라고 바꿔서 다시 읽어보셔도 큰 위화감이 없을 거라고 생각합니다.

보통 우리가 개발을 시작하고 개발의 깊은 이론은 잘 몰라도 개발을 하다보면 직감적으로 '이렇게 하니까 나중에 너무 힘드네? 다음에는 이렇게 해봐야겠다.' 하는 경험치가 쌓이곤 합니다. 그러다가 객체 지향 프로그래밍이나 함수형 프로그래밍과 같은 특정 패러다임을 알게 되면 좋은 코드에 대한 관점이 탑재되면서 직감적으로 느끼고 있던 것들이 훨씬 더 선명하게 보이기 시작합니다.

그러나 객체 지향이 더 옳고 함수형 프로그래밍이 틀렸다거나 혹은 그 반대라거나 하는게 사실이 아니라는 것도 알고 있습니다. 그냥 그것은 같은 것을 바라보는 다른 사고의 체계이자 생각하는 방법입니다. 우리가 특정 프레임워크를 쓰게 되면 개발이 더 편해지고 특정 아키텍쳐가 패러다임을 따르면 개발이 더 편해지는 것처럼 말이죠. 혹은 반대로 특정 프레임워크나 특정 상태관리 방식으로 개발을 하는게 더 불편할 수 도 있습니다. 그렇다고 그 프레임워크의 체계가 완전히 틀린 건 아니겠지요.

이러한 느낌으로 멘탈관리에 도움이 될만한 사고체계가 되어줄만한 이론, 정확히는 이론보다는 일종의 관점을 몇 가지 소개하려고 합니다. 제가 이론보다는 관점이라고 하는 까닭은 이것이 진리거나 진실이 아니라는 점, 언제든지 내가 아니다 싶으면 안 받아들이면 그만이라는 점, 그리고 무엇보다 제가 학문적으로 틀릴 수 있다는 점을 전제로 말씀 드립니다.

여기저기 책에서 본 이론(관점)들 : 시스템1과 시스템2, 그리고 감정

제가 본 심리학 혹은 뇌과학 영역에서 알게된 재미난 이론 중 하나는 사람은 2가지의 사고 체계를 가지고 있다라는 것이었습니다. 보통 무의식과 의식, 감정과 의식과 같이 우리의 생각에는 무언가 다른 것들이 함께 있다는 생각을 해본 적이 있을 거에요.

제가 본 '생각에 관한 생각’ 이라는 책에서는 우리가 흔히 ‘메타인지’ 와 ‘생각’이라고 들어본 바 있는 2가지의 체계를 설명하는데 이 체계에 이름을 붙이는 순간 틀에 갇히게 되니 '시스템1''시스템2'라고 부르겠다고 하였습니다. 저도 앞으로는 시스템1과 시스템2라고 언급을 하려고 합니다.

이러한 사고의 체계가 생기게 된 이유는 진화론적인 측면에서 언어가 생기기전에 만들어진 뇌와 그로 인해 만들어진 사고체계와 이후 언어가 생기고 진화를 하게 되면서 만들어진 체계가 함께 공존하게 되면서 만들어졌다고 합니다.

한번 아래 2가지 질문을 봐주세요.

  1. 2 x 2 = ?
  2. 167 x 24 = ?

시스템1과 시스템2의 차이 : 백그라운드 프로세스와 포그라운드 프로세스

시스템1은 생각을 거치지 않고 바로 발생을 합니다. 우리가 2 x 2 = ? 를 보는 순간 답을 계산하려고 하지 않다고 4가 순간적으로 떠오릅니다. 무의식중에 답이 나오고 우리가 의식적으로 제어할 수 없습니다.

그렇지만 167 x 24 = ? 라는 문제의 답을 구하기 위해서는 상당히 의식적인 생각을 해야만 답을 구할 수 있습니다. 주의를 집중하여 의식적인 생각을 할때에는 시스템2를 사용해서 사고를 하게 됩니다.

의식이라는 용어를 썼는데 인터넷 함정글 중에 다음과 같은 글을 본적이 있을 거에요.

당신은 눈을 깜빡이는 것을 의식하게 되는 저주에 걸렸습니다
이제는 눈을 깜빡이는 것을 계속 신경쓰게 됩니다

이 글을 보기 전까지는 눈을 깜박이는 것을 한번도 신경쓰지 않았고 의식적으로 생각을 해본 적도 없을 거에요. 그러나 이제는 계속 눈을 깜박이는 것을 신경쓰게 될 것입니다. (이 글을 쓰고 있는 저조차도 눈을 깜박이는 것을 의식하고 있네요 ㅠㅠ)

재미난 이야기들이 많은데 제가 하고 싶은 이야기의 본질은 이게 아니니 정리하자면, 우리는 2가지의 사고 체계 시스템1과 시스템2를 가지고 있다. 시스템1은 내가 의식하지 않아도 자동으로 반응하고 동작하는 생각이며 시스템 2는 내가 의식해서 행해지는 생각을 의미한다는 것을 기억해주세요.

시스템1은 내가 실행하지 않았는데 OS에서 자동으로 돌아가는 백그라운드 프로세스이며 사실 뭐가 돌아가고 있는지도 잘 인지 못하는 반면, 시스템2는 내가 지금 실행하고 있는 어플리케이션으로 내가 주의(focus)를 기울여야 사용할 수 있다고 생각하시면 좋을 것 같습니다.

시스템1과 시스템2 간의 상호작용

시스템1은 단순히 익숙해진 수학문제에 국한하지 않습니다. 얼굴의 표정을 보고 순간적으로 해석을 하는 것이나 공이 날아왔을 때 피하거나 어떤 특정 사진을 보고 느껴지는 반응과 같은 것들 모두 시스템1에서 행해지는 것들입니다. 내가 안하려고 한다고 안되지 않으며, 이 과정에서는 인식했다는 자각이 존재하지 않습니다.

시스템1과 시스템2에 대해서는 운동선수나 프로게이머들의 반응속도, 혹은 개발의 숙련까지도 설명할 수 있습니다. 처음에는 우리가 무언가를 할 때에는 의식적으로 해야하고 원하는대로 되지 않습니다. 이때는 시스템2만 동작하며 시스템1은 오히려 방해를 합니다. 그러나 반복적으로 개발 혹은 훈련을 하다보면 시스템2의 행동이 시스템1으로 옮겨가게 되면서 무언가를 잘 할 수 있게 됩니다. 잘하기 위해서 충분한 반복과 시간이 필요한 이유도 여기에 있습니다.

그리고 재밌게도 시스템1을 통해 무언가를 하게 되면 우리는 언어로 그 사실을 인지하지 못하기 때문에 무언가 잘하는 사람에게 왜 그렇게 했느냐? 혹은 어떻게 하면 잘 하는 지 알려달라고 물어보면 이성적으로 설명을 하는 것이 어려운 이유도 이 탓입니다. 언어를 사용하여 설명을 하는 것은 시스템2에서 하는 역할이기 때문입니다.

이것은 우리가 개발을 할때에도 적용이 됩니다. 많은 이론을 알고 이해하는 것은 시스템2가 하는 일이지만 실제로 적용을 하고 경험을 쌓아서 잘 할 수 있게 하는 것은 시스템1이 하는 것이기에 단순히 학문적으로 많은 공부를 하는 것보다 많이 해보는 것이 잘하는데에 큰 도움이 됩니다. 다만 그 과정을 더 효율적으로 만들어줄 수 있는 것이 시스템2의 역할이지요.

감각과 감정

시스템1은 감정과 관련해서도 관여를 합니다. 그리고 시스템1의 특성상 이런 것들은 우리가 의식하지 않아도 자동으로 발현하게 됩니다. 특히 무엇보다 누군가의 표정을 보면 우리는 거의 즉각적으로 반응을 하게 됩니다. 한번 거울을 보고 웃어보세요. 아니 거울을 보지 않아도 좋습니다. 우리는 웃는 표정을 하거나 찡그린 표정을 하거나 화난 표정을 짓기만 해도 그 순간 뭔가 말로 설명하기는 어렵지만 무언가 감각이 달라진다는 느낌을 받을 수 있게 됩니다. 그렇지만 이걸 언어로 표현을 하기는 굉장히 어렵죠.

그리고 재밌게도 반대로 기쁨, 슬픔, 짜증, 분노 라고 이 글자를 읽는 순간에도 무언가 살짝 다른 느낌을 받을 수 있을 것입니다. 분명 언어를 다루는 체계는 시스템2 인데도 우리는 글자에서도 감정을 느낄 수가 있는데 시스템2과 시스템1은 분명 다른 체계이지만 둘로는 나뉠 수 없는 항상 상호작용을 하고 있는 체계이기 때문입니다.

시스템1은 감각적입니다. 말로는 표현할 수 없지만 분명히 다른 신체변화가 감각들이 느껴집니다. 웃을 때 찡그릴때, 얼굴을 일그러뜨릴때, 우스꽝스러운 표정을 지을 때 말로 설명할수는 없지만 분명히 다른 감각이 느껴집니다.

반대로 시스템2는 이성적이고 언어적입니다. 우리는 이러한 감각에게 특별한 감정의 언어를 붙이게 됩니다. 그리고 이러한 감정은 특별한 생각을 불러 일으킵니다. 시스템2는 시스템1에서 만든 감각을 최대한 언어로 이해하고 해석해서 이성적인 생각이라는 것을 만들게 되는데 이를 우리는 ‘감정’이라고 부릅니다.

재밌는 사실은 시스템1의 감각을 사실 우리는 제대로 모른다는 점에 있습니다. 분명히 실제하는 감각이고 생생하게 느껴지는 감각인데 우리는 이것을 이해하지 못하기 때문에 시스템2에서 이러한 감각을 언어로 설명을 해야만 비로서 감정의 형태로 발현이 된다는 점입니다. 이 점은 굉장히 중요합니다. 이 것의 진정한 의미는 감정에서 감각은 실제하나 실제 우리가 느끼는 감정이라고 하는 것은 주관적인 이성적인 해석으로 인해 발현한다는 점입니다.

물론 감각과 감정은 실제로 엄청나게 복잡하고 이 2가지만으로 단순하게 설명할 수 있는 것은 아닙니다. 다시 한번 말씀드리지만 이 글은 어느 정도 이론적 내용을 바탕으로 하지만 엄밀한 학술적 이론을 설명하는 글이 아니라 그냥 하나의 패러다임으로 바라봐주기를 바랍니다.

우리는 의식적으로 같은 감각을 다르게 해석할 할 수 있다 : 긴장과 설렘의 차이

아주 중요한 대목이라서 한번 더 언급하겠습니다. 시스템1이 만들어낸 감정은 100% 실제하는 감각이나 이를 해석하는 것은 시스템2가 하는 것으로 감정이란 감각을 해석하는 과정으로 발현하는 것이기에 감정은 결과적으로 상당히 주관적인 것이라는 점입니다.

처음에 보았던 짤을 생각해봅시다. 사실 우리의 어제와 오늘의 ‘나’는 그렇게 큰 차이가 있을리 없습니다. 그렇지만 그렇게 감정이 널뛰기를 한다는 것은 곧 감정이 주관적인 해석이라는 반증이기도 합니다.

우리가 취업이나 이직을 하기 위해 면접에 앞선 상황을 한번 떠올려 봅시다. 가슴이 답답하고 평소보다 숨이 가빠지고 심장이 쿵광거리고 몸이 마비되면서 조금씩 죄여오는 그런 감각들을 느낄 수 있습니다. 우리가 보통 이러한 감정의 형태를 보고 긴장하고 있다라고 말하죠. 한번 상상을 해보면서 감정이 아니라 당시의 신체변화나 감각들을 한번 떠올려 봅시다.

사실 이러한 감각은 우리가 설렘을 느끼는 순간에도 굉장히 비슷한 감각이라고 합니다. 멋지게 면접을 끝내고 합격/불합격 통보를 기다리는 순간 그리고 메일이 도착했는데 차마 제목을 클릭하지 못하는 순간까지의 감각 또한 비슷한 느낌을 전달합니다. 물론 이 순간도 긴장했다고 볼 수도 있지만 설렐 수도 있죠.

뭔가 억지스럽다면 우리가 누군가에게 고백하는 순간을 한번 떠올려보세요. 몸이 굳어지고 두근거리고 호흡이 가빠지는 이러한 느낌은 굉장히 유사한 감각입니다.

우리가 긴장된 상태라는 말하는 순간은 사실 고도의 각성상태입니다. 내가 평소와는 굉장히 중요한 것을 해야 되기 때문에 평소와는 다른 신호를 보내고 우리 몸에서 반응을 하는 것입니다. 그리고 이러한 과정은 시스템1에서 하는 것이기에 우리는 이러한 감각을 뭘 의미하는지 사실 정확하게는 모릅니다. 우리가 긴장을 하는 이유는 앞서 말했듯 평소와는 다른 굉장히 중요한 순간이니 조금 더 잘할 수 있게 준비하라고 신호를 보내는 것이라고 했습니다. 말 그대로 우리게에 ‘긴장감’을 불어 넣는 것이지요.

공연장의 가수들 중에는 이런한 감정을 즐기는 사람들이 있다고 합니다. 실제로 이러한 순간이 굉장히 설레는 감정이라고 말하는 사람도 있습니다. 이러한 평소와는 다른 이상적인 각성상태이기에 우리가 몸이 뻣뻣하고 제대로 사고가 되지 않고 말을 버벅일수도 있지만 반대로 이러한 각성상태이기에 평소보다 더 큰 에너지와 활동을 할 수 있기도 합니다.

다시 생각해보면 이것을 어떻게 받아들이느냐, 즉 이 감각을 어떻게 해석하느냐에 따라서 내가 면접장에 들어가기전 감정과 생각을 얼마든지 변화시킬수 있습니다. 이러한 감각을 불안이라고 해석하면 정말로 불안해지고 이러한 감정을 각성, 변화, 설렘, 초조 얼마든지 다른 이름으로 해석을 할 수 있습니다.

분명 감각은 시스템1이 만드는 변하지 않는 사실이지만 감정의 감각 해석은 시스템2가 이성의 언어로 하는 것이기에 우리는 얼마든지 변경해서 상황에 맞게 그 감각과 감정을 이용할 수 있습니다.

감각과 감정 : HTML과 CSS

제가 조금 오래된 웹 개발자라서 그런지 저는 이 대목에서 HTML과 CSS로 개발하던 순간이 떠올랐습니다. 예전에는 게시판 솔루션등을 통해서 개발하고 프론트엔드 개발자는 CSS만 수정해서 개발을 하던 시절이 있었습니다. 변경할 수 없는 HTML을 가지고 어떻게든 요구사항을 만들기 위해서 고군분투를 했던 시절이 떠오르더라구요. 게시판이나 블로그 혹은 쇼핑몰 솔루션에서 제공되는 HTML도 어떻게 CSS로 꾸미느냐에 따라서 같은 솔루션을 가지도 얼마든지 새로운 서비스들을 만들 수 있었습니다.

지금 프론트엔드 개발을 하는 분들이라면 이 비유가 와닿지 않으실지도 모르겠습니다. (웃음) 그렇다면 백엔드와 프론트엔드 개발로 생각해보세요. HTML과 CSS가 아니라 OPEN API와 프론트엔드 개발로 생각하셔도 좋습니다. 우리는 OPEN API의 서버에서 주는 API나 스키마, 그리고 값은 제어할 수는 없습니다. 그건 그대로 오는 거죠. 그렇지만 같은 API를 가지고도 무수히 많은 다른 서비스들을 만들어 낼 수 있습니다. 당연히 그 퀄리티도 다르겠죠.

감각은 시스템1, 즉 HTML(=API)은 변경할 수 없다.

시스템1은 우리가 컨트롤을 할 수 있는 영역이 아닙니다. 이것들은 자동으로 동작하고 원하던 원하지 않던 동작을 합니다. 2 + 2 = ? 라는 글자를 보는 순간 4가 떠오릅니다. 그리고 이러한 원리로 감정이 발생할때 만들어지는 감각과 신체적인 변화 역시 시스템1에서 처리하며 이때 만들어지는 감정과 감각은 내가 제어가 불가능하며 100% 실제하는 감각입니다.

감정은 시스템2, 같은 HTML도 CSS에 따라 얼마든지 다르게 만들 수 있다.

그러나 감정의 최종 결과는 시스템2가 이러한 감각을 해석하는 일을 통해서 만들어지게 됩니다. 그리고 우리가 편의상 시스템1, 그리고 시스템2라고 말을 했지만 우리는 이 둘을 분리할 수 없고 우리는 하나입니다. 마치 HTML과 CSS는 분리되어 있지만 결국 서비스라고 하는 것은 이 둘이 함께 만들어내는 것입니다. 어느 하나만 있어서는 의미가 없어지지요.

그러나 같은 HTML에도 얼마든지 다른 CSS를 붙일 수 있습니다. 그리고 우리가 작성한 CSS에 따라서 같은 컨텐츠라도 얼마든지 다르게 보이게 만들 수 있습니다. 보기 싫은 것들은 {display: none} 이 가능하고 없던 컨텐츠 역시 {content: ‘❤️’} 를 통해서 추가 할 수 있고 꾸밀 수 있습니다.

같은 HTML을 어떤 CSS를 쓰느냐에 따라서 굉장히 못생기고 쓰기 어렵고 복잡해 보이는 결과물을 만들어 낼 수 있습니다. 반대로 어떠한 CSS를 작성하느냐에 따라서 굉장히 정갈한 결과물들을 만들어 낼 수도 있죠.

감각과 감정 또한 마찬가지입니다. 감각은 분명 변경할 수 없고 우리가 통제할 수 없는 무언가이지만 우리는 얼마든지 해석을 다르게 해서 감각을 달리 받아들이 수 있습니다. 감정은 주관적인 것이고 우리는 이성의 의식으로 그리고 의지를 통해서 같은 감각으로 다른 감정을 재현할 수 있습니다. 이를 긍정적 인지 재해석이라고 합니다.

긍정적 인지 재해석 : 멋진 CSS 만들기와 리팩토링

“우리는 같은 감각을 가지고 얼마든지 다른 감정을 만들어 낼 수 있다. 감각은 실제이지만 감정은 주관적인 해석에 따른 결과물이다. 즉, 내가 만들어 내는 것이다.

같은 HTML을 가지고도 CSS를 가지고 얼마든지 다른 결과물들을 만들 수 있다고 했습니다. 그렇다고 무작정 하나의 CSS만 가지고 모든 HTML에 적용할 수는 없습니다.

우리는 Bad CodeGood Code 의 비교를 통해서 무슨 코드가 더 클린한 코드인지 배우고는 합니다. 그리고 나쁜보드를 보다 좋은코드로 만들어내는 과정을 리팩토링 이라고 합니다. 같은 코드이지만 더 가독성있고 보기 좋은 코드를 만들어 낼 수가 있고 이러한 방법은 좋은 예시 코드를 통해서 배울 수 있습니다.

우리가 앞서 ‘긴장’ 이라고 감각을 ‘설렘’이나 ‘각성’ 등으로 해석 할 수 있습니다. 즉 리팩토링을 통해서 같은 코드라도 더 가독성있는 좋은 코드로 만들 수 있고, 같은 HTML이라도 CSS를 다르게 작성해서 더 멋지게 보이게 할 수 있습니다.

다음은 유사한 감정을 더 멋진 감정으로 해석할 수 있는 이러한 좋은 코드 예시들을 알려드리고자 합니다.

어떻게 바꾸면 좋을까? : 좋은 코드 예시

분노 -> 열정

우리가 화가 날 수 있습니다. 일을 하는 상황이건 논쟁을 하는 상황이든 ‘분노’ 라는 감정을 접할 수 있습니다. 그러나 이러한 분노는 논리를 통한 설득보다는 더 편하고 쉽게 상대방을 굴복시키려는 편협한 커뮤니케이션의 한 종류밖에 되지 않습니다.

우리는 분노라고 하는 감정 대신 ‘열정’ 이라는 감정으로 치환해서 해석할 수 있습니다. 분노라는 감정과 ‘열정’은 순간적으로 에너지를 폭발적으로 만들어내는 것과 유사한 면이 있습니다. 내가 분노라는 감정이 느껴지는 순간에는 이를 감정을 굴복시키는 커뮤니케이션 도구로 발산하지 말고 더 열정적이 될 수 있는 감정으로 치환해보세요.

스트레스 -> 도전의지

그리고 우리가 자주 겪는 감정에는 `스트레스’ 가 있습니다. 내가 업무를 하다가 스트레스를 받고 있다는 감정을 느끼게 된다면 이를 ‘도전의지’ 이라는 감정으로 치환해볼 수 있습니다.

헬스를 하는 상황을 한번 생각해보세요. 근력을 키우기 위해서는 내가 원래 들었던 무게 이상을 들어내려고 해야만 비로서 근력이 생긴다고 합니다. 내가 견딜 수 있는 최대치를 이겨낸 만큼 성장을 하는 것이지요. 스트레스를 받는 다는 것을 느끼는 것은 나의 한계치까지 도달했다는 의미입니다. 이는 곧 이것을 뛰어넘었을때 나는 성장한다는 것을 의미합니다.

내가 스트레스를 받고 있다는 것을 인지하면 이를 극복하는 것을 도전목표로 삼아보세요. 내가 성장을 할 수 있는 만큼까지 도달했다는 증거이기에 자랑스러워도 하셔도 좋습니다.

열등감, 질투 -> 향상심, 자각, 영감, 감탄

우리는 때로 나와 비슷한 또래의 다른 성공한 개발자들을 보며 질투와 시기의 감정을 느낍니다. 그정도 까지는 아니더라도 부러움을 정도는 느끼거나 혹은 배 아픈 감정을 느낄지도 모릅니다

그렇지만 우리는 여기서 느껴지는 시기와 질투의 감각이 아니라 나도 저런것들을 하고 싶어 했구나 라는 자각의 감정으로 생각해보세요. 또한 이 분야에서 저렇게 까지 성공을 할 수 있구나 저런 길도 있을 수 있구나 하는 영감의 감정으로 바꿔보세요. 그러면 진정으로 그 사람에게 감탄할 수 있고 롤모델을 삼거나 열등감이 아니라 배움의 향상심으로 치환할 수 있습니다.

답답함 -> 문제의식과 창의력

이 상황이 너무나 답답하다고 느껴지나요? 그렇다면 개발자로써 창의력을 발휘할 시간입니다. 답답하는 감정은 내가 나서서 새로운 방식으로 해결해야겠다는 창의적인 감정을 발휘할 기회입니다. 이러한 답답함을 해결하는 과정에서 문제의식을 느끼고 해결하는 것이 바로 개발자의 역할입니다.

거부감, 혐오 -> 자기인식

내가 어떤 사람이 굉장히 싫을 수 있습니다. 혹은 어떠한 상황이나 결정이 너무 너무 싫을 수가 있습니다. 그럴때에는 그러한 거부감에 집착하지 말고 자기인식, 자기이해를 할 수 있는 좋은 경험이자 감정이라고 생각해보세요. 나라는 사람은 이러한 것들을 싫어하구나. 나는 이러한 가치를 가지고 있구나. 개발자에게는 자기 자신을 이해하는 메타인지가 굉장히 중요하다고 합니다. 거부감과 혐오감이 느껴질 때에는 나는 이런 것들을 싫어하는 사람이었구나를 인지하는 기회라고 생각해보세요.

두려움 -> 경계

우리는 두려움을 느낄 때가 있습니다. 가령 하루에 몇 억이 오가는 커머스 서비스에 프로덕션 배포를 해야하는 상황이라면 두려움을 느낄지도 모릅니다. 사실 두려움이라고 하는 감정은 경계의 감정에서 비롯했다고 합니다. 우리가 어떤 것이 무서운지 모르고 낙관적이라면 우리는 이미 맹수에게 잡아먹혔을테니까요.

어떤 것을 무섭다라는 감정이 들때에는 무서움에 잠식되지 말고 이 감정을 이용해서 더 경계심을 치환시켜서 더 꼼꼼히 체크를 해야하는 감정으로 활용해보세요.

피로감 -> 재충전, 휴식과 일의 경계선 발견

개발자로 살다보면 굉장히 피로감을 느낄 수 있습니다. 때로은 이러한 피로감을 방치한채로 업무를 하다보면 번아웃으로 이어지기 마련입니다. 이러한 피로감이 느껴질 때에는 피로감에 불평하는 감정이 아니라 쉬어야 하는 순간을 알려주는 신호의 감정이라고 생각해보세요. 나는 스스로 12시간 일을 할 수 있는 사람이라고 생각했는데 사실은 8시간밖에 일을 못하는 사람이었구나라고 생각할 수 있는 기회로 생각해주세요.

혹시 술을 좋아 하시나요? 본인의 주량을 알게 되면 술을 더 잘 즐길수 있습니다. 일을 더 많이 한다고 유능한 사람이 아니고 일을 더 많이 한다고 더 효율이 나는 게 아닙니다. 나는 얼만큼의 몰입의 에너지를 소비 할 수 있는 지 본인의 일량을 하는 것은 굉장히 중요합니다. 필름이 끊겨보고 주량을 알아냈듯이 피로감을 통해서 자신의 일량을 체크하는 기회로 삼아보세요.

무력감 -> 통제할 수 있는 것의 자각

내가 어떤 무력감을 느낄 때에는 내가 무력하다고 느끼는게 아니라 내가 통제할 수 없는 것에 집착했다는 사실을 깨닫게 해주는 신호라고 생각해보세요. 우리는 생각보다 내가 통제할 수 있는 것과 통제하지 못하는 것에 대한 분변력이 없습니다.

내가 통제할 수 없는 것에 대해서 무력감을 느끼지 마시고 통제할 수 있는 것을 통제할 수 있는 것과 통제할 수 없는 것을 분별할 수 있는 것을 느끼도록 이러한 감정이 생겨났다고 생각하고 이러한 기회에 통제할 수 있는 것과 그렇지 못한 분별력의 상승의 기회로 생각해보세요.

끝으로 : 나를 프로그래밍 하자

이 글을 적다보니 사실 내가 이러한 것들을 선배의 입장에서 알려주고 싶은 이야기가 아니라 내가 나한테 해주고 싶은 이야기였구나라는 생각이 듭니다.

저 역시 이러한 부정적인 감정에서 한동안 헤어나오지 못할 때도 있었습니다. 그리고 이러한 부정적 감정의 지속은 이직을 실패했다거나, 내가 하고 있는 프로젝트가 내가 아닌 다른 이유로 부러진다거나 하는 큰 이유가 없어도 그냥 문득 문득 나를 괴롭히고 한번 부정의 생각의 늪에 빠지면 좀처럼 헤어나오지 못하는 경우가 있었습니다.

저는 심리학 전문가도 철학가도 아니고 개발자기이에 제가 설명했던 이론이 완벽한 학문적 설명도 아니고 누군가의 개똥철학일수도 있지만 저는 이러한 패러다임의 개념을 탑재하고 나니 훨씬 더 쉽게 내 감정을 선명하게 바라볼 수 있었고 또 쉽게 돌아올 수 있는 장치가 되었습니다. 마치 함수형 프로그래밍 세상을 알고 제가 훨씬 더 클린코드를 작성할 수 있게 된 것 처럼요.

우리가 통제할 수 없이 발생하는 신체 감각을 긍정적으로 해석하는 것은 주관적인 것이기 의식적으로 할 수 있다는 사실은 제게 프로그래밍처럼 느껴졌습니다. 얼마든지 내가 CSS를 바꿔서 좋은 블로그 테마를 만들듯이 고정되어 있는 HTML을 얼마든지 멋있게 꾸밀 수 있다는 것을 알게 되자 훨씬 더 좋은 마인드를 가질 수 있게 되었습니다.

여러분들도 이 글을 통해서 그 어떠한 프로그램보다 ‘나’ 라는 프로그램을 잘 수정할 수 있는 개발자가 될 수 있기를 바랍니다. 우리는 우리의 생각도 프로그래밍을 할 수 있는 개발자가 되었으면 좋겠습니다.

2024년 여러분도 건강하시고 행복하시고 우리 스스로를 프로그래밍 해볼 수 있는 멋진 시간이 되기를 바랍니다.

그저 한번 싱긋 웃어보시고 순간 느껴지는 감각을 충분히 느껴보면서 여기에 올해 목표와 자신감 그리고 긍정적인 해석을 불어넣어보시면서 즐겁게 나를 프로그래밍 해보세요.

감사합니다.
다들 새해 복 많이 받으세요 :)


참고로 이 블로그에 나오는 이론들은 여기저기에서 보고 들은 내용이지만 학문적인 입장에서 엄밀하게 검증한 내용은 아닙니다. 학문적으로 옳고 그름은 굉장히 중요하겠지만, 이것이 그냥 개발자가 올린 하나의 오픈소스와 같이 바라봐 주시고 이 라이브러리가 괜찮아 보인다면 설치해서 사용해보세요. 일부만 마음에 든다면 fork해서 쓰셔도 좋습니다. 혹 내용이 잘못되었다면 댓글로 PR 올려주세요. 바로 수정하도록 하곘습니다. 고맙습니다.

profile
AdorableCSS를 개발하고 있는 시니어 프론트엔드 개발자입니다. 궁금한 점이 있다면 아래 홈페이지 버튼을 클릭해서 언제든지 오픈채팅에 글 남겨주시면 즐겁게 답변드리고 있습니다.

11개의 댓글

comment-user-thumbnail
2024년 1월 6일

새해가 되고 개발 경력이 많아 질 수록
내가 지금 잘하고 있나 개인적인 커리어에
대한 고민이 많아지고 불안감이 커지는데
글을 읽고 조금 더 긍정적인 생각의 전환을
가져볼 수 있는 기회가 된거 같아요 💪

1개의 답글
comment-user-thumbnail
2024년 1월 8일

본인의 감정을 객관적으로 받아들이게 되는 것 같습니다.
정신적 신호에 너무 오냐오냐하며 반응해왔던 날들을 반성해봅니다..!

1개의 답글
comment-user-thumbnail
2024년 1월 11일

안녕하세요! 글을 읽고 댓글을 남기고 싶어서 회원가입했습니다. 😁
최근에 제가 봤던 자기계발 뇌과학 내용들이 프론트엔드 개발과 결합되어 있어서 굉장히 흥미롭고 재밌게 읽었습니다!
특히 "감정은 주관적인 해석, 즉 내가 만들어 내는 것이다." 굉장히 핵심적인 문장이라고 생각합니다.
구체적으로 어떤 감정을 어떻게 해석할지 예시도 너무 좋았습니다. 분노를 열정으로 바꾸는 사례는 래퍼 이영지 님이 비슷한 말을 한적이 있었던 것 같아요. 조금전까지 살짝 지치고 답답했는데 글을 다읽고 나니 힘이 솟네요 신기합니다. 좋은 글 감사합니다!!

1개의 답글
comment-user-thumbnail
2024년 1월 18일

책을 많이 읽지 않는 저에게도 정보가 잘 들어올 정도로 정리가 잘 되어있습니다!
요근래 읽었던 글 중에 가장 좋은 글이에요 ㅎㅎ
좋은 글 감사합니다!

1개의 답글
comment-user-thumbnail
2024년 1월 24일

개발자의 관점에서 심리를 해석해주셨네요 , 개발적 관점으로 심리를 이렇게 풀어낼 수 있는게 신기하면서 재밌네요 ㅎㅎ

생각하는 대로 살지 않으면 사는대로 생각하게 된다는 말이 떠오르네요.

인간은 위대한 존재이지만 때로는 너무 연약한 존재라는 생각이 들어요. 내안에서 떠오르는 감정과 외부에서 영향을 끼치는 상황을 통제하지 못하고 무너질때가 많으니깐요.

어쩌면 연약함이라는 것을 그대로 받아들이지 못한채 너무 큰 이상을 가지고 있어서 무너지는게 아닌가 생각이 드네요.

여러가지로 많은 인사이트를 얻었습니다. 항상 좋은 글 감사드려요 :)

1개의 답글
comment-user-thumbnail
2024년 3월 20일

최근에 서점에서 본 기분을 태도로 연결하지 말자라는 의미의 책 제목을 보며 느낀 감정을 이 글에서 또 느끼게 되네요.
한 현상에 대해 다양한 사람들이 다양한 시각으로 바라보게 되는 원인은 글에서 설명해주신 대로 그 사람 내부의 알고리즘에 따르는 것이겠죠.
모든 고전이나 철학은 그 알고리즘을 더 성숙한 인간상으로 만드는 방식인 것 같아요.
깊은 통찰이 느껴지는 글로 아침을 시작해서 기분이 좋네요. 오늘은 어떻게 제 알고리즘을 다듬어야할지 고민해보겠습니다. 감사합니다.

답글 달기