개발을 공부하면서 TDD와 DDD에 대해 정말 많은 이야기를 들어왔고, 많은 회사의 채용 공고에서도 이를 필수 사항으로 여기고 있습니다. 하지만, 주변 개발자들과 대화를 해보면 정작 TDD와 DDD를 왜 써야 하고 이를 통해 얻을 수 있는 게 무엇인지 고민해보지 않고 그저 현재 시장 트렌드를 따르기 위해 무턱대고 적용해보는 경우가 많았습니다. TDD: 테스트 주도 개발 많은 사람들이 TDD의 장점으로 안전한 리팩토링과 버그 감소를 꼽습니다. 하지만, 이는 단순히 테스트 코드를 작성하는 것만으로도 얻을 수 있는 효과입니다. 오히려 TDD의 과정을 처음 접하면 상당히 귀찮고 신경 쓸 부분도 많습니다. 그렇다면 왜 TDD를 사용해야 할까요? 이를 통해 얻는 것이 무엇일까요? TDD는 테스트를 작성하면서 개발..
이전 글에서 진행했던 Syncronized 키워드의 경우 실무에서 적용하기 어렵습니다. 그 이유로는, 1. @Transactional과 Syncronized를 같이 사용할 경우, 동시성을 보장해주지 못합니다. Spring AOP를 적용할때 프록시 객체를 생성하게 됩니다. public void proxy() { EntityTransaction tx = em.getTransaction(); tx.begin(); super.service(); tx.commit();}이런 형태로 Syncronized가 걸린 메서드의 겉을 덮는 프록시가 생성 되기 때문에, Syncronized가 걸린 service() 로직을 실행한후 트랜잭션이 커밋 되기 직전에 다른 스레드에서 servi..
들어가며 만약 스프링 프레임워크를 사용해본 적이 있다면, Dependency Injection (DI)에 대해 들어보셨을 것입니다. 또한, 스프링을 사용하는 대부분의 개발자들은 DI를 빈번하게 사용하고 있을것이라 생각합니다. 저 또한 DI라는 기능을 즐겨 사용해왔지만, 이론적인 부분만 알고 있고 실제로 어떻게 동작하는지에 대해서는 깊게 파고들어보지 않았습니다. 앞서 코드 분석을 진행해왔듯이 이번에도 Spring DI가 어떻게 동작하는지 알아보겠습니다. Application Context 스프링 부트를 사용하여 앱을 실행할 경우 run()을 호출하여 시작하게 됩니다. public ConfigurableApplicationContext run(String... args) { long startTime = ..