
1. "백엔드도 하고 싶습니다"
L 프로젝트를 시작하기 전에도 잠깐 지나치듯이 다른 프로젝트(일명 J 과제)를 할 때 API 개발을 했다. 그렇게 내세울만한 프로젝트는 아니라서 따로 회고는 남기지 않았고, 그때 처음 알았던 거나 공부했던 것들을 블로그에 정리하곤 했다. L 프로젝트 초창기는 처음 만드는 것이다 보니 당장 필요한 기능들을 빨리 구현하고 배포하는 것이 관건인지라 프론트엔드 개발에만 집중했다. 그리고 작년 말부터는 조금 널널해져서 백엔드 개발도 하고 싶다 요청하고 현재 두 페이지는 기획도 하고, 디자인도 하고, FE 개발도 하고, 테이블 설계하고, API 개발도 하고 있다.
백엔드는 실무뿐만 아니라 다른 모든 프로젝트에서도 욕심을 갖고 하고 있었다. 코드 스테이츠에서 프로젝트를 두 개 할 때, 둘 다 풀스택으로 개발하기도 했고, 작년 3월 즈음에 했던 사이드 프로젝트에서도
백엔드를 한다고 하니 개발자 친구가 "아직 프론트엔드도 다 완벽하게 하지 못하는데, 백엔드로 넘어가기 좀 그렇지 않음?" 이라고 질문했다. 이것도 일리 있는 말이긴 하지만, 개인적으로는 아래의 이유들로 백엔드를 조금이라도 해야겠다고 생각한다.
1-1) T 자형 학습
https://www.youtube.com/watch?v=ly7UabPJNvs
내가 맨 처음 개발을 공부하기 시작했을 때, 가장 많이 보던 유튜브가 "드림코딩 엘리" 님의 영상이었다. 특히, 이 엘리님이 강의 뿐만 아니라 개발자 로드맵, 학습 방법 등에 대해서 자세하게 코멘트를 해주셔서 내 개발자 로드맵을 짜는데 많은 영향을 주셨다.
이 영상의 핵심은 "T 자형 학습" 을 하라는 것이다. 사실 영상의 주내용은 T 에서 세로로 깊숙하게 박혀 있는 것처럼, 어느 한 분야에 대해서는 깊이 있게 학습을 해야한다는 것이다. 개발은 굉장히 공부할 것이 많이 있지만 그럼에도 불구하고 어느 한 분야에 대해서는 깊이 있는 학습으로 뿌리를 깊게 내리고 있어야 한다. 그리고, T 에서 가로로 늘어지듯이 지금 본인의 전문 분야가 아닌 개발 지식들도 넓게 학습해야 한다. 여기에 대해서 엘리님은 "나의 적성에 맞는 분야로 넘어가기 위한 것", "넓게 모두 공부한 것이 시너지 효과를 낼 것" 이라고 표현하신다. 첫 번째의 경우, 나는 프론트엔드가 더 끌려서 개발하고 있지만, 그렇다고 백엔드가 재미 없는 것은 아니다. 좀 더 빠르게 최적화하는 것도 재밌고, 지금 우리 팀에서 백엔드 하시는 분들이 다 연차가 깊게 쌓이신 분들이라 내가 작성한 코드에 코멘트 해주셔서 수정하는 것도 재밌다.
1-2) 개발 시야가 넓어진다.
그리고 백엔드를 하다 보면, 자바 언어를 사용하다 보면, 개발 방식에 대한 시야가 넓어지는 것 같다. 나는 함수형 프로그래밍을 더 깊이 있게 공부를 했고, 함수만을 많이 사용하다 보니 Class 를 쓸 일이 거의 없었다. 그런데 자바를 사용하고 나서부터는 "오? 이렇게도 개발할 수 있네?" 라고 생각을 하고 단순히 리터럴로 객체를 생성하고 함수를 활용해 객체의 값을 변경하는 것보다 class 로 만들고 메서드를 넣어서 오히려 더 직관적이고, 사용이 쉬운 코드를 짤 수 있게 됐다. 이렇게 글을 쓰다보니 갑자기 예전에 봤던 엘리님의 영상이 생각난다.
https://www.youtube.com/watch?v=GpMriJEi_98&t=1593s
이 영상에서 "프론트엔드 개발자의 한계"다. 여기서 엘리님은 좀 적나라하게 표현하시는데, 자바스크립트 언어는 굉장히 자유도가 높고 진입장벽이 낮기에 "프론트엔드 개발자는 누구나 다 할 수 있다" 라고 표현하신다. 영상을 보면 엘리님이 욕 먹을 걸 걱정하면서 소신 발언하시는데, 생각해보면 지금의 내 존재가 엘리님이 말씀하신 것의 증거지 않을까 싶다. 나도 개발과는 전혀 연이 없었지만 프론트엔드 개발자를 하고 있으니까. 그런데, 포인트는 공부에 한계를 두지 말라는 것이다. 자바스크립트라는 언어가 다 되니까 딱 여기까지만 깔짝해서 공부하는기 쉬운데 그러지 말라는 것이다. 함수만 사용할 수 있으니 class 를 완전히 사용할 필요가 없다? 아니다. 방금 언급했듯이 class 를 사용하니 좀더 개발이 편리해지긴 한다. 필요 있다, 없다보다는 익숙하냐, 익숙하지 않냐의 차이인 것 같다. 언어를 얼마나 잘 컨트롤하고, 테스트 가능하게 작성하고, 유지보수 가능하게 만들고, 얼마나 안전하게 만드느냐가 개발자의 일이라는 것이다. 이런 면에서 자바를 공부하고 백엔드를 공부하는 것이, 내가 작은 우물에서 벗어날 수 있도록 도와주었고, 앞으로도 도와줄 것이라고 생각한다. 이런 것들이 쌓이면 T 자형 학습 방법에서 언급하신 "시너지 효과"를 낼 수 있지 않을까 싶다.
2. L 프로젝트에서는 어떤 백엔드 개발을 했는가?
이전 J 과제에서는 플러스 DR 이라고 하는 정책과 관련된 테이블과 API 를 개발했다. 이번에는 발전소의 가동률과 관련된 테이블을 만들고 API 를 개발한다.
2-1) 환경
환경은 Java, Spring 을 사용하고 있다. MyBatis 를 활용해서 SQL 문을 직접 작성해 데이터베이스에서 데이터를 가져온다. DB 는 Maria DB 를 활용하고 있다.
2-2) 인덱스 최적화
SQL 탐색 속도를 높이기 위해서 인덱스를 만들었는데, 속도가 개선되지 않는 문제가 발생했다. 혼자서 대체 왜 안 되지, 왜 안 되지 하다 결국 도움을 요청했다. 원인은 Date 타입을 Range 로 Search 하는데, 요놈이 인덱스에서 가장 첫 번째 Key(Where 절에서 가장 첫 번째로 Date 타입인 컬럼을 두는 것)로 돼 있었기 때문이다. Range 로 조회하는 것까지는 인덱스를 타지만, 그 이후에는 인덱스를 타지 않는다..
MySQL - 인덱스를 경험해보자
인덱스를 직접 사용하고 소요 시간을 비교했습니다.
velog.io
https://bcp0109.tistory.com/365
MySQL Index 특징 및 유의사항 정리
인덱스에 대해 알고 있는 정보를 정리합니다. 잘못된 정보가 있으면 지적 부탁드립니다. Overview 인덱스는 "목차" 라고 할 수 있습니다. 예를 들어 책에서 어떤 단어의 위치를 찾으려면 책을 전부
bcp0109.tistory.com
https://mangkyu.tistory.com/286
[MySQL] B-Tree로 인덱스(Index)에 대해 쉽고 완벽하게 이해하기
인덱스를 저장하는 방식(또는 알고리즘)에 따라 B-Tree 인덱스, Hash 인덱스, Fractal 인덱스 등으로 나눌 수 있습니다. 일반적으로 B-Tree 구조가 사용되기 때문에 B-Tree 인덱스를 통해 인덱스의 동작
mangkyu.tistory.com
그 개발 당시에 봤던 블로그 내용인데. 보면서 인덱스를 설정할 때 꼭 정확하게 사용하자.
2-3) Spring 공부하자
지금 내 상황을 객관적으로 파악해보자면, API 만 개발하고 있다. 정확하게 표현하면, 나에게 현재 L 프로젝트와 같은 아키텍쳐로 설계해보라 하면... 할 수는 있겠지만 오래 걸릴 거 같다. 지금 프론트엔드 환경 다시 구축하라 하면 노가다일 뿐이지 추가 구글링 없이 구성할 수 있겠다만, 백엔드 환경은 그렇지 않다. 지금 당장에 내가 잘 모르는 유레카라 던가... 음...
일단, 서버 환경에 대한 이해를 더 해야겠다. 그리고 Spring 프레임워크에 대해서 더 깊이 있게 공부하고, 어떻게 세팅을 할 수 있는지를 공부해야할 것 같다.
'je개발 회고' 카테고리의 다른 글
[ je 개발 회고 ] 2주년 설문 조사 - 팀장, 사수 (0) | 2024.03.14 |
---|---|
[ je 개발 회고 ] H 프로젝트 회고 PPT (0) | 2024.03.12 |
[ je 개발 회고 ] L 프로젝트 (6) - Store 리셋이 왜 안될까 (0) | 2024.03.06 |
[ je 개발 회고 ] L 프로젝트 (5) - Vue 로 방대한 양의 데이터 다룰 때 주의할 점 (1) | 2024.03.06 |
[ je 개발 회고 ] L 프로젝트 (4) - 페이지 루프 기능 도입 (0) | 2024.03.05 |