사실 4년제 컴퓨터공학과에서도 기본은 배우지만 심화는 본인이 더 깊게 파고 들어야합니다.
우선 미시적인 답변을 먼저 드린다면, 백엔드개발자를 지망하신다면 어떤 기술 스택을 가져갈지를 생각해보시는 것이 좋습니다. 이에 따라 Python을 파야할지, Java를 파야할지 등 갈라질 수 있습니다. Spring을 말씀주셨으니 Spring을 기준으로 생각해본다면 Java를 먼저 공부하는 것이 맞습니다. Java는 말씀 주신 것처럼 객체를 왜 생성하고 컴퓨터 메모리와 어떤 상관 관계가 있는지 등 깊게 공부하는 것이 좋습니다. 이에 대한 부분은 의외처럼 느껴지실 수 있지만 C를 통해 배울 수 있습니다. C언어 포인터를 통해 메모리 관리에 대해서 배우실 수 있는데 이 개념이 Java 가비지컬렉션 개념까지 이어집니다. 때문에 C언어를 포인터를 중심으로 공부하시길 바랍니다. 다른 분들은 몰라도 저는 C언어 포인터까지 공부하신 분은 C언어 기본은 됐다고 생각하는 편입니다. C언어 포인터까지 공부하신 이후에는 Java 클래스 / 추상클래스 / 인터페이스 / 람다 / Optional / Collection / 가비지컬렉션 등을 중심으로 공부하시길 바랍니다. 저는 이 2가지를 공부할 때 윤성우님의 열혈 C언어 / 열혈 Java 책 / 강의를 봤습니다. 강의는 무료입니다. 꼭 저처럼 윤성우님 강의를 안 보셔도 되고 유튜브에 C언어 / Java 강의를 검색하셔서 공부하셔도 무방합니다.
마지막으로 거시적인 답변을 드리자면, 앞서 말씀드린 것과 반대로 기술 스택에 종속되지 않는 개발 능력을 쌓으시길 바랍니다. 우선 머리속에 백엔드 기술 과정을 만드는 것이 좋습니다. DB부터 시작해서 REST API 서버를 거쳐 프론트엔드까지 도달하는 과정을 한번 모두 경험하시는 것이 좋습니다. 이때 DB는 RDB를 쓸지 NoSQL을 쓸지, REST API 서버는 Java Spring으로 만들지 Python Django로 만들지, 프론트엔드는 순수 Javascript만 쓸지, React 혹은 Vue.js를 쓸지는 선택 사항입니다. 궁극적으로 기술 스택은 서비스를 구현하는 수단이라는 것과 이를 위해 다른 프레임워크 혹은 앞으로 나올 새로운 프레임워크를 배울 수 있다는 사실을 인지하셔야 합니다.