Jacoco is popular coverage tool for Java worlds. It provides various options to include or exclude specific classes.
My special requirement is to generate exact coverage report for public functions of non UI classes. Jacoco doesn’t support that functionality. so I want to share my experiences here because I couldn’t find any solution for this.
The first thing I found was filters. If I can implement my own filter, then that’s all I need. Let’s analyze it more in source code level. After some time, I’ve found Filter class! It has all required filters for proper coverage reporting.
Next is implementing my own filter. Let’s reference already existing source code like AnnotationGeneratedFilter.java. Its main functionality is excludding functions annotated by having ‘Generated’ string.
And I created binary using the following commands. jar files are located in jacoco/target/ folder.
mvn clean package -DskipTests=True
last thing you have to do is let gradle use those built jar files. copy those jar files to <root>/lib directory. and change your build.gradle file like the followings.
회사를 다니다 보면 자기 주장이 강한 사람, 커뮤니케이션이 어려운 사람들을 만나는데 이런 사람과는 협업하는 것이 고역이다. 헌데 어느날 블로그에서 이런 글을 봤는데 이런것을 가르키는 단어가 있는것이 아닌가. 너무 좋은 표현이라 생각해서 정리해 본다.
strong views, weakly held
언제든 나의 주장보다 나은 이유가 있는 주장이 있다면 그것을 채택하는 것.
A, B 선택지가 있을때 내가 A를 선택했다면, A여야 하는 이유에 대해 리서치를 하지말고 B여야 하는 이유에 대해서 리서치를 해보고 판단을 내리면 더 나은 결정을 내릴 확률이 높다는 것. 기존은 A/B 선택지가 있을때 자기의견이 맞는 이유만 찾기 때문에 기존의 틀?에 갖혀서 잘못된 결정을 내리기 쉽기 때문이다.
graph db에 대해서 한번 정리. AWS에서는 Neptune이 있고, 오픈 소스로는 Neo4j
why graph db ?
RDBMS 에서 relationship은 JOIN으로 표현되는데, 이런 relationship이 생길때 마다 JOIN이 반복되는데, 이게 어느 정도 이상의 복잡한 relation을 쿼리 해야 한다면 그만큼의 JOIN을 많이 해야 하고 테이블도 많아져야 한다. 이런 RDBMS의 pain point를 해결한것이 graph DB이다. graph에서 relation은 하나의 링크에 지나지 않으므로 같은 쿼리를 RDB와 graph로 비교해보면 그래프의 우위가 확실히 있다.
~~social network을 생각해보자. 사람과의 follower 관계를 쿼리 해야 하는데, darren의 follower중에 rachel의 follwer중 중복되는 사람을 찾는 다고 생각해보자. 그러면 RDBMS의 경우는 쿼리가 이렇게 될 것 같다. ~~
1
select * from follower D JOIN follower R WHERE D.user='darren' and R
그러면 /logs/<cluster_id>/containers/application_/container_xx_xx_ 이런 형식으로 로그가 저장된다. 여기서 application_는 1씩 증가되면서 붙으니 자신이 돌린 잡의 seq를 확인하여 container의 첫번지 seq log를 보면 executor log가 보인다. 이것으로 모든 로그를 볼 수 있음
dynamo db가 사용하는 optimistic locking use case가 그럴듯 하여 정리.
dynamo db는 RDB가 아니니 당연 트랜잭션을 사용할수 없음. 그래서 아쉬운 경우가 많음. 이때 optimistic locking을 사용하여 간단히 트랜잭션 처리를 할 수 있어 유용함. 컬럼에 version field를 추가하고 user id(partition key)/version(sort key)로 설정하여 중복된 version이 생성될 수 없게 constraint를 걸어줌.
플로우는 이러함.
row get
값 변경하고, version +1 증가
저장. 이때 integrity exception이 발생하면 1부터 다시 시작함.
About
Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.