SOLID는 추상적인 원칙이 아니다. Spring의 DI가 DIP의 구현이고, @Transactional이 OCP의 사례다. Spring을 쓰면서 이미 SOLID를 적용하고 있다는 걸 코드로 확인한다.
Spring은 멀티스레드 환경이다. Singleton Bean이 모든 요청에서 공유된다는 게 무슨 의미인지, 동시성 문제가 어떻게 생기고 어떻게 막는지 실제 코드로 정리한다.
ArrayList는 배열이고, HashMap은 버킷 배열이다. 내부 구조를 알면 왜 ArrayList가 빠르고 HashMap이 O(1)인지, 그리고 멀티스레드에서 HashMap이 왜 위험한지 자연스럽게 이해된다.
Heap과 Stack의 차이, GC가 동작하는 원리, OOM이 발생하는 이유. JVM 메모리를 이해하면 Spring 애플리케이션 성능 문제의 원인을 찾는 눈이 생긴다.
인터페이스는 계약, 추상 클래스는 공통 구현 공유. 차이를 표로 외우는 게 아니라 왜 그렇게 설계됐는지 이해하면 언제 뭘 쓸지 자연스럽게 알게 된다.
상속은 강한 결합을 만든다. 다형성은 유연성을 준다. 둘의 차이를 이해하고, 상속보다 컴포지션을 권장하는 이유를 코드로 설명한다.
클래스와 객체의 관계부터 접근 제어자, static의 적절한 사용, 불변 객체까지. Java 코드를 제대로 설계하기 위한 기본기를 정리한다.
PR 전에 WIP 커밋을 정리하는 squash, main 변경사항을 깔끔하게 반영하는 rebase, 특정 커밋만 가져오는 cherry-pick, 공유 브랜치에서 안전하게 되돌리는 revert. 실무에서 자주 마주치는 상황별 명령어.
1.2.3이라는 숫자 하나로 무엇이 바뀌었는지, 기존 코드를 수정해야 하는지 전달하는 SemVer. Git Tag로 버전을 찍고 CHANGELOG를 자동 생성하는 방법.
Jira 이슈 상태 변경과 GitHub PR/머지 알림을 Slack 하나로 받는 연동 방법. 혼자 써도 유용한 이유와 채널 구성 팁까지.
개인정보처리방침