본문 바로가기
일상/리뷰&후기

아이티윌 후기 5편(마지막)

by GangDev 2024. 3. 30.

 

저번 시간엔 java부터 jsp까지 얘기했고,
이번 시간부터는 spring부터 수료까지 해서 본 시리즈를 마무리해보려 한다.

일단 간단한 배경에 대해 얘기하겠다.

spring은 java 기반의 프레임워크로 20년이 넘는 역사만큼이나 안정성 또한 우수하다.
(무려 전자정부 프레임워크로 지정될 정도다.)
그래서 수많은 기업, 특히 SI와 중견 이상의 대기업에서 많이 쓴다.
(긴 세월 동안 쌓인 레퍼런스로 인해 웬만한 프로젝트를 하는 데 참고할 자료나 에러 해결책이 인터넷에 널려 있다. 어떻게 해야 할지 감이 안 잡혀서 헤매는 초보자들에게 더더욱 자바-spring을 추천한다. python이나 Javascript도 충분히 좋지만, 초보자들이 익히기엔 레퍼런스가 부족한 편이다. 내 사견으로는, 자바로 어느 정도 기반을 닦은 다음, js의 노드나 파이썬의 장고 등으로 넘어가면 순탄할 듯싶다.)
(한국은 자바 공화국이라 부를 정도로 자바 기반으로 돌아가는 기업들이 많다. 이점으로는, 그만큼 자바에 대한 한국어 자료가 많다는 것이다.)
(나중에 심화 자료는 영어로 봐야겠지만 초반에 한국어 자료로 익히는 게 편하다)
(보통 python과 js기반의 node.js는 스타트업이나 중소기업에서 많이 쓰인다. SI나 중견에 쓰이는 기술스택과는 다르니, 목표로 하는 기업 종류와 규모에 따라 테크트리를 정하면 된다)

SI(System Integration)은 쉽게 말하면 외주업체인데, 발주처에서 일감을 따오거나 직원을 파견 보내서 프로그램을 개발하도록 한다.
우리나라 IT 기업은 90%가 SI라고 할 수 있을 정도로 태반이 외주업체고 서비스 기업들은 몇 없다.
왜 SI가 많냐면, 기본적으로 공공기관(나라)에서 일감을 안정적으로 공급해주기 때문이다.
심지어 나라에서 개발자를 초급-중급-고급으로 나눠서 인건비를 산정해줬기에 왈가왈부할 필요도 없고, 그에 따라 인력을 파견 보내는 SI 업체들이 많이 생겨났다.
또 다른 이유로는, 우리나라의 고용제도가 경직되어 있는 편이어서 직고용보단 외주 형태로 일을 많이 맡겨서이기도 하다.

그래서 현실적으로 봤을 때, 프로그래머 취업을 하면 대다수가 원하는 서비스 업체(네이버나 카카오 같은)보단 SI에 갈 확률이 높다.
SI에 그만큼 많이 뽑기 때문에(그만큼 많이 나가는 것이 함정) 학원에서도 SI를 타겟으로 학원생들을 교육하고 그 커리큘럼의 중심이 바로 spring이다.

이렇게 길게 말하는 이유는, 그만큼 spring이 자바의 꽃이요, 꼼꼼히 배워야 한다는 뜻이다.
이전까지의 교육에서 어정쩡하게 들었더라도 spring만큼은 무조건 제대로 들어야 한다. (즉, 여태껏 열심히 들었더라도 spring을 헛듣는다면 말짱 도루묵인 셈이다)

spring은 자바의 핵심인 만큼 양도 방대하다.
spring만 붙잡아도 6개월에서 1년 넘게 공부할 수 있을 정도다.
수많은 애너테이션과 그 용법들은 처음 보면 그냥 이게 뭐지 싶다.
한 가지 팁이 있다면, 처음엔 일단 문법을 외우자.
@Controller가 뭔지, @mapping은 어떻게 쓰이는지 일단 외우고 계속 실습한다.
이해가 안 가더라도 일단 쓰다 보면 원리도 이해되는 마법이 일어난다...
(뭔가 억지같긴 하지만 사실이다. spring 자체가 단편적인 부분만 딱 보고 이해 가는 개념이 아니다. 앞뒤 내용이 상호보완적이기 때문에 전체적으로 한두 번 훑어야 개념이 조금씩 눈에 들어온다. 그러니 이해 안 된다고 억울해하지 말자.)

영어 단어 외우듯이 문법을 외우고 외워서, 어느 정도 익숙해졌다 하면 그 다음부터는 하나하나 왜 그렇게 이뤄졌는지 원리를 뜯어보자.
이렇게 하면 개념이 입체적으로 이해되면서 머리에 자리잡힌다.
(뭐... 솔직히 그냥 팀프로젝트 할 때 대가리 박다 보면 살아남기 위해 알아서 익혀진다. 이래서 경력직을 찾는 것일지도?)

spring을 잘 배워야 하는 이유는 위에 언급한 것 외에도 더 있다.
spring 이후에 배울 springboot는 spring을 더 쉽고 간단하게 다루기 위해서 나온 것이다.
함축적으로 코딩을 짜는데, 여러 과정이 생략된 만큼 그 원리를 제대로 이해하고 있지 않으면 구조 짜는 것부터 중간에 생기는 무수한 에러를 해결하는 데 어지간히 골치 아플 것이다.

spring을 잘 배워야 하는 또 다른 이유는, spring의 mvc 패턴 구조를 빠삭하게 익혀놓으면, js의 서버 프레임워크인 nest.js 나 python의 서버 프레임워크를 익힐 때 도움이 된다.
다른 언어의 프레임워크들이 mvc 패턴으로 이루어져 있는 것들이 많아서다.
그래서 spring을 한번 잘 익혀놓으면 다른 언어는 별 어려움 없이 빠르게 익힐 수 있을 것이다.
(필자도 기본적인 python이나 js를 배우는데 1-2주 정도밖에 안 걸린 것 같다)

우리 반은 spring까지 배우고 나서 처음으로 팀프로젝트를 진행했는데, 우리 조는 총 5명의 인원이 배정되었다.
어쩌다 보니 내가 팀장이 되었는데, 팀장 경험이 거의 없었던 터라 이때 꽤 고생을 많이 했다.
무언가 주도적으로 이끌고 나가야 한다는 게 생각보다 힘들었다.
뭐든지 저절로 되는 것이 없다는 것도 이때 다시 한번 여실히 느낄 수 있었다.

프로젝트는 맨 처음에 기획을 하는데, 우리 조는 여기에서 약 10일 날려먹었다.
일반적인 것보다 오래 걸린 시간인데, 그만큼 티격태격하면서 중구난방 흘러간 것 같다.
첨예하게 대립되었던 부분은 처음부터 꼼꼼히 계획한 채로 가자는 것과 기본적인 것들이 수립되면 개발하면서 차차 수정해 나가자는 것이었다.
전자를 얘기하는 팀원 입장은, 나중에 계획이 변경되는 일이 최대한 적도록 예방 차원에서 초반에 꼼꼼히 계획하자는 것이었다.
나는 후자였는데, 개발하면서 발생하는 수많은 변수를 초보자 입장에서 예측하기 힘들어서, 초반에 꼼꼼히 계획해 봤자 유연성이 떨어져 중간에 계획을 변경하게 되었을 때 드는 비용이 커지기 때문이다.

결과론적으로 후자인 내 의견이 맞았지만, 당시에는 내 설득력이 부족했는지 팀원의 고집이 셌는지는 몰라도 의견 합의가 안 되어서 시간을 많이 허비해 버렸다.
그래도 이런 경험을 통해 앞으로 비슷한 문제가 발생했을 때 어떻게 대처해야 할지 감 잡을 수 있었다.
(내가 생각해 낸 해결책으로는, gpt의 도움을 받아서 하루 만에 기획과 DB 구조를 끝낸 다음에 팀원들에게 보여주면서 기획 속도를 밀어붙이는 것이다.
gpt를 활용하면 db를 순식간에 짤 수 있기에 비효율적으로 낭비되는 시간을 파격적으로 줄일 수 있다. 기획도 포트폴리오 수준이라면 창의적으로 하기보단 빠르게 gpt로 기능을 정리하는 게 좋다)

결국 한 달이라는 기간의 1/3 정도를 수업 내용 복습과 기획으로 날려먹고 난 후에야 본격적으로 코딩하기 시작했다.
주제는 커뮤니티 사이트.
처음에는 프론트보다는 백엔드 부분을 집중적으로 다뤘는데, 처음 하는 거라 백엔드 구현에 걸리는 시간이 짐작 가지 않아서다.
그래서 우선순위를 정해서 핵심 기능부터 구현해 일정을 맞췄다.
나는 이때 로그인 파트를 맡았는데, 금방 끝날 줄 알고 후다닥 한 후에 다른 기능을 하려고 했지만 계획처럼 되진 못했다.
세부적으로 파고들어가니 부수적으로 해야 할 것들이 계속 나왔기 때문이다.
미처 다른 것을 할 여유는 없었다.
(그 와중에 처음 다루는 git을 공부하고 알려주는 것과 팀장으로서 상황 체크와 땜빵까지 하다 보니 내 것을 제대로 하기도 힘들었다. 어쩔 수 없이 수업 시간 이후에 남아서 하는 수밖에 없었다.)
(그래서 팀장 경험은 한 번으로 족한 것 같다. 팀장을 하게 되면 전반적인 프로젝트 기여와 팀원 관리라는 소중한 경험이 생기겠지만, 필연적으로 프로젝트 관리라는 업무가 주어져서, 프로그래밍 스킬을 집중 연마하기 힘들다. 코딩하는 게 본 목적인 교육 과정에 다소 어긋난다.)
(프로그래밍을 하다가도 여기저기에서 질문이 들어와 맥이 끊긴다. 한번 맥이 끊기면 다시 집중하는 데까지 소모되는 시간과 집중력이 부담된다. 그렇다고 팀원들이 그 사정을 봐주는 것도 아니니, 팀장을 하기 전에 이런 사항을 어느 정도 고려해 보자)
간단하고 깔끔한 디자인으로 하기로 해서 프론트 구현은 2-3일 만에 끝났다.
그리고 프레젠테이션도 내가 했다.
시연 부분에서 하필이면 내가 구현한 부분 중 하나인 이메일 인증 파트에서 오류가 나는 바람에 식은땀이 줄줄 흘렀다.
(그냥 얼버무리면서 넘겼지만 이때의 교훈으로 해당 기능을 어떻게 구현해야 하는지 쉽게 잊히지 않는다.)

그렇게 다사다난한 첫 번째 프로젝트가 끝나고, 처음으로 열몇명 다같이 회식했다.
(java swing 개인프로젝트 때는 4명 정도 모여서 먹었다)

---
첫번째 팀프로젝트가 끝나고 나서는 springboot 수업이 이어졌다.
spring을 진행하면서 나는 짬짬이 react와 springboot를 미리 맛봤는데, 이때 미리 예습한 것 덕분에 springboot는 무난하게 들을 수 있었다.
springboot는 2주 정도 했나? 강사님이 과감히 빠르게 수업을 마치고 팀프로젝트를 열어버렸다.
팀프로젝트 기간은 약 1달 반.
생각보다 넉넉한 기간이었고, 이번 팀원 수는 나를 포함 4명이었다.

2차 팀 프로젝트 전체적인 과정은 1차 팀프로젝트와 비슷했다.
다만 2차 팀 프로젝트를 하면서 아쉬웠던 점은, 주제 선정에 있었다.
주제를 스트리밍 플랫폼이란 생소하면서도 난도 있는 것으로 선정한 게 원인이었다.
레퍼런스 자료도 적은 분야다 보니, 하나하나 구현할 때마다 머리 깨져가면서 헤매야 했고, 당연히 일정 예측도 다 빗나갔다.
그래서 원래 유닛 테스트와 CI/CD 까지 하려고 했던 일정이, 어쩔 수 없이 테스트만, 아니 계획된 기능이라도, 핵심 기능만이라도... 이런 식으로 쪼그라들었다.
결국 AWS를 올리는 과정에서 핵심 기능인 스트리밍 재생 부분에서 난 오류를 프로젝트 발표 시연할 때까지 해결하지 못해서 아쉬움 많은 프로젝트가 되었다.

그래도 얻어간 건 여러 가지 많아서 그나마 다행이다.
이리저리 용써가면서 하다 보니, 어떤 기능을 구현할 때 어떻게 짜야하는지 문제의 추상화 연습이 많이 되었던 것 같다.
리눅스와 쉘 스크립트까지 건들면서 자연스레 네트워크와 운영체제까지 공부하게 되었고, 전체적인 흐름이 이해되자 어중간했던 개념들이 혈 뚫리듯 이해되었다.
그래서인지, 지금은 어떤 기능을 구현하고자 할 때 구현 자체는 문제가 안 되었다. 어떻게 하면 잘 짜는가의 문제만 남았을 뿐...

2차 프로젝트를 진행하면서 이력서도 작성하고, 면접 사진도 찍고... 여러 가지 취업 준비를 했다.
이력서를 작성하면서 내가 뭐가 부족한 지 알 수 있었기에 1대 1 면담으로 도와주거나 같이 고민해 준 사무실 직원분들에게 이렇게 글로라도 감사를 전하고 싶다.
(그래도 앞으로 공부하면서 생기는 이력들을 추가해야 하기 때문에 전체적인 이력서의 내용은 계속 조정해야 할 것 같다)
그 외에도 학원에서 부른 몇몇 SI 대표, 이사님들이 와서 면담해 주었다.
어떤 방면이 취약하고 어떤 방면으로 준비해야 하는지, 현재 업계가 어떻게 돌아가는지 정보를 알려주어서 좋았다.

준비는 해도 해도 끝이 없다.
하면 할수록 공부해야 할 것들이 줄줄이 나온다...
그래서일까, 다 끝나고 나올 때는 뭔가 후련함과 착잡함이 깃든 복잡 미묘한 마음이었다.
어리숙한 상태로 울타리 밖에 나가야 하기 때문이리라.
그렇다고 언제까지 준비만 할 순 없는 노릇이기도 하고...

앞으로 내 일정의 메인은 취업 준비다.
포트폴리오 준비와 CS 공부, 코딩테스트 준비, 면접 준비, 이력서 보완 등등이다.
근데 솔직히 요즘 같은 한파 때 취업이 잘 될 것 같진 않다...
다행히 조금씩 받은 외주로 그나마 생계는 안 끊길 것 같은데 그래도 걱정은 걱정이다.

마음 같아서는 나 하고 싶은 공부 하면서 하고 싶은 프로젝트로 실서비스 개발해 보는 건데, 이리저리 해야 할 건 쌓여 있고 시간은 정직하게 지나고 내야 할 돈은 야속하게 빠져나가서 슬프다...

그렇게 오늘도 매일 아침부터 밤까지 독서실 출퇴근을 반복한다.
나중에 이 글을 돌아봤을 때 좋은 추억으로 남아 있기를, 내 미래가 원하는 대로 되어 있었으면 하는 바람이다.

그래도 최소한, 학원을 다니기 전보단 마음이 훨씬 편안하다.
그다지 미련이 남지 않아서일 수도?
6개월 다니는 동안은 나름 내 인생에 있어 열심히 했기 때문인 것 같고 말이다.
앞으로도 이런 느낌으로 매사에 임하면 되겠지.

---
지금까지 열심히 본 독자라면 십중팔구 국비생이거나 관계자일 것이다.
내가 내 시간을 써가며 이렇게 열심히 쓴 이유는, 그만큼 다른 사람들이 더 나은 학원 생활을, 더 나은 인생을 살게 하기 위함이라.
연재글을 참고하여 국비-수강생은 더 슬기롭게 학원생활을 할 수 있도록, 관계자는 그런 국비생에게 더 밀접한 피드백을 제공할 수 있도록 말이다.
부디 도움이 되길 바라며 6개월 동안의 국비 여정 이야기는 여기에서 끝을 마친다...