본문 바로가기

개발17

개발자는 '다형성을 활용한 리팩토링'을 수련해야 한다. 앞선 포스터에서 Interface Segregation Principle (인터페이스 분리 원칙) 에 대해서 이야기했다. 이제 본격적으로 인터페이스 분리 원칙을 함으로써 얻을 수 있는 실용적인 이익에 대해서 이야기해보려 한다. 또한, 인터페이스 분리 원칙과 테스트 코드를 함께 작성함으로써 다형성을 활용할 수 있는 냄새를 맡을 수 있었다. 같이 한번 살펴보자. 아래 테스트 코드에서는 메소드 하나가 너무 많은 역할을 한다는 냄새를 맡을 수 있다. @Test void execute_with_single_notificationTarget() { given(targetProvider.getTargets()).willReturn(List.of(target1)); given(factory.findBy(any()))... 2022. 2. 27.
트레바리 Notifier 프로젝트 회고하기 [Index] 나는 무엇을 개선했는가? 어떤 비지니스 이펙트를 일으켰는가? 새롭게 배울 수 있었던 것은 무엇인가? 아쉬웠던 부분은 어떤 부분인가? 다음 프로젝트에 개선해야될 것은 무엇인가? ✅ 나는 무엇을 개선했는가? 📃 문제점 1. 경직된 소프트웨어 다른 규칙의 SMS 규칙은 불가하다. 문자 발송시기 조정이 불가하다. 일시적으로 SMS 규칙을 중지하기 원한다. 2. 불명확한 시스템 Google Sheet 에서 문자 템플릿을 관리하고 있지만, Fresh 한 상태가 아니다. 이또한 코드로 연결되어 있지 않다. 매번 Senders 웹페이지에 접속하여 발신 내역을 조회하고 / 인증문자을 전송을 확인한다. 3. 잦은 버그 AWS에 의존적인 부분에 대해서 전체 테스트가 불가능하기 때문에 배포하고 나서 기도한다. .. 2022. 2. 20.
놈이 기다리네요. 끈덕이게. - '아이디어 불패의 법칙' 놈이 기다리네요. 끈덕이게. 틀림없이 금세 먹잇감을 찾아낼 겁니다. 늘 그래왔으니까. 저 이빨을, 저 촉수를 누구도 벗어나지 못합니다. 이렇든 저렇든 실패라는 야수가 우리 모두를 덮칠 겁니다. 제대로 만들기 전에, '될 놈'을 만들어라 트레바리 스타텁-시리즈A 3번째 모임의 책으로 읽게 되었다. 마치, 학교에서 주최하는 특강 세미나에 앉아 "너희가 만약 사업을 해야 한다면?" 이라는 주제의 강의를 듣고온 것같은 착각이 드는 책이였다. 이 책에서 말하고자 하는 것은 글의 마지막 부분에 요약본으로 남기며, 이 책을 읽으며 흥미로웠던 점에 대해서 먼저 적어보려 한다. ✅ 우리가 자주 활용되는 프로토타입과 프리토타입은 무엇이 달랐을까? 연구소에 근무하던 시절 Proof of Concept(PoC)라는 명목하게 .. 2022. 1. 2.
한번에 단계를 뛰어넘어 버리는 비약적인 코드를 피하자. SqsNameMapping 를 구현하는 과정에서 비악이 일어나는 코드를 작성하게 되었습니다. 비약이란? 비약은 논리나 사고방식이 '중간과정을 건너 뛰었다'는 뜻으로, 상대방의 논지전개에 있어 허구성을 지적하거나, 실현가능성이 희박한 내용을 과장하는것을 지적하는 말 입니다. 아래 코드는 2단계를 뛰어 넘어서는 비약된 코드이다. @Component @ConfigurationProperties(prefix = "aws.xxx") public class XxxNameMapping implements Mapping { private Map queue; @Override public String get(String type) { return queue.get(type); } } 왜일까? 1단계 XxxNameMapp.. 2021. 10. 29.
메세지와 이벤트의 차이점은 무엇인가? 들어가기 트레바리에서는 도메인주도설계를 실천하고 있습니다. 도메인주도설계라는 것은 말 그대로 도메인을 중심으로 복수의 도메인이 책임,역할, 협력을 할 수 있도록 개발하는 것을 말합니다. 실제로 동작되는 코드로서 도메인주도설계를 실천하며 우리는 메세지와 이벤트라는 용어를 자주사용했습니다. 이미 횟수로 귀로 많이 들어왔지만- 깊이있는 고찰을 하지 못했습니다. 헷갈릴 수 있는 두 용어에 대한 이해를 정리해보려 합니다. 본문 도메인주도설계는 잠시 잊어버리고 메세지란 무엇일까? 흔히 우리는 '메세지를 전달한다' 라고 말합니다. 이 말은 즉슨, A → B 에게 의미있는 내용을 전달하기 위한 행위라 볼 수 있습니다. 그럼 도메인주도설계에서는 어떤 의미를 가질까요? 여기서 USER, MEMBER 는 AGGREGATES.. 2021. 10. 23.
[우아한테크코스Pro]인수테스트 주도 개발[3/9] 인수테스트 주도 개발이란 무엇인가? 개인적인 생각으로서, 설명할 때테스트 주도 개발(TDD) 의 단점을 해소시켜주는 개발론 중 하나라고 말씀드리고 싶습니다. TDD 라는 것은 실패한 테스트케이스를 작성하고, 이를 통과시키면서 개발해나가는 방법을 말합니다. TDD 단점으로 생각해보면, 실패한 테스트라는 것을 무엇을 어디에서부터 어떻게 테스트를 해야될지? 판단하기 어렵다는 부분에 있습니다. 이런 문제를 해소시켜 주는 개발 방법론으로서 인수주도 테스트 개발 이라는 것이 나옵니다. 어떻게 이런 부분을 도와줄수 있을까요? 이부분을 학습하기 위해서 우아한테크캠프pro 에서는 3주차 과제로 인수 테스트 주도 개발을 체험해볼 수 있는 시간을 가졌습니다. 이미 어느정도 작성된 코드를 Fork 받아, 인수테스트 를 작성하.. 2021. 6. 15.
[책] 도메인 주도 설계 철저 입문 - 나루세 마사노부 리뷰 아마도 올해 초부터였을까? Slipp 커뮤니티에서 사이드 프로젝트를 하기 위해 지인에서 Join을 부탁했을 때부터 도메인 주도 설계는 끊임없이 나의 꼬리표를 달게 되었습니다. 사이드프로젝트내에서 먼저 도메인 주도 설계론을 창시한 에릭 에반스의 책을 처음 접하게 되었습니다. 이 책을 읽으면서 느꼈던 점은 도메인 주도 설계라는 것은 서비스내에서 정말로 중요한데, 코드로서 이를 표현하는 방법은 무엇이 있을까- 어떻게 해야될까? 라는 고민이 있었습니다. 이 책을 어느 정도 읽었을 쯤, 그 다음 책으로 반 버논의 '도메인 주도 설계 구현' 를 읽기 시작했습니다. 제가 필요로 했던 드디어 코드로서 도메인 주도 설계를 설명해주면서 개념 하나하나를 이해해 나갔습니다. 그러나, 읽으면서도 정말 포기하고싶다는 생각을 10.. 2020. 10. 29.
2. Swagger을 소개합니다. 들어가기 이전에 API First Design 설계에 대한 내용을 다뤄봤습니다. API First Design 을 실천할 수 있는 도구들은 다양하게 있습니다. 그 중에서 저는 오픈소스 Swagger 를 선택했습니다. 그렇다면 Swagger 가 무엇인지 간단하게 알아볼 필요가 있을 것 같아, 이렇게 소개하는 포스팅을 합니다. Swagger의 메인 페이지를 들어가면, 여기서 우리는 Swagger의 철학을 이해할 수 있습니다. Swagger의 오픈 소스를 사용해, 사용자, 팀 및 기업을 위한 API 개발을 단순화하세요. 메인 페이지에 나타낸만큼 Swagger 는 API 를 설계하기 위한 다양한 도구를 제공해줍니다. 그 도구들은 아래와 같습니다. 여기서 SwaggerHub는 클라우드 상에 아래 Swagger E.. 2020. 9. 30.
나는 AssertJ와 같이 'Fluent API' 유사 라이브러리 만들기 를 왜 실패했을까? 들어가기 지난 시간에 JCenter() 에 Assertion 라이브러리를 올리는 행위를 했었습니다. JCenter()에 올린 Assertion 을 'fluent' API와 같은 AssertJ 라이브러리를 컨셉으로 잡고, 만들기를 시도했습니다. 결과적으로는, 사실 실패했습니다. 만들수 있지만, 그 코드량이 간단하지 않아서 문제였습니다. 그 과정중에 겪었던 내용에 대해서 공유하는 시간을 갖도록 하겠습니다. AssertJ 란 무엇인가? joel-costigliola.github.io/assertj/ AssertJ / Fluent assertions for java AssertJ Fluent assertions for java joel-costigliola.github.io Fluent API란 쉽게 생각하면,.. 2020. 9. 19.
PayrollSystem 프로젝트에서 디자인 패턴은 어떻게 사용되었는가?(feat. 클린 소프트웨어) 들어가기 '클린 소프트웨어 - 로버트 마틴 저자' 에서 payroll 아키텍처 코드를 보고... Slipp 스터디에서 디자인패턴에 대한 학습을 하면서, 클린 소프트웨어 책을 학습하고 있습니다. (이 책의 좋은 점은 따로 또 포스팅하겠습니다.) 책의 일부분으로 로버트마틴이 PayrollSystem 코드가 나오는데, 그 부분을 보고 이해한 부분을 적어볼까합니다. 어떻게 만들어졌을가? 이 책에서는 총 5가지의 명세가 나오고 이를 해결하기 위해 다음과 같은 패턴을 활용합니다. 1. 커맨드 패턴와 액티브 오브젝트 패턴 2. 템플릿 메서드와 스트레티지 패턴 3. 퍼사드 패턴 4. 싱글톤과 모노스테이트 패턴 5. 널 오브젝트 패턴 코드에서 어떻게 사용되고 있는지 확인해봅시다. 각 패턴에 대한 자세한 설명은 스킵하고,.. 2020. 9. 9.
패키지 설계의 원칙 이란 무엇일까? Photo by Scott Webb on Unsplash 클린 아키텍쳐의 Ch20 - 패키지 설계의 원칙을 내용을 읽고, 저의 주관과 합쳐 아래 내용을 적었습니다. 혹시라도 잘못된 부분, 잘못 이해된 부분에 대해서는 댓글 남겨주시면 반영하도록 하겠습니다. 들어가기 우리가 객체지향 프로그래밍을 할 때 흔히 SOLID 원칙이라 불리는 내용이 있습니다. SOLID 원칙을 잘 지켜내면서, 코딩을 한다라면- 그 코드는 흔히 질좋은 코드다. 라고 이야기할 수 있습니다. 마찬가지로, 패키지를 구성하는 방법에서도 SOLID 와 같은 원칙이 존재한다고 생각했습니다. 그런 부분이 궁금해고, 그 부분을 해결할 수 있는 요소로서 로버트 마틴의 클린 아키텍처 책을 살펴보게 되었습니다. 저와 같은 고민을 가진 사람들에게 조금이나.. 2020. 9. 5.
코드 리뷰를 왜 해야될까? 백명석님 유튜브 강의을 듣고 정리한 내용입니다. www.youtube.com/watch?v=FJNV_qoRRks 코드리뷰에 대해 왜? 코드리뷰를 해야되나??? 시장과 비즈니스의 요구사항 개발 리소스 증가 추이 동일 기간별 개발 생산성 릴리즈가 증가함에 따른 개발 비용 Release별 생산성 Architecture란? SW의 속성 Software Craftmanship 릴리즈에 따라서 스탭들이 커진다. 릴리즈가 증가함에 따른 개발 비용 첫번째 릴리즈의 40배 Release별 생산성 2개의 중복까지는 괜찮다? - 켄트백 Big Ball of Mud 뚜렷한 아키텍처없이 구현된 시스템 미는건지, 끄는건지? 프로덕션 코드와 테스트 코드 중 어느것이 망가지는 것이 좋은가? 테스트 코드가 살아남는게 좋다. 같은 설계.. 2020. 8. 11.
코딩은 어떻게 해야하는가? - 1 항상 피플웨어라는 책을 교보문고에서 찾아본다면, 그 책은 개발서적 가운데에 꽂혀있다. 왜일까? 왜 '피플웨어' 책은 개발서적 사이에서 '나를 읽어주십시오~' 하는걸까? 실제 그책은 경영/관리 주제로 분리되어 있음에도 불구하고? 그 답은 내마음대로 정의내려보고싶다. 심지어 '피플웨어' 책은 10년전에 우리나라가 개발은 3D라 외치던 시절에 출간되었다. 왜일까? 그 당시 프로젝트 하나라도 더 빨리 출시하기 위해 사람을 갈아?서 마셨다는 시절에 미국에서는, 이미 피플웨어라는 책이 출시되 많은 인기가 있었다. 어쩌면, 사람이 우선순위라는 사실에 대해서 인지하고 있었을 수도 있다. "인간 관계는 복잡할 뿐만 아니라 그 파급 효과가 절대로 깔끔하고 명확하지 않지만 업무의 어느 측면보다 더 중요하다." - 피플웨어 .. 2020. 7. 25.
왜 세마포어(Semaphore)가 생겼나? 왜 세미포어가 생겼나? 프로세스 간 메시지를 전송하거나, 공유메모리를 통해 특정 데이터를 공유하게 되는 경우 문제가 발생할 수 있습니다. 즉, 공유된 자원에 여러 개의 프로세스가 동시에 접근하면서 문제가 발생하는 것으로써 공유된 자원 속 하나의 데이터는 한 번에 하나의 프로세스만 접근할 수 있도록 제한해 두어야 하기 때문에, 이를 위하여 고안된 것이 바로 Semaphore 입니다. Cf) 세마포어와 뮤텍스의 차이는? 세마포어는 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것. 뮤텍스는 공유된 자원의 데이터를 한 쓰레드가 접근하는 것을 막는 것. 컴퓨터가 여러 프로그램을 동시에 수행하는 다중 프로그래밍 시스템에서는 프로세스들간의 상호배제와 동기화를 위한 기본적인 연산이 필요하게 되고 세마포어.. 2019. 7. 21.
모니터란 무엇인가? 자바 모니터 자바 스레드 동기화 모델은 "모니터"라는 개념을 적용하고 있다. 모니터에 대해서 먼저 간단하게 살펴보고 자바 동기화에 대해 상세하게 살펴보자. Monitor(모니터)의 개념 하나의 데이터(객체)마다 하나의 모니터를 결합할 수 있으며, 모니터는 그것이 결합된 데이터(객체)가 동시에 두개 이상 의 스레드에 의해 접근 할 수 없도록 막는 잠금(lock)기능을 제공함으로써 동기화를 수행한다는 것이 주된 내용이다. 즉, 데이터(객체)에 모니터를 결합하면 하나의 스레드가 그 데이터를 사용하는 동안에는 다른 스레드들이 그 데이터를 사용할 수 없게 된다. 자바에서는 synchronized 메소드가 선언된 객체와 synchronized 블럭에 의해 동기화되는 모든 객체에 고유한 모니터가 결합이 되어 동기화 .. 2019. 7. 21.
함수형 사고 - [3] 양도하라. 반복처리에서 고계함수로- 클로저란 함수의 예로 표현 def Closure makeCounter(){ def local_variable = 0 return{return local_variable += 1} } c1 = makeCounter() c1() c1() c1() c2 = makeCounter() printIn "C1 = ${c1()}, C2 = ${c2()}" //C1 = 4, C2 = 1 만약 이 부분을 자바로 짠다면 어떻게 될까? import java.util.List; import java.util.ArrayList; // BEGIN counter_demo class Counter { public int varField; Counter(int var) { varField = var; } pub.. 2019. 7. 21.
[책 리뷰]실용주의 프로그래머 실용주의 프로그래머 "개발자를 위한 정석적인 자기계발서" 여전히- 현실세계에서 개발자같은 개발자를 찾기란 어려운 듯하다. 내가 말하는 개발자같은 개발자는 비속어로 "뼈발자" 이런 뜻으로 말하고 싶지는 않지만 어느정도 비중을 차지한다고 생각한다. 이 책이 개발자처럼 행동하는데 큰 도움을 줄 수 있다고 믿는다. 이 책에서는 많은 팁을 'tips: nn'으로 개발자는 이런생각을 하는게 좋다 라는 내용을 알려준다. 관련 내용을 살펴보자. 1. 자신의 기술(craft)에 관심과 애정을 가져라 아무리 소프트웨어 개발을 잘 하려는 관심과 애정이 없다면, 그 일을 하는 것에 아무 의미가 없다고 생각한다. 2. 자신의 일에 대해 생각하면서 일하라! 어떤 일을 하든지 자기가 무엇을 하고 있는지 생각하면서 일해라- 모든 개.. 2019. 7. 18.