본문 바로가기

행위 돌아보기36

[2019] DDD Lite@Spring 동영상 시청 리뷰 DDD-Lite@Spring 세미나 내용이 유익하다고 판단되, 동영상을 보면서 정리한 내용입니다. 2번째 시청하면서, 정명주님이 생각하는 DDD에 대한 개념이 잘 녹아있고, 간결하게 DDD 에 대해서 설명해주셔서 정리하고자 합니다. 유지보수 사항에서 항상 개발자는 고통받습니다. 왜 그럴까요? 왜냐하면서, 애플리케이션이 엄청 복잡하기 때문입니다. 크게 2가지로 복잡합을 구분해보면 우리가 해결해야 할 문제 자체 우리가 사용하는 기술과 도구 위기가 어떻게 오는가? 빠르고 간단하게 일정 드리븐 개발을 하다보니까- 빠르고 간단하게 개발했는데, 요구사항이 변경되고 점점 복잡해지면서 빅뱅식 개편을 많이 하는데, 잘못된 레거시에 의존하기 때문에 이 순환이 반복됩니다. 원인은 빠르고 간단하게 맞지않는 접근법을 이용하다보.. 2021. 7. 18.
[책] 엘레강트 오브젝트(Elegant object) - 조영호 역 오랜만에 객체지향 프로그래밍에 대해서 당연시 여겼던 부분에 대해서 다시 한번 생각할 수 있게끔 도와준 책을 만났다. 읽고 생각하며, 직접 나의 생각을 적는 그 과정속에서, 이전에 내 몸에 내재화 되어있던 여러 개발 패턴들을 의심할 수 있었다. ‘getter, setter 메서드를 왜 써야 하는가?’, ‘C 언어에는 자료구조라고 선언할 수 있는 키워드가 있지만, 왜 자바는 없었을까?’ 이런 의구심 부터, ‘클래스 이름에 -er 이 붙은 객체들은 좋은 객체가 아니다.’ 라는 절로 여러 부분에서 생각할 수 있도록 만들어 준 책 이였다. 종종 저자는 말을 너무 강하게 해서 읽고 있는 내 생각마저도 휩쓸리는 경향이 있었지만,(러시아 사람들은 글을 강하게 쓴다고 한다.) 그러지 않기 위해서 남에게 나의 생각을 이야.. 2021. 2. 20.
[개발자의 글쓰기] 2장 개발 시간을 줄여주는 이름 짓기와 주석 쓰기 중요한 단어는 앞에 쓴다. // 안좋은 예 int totalVisitor int totalRegister int totalBuyer int totalSalesOfThisMonth int maxSizeOfWindow int numberOfTotalVIP int visitorTotal int registerTotal int buyerTotal int salesOfthisMonthTotal int windowSizeMax int vipCount 함수 이름 짓는 순서 함수는 시스템이 할 일을 나타내는 것이지 사용자가 할 일을 나타내는 것이 아니다. 따라서 함수의 주체, 즉, 주어도 없앤다. 좋은 이름의 기준, SMART 좋은 이름이 가진 5가지 특징 easy to Search 검색하기 쉽고 easy to Mix.. 2020. 12. 13.
[개발자의 글쓰기] 1장 개발자가 알아야 할 글쓰기 기본 01. 문장과 단락을 구조화하는 법 문자을 구조화하는 법 색상 RGB 값을 각각 사용하기 때문에 입력 데이터는 3차원 벡터다 > 입력데이터는 색상 RGB 값을 각각 사용하기 때문에 3차원 벡터다. > 입력데이터는 색상 RGB 값을 각각 사용한다. 그래서 입력데이터는 3차원 벡터다. > 입력 데이터는 3차원 벡터다. > 입력 데이터는 3차원 백터다. 색상 RGB 값을 각각 사용하기 때문이다. 문장을 쉽게 쓰기 위해서는, 간단한 문장 구조로 핵심을 만한 뒤, 필요에 따라 부가 설명을 하면 된다. 서술식, 개조식, 도식의 차이 서술식 '~다' 로 끝나는 완전한 문장으로 구성 된 글 개조식 '~했음, 종결어미' 로 끝내는 문장 도식 사물의 구조나 관계, 상태를 그림이나 서식으로 보여주는 것 개조식을 활용해 문장.. 2020. 12. 2.
[책] 도메인 주도 설계 철저 입문 - 나루세 마사노부 리뷰 아마도 올해 초부터였을까? Slipp 커뮤니티에서 사이드 프로젝트를 하기 위해 지인에서 Join을 부탁했을 때부터 도메인 주도 설계는 끊임없이 나의 꼬리표를 달게 되었습니다. 사이드프로젝트내에서 먼저 도메인 주도 설계론을 창시한 에릭 에반스의 책을 처음 접하게 되었습니다. 이 책을 읽으면서 느꼈던 점은 도메인 주도 설계라는 것은 서비스내에서 정말로 중요한데, 코드로서 이를 표현하는 방법은 무엇이 있을까- 어떻게 해야될까? 라는 고민이 있었습니다. 이 책을 어느 정도 읽었을 쯤, 그 다음 책으로 반 버논의 '도메인 주도 설계 구현' 를 읽기 시작했습니다. 제가 필요로 했던 드디어 코드로서 도메인 주도 설계를 설명해주면서 개념 하나하나를 이해해 나갔습니다. 그러나, 읽으면서도 정말 포기하고싶다는 생각을 10.. 2020. 10. 29.
'규칙 없음' No Rules Rules 책을 읽고 나서 "넷플릭스, 지구상 가장 빠르고 유연한 기업의 비밀" 이라는 부주제로, 저의 마음을 사로잡은 책 하나가 있습니다. 바로 넷플릭스의 CEO 리드 헤이스팅스가 작성한 규칙 없음 이라는 책입니다. 이 책을 읽으면서 느꼈던 첫번째는, 제 주변 환경을 돌아보게 만들었습니다. 더불어, 제가 있는 이 환경이 얼마나 근로자로 하여금 답답하게 만들고 있는지 여부를 판단할 수 있었습니다. Top-down 방식의 의사결정, 전자결재라는 것이 주는 통제, 휴가라는 것이 주는 통제, 관례라는 것을 따라야만 하는 현실. 차마 포스팅으로는 남기지 못하는 대외비 같은 이야기들... 이러한 환경을 탓하는 행위는, 잘못된 행위입니다. 그러나, 이 규칙없음 이라는 책을 통해 생각해볼 수 있는 거름을 만들어 준게 아닐까? 라는 생각이 듭니.. 2020. 10. 18.
[동영상 정리]의존성을 이용해 설계 진화시키기 - 조영호 님 의존성을 어떻게 관리하는가? 그것이 핵심☢️ 의존성의 정의란 무엇일까? A가 B에 의존할수록 위 그림과 같이 점선으로 그린다. 이 그림의 의미는 B가 변경될 때 A도 같이 변경 될 수 있다. 라는 것을 의미한다. 그러므로, B가 뭐가 됐던 A가 같이 변경 될 수 있음을 의미합니다. B클래스의 변경에 따라서 A에 영향을 줄수 또는 안줄 수도 있다. 클래스 의존성의 종류 패키지 의존성 패키지에 포함된 클래스 사이의 의존성 import에 다른 패키지의 이름이 있다면 디팬던시가 있다고 생각하면 된다. 설계 할 때 좋은 규칙이 몇가지 있다. 양방향일 경우, 싱크를 맞추는데- 비용이 많이 든다. 패키지 세계에 사이클이 돈다라는 것은 하나의 패키지라고 봐야 한다. 의존성을 가장 쉽게 이해할 수 있는 방법은 역시 코드.. 2020. 8. 21.
맛집 리스트 - 검색 맛집 리스트 (전부 모아서 다시 업로드) ; 제목별로 검색하면 빠르다. 1. 평양냉면 2. 메밀국수 (소바) 3. 막국수 4. 콩국수 5. 국밥, 해장국 6. 설렁탕 7. 감자탕 8. 순대 9. 닭볶음탕 10. 추어탕 11. 육개장 12. 대구탕 13. 김밥 14. 김치찌개 15. 부대찌개 16. 청국장 17. 된장 18. 간장게장 19. 삼계탕 20. 보쌈 21. 족발 22. 치킨 23. 돈까스 24. 함박 스테이크 25. 떡볶이 26. 라면 27. 라멘 28. 우동 29. 튀김 30. 순두부, 두부 31. 피자 32. 아이스크림, 젤라또 33. 갓포요리집 34. 죽 35. 덮밥, 백반, 벤또(도시락) 36. 꼬치구이, 로바다야끼 37. 냉동삼겹살 38. 기사식당 39. 스테이크, BBQ 40. 칼국수.. 2019. 7. 28.
함수형 사고 - [6] 전진하라. 함수형 언어의 디자인 패턴 함수형 언어계의 어떤 이들은 디자인 패턴이 개념 자체에 결함이 있기 때문에함수형 프로그래밍이 필요가 없다고 주장한다. 패턴의 좁은정의만 볼 때에는 일리가 있는 말이다. 함수형 프로그래밍에서는 전통적인 디자인 패턴들이 다음과 같이 세 가지로 나타난다. 패턴이 언어에 흡수된다. 패턴 해법이 합수형 패러다임에도 존재하지만, 구체적인 구현방식은 다르다. 해법이 다른 언어나 패러다임에 없는 기능으로 구현된다.(예를 들어 메타프로그래밍을 사용한 해법들은 깔므하고 멋있다. 이런 해법은 자바에서는 불가능하다.) 함수 수준의 재사용 합성(주어진 매개변수와 일급 함수들의 형태로 이루어진다.) 은 함수형 프로그래밍 라이브러리에서 재사용의 방식으로 자주 사용된다. 객체지향프로그래밍에서는 함수를 재사.. 2019. 7. 26.
함수형 사고 - [5] 진화하라. "100개의 함수를 하나의 자료구조에 적용하는 것이 10개의 함수를 10개의 자료구조를 적용하는 것보다 낫다." - 앨런 펄리스 객체지향적인 명령형 프로그래밍 언어에서 재사용의 단위는 클래스와 그것들이 주고받는 메시지이다. 이것들은 클래스도표로 표시된다. 1. 적은 수의 자료구조, 많은 연산자 - 복잡한 자료구조를 직접 만들어야 하는 객체지향에 비해, 함수형은 주요 자료구조(map, set, list)와 거기에 따른 최적화된 연산들을 선호. - 그래서 XML을 파싱 할 때도, 함수형프로그래밍은 자료구조를 따로 만들 필요가 없다. - 스칼라에서 크롤링하는 코드를 보면 신기할 따름 -PlayJson ) 2. 문제를 향하여 언어를 구부리기 대부분의 개발자들은 복잡한 비지니스 문제를 자바와 같은 언어로 번역하는.. 2019. 7. 26.
함수형 사고 - [4] 열심히보다는 현명하게 패러다임을 바꾸면 더 적은 노력으로 더 많은 일을 할 수 있는 득을 보게 된다. 함수형 프로그래밍에서 나타나는 많은 구조들이 그렇다. 흔히 볼 수 있는 문제들을 구현할 때 짜증나던 것들을 제거해준다. 이 장에서는 메모이제이션과 게으름 설명을 보자. 4.1 메모이제이션 메모이제이션은 다음과같은 상황에서 유용하다. 시간이 많이 걸리는 연산을 반복적으로 사용해야 한다는 가정 주어진 매개변수를 사용하여 연산을 할 때마다 그값을 매개변수를 키 값으로 하는 캐시에 저장한다. 후에 이 함수가 같은 매개변수로 호출되면 다시 연산하는 대신에 캐시의 값을 리턴한다. 함수 캐싱은 전형적인 컴퓨터과학의 트레이드오프이다. 이 방법은 좋은 성능을 위해서 메모리를 더 많이 사용한다. 캐싱 방법이 제대로 작동하려면 함수가 순수해야 .. 2019. 7. 26.
함수형 사고 - [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.
함수형 사고 - [2] 전환 함수형 코드를 작성하기 위해서는, 함수형 언어인 스칼라나 클로저로의 전환이 필요한 것이 아니라 문제에 접근하는 방식의 전환이 필요하다. 1. 일반적인 예로 말할 수 있는 것은 JVM 왜일까? 우리가 C로 개발할 때는 메모리관리에 신경을 썼었지만, 이제는 JVM, 즉 컴퓨터에게 위임했기 때문. 2. 명령형 처리 명령형 프로그래밍이란 상태를 변형하는 일련의 명령들로 구성된 프로그래밍 방식을 말한다. 전형적인 For루프가 명령형 프로그래밍의 훌룡한 예. 초기 상태를 설정하고, 되풀이할 때마다 일련의 명령을 실행. 명령형 프로그래밍과 함수형 프로그래밍의 차이는, 통상적인 문제와 그에 대한 명령형의 해답을 살펴보면된다. 어떤 이름 목록에서, 한 글자로 된 이름을 제외한 모든 이름을 대문자화해서 쉼표로 연결한 문자.. 2019. 7. 21.
함수형 사고 - [1] 왜 왜 우리는 객체지향에서 함수형 패러다임으로 전환된다고 생각할까? 패러다임의 전환 바로 밑에 예제를 보고 느껴보자. package com.nealford.ft.wordfreq; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; // BEGIN java_word_freq public class Words { private Set NON_WORDS = new HashSet() {{ add("the"); add("and"); add("of"); add("to"); add("a"); add("i"); add("it"); add("in"); add("or"); add("is"); add("d"); add("s"); .. 2019. 7. 18.
[북리뷰] 손에 잡히는 VIM 항상 과거를 돌아보라. 그러면 뭔가 배울 수 있을 것이다;. - 폴 새뮤얼슨 살펴볼 기능 명령어 파일 저장하기 :w 종료하기 :q 커서 이동 hjkl 복사 yy 붙이기 p 명령어 취소 u 범위 지정 v 다른 이름으로 저장하기 handlingvim.txt를 다를 이름으로 저장하기 :w hendlingvim2.txt 이렇게 하면 다른 이름으로 저장되고 디렉토리 까지 설정할 수 있음 일반 모드, 입력 모드, 명령행 모드 모드가 필요한 이유? 입력 모드와 일반 모드를 따로 둔 이유는, VIm을 개발할 당시에는 기능을 호출하는 데 메뉴 인터페이스를 사용할 수 없었기 때문에 명령어 설명 a,A a(append)는 현재 커서 위치에서 한 칸 뒤로 이동한 후 입력 모드로 전환됩니다. A는 현재 끝으로 이동한 후, 입력.. 2019. 7. 18.
[책 리뷰]실용주의 프로그래머 실용주의 프로그래머 "개발자를 위한 정석적인 자기계발서" 여전히- 현실세계에서 개발자같은 개발자를 찾기란 어려운 듯하다. 내가 말하는 개발자같은 개발자는 비속어로 "뼈발자" 이런 뜻으로 말하고 싶지는 않지만 어느정도 비중을 차지한다고 생각한다. 이 책이 개발자처럼 행동하는데 큰 도움을 줄 수 있다고 믿는다. 이 책에서는 많은 팁을 'tips: nn'으로 개발자는 이런생각을 하는게 좋다 라는 내용을 알려준다. 관련 내용을 살펴보자. 1. 자신의 기술(craft)에 관심과 애정을 가져라 아무리 소프트웨어 개발을 잘 하려는 관심과 애정이 없다면, 그 일을 하는 것에 아무 의미가 없다고 생각한다. 2. 자신의 일에 대해 생각하면서 일하라! 어떤 일을 하든지 자기가 무엇을 하고 있는지 생각하면서 일해라- 모든 개.. 2019. 7. 18.