개발자
안녕하세요 선생님들 현업에서는 정말 아무 생각없이 사용하고 있는 개발 방식이었는데 클린 코드라는 책을 접하면서 고민이 되는 부분이 하나 있습니다. SpringBoot ServiceImpl 구현 부분에서 만약 로그인 API를 개발한다는 가정하에, 로그인 API 에는 수많은 기능들이 포함될 수 있습니다.(유효성 검증, 비밀번호 5회 연속 시 잠금, 권한에 따른 페이지 이동 기능 등등) 하지만 클린 코드의 원칙 상 '되도록 하나의 메소드는 하나의 기능만을 포함한다.' 라는 원칙에 위배되기 때문에 각각의 기능을 분리하여 작성하는 것이 맞을듯 합니다. 그러나 각각의 수많은 부가기능(이 될수도 있는)들을 만들면 인터페이스와 클래스의 개수도 그만큼 늘어나게 되고 개발에 소요되는 시간도 늘어납니다. 실제로 제가 있었던 SI회사에서는 하나의 큰 기능(로그인 API) 자체를 기준으로 메소드를 만들고 부가 기능들을 모두 하나로 구현하였습니다. SI 특성 상 마감시간 내에 빨리 완성시켜주고 빠지면 땡이기 때문에 이런 것이라 생각되는데 만약 시간적인 압박이 있는 SI개발에서 두 부분중 어떤 원칙을 지키는 것이 효율적인지에 대한 고민이 되는데 길을 좀 알려주시면 감사드리겠습니다.
답변 1
안녕하세요 ! 뛰어난 분들이 많은 커리어리에서 제가 감히 말하기 조심스럽지만, 제 개인적인 생각을 말해볼게요 ! 답을 A 또는 B라고 말하기는 애매한 주제인 것 같아, 단일 책임 원칙에 가깝게 구현하기 위해 최대한 노력하자 가 베스트인 것 같습니다. '시간적인 압박이 있는' 이 부분 때문입니다. 결국 저희는 공부를 하기 위해 회사를 온 게 아니라 일을 수행하기 위해 회사를 왔기 때문이죠 저도 이펙티브 자바라는 책을 읽고 있고, 개발을 할 때 최대한 이펙티브 자바가 말하는 지향점을 따르고 지양점은 멀리하려고 합니다. 근데 사실 그게 일하면서 쉽지 않더라고요. 왜냐하면 우리는 모두 시간이 부족하잖아요. 🥲 그래도 저는 실제 구현하지 않더라도 고민을 하고 또는 GPT를 통해 최소한의 시간으로 스스로 고민한 것에 대한 예제 코드라도 뽑아보면서 최대한 이상점에 가까워지기 위해 노력하는 거 같아요
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 05월 13일
"클린 코드"라는 원칙과 실제 업무에서의 요구사항 간의 균형을 찾는 것은 언제나 고민되는 부분입니다. 여기에 대한 최선의 답은 "상황에 따라 다르다" 일 수 있습니다. 결국, 클린 코드를 지향하는 목적은 유지보수성과 가독성을 높이기 위함입니다. 하지만 기능 분리가 개발시간을 많이 소요하게 만들고, 더 많은 리소스를 필요로 하게 만들 경우, 특히 마감 시한이 있는 프로젝트의 경우에는 이런 접근법이 반드시 적합하지 않을 수 있습니다. 그러나 일반적으로 가장 좋은 접근 방식은 중간 길을 찾는 것입니다. 가능한 한 각 기능을 분리하고 테스트 가능하게 만들되, 메소드와 클래스가 비효율적으로 많아지거나 복잡해질 정도로 과도하게 나누려고 시도하지 않는 것입니다. 예를 들어 로그인 API를 개발하는 경우, 유효성 검증, 5회 실패 잠금 등 각각의 기능에 대해 별도의 메소드를 구현할 수 있으며, 이 메소드들은 로그인 프로세스를 처리하는 더 큰 메소드에서 호출될 수 있습니다. 또한 코드 리팩토링을 계획에 포함시켜서 초기 버전의 코드가 완벽하게 클린하지 않더라도, 이후에 개선할 기회를 만드는 것도 중요합니다. 결국 모든 것은 균형입니다. 클린코드 원칙을 지키려고 애쓰되, 때로는 개발에서 실용주의가 필요할 때도 있다는 점을 기억하는 것이 중요합니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!