본문 바로가기

전체273

TDD로 XUnit 만들어 내기 - 1 Java 로 XUnit 프레임워크를 잘 만들수 있을지 모르겠습니다. 아직까지 TDD에 대한 자신감이 붙지 않았다는 증거겠죠? 천천히 수련해봅시다. youtube에 토비님이 Java로 만든 XUnit 이 있지만, 나 스스로 천천히 수련해봅시다. 먼저 요구사항을 나열하면 아래와 같습니다. 1. 테스트 메소드 실행 2. SetUp 메서드 실행 3. TearDown 메서드 실행 4. 테스트 결과 수집 ▶Intellij Test 실패 발생시 No tests found for given includes 이 발생할 경우 @Test public void aaaaa() throws Exception { WasRun wasRun = new WasRun(); assertFalse(wasRun.isRun); wasRun.ru.. 2021. 2. 25.
[책] 엘레강트 오브젝트(Elegant object) - 조영호 역 오랜만에 객체지향 프로그래밍에 대해서 당연시 여겼던 부분에 대해서 다시 한번 생각할 수 있게끔 도와준 책을 만났다. 읽고 생각하며, 직접 나의 생각을 적는 그 과정속에서, 이전에 내 몸에 내재화 되어있던 여러 개발 패턴들을 의심할 수 있었다. ‘getter, setter 메서드를 왜 써야 하는가?’, ‘C 언어에는 자료구조라고 선언할 수 있는 키워드가 있지만, 왜 자바는 없었을까?’ 이런 의구심 부터, ‘클래스 이름에 -er 이 붙은 객체들은 좋은 객체가 아니다.’ 라는 절로 여러 부분에서 생각할 수 있도록 만들어 준 책 이였다. 종종 저자는 말을 너무 강하게 해서 읽고 있는 내 생각마저도 휩쓸리는 경향이 있었지만,(러시아 사람들은 글을 강하게 쓴다고 한다.) 그러지 않기 위해서 남에게 나의 생각을 이야.. 2021. 2. 20.
동시성에 대해서 생각해보자. 하나의 자원에 여러 프로세스 또는 스레드가 사용하려고 할 때. 사용되는 영역을 임계영역이라 하고, 자원을 점유하기 위해 여러 동시성제어를 할 수 있는 도구를 사용한다. 그럼 여러 동시성제어를 할 수 있는 도구란 무엇을 말하는가? 개념적으로는 뮤텍스, 세마포어, 모니터 가 있을 것이고 실제 코드는 `java.util.concurrent` 패키지에 담겨있다. 그 외 실행자 프레임워크, 동기화 장치(synchronizer) 등이 존재합니다. Java에서는 실행자 프레임워크를 통해서 작업하길 권고하고 있다. [이펙티브 자바 Item81] 그 이유는 위에서 언급한 뮤텍스, 세마포어, 모니터를 조작하기 위해서 wait, notify와 같은 코드를 작성해 동시성을 제어해야 하는데, 이때 복잡성이 더 커지기 때문이다... 2021. 2. 9.
List, Dictionary 활용 잘하기 파이썬은 자바와 달리 유연한 개발을 할수 있게 해준다. 대표적으로 List의 슬라이싱, collections 패키지의 depue, defaultdict, Counter 등. 유연한 개발을 하기 위한 도구를 학습을 해보자. 리스트 아래와 같은 리스트를 선언할 수 있다. a = list() len(a) - 전체 요소 개수 리턴 a[i] - 인덱스 i의 요소 a[i:j] - i부터 j까지 슬라이스의 길이만큼 k개의 요소 가져온다. **이때 주의해야 될 점은 i 인덱스부터 j-1 까지의 인덱스를 가져온다. elem in a - elem 요소가 존재하는지 확인한다. 처음부터 순차 탐색 a.count(elem) - elem 요소의 개수를 리턴 a.index(elem) - elem 요소의 인덱스를 리턴 a.appen.. 2021. 2. 5.
[intellij] 동일한 단어를 Multi-line 으로 블록하는 방법 아래 내용은 Mac OS 기준의 단축키로 설명합니다. '⇧ + F6' 이렇게 하면 동일한 단어에 대해서 아래와 같은 창이 뜬다. 그러나, 만약에 위 화면에서 4개의 단어 중 2개만 Multiline으로 하고 싶은 경우 또는, 팝업 창을 띄우지 않고 할 수 있는 방법이 있다. 만약 동일단어 4개 중 2개의 단어만 수정하고 싶은 경우 "^(options) + g" 이렇게 같이 누를 경우 누르는 버튼 횟수에 의해서 알 수 있다. 만약 동일단어 4개를 한번에 팝업창 없이 수정하고 싶은 경우 "^(options)+⌘(command)+g" 버튼을 통해 변경할 수 있다. [참고자료] www.jetbrains.com/help/rider/Multicursor.html?keymap=secondary_intellij_osx.. 2021. 2. 5.
상태 머신 다이어그램은 무엇일까? 상태 머신은 전이 트리거 및 제약 사항에 따라 동작을 분류하고 상태 간을 이동하는 방법을 보여준다. 이번에 사이드 프로젝트를 하면서 상태 머신 다이어그램을 그리는 도메인이 존재했다. 상품을 보여주는 Goods, Product와 달리 Goods는 소비자 관점에서 보여지는 물건으로서 노출될 수도 있고 노출되지 않을수도 있는데, 이 때 상태값에 따라 이동하는 상태머신 다이어그램을 만들어 보고 싶었다. 문제의 시작 처음에 상태머신 다이어그램을 그려보려고 했을 때 나의 시도는 아래와 같았다. 물건 생성 > 판매중 > 판매 중지 > 판매 종료 > 다시 판매 중 > … 이 얼마나 단조롭고 심플한가? 저 텍스트에서 발견할 수 있었던 나의 모습은 머릿속에 펜을 놓고 화살표를 그려보는 것이였다. 그러나, 정돈되지 않는 느.. 2021. 1. 30.
IntelliJ 에서 정규표현식으로 글자 교체하기 (- +\[ \] +[0-9]{1,}\.) $1 $1, $2 이런식으로 교체하려는 문자의 텍스트를 가져올 수 있다. 2021. 1. 28.
문제의식 갖기 재택근무...라고 말하고 재택지옥이라 말한다. 재택근무를 시작한지 이제 약 2달이 되어간다. 처음에는 출퇴근 시간을 줄여, 시간을 효율적으로 쓸 수 있다는 나의 생각과는 달리- 더 관리해야만 하는 것들이 늘어나고, 출퇴근을 했었더라면 하지 않았을 일들이 발생했다. 그 행동의 원인은 내가 아닌 남에게 찾기 일쑤였고, 온전히 결과를 받아들이기가 쉽지 않다. 또한, 무엇을 해야한다. 라는 목표의식이 부족했던 탓일까? 해야만 하는 것들은 늘어나지만, 정작 내가 움직이는 것은 더욱 없었다. 재택근무를 실시하면서 가장 힘들었던 부분으로 아래 4가지가 제일 컸다. 1. 시간 관리 2. 근무 환경 조성하기 3. 업무 협력하기 이 4가지가 가장 힘든 부분이지 않을까 싶다. "않을까 싶다." 않을까 싶다 라고 말하는 이유.. 2021. 1. 28.
Gradlew Command 살펴보기 ./gradlew > Task :help Welcome to Gradle 6.8. To run a build, run gradlew ... To see a list of available tasks, run gradlew tasks To see a list of command-line options, run gradlew --help To see more detail about a task, run gradlew help --task For troubleshooting, visit https://help.gradle.org BUILD SUCCESSFUL in 521ms 1 actionable task: 1 executed 매개변수가 없이 할경우 위와 같은 결과 나옴 ./gradlew tasks ❯ ./g.. 2021. 1. 27.
Gradle 버전 변경하기 이번에 Gradle에 대해서 버전을 변경하는 방법을 알아보자. Gradle을 변경하게 된 이유는, 사용하던 Gradle 6.6.1 버전을 사용할 경우 아래와 같은 문구가 build할 때 계속 발생하기 때문이였습니다. ./gradlew: line 39: cd: "./: No such file or directory Gradle 버전 마다 위와같은 에러가 발생하는 경우가 있었습니다. 이 때는 Gradle 버전을 변경하면 이 문제를 해결할 수 있습니다. Gradle에 대해서 잘 모를 때는 gradle-wrapper.properties에 있는 값을 수정했었습니다. distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=ht.. 2021. 1. 27.
AGGREGATE가 존재하는 이유? 도메인과 도메인간에 연관관게를 최소주의 관점에서 설계하면 탐색이 단순해지고 폭발적으로 증가하는 관계를 제한하는 데 어느 정도 도움되지만 대부분의 업무 도메인은 상호 연관의 정도가 높아 결국 객체 참조를 통해 얽히고 설킨 관계망을 추적해야 한다. 그럼 얽히고 설킨 관계망을 어떻게 추적할 것인가? 또한, 모델 내에서 복잡한 연관관계를 맺는 객체를 대상으로 변경의 일관성을 보장하기란 쉽지 않다. 그 까닭은 단지 개발 객체만이 아닌 서로 밀접한 관계에 있는 객체 집합에도 불변식이 적용돼야 하기 때문이다. 그렇다고 변경의 일관성을 보장하고자 신중 장금 기법을 쓴다면 다수의 사용자가 서로 부적절하게 간섭해서 시스템이 사용할 수 없는 상태가 될 것이다. 그럼 우리는 도메인과 도메인간의 또는 모델 내에서 어떻게 관리할.. 2021. 1. 24.
JPA 연관 관계를 명시(사용)하는 이유는 무엇일까? 이 글을 작성하기 앞서, 절대 이 글은 JPA가 RDBS와의 패러다임 불일치를 해결하는 좋은 도구라는 것을 인지하고 있으며, 아래 글을 앞서 언급한 내용을 말하고자 작성한 것이 아니기 때문에 이 점 유의부탁드립니다. 아래 내용은 어디까지나 제 의견일 뿐이고, 맞지 않을 수도 있습니다. 스프링 부트를 활용하는 프로젝트에서 대부분 우리는 ORM으로 JPA를 사용합니다. 왜 그럴까요? 저같은 경우 인프런의 김영한님의 강의를 들으면서 JPA는 RDMS와 객체지향의 패러다임 불일치를 해결해주는 좋은 도구라는 것을 시작으로 JPA를 학습해왔습니다. 또한 개발 트랜드 라는 것이 한 몫했던건 아니였을까 싶기도 합니다. 아마도 앞서 말한 개발 트랜드는 아래와 같은 그래프를 말하는 거겠죠? 이런 행위가 혹시 귀찮다고 여기.. 2021. 1. 16.
스프링이란 무엇인가? 아래 내용은 토비의 스프링을 읽으며, 일부 내용을 발췌한 것임을 밝힙니다. 스프링이란 무엇인가? 여전히 '스프링을 사용하는 이유가 무엇일까?' 이 질문에 대해서 여타 다른 프레임워크에 반해 도드라지는 특징을 찾지 못했던 것 같다. 물론 IoC/DI 의 강력함으로 타 프레임워크보다 강점으로 둘 수 있지만, 그보다 더 다양한 관점에서 말할 수는 없을까? 가장 쉽게 알려진 정의는 스프링은 아래와 같다. "자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크" 그럼 '애플리케이션 프레임워크'는 무엇인가? 특정 계층이나 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크, 애플리케이션 개발의 전 과정을 빠르고 편리하게 효율적으로 진행하는 데 일차적인 목.. 2021. 1. 6.
예외를 처리하는 Best Practice는 무엇일까?(with. 토비 스프링, 이펙티브 자바) 들어가기 예외를 어떻게 하면 우아하게 처리할 수 있을까? 위 질문의 답을 찾기 위해- 이제부터 토비 스프링의 책 내용과 이펙티브 자바의 내용을 소개하고자 한다. 예외 블랙홀 예외를 잡고 아무 행위도 하지 않는다. 이것은 굉장히 위험한 행위이다. 이런 코드도 마찬가지로 위험한 코드이다 그렇다면? 어떻게 해야될까? 예외를 처리할 때는 모든 예외는 적절하게 복구되든지 아니면 작업을 중단시키고 운영자 또는 개발자에게 분명하게 통보돼야 한다. 또한 Throws 는 무의하고 무책임하다. 바로 아래와 같은 코드를 말한다. 위 두 가지 나쁜 습관은 어떤 경우에도 용납하지 않아야 한다. Item77. 예외를 무시하지 말라. - 이펙티브 자바 왜 우리는 예외를 명시하는 이유가 무엇인가? API 설계자에게 메서드 선언에 예.. 2021. 1. 4.
테스트 더블을 강력한 위력을 이해해보자. 아래 내용은 Effective Unit Testing - 라쎼 코스켈라 에서 발췌한 내용으로 이루어져 있습니다. 0. 들어가기 Stub과 Dummy는 왜 태어났을까? 이 둘의 처음 등장된 가장 큰 이유는 제품에 다른 제품이 준비되기 전까지 대신 사용할 용품이 필요했기 때문이다. 그러나 오늘날, Stub과 Dummy는 처음 나왔던 목적보다, 테스트 추종자에 의해 쓰음새가 다양해졌다. 다양한 테스트 전용 장치가 만들어지면서, 테스트 대상 코드를 격리 속도 개선 예측 불가능한 요소 제거 특수한 상을 시뮬레이션 감춰진 정보를 얻어내는 용도 이같이 목적은 비슷하면서도 다른 객체를 사용하는데 그 전부를 테스트 더블이라고 한다. 그럼 테스트 더블은 우리에게 어떤 득이 있을까? 1. 테스트 더블의 목적 "세상이 변하길.. 2020. 12. 28.
[마틴파울러]GivenWhenThen 번역본 원본은 아래 링크를 클릭해주세요. bliki: GivenWhenThen a bliki entry for GivenWhenThen martinfowler.com Given-When-Then은 SpecificationByExample을 사용하여 시스템의 동작을 지정하는 테스트를 나타내는 스타일입니다 . BDD ( Behavior-Driven Development)의 일부로 Daniel Terhorst-North 와 Chris Matts가 개발 한 접근 방식입니다 . [1] Cucumber와 같은 많은 테스트 프레임 워크에 대한 구조화 접근 방식으로 보입니다. 4 단계 테스트 패턴 의 재구성으로 볼 수도 있습니다 . 기본적인 아이디어는 시나리오 (또는 테스트) 작성을 세 부분으로 나누는 것입니다. Given .. 2020. 12. 27.
[Vue]왜 mutation 에서는 왜 비동기(async wait 문법)를 사용하면 안될까? (수정: 되긴 된다) 이번에 Vue 프로젝트를 진행하면서 mutations의 남용으로 Vuex에 대한 이해를 도왔습니다. 그 부분을 조금 더 자세히 기입합니다. 문제 발생 mutations: { ... async getUserInfos(state, loginId) { const basicUserInfo = await UserInfoApi.getUserInfoById(loginId); state.userinfo.userId = basicUserInfo.data.userId state.userinfo.userLoginId = basicUserInfo.data.userLoginId state.userinfo.userName = basicUserInfo.data.userName state.userinfo.dutyName = basi.. 2020. 12. 26.
테스트 주도 설계를 실천한다는 것 밥 로스 로스가 대중에게 인상적인 모습을 보인 것 중 하나가, 그림은 형태를 정하고 하나하나 디테일을 정해가면서 그려 나아가는 것이라는 일반인의 고정관념을 깬 것도 한몫 한다. 이미 그린 수풀이 붓으로 몇 번 칠하니 호수가 된다든지 하는 모습은, 그때그때 마음가는 대로 그려 나아가는 것이 낭만적이라는 느낌을 주기도 한데다, 유화를 배우지 않은 일반인 입장에서 보면 신기할 수밖에 없다. - 밥 로스에 대한 평가 우리는 밥 로스라는 사람을 알고 있습니다. 누가봐도 어려운 그림을 "참 쉽죠?(That easy)" 라는 대사로 유명한 밥로스는 그림을 그리는 방식이 특이하다고 합니다. 그림을 그릴 때, 밥 로스는 하얀 캔버스 위에 아주 약간의 덧칠로서 그림 전체의 윤곽을 만들어 완성 시키면서 그 다음 스텝을 이어.. 2020. 12. 18.
[개발자의 글쓰기] 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.
[JPA] Field or Property access? 원본 - thorben-janssen.com/access-strategies-in-jpa-and-hibernate/ Access Strategies in JPA and Hibernate - Which is better, field or property access? - Thorben Janssen JPA and Hibernate support field-based and property-based access strategies. But what exactly is the difference and which one should you choose? thorben-janssen.com 들어가기 JPA를 활용해 연관관계를 맺을 때, 나도 간과했던 부분이 하나 있었습니다. Entity 의 attributes.. 2020. 12. 13.