brunch

You can make anything
by writing

C.S.Lewis

by 에디의 기술블로그 Jul 16. 2022

주니어를 위한 소소한 백엔드 개발 이야기 97

3. 백엔드 개발자

얼마 전 주니어 개발자분들과 오랜만에 오프라인 모임을 했다. 코로나 때문에 멈췄던 오프라인 모임을 다시 시작하게 되어서 좋으면서도 아직 코로나가 끝나지 않은 것 같아서 참 답답한 마음이다. 암튼, 주니어 개발자분들과 대화 중에..."백엔드 개발에서 가장 중요한 것이 무엇인가요?"라는 질문에 필자가 당시 제대로 대답을 못했었다. 이 글에서는 백엔드 개발에서 중요한 것이 무엇인지 필자의 개인적인 생각을 이야기해보겠다. 


여러분들은 백엔드 개발에서 가장 중요한 것이 무엇이라고 생각되시나요? 




"소소한 백엔드 개발 이야기 97"이라는 주제로 잡다하고 가벼운 글을 작성해서 공유합니다. 매주 주말 1편씩 글을 쓰겠다는 당찬 포부로 시작하였지만, 생업으로 인해서 많이 늦어졌습니다. 앞으로 97개를 채울 수 있을지도 의문입니다. 

암튼, 이 글은 시니어를 위한 글은 아닙니다. 취준생 또는 주니어 개발자들에게 조금이라도 도움이 되었으면 좋겠습니다. 다음 주제에 대해서 추천받습니다. 주니어 개발자분들은 어떤 이야기를 나누고 싶으신지요? 




목차 


001. Java equals(), hashCode()

002. 의존성 주입

003. [이번 글] 백엔드 개발자

004. [다음 글] 캐싱


다음 주제는 미정, 언제 쓸지도 미정

- 캐싱

- 쓰레드풀 (병렬 프로그래밍)

- 리프레시 토큰이 왜 필요한가?

- 뭘 테스트해야 할지 모르겠어요

- 함수형 프로그래밍 vs 절차적 프로그래밍 

- 비동기 논블록킹

.......


등등 주제 고민 중 (추천 받음)



백엔드 개발자를 꿈꾸는 학생 개발자에게

아래 글을 정독하길 바란다. 백엔드 개발자가 되기 위한 소양에 대해서 상세하게 알 수 있다. 내용을 필자가 인용하지 않을 테니, 궁금하다면 해당 링크로 가서 꼭 읽어보길 바란다. 필자도 해당 글을 통해서 많이 배우고 있다. 

https://d2.naver.com/news/3435170



백엔드 개발 시 중요하게 생각하는 주제는?

백엔드 개발자를 위한 상세한 내용은 네이버 d2의 글을 정독하면 된다. 

https://d2.naver.com/news/3435170


이 글에서는 필자가 당장 생각나는 3가지만 얘기해보겠다. 


첫 번째는, "캐싱"이다. 

캐싱은 백엔드 개발에서 품질과 성능을 결정하는 매우 중요한 기술이다. 웹서비스에서는 캐싱만 잘 구현해도 반은 성공한다고 생각한다. 필자가 경험했던 수많은 서비스 장애 중에서도 캐싱이 꽤 많았다. 캐싱 전략은 비즈니스에 따라서 결정해야 하기 때문에 도메인 전문가인 기획자와도 협업이 필요하다. 


두 번째는, "쓰레드풀"이다.

쓰레드풀은, 캐싱과 마찬가지로 백엔드 개발에서 성능을 결정하는 매우 중요한 주제이다. MySQL를 연동할 때도 쓰레드풀 수치를 고민해야 하며, Redis를 사용할 때도 쓰레드풀을 검토해야 한다. Rest API를 구축했다면 톰캣의 쓰레드풀을 조정해서 API 성능을 최대치로 끌어올릴 수 있다. 백엔드 모듈에서 구현한 CompletableFuture를 사용할 때도 쓰레드풀을 지정해서 적절하게 사용할 수 있다. 


세 번째는, "임계치"이다. 

외국 회사는 일부러 가끔씩 장애를 발생시킨다는 얘기를 들어본 적이 있다. 강제로 트래픽 부하를 줘서 시스템이 얼마나 버틸 수 있는지 체크하는 것이다. 버틸 수 있는 임계치가 10만 TPS라는 사실을 깨닫게 된다면, 백엔드 개발자는 10만 TPS 이상 트래픽 부하가 오는 경우를 미리 대비할 수 있을 것이다. 아키텍처를 개선하던, 서버 인프라를 개선하던, 뭐든지 미리 준비하기 위해서는 반드시 임계치를 알아야 한다. 



위 3가지는 지극히 필자의 개인적인 생각일 뿐이다. 다른 개발자분들은 뭐가 가장 중요하다고 생각되는지요? 앞으로 "소소한 백엔드 개발 이야기"에서 하나씩 얘기해보면 좋겠다. 


끝... 다음 주말에 또 글을 남겨보겠다












글이 너무 짧아서 아쉬운 마음에.....

백엔드 개발 관련해서 안주거리로 항상 나오는 얘기에 대해서 가볍게 이야기해보자.




백엔드 개발만 할 수 있을까? 

백엔드 개발자는 프론트엔드 업무를 병행하는 경우가 매우 흔하다. 채용 공고를 찾아보면 알 수 있다. 


아래 공고는 카카오 브런치 개발자 채용 공고이다. 브런치는 자바&스프링 기반의 웹서비스라는 것을 알 수 있다.

공고 하단에 웹 프론트엔드 기술에 능숙하신 분을 우대하고 있다. 정확히 프론트엔드 어떤 스펙인지 알 수는 없지만 아마도 기본적인 javascript 는 알아야 하고, webpack에 대해서도 알아두면 좋을 것이다. 소스코드를 훔쳐보니 jquery도 사용하는 것 같다. 


암튼, 웹서비스 개발팀은 백엔드, 프론트엔드 같이 하는 경우가 흔하다. 


아래는, 네이버 계열사인 네이버 웹툰의 공고이다. 카카오 브런치 채용공고와 마찬가지로 기본 백엔드 시스템은 자바&스프링이지만, 프론트엔드 기술을 우대한다.

사용자에게 제공하는 웹 화면에 대한 프론트인지, 아니면 어드민에서 사용하는지 정확히 알 수는 없지만 어쨌든 React, Vue.js 등 을 사용하는 것 같다. 


아래 공고는 우아한형제들의 정산플랫폼 공고이다. 역시, 프론트엔드 개발이 우대사항이다.

백엔드 개발을 희망하는 주니어 개발자들에게 백엔드 개발 공부만 집중하라고 말해주고 싶지만, 현실은 그렇지 않다. 둘 다 잘하면 좋다. 하지만 현실적으로 둘 다 잘하기는 쉽지 않다. 공부할 시간이 부족하고 회사 업무에 너무 바쁘다면 일단 백엔드 개발 기술에 집중하자. 회사에서 프론트엔드를 해야 하는 상황이 오면 그때 배워서 써먹어도 늦지 않다. 필자는 vue.js 책 한 권을 보고 몇 년째 프론트엔드는 Vue.js로 우려먹고 있는 상황이다. 물론, 백엔드 개발보다 재미도 없고 시간도 많이 걸려서 하기 싫은 마음은 굴뚝같지만, 해야 하는 상황이면 할 수밖에 없다. 퇴사할 마음이 아니라면 해내야 한다. 


프론트엔드를 너무 하기 싫다면, 플랫폼 기술을 주로 하는 팀에 가면 된다. 아래는 토스뱅크의 채용 공고인, 프론트엔드 기술은 전혀 사용하지 않는 것으로 추측된다. 

프런트엔드가 너무 하기 싫다면, 플랫폼 관련 업무를 잘 찾아서 경력을 쌓아보길 바란다. 


백엔드는 결국 자바&스프링...

안타까운 현실이지만, 현재 다수의 회사에서 백엔드 기술로 자바&스프링을 사용한다. 사실, 신입 개발자는 스프링을 전혀 몰라도 좋은 회사에 입사할 수 있다. 최근에 필자의 회사에 입사한 신입 개발자 중에서 스프링에 대해서 전혀 모르는 개발자도 꽤 많았다. 코딩 테스트, 기본적인 프로그래밍 실력, 프로젝트 경험 및 면접에서 좋은 점수를 받아서 입사를 했다. 물론, 회사마다 팀마다 다르고 중고 신입을 원하는 회사는 스프링 잘하는 신입 개발자에게 가산점을 줄 수는 있겠지만 케바케이다. 신입 개발자와는 다르게 경력 개발자는 채용 공고에 자바&스프링이 있다면 지원하는 것조차도 부담스러울 것이다. 


물론, 잘 찾아보면 스프링이 아닌 기술을 사용하는 회사도 꽤 많다. 아래 공고는 라인 광고플랫폼의 채용 공고이다. GoLang 를 사용하는 듯하다. 

아래는 토스 증권의 채용 공고이다. Node.js 가 핵심 기술인 것으로 추측된다. 

노드, Golang 등 다양한 경험을 해보는 것도 좋지만, 일단 자바&스프링은 기본적으로 공부해두는 게 좋을 듯하다. 



자바&스프링, Node.js, Golang 개발만 잘하면 최고가 되나요?

필자의 대답은 No이다. 사실 필자가 생각하는 최고의 소양은 프로그래밍 언어가 아니다. 


사실, 백엔드 개발자에게만 해당하는 주제는 아니고, 모든 개발자에게 말해주고 싶은 주제이다.

필자의 대답이 생뚱맞게 들릴 수도 있겠지만, 아이러니하게도 가장 중요한 것은 프로그래밍 실력이 아니다.


가장 중요한 것은 바로 요구사항에 대한 이해이다. 요구사항을 이해하기 위해서는 도메인 지식에 대해서도 알아야 한다. 도메인 지식을 알기 어렵다면 도메인 전문가(예:기획자)와 커뮤니케이션을 잘해야 한다. 백엔드 개발자로서 어떤 개발을 할지 범위는 너무 넓다. 결재 시스템, 회원 시스템, 콘텐츠 웹서비스, 이커머스 등등 어떤 회사, 어떤 팀에 가는지에 따라서 개발해야 할 내용은 전부 다를 것이다. 그래서 이직을 자주 하는 개발자가 도메인 전문가가 되는 것은 쉽지 않다. 


하지만 그럼에도 불구하고 도메인 지식이 중요한 이유는, 도메인 지식에 대한 이해를 바탕으로 소프트웨어 아키텍처를 제대로 설계할 수 있기 때문이다. 도메인 지식이 부족한 상태로 만들어진 아키텍처는, 아무리 멋지게 만들었다 해도 좋은 소프트웨어가 될 수 없다. 


필자의 얘기가 꼰대처럼 들릴 수도 있겠다. 


요구사항 또는 도메인 지식에 대한 이해는 백엔드 시스템의 좋은 설계에 토대가 되므로, 개발을 잘하기 전에, 요구사항을 제대로 이해하고 본인 스스로 뭘 개발해야 하는지 명확하게 아는 것이 가장 중요하다고 생각한다.




브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari