Duplicate
📃

개발 / 취업관련 QNA

4월 16일 금요일 역수직구조팀 팀원분들과 개발/취업에 관한 이야기를 나누었습니다. 재미있는 내용이 있었지만 썰과 프라이빗한 내용이 담겨서 질문 위주로 기록해두었습니다. 앞으로도 궁금한 것들이 있다면 편하게 질문해주시고 갹자의 경험을 공유하는 시간을 자주 가졌으면 좋겠습니다. - ZETTA -

1. 서비스 DB 설계 구체화 정도는 어느 정도로 작성해야 좋을지 궁금합니다.

실무에서는 적어도 ERD를 개발 전 미리 작성합니다. 서비스 DB는 사용자에 매우 밀접하게 관련이 있어 세심히 설계되어야 합니다. 실무에서 병목은 주로 웹서버가 아니라 DB때문에 발생합니다.
1.
우선 제공하고자 하는 기능 (프론트)의 요구사항을 받고
2.
API에서 어떤 기능을 사용하는지 정리해보고
3.
이 기능을 위해서, 그리고 성능을 만족하기 위해서는 어떤 데이터베이스를 사용할지 / 어떤 구조로 짤지를 정합니다.
4.
3에서 RDB냐 NoSQL에 따라서 많이 달라지기는 하는데 "데이터 모델링/디자인"을 조금 공부해보시면 좋을 것 같습니다. 사이드프로젝트에서는 ERD 작성 정도면 충분하다고 생각합니다.

2. 실제 현업이나 사이드프로젝트에서 Redis를 캐시로 사용하는 사례가 많은지 궁금합니다.

- "현업에서는 Redis 캐시를 매우 많이 사용합니다. 매우 안정적인 오픈소스입니다." - 사이드프로젝트에서는 Redis를 쓰는 경우는 많이 없을 것 같습니다. (물론 개발자가 좋아하면 넣겠지만...) 사이드프로젝트는 사용자 수가 서비스 DB/API에 영향을 미칠 만큼 많지 않기 때문에 캐시를 넣는 요구사항이 필요한 상황이 적기 때문이죠. 서버 리소스도 추가로 필요하구요. 필요하지 않는데 기술을 넣는 것은 오버엔지니어링이 될 수 있습니다.

3. 다양한 IT 기업들의 백엔드/서버 모집 요강을 보면, 필수 항목으로 Spring Boot 개발 경험/API 개발경험 등 여러가지 항목이있는데 이에 대한 경험의 수준은 어느 정도를 요구하는지 궁금합니다(신입기준). 단순하게 토이프로젝트 수준인건지? 그렇지 않으면 회사에서 직접 진행한 프로젝트경험을 말하는건지 궁금합니다.

- "신입 채용시 회사에서 요구하는 프레임워크 경험 수준은 당연히 높지 않습니다." 그런데 아이러니하지만... 최근 신입 입사하시는 분들을 보면 신입이지만 1-2년 이내 경력으로 신입을 지원해서 입사하시는 분들이 많습니다. Production 서비스를 운영해 봤으면서 사용자가 많으면 많을수록 좋다고 생각하죠. (그런데 이런 신입이 과연 존재할까요...?) - 백엔드는 "어느정도 큰 트래픽을 받아봤고 그 트래픽을 견딜 수 있도록 만들어 보았는가" 가 중요하기 때문입니다. - 회사에 입사하지 않고는 이런 경험을 하기는 어렵지만, 비슷한 상황을 성능 테스트로 충분히 만들어 낼 수는 있습니다. JMeter 등등... - 냉정하게 토이 프로젝트 경험 vs Production 서비스 경험 을 따져보면 당연히 후자를 선호하는 건 맞지만, 그것만 본다면 신입 채용이 아니죠 ㅎㅎ. - 토이 프로젝트도 그 나름대로 회사 프로젝트보다 더 큰 경쟁력을 가질 수도 있습니다. - 프로젝트 관련된 내용을 얼마나 고민해보았는지 많이 보는 것 같습니다. ex) 토이 프로젝트를 진행했으면 어떤 부분을 고민했고 어찌/얼만큼 개선했는지 그런 이야기들은 토이프로젝트에서도 충분히 풀어낼 수 있습니다. - 마지막으로 백엔드 중 API 서버 개발을 한다면 Spring 개발 경험이 중요하지만 직무는 생각보다 다양합니다. 본인이 가고자 하는 커리어에 따라서 어떤 기술을 학습할 지 결정해 보는게 어떨까요?

4. 이번 프로젝트는 프론트엔드(Reactjs)와 백엔드(Nodejs) 협업을 진행하게 되었습니다. 그리고 REST API를 이용해서 하게 됩니다. 로컬환경에서의 서버 연결 관계는 이해됩니다. 그러나 배포 환경일 시, 프론트서버와 백 서버, REST API 서버 등 서버 연결 관계가 영 감이 잡히지 않습니다 (NGINX 포함 등..?). 배포 시, 서버 연결에 대해 이해하고 싶습니다!

- 대략 큰 구조는 DNS, CDN, Web Server(nginx, apache), API(Flask, Django, Rails, Spring, Express), Cache(Redis, Memcache), RDB(MySQL, Oracle) or NoSQL(MongoDB) 요런 애들이 많이 사용되지 않나 싶네요. - 로컬과 프로덕션 환경의 차이는 아무래도 장애에 견디기 위하여 이중화, 클러스터링 요런 부분, 엔드포인트(도메인), 환경(Development Environment)에서 차이가 있지 않나 싶습니다. "3tier web application" 키워드로 찾아보시면 어떨까요? - "Github Student"에 가입하시면 Educative 서비스가 6개월동안 무료로 제공되는데 아래 강의를 들어보는 것도 추천드립니다. - https://www.educative.io/courses/web-application-software-architecture-101

5. 오픈소스를 활용한 api 경험 개발이 있으신지 궁금합니다.

- 회사에서 여러가지 오픈소스를 사용합니다. 백엔드 프레임워크인 Django, Spring, Rails 모두 각자의 언어 진영에서 유명한 오픈소스죠. 실무에서도 많이 쓰기도 하고, 저도 많이 쓰고 있습니다. 특히 Spring, Django! - 이번 회사에서는 백엔드/프론트엔드를 통합하려고 Nest.js를 새 프로젝트에 도입해서 사용하려고 합니다. (백오피스 용도) - 회사에서는 상당히 많은 오픈소스를 사용하기도 하고, Fork떠서 필요한 부분을 수정하여 사용하기도 합니다.

6. 백엔드 파트에서 TDD를 적용해보기 위해 가장 쉽게 시작해볼 만한 것이 있을까요?

- 제가 TDD에 깊은 조예가 없어, 답변드리기는 어렵지만 우선 시작은 UNIT Test부터 잘 짜는 연습을 하는게 중요한 것 같습니다. 또한 테스트는 왜 해야하고, 어떤 기법들이 있는지 알아간 후에 만들고자 하는 프로젝트에서 TDD가 적합한지? 생각해보는게 좋을 것 같습니다.
- CleanCode (저자: 로버트 C. 마틴)의 UNIT Test 파트가 있는데 한 번 읽어보시면 좋을 것 같습니다. 그런데 이 책은 원론적인 이야기를 많이 다루어서 실제 프로젝트에 적용하기는 어려운데요, 실전에 도입은 사용하시는 언어에 맞는 강의나 책을 하나 보시기를 추천드립니다. Java는 Real World Software Development(저자: 리처드 워버턴)책, Javascript는 후기가 좋은 강의를 하나 들어보심이 어떨까요? * https://inf.run/PHUW → 저는 못 들어봤지만 평점이 좋은걸 보면 꽤 괜찮은 강의로 보입니다.

7. 캐시 서버, 메시징 서버, 비동기 서버를 경험해보고 싶은데, 어떤 것부터 시작해보면 좋을까요?

- 캐시 서버 (Redis, Memcached), 메시징 서버 (kafka, rabbitmq), 비동기 서버(netty, node.js) - 다양한 선택지와 오픈소스가 있는데요, 그냥 써보고 싶다면 2가지 선택지가 있습니다. 1. 서버에 직접 올려서 소스 빌드/컴파일 or 바이너리 다운받아 실행 후 단일 노드나 클러스터 구축 2. Managed Service (AWS ElasticCache, GCP Memorystore)
- 실무에서는 많은 경우 2를 사용하지만, 공부할때에는 1을 해보는 것도 좋다고 생각합니다. 어떤 방법이던 프로젝트의 어떤 부분에 끼워 넣을 것인지 왜 그 오픈소스를 선택했는지, 각각의 서버를 나누는 것이 왜 필요한지 고민해보고 도입하면 더 좋을 것 같습니다.

8. AWS나 GCP의 자격증을 따는 것이 도움이 많이 될까요?

- "취업"에 관련한 질문으로 생각됩니다. - 메가존, 베스핀글로벌등 클라우드 벤더의 파트너 회사가 아니라면 특별한 가점은 없습니다. 그냥 자격증 땄구나... 서비스들 대략 구성하고 이해하는구나 하는 정도이죠. - 자격증보다 중요한 건 퍼블릭클라우드를 얼마나 더 잘 이해하고, 구성해서 써먹을 수 있느냐를 많이 보는 것 같습니다. 실제로 퍼블릭 클라우드로 인프라를 꾸려보고 운영해보는 경험이 개발자로 취업할 때에는 자격증보다 훨씬 더 중요합니다.

9. 마지막으로 하고싶은 말씀은?

- 제 경험은 수 많은 주니어 엔지니어의 경험 중 하나입니다. 세상에는 훌륭한 엔지니어 분들이 많으시니 제 말을 정답이라고 듣지 마시고 다양한 경험을 하시면서 시야를 넓히시기를 바랍니다. - 그리고 취업에 고민이 많으실텐데 단순히 회사를 보고 취업을 하지 마시고, 어떤 "직무"와 "도메인"에서 일하실지 커리어패스를 그려보세요. 그러면 가야할 길에 조금 더 집중할 수 있습니다. - 제가 주니어로서 오늘 짧은 경험을 나누었던 것 처럼 여러분들도 훌륭하게 성장하셔서 학생분들께 경험을 나눠주세요.

Reference