sentry 1.7.x 에서

sentry 설정을 제대로 한 것 같은 데 에러가 아래와 같이 발생할 수 있다.



<appender
name="SENTRY" class="io.sentry.logback.SentryAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender>

<root level="INFO">
<appender-ref ref="ROLLING" />
<appender-ref ref="STDOUT" />
<appender-ref ref="SENTRY"/>
</root>


ERROR in ch.qos.logback.core.joran.action.AppenderAction - Could not create an Appender of type [io.sentry.logback.SentryAppender]. ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type io.sentry.logback.SentryAppender


이유는 다음 io.sentry:sentry-logback도 함께 추가했어야 했는데. 못했기 때문에 에러가 발생한 것이다.


<dependency>

    <groupId>io.sentry</groupId>

    <artifactId>sentry-logback</artifactId>

    <version>1.7.16</version>

</dependency>



Posted by 김용환 '김용환'

sentry-logback 연동

etc tools 2019.03.12 16:37


sentry는 계속 변화되고 있다. 따라서 공식 문서를 보는 것을 가장 추천한다. 




logback에 sentry 연동 코드를 추가하는 정보이다.


sentry 서버를 아래대로 따라 설치한 후, cdn키를 (https://주소/프로젝트/settings/key) 복사한다.


UI만 참고하기 ': https://kykkyn2.tistory.com/74,  https://www.lesstif.com/pages/viewpage.action?pageId=30705133







https://docs.sentry.io/clients/java/



logback 설정은 대략 다음과 같다. 

<appender name="SENTRY" class="io.sentry.logback.SentryAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender>

<root level="INFO">
<appender-ref ref="ROLLING" />
<appender-ref ref="STDOUT" />
<appender-ref ref="SENTRY"/>
</root>


라이브러리는 다음을 추가한다.(sbt 기준)

"io.sentry" % "sentry" % "1.7.16",
"io.sentry" % "sentry-logback" % "1.7.16"

sentry.properties는 다음과 같이 저장한다(classpath에만 두면 sentry 코드에서 알아서 읽는다)

dsn=https://111:222@clog.google.com/315?timeout=300&async.queuesize=100
release=1.0.0
stacktrace.app.packages=





Posted by 김용환 '김용환'





대기업에서는 Proxy를  두어 외부 인터넷 연결을 제어한다. 


다만 내부 머신에서 외부 인터넷으로  제대로 패킷이 나가는지 테스트하려면 다음 코드로  테스트한다.



<Proxy.java>



import java.io.*;

import java.net.*;

import java.util.Properties;


public class Proxy {


    public static void main(String[] args) throws Exception {

String url = "http://repo.typesafe.com";


URL server = new URL(url);

HttpURLConnection connection = (HttpURLConnection)server.openConnection();

connection.connect();

InputStream in = connection.getInputStream();


        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        byte[] buffer = new byte[1024];

        int readBytes = -1;


        while((readBytes = in.read(buffer)) > 1){

            baos.write(buffer,0,readBytes);

        }


        byte[] responseArray = baos.toByteArray();

System.out.println(new String(responseArray));


in.close();

    }

}



<사용법>



javac Proxy.javac


java -Dhttp.proxyHost=proxy.google.io -Dhttp.proxyPort=31281   -Dhttps.proxyHost=proxy. google.io  -Dhttps.proxyPort=31281     -Dhttp.nonProxyHosts="localhost|127.*|192.168.*|10.*|172.16.*|*.google.io"  Proxy


Posted by 김용환 '김용환'



mysql에서 timestamp 컬럼을 추가할 때 주의할 점이 있다. 


timestamp 컬럼 그 자체로 타입을 정의하면, 밀리초(millisecond)는 나타나지 않는다.


timestamp(1)은  소수점 첫번째자리,

timestamp(2)는 소수점 두번째 자리를 표현한다.


그래서 최대 6자리 까지 정확도를 높일 수 있다.







https://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html




MySQL 5.6.4 and up expands fractional seconds support for TIMEDATETIME, and TIMESTAMP values, with up to microseconds (6 digits) precision:

  • To define a column that includes a fractional seconds part, use the syntax type_name(fsp), where type_name is TIMEDATETIME, or TIMESTAMP, and fsp is the fractional seconds precision. For example:

    CREATE TABLE t1 (t TIME(3), dt DATETIME(6));

    The fsp value, if given, must be in the range 0 to 6. A value of 0 signifies that there is no fractional part. If omitted, the default precision is 0. (This differs from the standard SQL default of 6, for compatibility with previous MySQL versions.)

  • Inserting a TIMEDATE, or TIMESTAMP value with a fractional seconds part into a column of the same type but having fewer fractional digits results in rounding. Consider a table created and populated as follows:

    CREATE TABLE fractest( c1 TIME(2), c2 DATETIME(2), c3 TIMESTAMP(2) );
    INSERT INTO fractest VALUES
    ('17:51:04.777', '2018-09-08 17:51:04.777', '2018-09-08 17:51:04.777');

    The temporal values are inserted into the table with rounding:

    mysql> SELECT * FROM fractest;
    +-------------+------------------------+------------------------+
    | c1          | c2                     | c3                     |
    +-------------+------------------------+------------------------+
    | 17:51:04.78 | 2018-09-08 17:51:04.78 | 2018-09-08 17:51:04.78 |
    +-------------+------------------------+------------------------+


Posted by 김용환 '김용환'




전세 들어가기 전에 반드시 등기부 등본(http://www.iros.go.kr/PMainJ.jsp)을 떼어봐야 한다.


대출 상황, 주인 인원 뿐 아니라, 주인의 성향을 알아볼 때 중요하다.


1. 대출이 많으면 계약하지 않는다.

-- 경매 조심.


2. 주인이 여러명인데, (계약자가 여러명) 계약일에 모두 나오지 않는다면 계약하지 않는다.

-- 주인이 서로 싸우는 경우일수도 있다..


3. 임차권 등기 명령이 있으면 절대 계약하지 않는다

-- 전세금을 주기 싫어하는 주인이다.




특히 임차권 등기 명령(전세금을 안줘서 임차인이 임대인에게 소송)이 등기부 등본에 담겨 있기에.. 


주인이 어떤 사람인지 알 수 있다.


참고 : http://slownews.kr/46707

Posted by 김용환 '김용환'

accrual 인식

나의 경제 2019.03.06 15:01


매출채권의 개념에 대해서 잘 몰랐다.


회계 업무에 일부 참여하니. "accual 인식"이라는 용어를 사용하면서 매출 채권을 이해할 수 있었다..



참고  링크



https://coolestmoney.tistory.com/4


https://m.blog.naver.com/PostView.nhn?blogId=drakkon&logNo=140208805065&proxyReferer=https%3A%2F%2Fwww.google.com%2F

Posted by 김용환 '김용환'



오랜만에 make를 쓰다보니 실수한 게 있다.


아래와 같은 에러를 만나면 탭(tab) 대신 스페이스(space)가 코드에 안에 있다고 알린다.


스페이스를 없애고 탭을 추가하면 더 이상 에러가 발생하지 않는다.

 


:makefile:4: *** missing separator.  Stop.




Posted by 김용환 '김용환'



구글 논문 - 코드 저장소는 단일화(monolithic)가 좋더라는 내용이 담겨 있다.


https://people.engr.ncsu.edu/ermurph3/papers/seip18.pdf




Posted by 김용환 '김용환'


여러 stream 데이터를 하나의 데이터로 join해 준다면 얼마나 좋을까?

이슈는 상태(state)를 관리해야 하기에 메모리 이슈가 있다.




yelp는 mjoin 알고리즘을 열심히 작업 중이다..

https://engineeringblog.yelp.com/2018/12/joinery-a-tale-of-unwindowed-joins.html





큐의 스트림처리 방식으로는 stream stream-join이라는 개념이 있다.



apache spark에서는 watermark를 활용한다.


https://databricks.com/blog/2018/03/13/introducing-stream-stream-joins-in-apache-spark-2-3.html



https://dzone.com/articles/spark-stream-stream-join


https://blog.codecentric.de/en/2017/02/crossing-streams-joins-apache-kafka/






메모리 이슈가 있고 역시 타임아웃 이슈가 있어서 완벽히 진행하려면..

데이터를 스토리에 쌓고. 계속 데이터가 도착할 때마다 스토리지를 호출해 데이터가 다 들어올 때까지 쿼리를 날리는 수 밖에 없는 것 같다..



Posted by 김용환 '김용환'



CDC는 변경 데이터 캡처(Change Data Capture)의 약자로서 다른 소프트웨어가 이러한 변경 사항에 응답 할 수 있도록 데이터의 변경 사항을 모니터링하고 캡처하는 시스템의 오래된 용어이다. 

데이터웨어 하우스에는 CDC 지원 기능이 내장되어 있다. 업스트림 OLTP 데이터베이스에서 데이터가 변경되면 데이터웨어 하우스를 최신으로 유지해야 한다.




대표적으로 Debezium(발음은 디비지움이라 함, https://debezium.io/docs/contribute/)이 요즘 뜨고 있는데.. 기본적으로 다양한 데이터베이스 시스템 모니터링을 지원 하는 현대적이고 분산 된 오픈 소스 변경 데이터 캡처 플랫폼이다.



(https://vladmihalcea.com/a-beginners-guide-to-cdc-change-data-capture/ 참고)




 


<참조 링크 모음>

https://en.wikipedia.org/wiki/Change_data_capture


https://vladmihalcea.com/a-beginners-guide-to-cdc-change-data-capture/



https://medium.com/blablacar-tech/streaming-data-out-of-the-monolith-building-a-highly-reliable-cdc-stack-d71599131acb


https://developers.redhat.com/videos/youtube/QYbXDp4Vu-8/


https://www.youtube.com/watch?v=IOZ2Um6e430&feature=youtu.be


https://techmagie.wordpress.com/2018/04/01/accelerating-data-loading-into-data-lake-using-cdc/



https://www.ridicorp.com/blog/2017/10/30/binlog-collector/



https://www.confluent.io/blog/no-more-silos-how-to-integrate-your-databases-with-apache-kafka-and-cdc


https://www.linkedin.com/pulse/change-data-capture-postgresql-via-debezium-part-1-paolo-scarpino/


https://www.slideshare.net/ceposta/the-hardest-part-of-microservices-your-data



https://wecode.wepay.com/posts/streaming-databases-in-realtime-with-mysql-debezium-kafka


https://debezium.io/blog/2018/12/05/automating-cache-invalidation-with-change-data-capture/


https://www.confluent.io/kafka-summit-sf18/change-data-streaming-patterns-for-microservices-with-debezium


https://engineering.linkedin.com/data-replication/open-sourcing-databus-linkedins-low-latency-change-data-capture-system




<고민꺼리>


CDC를 실제로 구현하기 위한 작업이 만만치 않은 것 같다.


GTID, bin 포맷, 운영이슈(MHA 등), 아키텍처





Posted by 김용환 '김용환'