스프링을 공부하다 보면 "빈이 뭐지?", "싱글톤이 왜 기본이지?", "DI는 정확히 어디서 쓰이는 거지?" 같은 질문이 계속 꼬리를 뭅니다. 이번 글에서는 이 개념들을 왜 필요한지 → 어떻게 동작하는지 → 메모리 관점에서는 어떤 의미인지 순서로 하나씩 풀어봤습니다.1. 왜 매번 new로 만들면 안 될까?스프링이 없던 시절에는 이렇게 개발자가 직접 객체를 만들고 연결해야 했습니다.MemberRepository repo = new MemberRepository();MemberService service = new MemberService(repo);MemberController controller = new MemberController(service);이 방식은 프로젝트가 커질수록 세 가지 문제를 만듭니..