단단한 백엔드 개발자가 되기 위해서
백엔드 개발자는 서버와 클라이언트를 소통하게 만들어주는 하나의 창구같은 역할을 한다고 생각합니다.
좋은 백엔드 개발자가 되기위해 기술적으로는 어떤 고민을 해야할까요...?
- 서버와 통신의 성능
- Query문을 최소화 방식으로 빠른 DB와 통신 - 단단한 error 핸들링
- 기본소양이라고 생각합니다.
- 개인적으로 핸들링이라는 단어에 포커스를 많이 두는편인데 내코드에서 발생하는 에러들을 손안에 가둘 수있는 능력이 필요합니다.
- 즉, 어디서 어떤 에러가 발생할지 잘 파악하고 있어야겠죠 - 백엔드 성능
- Query문 이외에도 여러가지 요소로써 빠른 응답시간을 도출해내는방법에 대한 고민을 해야겠죠
사실 저도 개발공부한지 얼마 되지 않은 주니어 개발자로써 위의 상황들을 해결할 방법을 정확히 알지 못합니다.
그에대해 고민하고 공부하고 성장하는 단계입니다
그렇다면 어떤 공부를 해야할까?
- Django는 ORM최적화를 어떤 방식으로 할까? 토큰은 왜 헤더에 담아서 통신을할까? POST요청과 GET요청의 차이는 무엇일까?
EC2 배포하는 방법은? Django에서 S3를 활용하여 리뷰이미지를 DB에 저장하는 방법은? - 메모리,캐싱,동기 와 비동기, ORM 최적화, 로드밸런싱, RESTful API, HTTP 통신, MVP패턴,mysql,nosql(mongoDB)
EC2,RDS,S3 - OS, Network, 자료구조, 디자인패턴, Computer Architecture, DataBase,AWS
여러가지 키워드와 고민거리가 던져집니다.
특히나 백엔드 개발자로써 알아가야할 것들중 많은것들은 전공지식이라고 하는 영역에 속합니다.
지금 현재 저는 Data-Structure와 OS를 공부하고 있는데 수학적 지식이 중학교1학년 수준과 컴퓨터지식이 0인 현재 상태에서는
OS 1시간짜리 강의를 듣고 이해하고 5~6시간, Data-Structure 한 목차를 공부하는데 1~2일이 걸립니다.
이방식이 옳을까에 대한 고민을 개발자를 시작하면서 하였고 주변에서 만류하는 분위기였습니다.
위에서 아래로 or 아래에서 위로
단순히 개발영역뿐만 아니라 많은 영역에서 두가지 공부방법이 존재한다고 생각합니다.
위에서 아래로 공부하는 방법
아래에서 위로 공부하는 방법
두가지다 장점 , 단점이 있다고 생각합니다.저같은 경우는 대체로 아래에서 위로 공부를 하는편입니다.
제 공부방식의 단점을 개발자 관점에서 보자면
- 공부하고 실제 코드에 적용되는 속도가 굉장히 느리다
- 위의 이유로 인해 실제로는 공부되지 않은 내용의 코드들이 많아진다.
- 모르는 키워드가 나올때마다 더욱 더 아래로 향하게 되어 속도가 더 느려진다.
결론적인 단점은 지식이 쌓이고 적용되는데 너무 느리다는것입니다. (전체적으로 보면 적용이 불가능하다는 표현이 맞겠네요)
아래에서 위로 공부하게 되면 아래와 같은 현상이 일어납니다.
실제로 까르보나라를 만들고 있지만 그에 대한 지식이 아직 연결이 되지 않은 상태이지요
면에대한 공부를 마치더라도 베이컨에 대한 지식은 시작도 안했기에 더오랜시간동안 베이컨에 대한 지식은
분단되어있는 결과가 발생합니다.
가장 밑에 있는 OS, Network지식, Data structure 같은 기반지식들이 부족하기에 이러한 현상이 일어난다고 생각합니다.
위에서 아래로 공부하는 방법이 옳은것일까!?
위에서 아래로 공부해야한다고 말하고있습니다.
이유를 보자면
- 당장의 기능구현을 해야한다.
- 아래에서 위로 올라가기에는 너무 다양한 외부라이브러리 나 기술들을 사용한다.
특히나 외부라이브러리 의존도가 높은 프론트엔드 개발자분들은 이러한 공부법을 많이 사용하십니다.
프로젝트마다 사용하는 라이브러리가 매번 바뀌고 계속해서 업데이트 되기 때문이죠
백엔드라고 저런상황이 없는것은 아닙니다. 외부AP를 사용해서 데이터를 받아오는경우 이러한 상황에 쳐하게 되죠
위에서 아래로 공부하는것에 대한 단점은 무엇일까요?
- 해당 내용의 근본적인 구조를 파악하는데 오래걸린다.
- 모르는 키워드들이 계속 튀어 나오기때문에 이해하기 어려울 수 있다.
느려도 너무 느린 공부속도...
저같은경우는 앞서 말했듯이 아래에서 위로 공부를 하고 있었습니다.
하지만 아래의 영상을 보고 공부 방식을 바꿨습니다.
https://www.youtube.com/watch?v=3ArYMq5AomI&t=870s
링크의 내용은 개발자분들이 면접때 질문하는것에대한 내용입니다. 제가 개발공부를 시작하고나서 2~4주에 한번씩 보았던 영상입니다.
"처음에는 저게 뭔소리인가...", "나는 파이썬이니까 저 자바에 대한 내용은 몰라도되겠지?" 라는 생각을 하였습니다.
오늘 다시 들으니 로그인 기능에 대한 구조적인 질문이였고 한개의 질문에대해서는 대답을 할수 있었습니다.
몇가지 질문은 공부를 하루정도한다면 충분히 대답할 수 있는 부분의 질문이였습니다.
하지만 제가 하는 공부방식으로는 1~2개월공부해야 대답할 수 있는 영역이였습니다.
"아 면접준비를 해야겠다" 가 아닌 "아 내가 몇번이고 작성한 코드에 구조적인 문제를 아직 파악 못했구나"라는 생각이 들었습니다.
학자가 아닌 개발자로써 공부를 해야하는 방식에 어느정도 오류가 생겼다고 생각이 들었습니다.
그래서 어떻게 공부 할까?
어떻게 공부하는것이 옳은것이 아닌 제가 공부하는 방식에 대해 이야기 하려고합니다.
우선 위에서 아래로 공부하는것과 아래서 위로 공부할것을 나누어 정리해보았습니다.
- 아래에서 위로
- OS,Data Structure,Algorithm,Design Pattern,Linux - 위에서 아래로
- Network, HTTP, Computer Architecture, node.js,express, Git
이렇게 정리해놨지만 실제로 제가 생각한 의미는 아래와 같습니다.
"OS,Data Structure, Algorithm을 아래에서 위로 쌓으면서 필요한 다른 지식들은 필요할때 마다 정리하여 공부한다."
정도가 될 것 같습니다.
이렇게 나눈 이유에 대해서는 몇가지 있습니다.
- 지금 당장에 중요한가?
- 해당 지식들이 다른 지식들에 얼마나 영향을 끼치나?
- 아래에서 위로 공부했을때 최종적으로 얼마만큼의 시간이 소요되나?!
Network의 경우 웹 개발자로써 너무나도 중요한 영역이지만 OS, Data Structure 와 함께 병행하려면
지금당장 코딩을 멈추고 공부만 해야하는 상황에놓일 것 입니다.Computer Architecture 또한 마찬가지의 이유입니다.
좋은 사이트 하나 놓고 갑니다..
https://github.com/gyoogle/tech-interview-for-developer
GitHub - gyoogle/tech-interview-for-developer: 👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖
👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.
github.com
보통 굉장히 좋은 서적같은거를 "바이블"이라고 표현하는데 이 사이트도 충분히 바이블 영역에 속할 수 있을것 같습니다.
면접준비용으로도 좋지만 해당키워드들에대해 개인적으로 공부하기 너무 좋은 키워드들이 많은 것 같습니다.
'개발자 정진관 > 개발자 이야기' 카테고리의 다른 글
당신은 왜 노력을 하나요? (0) | 2023.01.12 |
---|---|
치킨이 먹고싶어서 만든 python 랜덤함수.. (0) | 2022.10.02 |
[Wecode] Wecode 회고록 (0) | 2022.08.22 |
[Wecode] 개발자 회식 정총무의 정산이야기 (0) | 2022.07.03 |