%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4

2021-12-13
자바 객체를 영속화하는 방법의 하나로 자바 직렬화를 사용할 수 있다. 단순하게는 Serializable 인터페이스를 구현하거나 더 확장성 있는 방법으로는 Externalizable 인터페이스를 구현하는 것을 선택할 수 있고, 자바 직렬화에 종속되지 않는 다른 방법을 선택할 수도 있다. 일단, Serializable 인터페이스를 구현한 클래스의 인스턴스가 외부 저장소에 영속화되면 호환성을 유지하면서 해당 클래스의 필드를 수정하기는 어렵다. ( https://docs.oracle.com/en/java/javase/11/docs/specs/serialization/version.html...
2021-12-12
최근 log4j의 보안 취약점이 크게 이슈가 되고 있습니다. 많은 개발자나 운영자들이 이 조치를 위해 정신이 없을것 같아 간단하게 글로 남겨 봅니다. log4j는 자바를 사용하는 많은 프로젝트에 사용되기 때문에 직접 개발한 코드 뿐만 아니라 자바 개발된 서버 사이드 솔루션들도 모두 점검을 해봐야 합니다. 일반적으로 가장 많이 사용되는 자바로 개발된 서버 사이드 솔루션은  대략 다음과 같습니다. Tomcat JBoss Jenkins ElasticSearch Hadoop Kafka Spark 등등 방화벽 안쪽에 있는 서버나 포트가 외부에 공개되지 않은 서버라도 모두 취약점의 대상이 될 수 있습니다. 이유는 다음과 같은 취약성 때문입니다....
2021-08-13
요즘은 프론트엔드, 백엔드 등으로 개발이 분업화 되었고 또한 최근 많은 곳에서 마이크로서비스 아키텍처 Microservice Architecture 를 도입하면서 하나의 언어가 아닌 여러 언어로 개발하는 것이 추세인 듯하다. 여러 언어로 개발하다 보면 테스트 커버리지와 코드 코드 정적 분석 Static program analysis 결과를 각각 보면 매우 불편한데 통합하여 한곳에서 볼 수 있으면 편할 것 이다. SonarSouce 에서 만든 SonarQube 는 코드를 분석하여 중복, 테스트 커버리지, 코드 복잡도, 버그, 보안 취약성 등을 보여주는 도구이다. 특히...
2021-07-29
테스트 자동화 Test automation 의 일환으로 필자는 Golang으로 테스트 코드를 작성할 때 먼저 통합 테스트 Integration Test [1] 를 작성한다. 통합 테스트 코드를 작성하다 보면 주요 테스트 시나리오 외의 케이스를 촘촘하게 테스트 하기 어려운데 그 이유는 테스트 실행 비용(예. 웹 서버, 데이터베이스 등등)이 비싸고 비슷한 케이스를 작성하다 보면 코드 중복이 많이 발생하여 유지 보수가 어렵기 때문이다. 통합 테스트를 보완해 주는 것은 단위 테스트 Unit Test...
2021-07-19
소프트웨어에서 말하는 불변성 Immutability 이라는 것이 있다. 즉 변하지 않는다는 것 이다. 다른 말로는 읽기 전용이라고도 해석할 수 있다. 무엇이 변하지 않는다는 것일까? 객체 지향 프로그래밍으로 좁혀서 생각해 보면 한번 만들어진 객체가 변하지 않다는 것을 의미 한다. 불변 클래스란 간단히 말해 그 인스턴스의 내부 값을 수정할 수 없는 클래스다.(중략)불변 클래스는 가변 클래스보다 설계하고 구현하고 사용하기 쉬우며, 오류가 생길 여지도 적고 훨씬 안전하다. - 이펙티브 자바 3판, 105 쪽...
2021-05-26
React로 만들어진 코드 예시 를 찾다 보면 JavaScript bind 함수 를 사용하는 코드를 심심치 않게 볼 수 있습니다. 그런데 최근의 React 코드에서는 좀 처럼 찾아 볼 수 없는데, 왜 과거에는 사용했지만 최근에서는 잘 사용하지 않는 걸까요? JavaScript bind 함수 먼저 bind 의 정의를 찾아보겠습니다. MDN에서 bind를 아래와 같이 정의하고 있습니다. bind() 함수는 새로운 바인딩한 함수를 만듭니다. 바인딩한 함수는 원본 함수 객체를 감싸는 함수로, ECMAScript 2015에서 말하는 특이 함수 객체exotic function object입니다. 바인딩한 함수를 호출하면 일반적으로 래핑된 함수가 호출 됩니다. - https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Function/bind...
2021-05-14
기사 제목을 보자마자 촉이 왔다. '옛날 전공이네' 하는 식의 촉 1) 생각보다 복잡한 클라우드 마이그레이션, 자동화 하려면? 시스템 마이그레이션이란 무엇인가? 기사가 양질 2) 이라는 것을 확인할 수 있는 문단이 등장했다. 우선 현재 운용중인 레거시 유닉스 시스템은 곧바로 클라우드로 이전하기 어렵다. 일단 리눅스 기반 시스템으로 마이그레이션 한 이후 다시 클라우드로 이전해야 한다. 이처럼 2단계를 거치면서 자산파악 , 분석, 마이그레이션, 테스트, 인증 등을 진행해야 하기 때문에 다양한 문제가 불거진다. 현황 파악단계에서는 나타나지 않았던 연관시스템이 등장하기도 하고, 존재하는지도 몰랐던 시스템이 나타나기도 하며, 예상한 것보다 비용이 급증하기도 한다. 조직이 크고 업무와 시스템의 복잡성이 클수록 클라우드 마이그레이션 난이도는 기하급수적으로 늘어난다....
2021-03-07
엘라스틱이 sql을 지원하기 시작한지 꽤 됐는데 조인은 아직이다. 그런데 아마존이 배포하는 opendistro 는 조인을 지원한다. 물론 아직 조인 내부적으로 집계도 안 되고, 서브 쿼리도 안 먹고 등등 많이 부족함. [caption id="attachment_28234" align="aligncenter" width="600"] 중복 제거 좀..[/caption] 하지만 외부 조인까지 지원하는 걸 보면, 빠르게 기능 개선이 이루어지지 않을까 싶다. 아마존이 이렇게 발 빠르게 움직인다면 엘라스틱도 가만 있지 않겠지? 그나저나 엘라스틱이 아마존을 겨냥한 라이센스를 발표하고, 아마존은 직접 엘라스틱을 배포하면서 서로 완전히 등을 돌린 모양새던데, 둘의 대립이 어떻게 결론 날지 궁금하다....
2021-02-12
Spring Batch를 이용해서 데이터베이스에 저장되어 있는 정보를 CSV file로 저장을 하는 방법에 대해서 작성해보겠습니다. CSV Writer 데이터 흐름 payment csv 데이터의 흐름은 간단합니다. payment table -> payment.csv 으로 변경됩니다. payment table의 불필요한 칼럼 id, created_ay , updated_at은 빼고 amount , order_id 만 CSV에 저장하겠습니다. Batch Code Job (1): 동일한 job parameter으로 여러 번 job을 실행시켜도 문제없게 run.id 를 증가시킵니다. (2): beforeJob payment 100 rows를 insert 합니다....
2020-12-24
xORM 은 필자가 선호하는 ORM Object–relational mapping 프레임워크이다. 주요 특징 Features 은 아래와 같다. [caption id="attachment_28157" align="alignnone" width="600"] https://gobook.io/read/gitea.com/xorm/manual-en-US/[/caption] [caption id="attachment_28158" align="alignnone" width="600"] https://gobook.io/read/gitea.com/xorm/manual-en-US/[/caption] xORM은 대부분의 ORM에서 지원하는 테이블 간의 연관 관계 처리를 지원하지 않는다. 필요하면 직접 구현해야 한다. 언뜻 생각하면 불편할 것 같은데 연관 관계를 포기함으로써 기능들이 단순화되어 익히는데 시간이 짧게 걸리고 쓰기 쉽다는 장점이 있다. 이 글은 필자가 xORM을 사용하며 편리하다고 느낀 기능을 소개한다....
더보기