본문 바로가기

분류 전체보기159

9장 의존성 관련 조언 유연한 설계는 유연성이 필요할 때만 옳다 설계의 미덕은 단순함과 명확함이다. 변경에 대한 막연한 불안감은 불필요하게 복잡한 설계를 유발한다. 유연함은 단순함과 명확함의 희생 위에서 자란다. 단순함과 명확함을 만드는 방법은 사람들 간의 커뮤니케이션 뿐이다. 복잡성이 필요한 이유와 합리적 근거 없이는 누구도 복잡한 설계를 만족스러운 해법으로 여기지 않을 것이다. 단순하고 명확한 해법이 그런대로 만족스럽다면 유연성은 제거하라. 유연성은 코드를 읽는 사람들의 복잡함을 수용할 수 있을 때만 가치가 있다. 하지만 복잡성에 대한 걱정보다 유연하고 재사용 가능한 설계의 필요성이 더 크다면 코드의 구조와 실행 구조를 다르게 만들어라. 의존성을 관리하는 것보다 더 중요한 것은 협력에 참여하는 객체가 다른 객체에게 어떤 메.. 2024. 1. 25.
8장 의존성 관리하기 8장 읽고 이야기 나눈 내용 new는 해롭다. 그럼 어디에 둬야해? 생성자로 넘겨도 new는 써야하는 것 아닌가? → 팩토리 메소드처럼 의도적으로 높은 결합도를 갖는 대신 명시적인 의존성을 가진 클래스를 두는 방법도 있다. 그냥 읽을 때는 왜 이렇게 하는지 이해하지 못했는데, 나중에 컨텍스트를 확장해서 다른 요구사항을 추가하더라도 클래스만 추가해서 기능을 바꾸는 것이 인상적이었다. 하지만 이러한 설계가 꼭 필요한가 싶기도 하다. 유연함이 필요하지 않다면 클래스가 너무 많아지고 흐름 파악이 어려워보인다. 그 말을 들으니 기술 커뮤니티에서 들어본 기술부채라는 용어가 떠오른다. 우선 기한 안에 필요한 요구사항을 모두 구현하고, 따로 시간을 들여 더러운 코드를 정리하거나 유연함이 필요한 부분의 설계를 개선한다고.. 2024. 1. 25.
7장 패러다임 역사 7장 읽고 이야기 나눈 내용 프로그래밍 패러다임의 역사가 곧 소프트웨어의 역사와 결을 함께 하는 것 같다. 사람들이 점점 소프트웨어로 더 많은 일을 하기를 기대하고 비즈니스 시장이 커지니까 소프트웨어가 요구사항의 변경을 빠르게 반영해야할 필요성이 생겼고, 패러다임의 변화는 여기에 적응하기 위함이었던 듯. 소프트웨어가 충분히 발전해서 변경도 척척 반영할 수 있게 되면, 그 다음엔 뭐가 있을까요? 결국 목표는 많은 일을 빠르게 하는 것이니까, 다시 성능에 초점을 두지 않을까. 요즘 하드웨어 엄청 발전하고 있는데, 병렬로 발전이 일어나고 있는 것 같음. 그래서 캡슐화가 중요한걸까 더 효율적인 방법을 찾게 되면 기존 컴퓨터의 이진 체계나 폰 노이만 구조가 사라질 수도 있을 것 같다. 농도 컴퓨터라던지..? (아.. 2024. 1. 19.
자바 디자인 패턴 토비의 스프링을 읽으면서 스프링에 다양한 디자인 패턴이 적용된 것을 보고 공부를 시작했다. 토비 선생님이 주신 디자인 패턴 학습 방법에 대한 교훈을 최대한 지키려고 했다. 패턴에서 가장 중요한 것은 각 패턴의 핵심이 담긴 목적 또는 의도다. 패턴을 적용할 상황, 해결해야 할 문제, 솔루션의 구조와 각 요소의 역할과 함께 핵심 의도가 무엇인지를 기억해둬야 한다. 새로운 패턴을 접할 때마다 이 패턴이 해결하려고 하는 문제 상황은 무엇이며, 패턴을 적용했을 때 어떤 효과를 볼 수 있는지에 집중했다. 구현은 이 목적을 달성할 수만 있다면 개발자의 책임이라고 하길래, 구현에 너무 얽매여있지 않으려고 했다. 그래도 코드는 다 따라쳤다. 손에 익어야 나중에 필요할 때 사용할 수 있을 것 같고, 이해도 더 잘 된다. .. 2024. 1. 18.
자바와 JUnit 테스트 만들기 팀원과 리팩토링 목표로 테스트 코드 꼼꼼하게 쓰기를 잡아서, 테스트 관련 책을 읽어보았다. 원래 기대했던 것은 단위 테스트를 작성하는 논리나 접근법이었는데, 3장에서 테스트 코드를 깔끔하게 만들기 위해 애플리케이션 코드의 구조를 개선하는 것을 보고 많은 것을 느꼈다. 사실 애플리케이션 협력 안에서 다형성이 필요하지 않은 부분은 굳이 인터페이스를 두지 않았는데, 테스트 코드를 다형적인 기능으로 포함시키면 설계를 유연하게 만드는 계기가 될 수 있다는 것을 보고 설계 개선에 대한 새로운 시각을 얻을 수 있었다. 안정적이고 쉽게 변경할 수 있는 코드를 위해 단위 테스트 자동화는 필수! 자바와 JUnit 테스트 만들기 | Notion Built with Notion, the all-in-one connected .. 2024. 1. 18.
실습으로 배우는 선착순 이벤트 시스템 분산 락에 이은 두번째 시리즈! 트래픽이 극단적으로 많은 상황에서 안정적인 시스템을 만드는 내용이다. 이전 강의에서는 동시에 접근하지 못하도록 분산 락을 구현했는데, 이번에는 데이터베이스 서버 접근의 동시성을 의도적으로 낮춰서 병목을 줄이고, 처리량을 늘리는 방법을 알아보았다. 데이터베이스 서버와 처리 서버 사이의 의존성을 의도적으로 낮추기 위해 카프카를 도입하고, 요구사항 특성 상 쿠폰의 중복 발급을 위해 Redis Set을 사용한 점이 인상적이다. 레디스는 정말 여러모로 활용할 기능이 많은 것 같다. 이래서 현업에서 레디스를 많이 쓰는구나..! 실습으로 배우는 선착순 이벤트 시스템 | Notion Built with Notion, the all-in-one connected workspace with.. 2024. 1. 18.