자바의 AOP를 알아보면서 허접하게나마 각 사용방법을 훑은 것 같습니다. 최종적으로 AspectJ가 남았습니다. 이제 이놈만 정복하면 될 듯 합니다. 끝판왕이니 만큼 심혈을 기울여 조사하고 공부하고 깨우치도록 해봅시다. AspectJ란? AspectJ는 PARC에서 개발한 자바 프로그래밍 언어용 관점 지향 프로그래밍 (AOP) 확장 기능이다. 이클립스 재단 오픈 소스 프로젝트에서 독립형 또는 이클립스로 통합하여 이용 가능하다. AspectJ는 최종 사용자를 위한 단순함과 이용성을 강조함으로써 폭넓게 사용되는 AOP에 대한 디 팩터 표준(사실 상 표준)이 되었다. 이전 포스팅에서도 AspectJ에서 두가지 방식으로 aop를 사용할 수 있다고 언급했습니다. 머 암튼 aspect 지향 프로그래밍의 구현이랄..
지난시간에 CGLIB를 배우기 위해 ASM을 사용해보았는데 이젠 CGLIB를 사용해봐야겠습니다. 2. CGLIB는 인터페이스가 아닌 클레스를 대상으로 동작 가능하고 바이트코드를 조작해서 프록시를 만들기에 Java Proxy에 비해 성능이 좋습니다. 일반적으로 스프링 프레임워크에서 AOP 기능을 사용하게 된다면 CGLIB를 사용하게 되지 않을까 싶습니다만... CGLIB는 Byte Code Generation Library로서 동적 프록시 객체를 구성해주는 라이브러리입니다. 그럼 동적 프록시를 어떻게 생성해내는지 확인해보고 싶습니다. 실제 눈으로 보는것과 보지 않는 것의 차이는 어마어마하다고 생각합니다. 먼저 CGLIB를 임포트합니다. 가장 최근 버전이 3.2.5 버전이군요. 저 같은 경우 항상 임포트..
오늘은 CGLIB를 배우기 위해 ASM을 먼저 정리해봅니다. 2. CGLIB는 인터페이스가 아닌 클레스를 대상으로 동작 가능하고 바이트코드를 조작해서 프록시를 만들기에 Java Proxy에 비해 성능이 좋습니다. 일반적으로 스프링 프레임워크에서 AOP 기능을 사용하게 된다면 CGLIB를 사용하게 되지 않을까 싶습니다만... CGLIB는 Byte Code Generation Library로서 동적 프록시 객체를 구성해주는 라이브러리입니다. 내부적으로 ASM 모듈을 사용하기에 ASM를 공부하지 않고 넘어갈수가 없습니다. ASM(http://asm.ow2.org)이란? ASM ASM is an all purpose Java bytecode manipulation and analysis framework. ..
자바 AOP JDK Dynamic Proxy를 경험해보기 위해서 테스트 클레스를 생성합니다. 지난번에 JDK Proxy에 대한 코멘트를 다음과 같이 했습니다. Java Proxy같은 경우에 인터페이스를 반드시 구현해야하고 리플렉션을 사용하여 구현한 기술이기에 상대적으로 퍼포먼스가 떨어지는 특징을 갖습니다. 인터페이스를 극혐하는 저와 퍼포먼스가 떨어지는것도 싫어하는 저에게는 일단 탈락. 실제로 어떤지 구현을 통해 알아보면 뇌리에 쉽게 박히니 짬을 내서 JDK Dynamic Proxy 예제를 준비해보았습니다. 실제로 어떤지 구현을 통해 알아보면 뇌리에 쉽게 박히니 짬을 내서 JDK Dynamic Proxy 예제를 준비해보았습니다. 1. JDK proxy는 인터페이스를 필수적으로 구현해야합니다. //인..
최근 개인적인 미니 프로젝트를 하면서 mariadb를 사용하고 있는데 date와 datetime 에 기본값을 default로 설정해주려고 하는데 아래 에러가 발생했다. 사실 지나고 쓰는거라 아래 에러 문구는 대충 검색해서 넣는거라 정확하지는 않은것 같다. 대충 상황은 date나 datetime 타입에 기본 값을 현재 시간으로 설정하고자 할 때 나는 에러였다. 대충 구글링 하면 뭐 타입을 timestamp로 설정하면 된다는 얘기가 있는데 그건 본질적인 방법이 아니니 패스..하고. Invalid default value for 'Date and time' CURRENT_TIMESTAMP Got the following error: " SQL Error [1178] [42000]: (conn:21) The s..
얼마전에 CORS-Anywhere를 자체적으로 띄우기 위해서 헤로쿠를 이용했었는데요. 이게 자꾸 지 혼자 잠이 들어서 해당 서비스를 처음 호출할때 처음에 2~30초간에 서비스를 깨우는 시간인 일명 웨이크업 타임이 필요하게 되는데요. 이는 30분간 아무 트래픽이 없으면 헤로쿠가 이 앱을 재워버리기 때문입니다. 이것저것 방법을 생각해봤는데요. 별도의 서버에서 이 헤로쿠 서버에 주기적으로 웹 리퀘스트를 날려줄 수 있는 방법으로 집에 있는 PC에서 해야하나 aws 서버에서 해줘야 하나, 주기적으로 날려줄수 있는 function 서비스 같은걸 알아봐? 하면서 이것저것 고민을 하다가... 1. 24시간 헤로쿠 깨어있게 만드는 방법 자기 자신의 도메인을 호출하면 된다는 걸 깨닫고 소스에 세줄 정도 추가했습니다;;; ..
오늘은 헤로쿠 가입부터 node.js 배포까지 진행해보도록 하겠습니다. 간단하게 서비스를 띄울 무료 PaaS 서비스를 찾는다면 무조건 헤로쿠겠죠. 1. PaaS 서비스의 대표주자 헤로쿠(Heroku) 헤로쿠라는 사이트가 있습니다. 이 글을 검색하셨다면 헤로쿠가 무엇인지는 대충 아실 겁니다. 헤로쿠는 내가 가진 어플리케이션을 배포하면 바로 온 사이트로 서비스를 해주는 대표적인 *PaaS 서비스입니다. *PasS ( Platform as a Service) : 클라우드에서 제공되는 완전한 개발 및 배포 환경이라고 생각하면 됩니다. 개발적으로는 서버, 저장소, 네트워킹, 미들웨어, 개발도구, BI, 서비스, 데이터베이스 , 빌드, 테스트, 배포, 관리, 업데이트 등 모든 어플리케이션 수명 주기를 지원하는 서비..
아래 내용은 좀 오래된 내용으로 오늘(2020.11.26) 아래 Array.sort가 수정되었다는 걸 알려주셔서 먼저 이 문제는 수정이 된 상태라고 한다. @팅기지마세요 : 크롬 계열 브라우저가 사용하는 V8 엔진은 v7.0 이후로 stable sort(같은 크기여도 순서가 바뀌지 않는)를 지원하는 Timsort 알고리즘을 Array#sort에 사용합니다. 이러한 변경사항은 2018-10-15에 배포되었고, 크롬 버전 70.0.3538부터 적용된 것으로 보이는데 V8 엔진 배포 후 하루나 이틀 뒤에 배포되었습니다. Array#sort 관련 자료를 조사하다가 글을 보게되어 댓글을 남깁니다 아마도 제가 이 글을 적은 시점은 18년 이전 이었을 거고.. 그 후에 저 시점에 패치가 된 것으로 보인다. 아래 내용..
오늘 원인과 해결방법을 찾아볼 자바 Exception은 java.net.MalformedURLException 다. 사실 워딩 그대로 잘못된 URL이 원인이고 URL을 맞게 고쳐주면 해결이 되는 아주 간단한 문제지만 좀 더 세부적으로 탐구해보기로 했다. 에러를 발생시키는 조건은 각종 프로토콜을 다루는 클래스에서 잘못된 인자로 정상적인 프로토콜을 인식할 수 없을 때 예외가 발생하도록 처리 되어있다. 대표적이고 많이 발생하는 클래스는 URL 이다. package exception; import java.net.URL; public class test_MalformedURLException { public static void main(String[] args) throws Throwable { URL url..
이클립스를 사용한지 10년이 넘었지만 사실 쓰는 단축키만 사용하고 유용한 단축키를 알아볼 생각조차 안했던 것 같습니다. 문득 구글링을 하던 중 해외에 이클립스 단축키 top 30 글을 보고 유용하다는 생각이 들어서 블로그에 정리해봅니다. 사실 유능한 자바 개발자분들이 자바 IDE 툴로 인텔리J를 추천하고 있지만 이클립스도 장점이 많은 강력한 무료 툴입니다. 필요한 이런 저런 플러그인들이 이클립스에 있을 때도 많고요. (이클립스를 사용한다고 무능하단 뜻이 절대 아님.) 평소에 몰랐던, 그리고 알아두면 좋은 이클립스 단축키 top 30이니 알아보도록 하지요. 1. Ctrl + Shift + T : jar 포함 클래스 찾기 jar 내에 있는 클래스까지 찾아주기 때문에 어떤 jar에 있는지 일일이 찾을 필요가 ..
현재 아주아주 과거 버전의 이클립스를 사용하는 프로젝트가 있는데 이클립스의 버전이 3.5.2다. 거의 시조새급의 이클립스이지만 아주아주 과거에 구성한 프로젝트라면 함부러 이클립스 버전을 올릴수만도 없는 노릇. 계속해서 사용하고 있는데 개발 PC에는 하나의 프로젝트 환경만 꾸리는것이 아니라 이것저것 JDK 버전도 계속해서 설치하게 되고, 프로젝트 별로 맞는 이클립스를 계속해서 설치하게 된다. 인터넷에 해당 문제로 구글링을 해보게 되면 1) 프로젝트 우클릭 > properties > project Facets > 우측 Convert to faceted form.. 클릭 2) 메이븐 MAVEN 프로젝트로 설정할 것. 3) .project 파일과 .classpath 파일을 받거나 체크해볼 것. 4) java b..
바야흐로 데이터 시대입니다. 데이터 3법과 마이 데이터, 분산신원인증... 등등. 어떤 플랫폼, 핀테크든, 빅테크든, 테크핀이든 데이터를 모으기에 혈안이 되어있습니다. 데이터가 힘이고 데이터가 돈이 되는 것이겠죠. 이럴때 같이 이슈가 되고 중요도가 올라가는 것이 바로 정보보안, 데이터보안이 아닐까요. 이 데이터 보안을 얘기함에 있어서 DLP, NDLP, EDLP를 빼놓고 이야기를 할수 없기 때문에 이 용어들에 대해서 정리해보려고 합니다. 저도 개발자로 이 분야 전문가가 아니기에 인터넷 리서치를 통하여 정리한 자료임을 사전에 밝힙니다. DLP( Data Loss Prevention : 데이터 유출 방지) 사실 직역하면 데이터 손실 방지라고도 합니다. 메신저나, 메일, 웹하드, 프린터, USB 등으로 다양한..
스프링, 스프링 하면서 IoC와 DI라는 말을 무수히 많이 들어봤을 것이다. 국내 프로젝트에서 스프링이 적용되지 않는 곳이 있을까 싶을 정도로 많이 이용되는 상황이니 말이다. 스프링에 대한 기초서적만 보더라도 ioc, ioc, di , di 계속 나오기도 하고... 얼마 전 모 유명 IT 테크 회사의 경력 면접 질문에 이런 질문이 나왔다고 한다. 라이브러리와 프레임워크의 차이가 무엇인가? 보면서 순간적으로 멍~ 했던 기억이 난다. 분명 뭐라고 말을 만들어내서 말하면 될거 같기는 한데~ 늘 그렇듯 자연스럽게 라이브러리를 가져다 사용하고, 많은 프레임워크가 적용되어 개발을 하고 있는데도 딱 이거다! 라고 표현을 못하겠는거다. 바로 구글링을 했고, 내 블로그에 기록으로 적어놓는다. 바로 이 그림이다. 1. 프..
예전에는 AWS 를 주로 사용했는데 구글 클라우드 프리티어가 평생 무료라고 하기에 최근 구글 클라우드 프리티어로 갈아탔다. ( 구글 클라우드 만세.. ) AWS이든 구글 클라우드든 리눅스를 설치해서 쓰게 될텐데... 센토스든 우분투든... 처음에 제공하는 접속 방법인 키 접속과 별도 계정은 미니 프로젝트와 사이드 프로젝트를 할 때마다 sudo를 입력하게 만드는 엄청난 귀찮음이 있으니 설정을 바꿔주도록 해보자. 구글 클라우드도 다 좋은데 웹 브라우저를 통한 접속이 간단한 확인하기에는 괜찮은데 날잡고 작업할 때는 아무래도 ssh 전용 툴을 사용하는거에 비해서 좀 불편하다~ 자, 시작해보자. 난 GCP로 진행하지만 AWS나 애저 같은 기타 클라우드 서버들도 다 동일할 것이다. 1. root 계정 비밀번호를 설..
최근 업무상으로도 그렇고 트렌드도 그렇고 마이크로 서비스와 모놀리식 서비스에 대한 관심이 많이 생겼다. 물론 결론은 이미 정해져있다. 항상 모든 개발 글에 그렇듯 적당히~가 중요할 것이다. 1. 모놀리식 VS 마이크로 서비스 아키텍처 이 그림 한장만 이해하면 될 것 같다. 모놀리식 서비스, 모놀리식 아키텍처는 서비스나 시스템이 한데 모여있는 구성을 말한다. 마이크로 서비스는 기능 별, 시스템 별로 분산 구축 하는 것을 말한다. 다 모여있는 시스템과 다 분리 되어있는 시스템 각기 장단점이 있다. 2 모놀리식 서비스 아키텍처 분산처리가 어렵다. 코드 관리가 어렵다. 신 기술 사용이 어렵다. 한가지 언어만 사용해야한다. 고가용성 서버 환경 구성이 용이하다. ( 스케일 아웃, 컨테이너 하나 더) 빌드, 배포 시..
쿠팡 파트너스 링크를 모바일 홈화면에 추가하는 방법에 대해서 정리해봅니다. 그동안 해야지 해야지 하면서 못했던 내용입니다. 쿠팡 파트너스를 조금씩 하고 있고 제 블로그 가장 하단에도 링크가 있기도 하고 지인들에게 보내기도 하면서 용돈벌이를 하는데 항상 아쉬웠던 점이 있었는데요. 바로 매번 쿠팡을 열때마다 이 링크로 열어서 구매해달라고 부탁을 할수도 없고 그렇다고 브라우저에 링크를 즐겨찾기 해달라고 할수도 없어서 바로, 모바일 홈 화면에 쿠팡 파트너스 링크를 추가했으면 좋겠다는 것이었습니다. 여러가지로 서핑을 해보니 네이버앱의 api를 호출하면 추가가 가능하다고 하더군요. 시도해보기로 했습니다. 1. 홈 화면 추가 버튼을 만들어줍니다. 네이버 링크 추가 스크립트는 아래 글을 참조하였습니다. https://..
개발 업무를 하다보면 i18n 용어를 자주 만나게 된다. 주로 멀티 랭귀지를 처리하는 부분의 소스명이나 객체명 등에 'i18n'을 많이 봤을 텐데 이게 뭔가, 뭔가 하면서 정리해볼 생각을 이제서야 하게 됐다. 우선 저렇게 중간을 숫자로 넣어 단어를 바꾸게 된 건 단어를 빠르게 쓰기 위한 목적일 뿐이라고 한다. 마치 우리가 '워라벨', '코박죽', '졌잘싸', '자낳괴' 이런식으로 줄여 쓰는것처럼 i18n의 원 단어인 internationalization 의 글자수는 무려 20자나 되니 i와 n을 빼고 18글자니까 i18n으로 표시한거다. 아래에는 이렇게 줄여서 표시하는 용어들에 대하여 정리해봤다. 혹시 어디선가 이런 형태의 워드를 보게 되면 중간을 생략한거구나라고 생각하면 되는데 자주 사용하는 것들은 좀..
개인적으로 챗봇 형태의 토이 프로젝트를 하고 싶을 때는 텔레그램 봇을 이용하는 것만큼 좋은 선택은 없다고 생각합니다. 애초에 카카오톡 봇같은 경우 개인적으로 이용할 수 있는 기능이 물어보는 기능에 대한 답변 정도만 구현 가능하니까요. 그 이후의 영역은 비즈톡 가입을 해야만 하니까요. 네, 그래서 조심스레 토이 프로젝트를 하나 시작하고자 텔레그램 봇 만드는 것부터 해서 시작해보려고 합니다. 1. 텔레그램에서 BotFather를 찾는다. 당연하지만 텔레그램이 설치되어있어야겠죠? PC버전이든 모바일 버전이든 상관은 없지만 PC 버전이 명령어 입력이 훨씬 편할테니 저는 PC 버전을 이용하도록 하겠습니다. 검색창에서 BotFather를 찾습니다. 그리고 '/help' 커맨드로 바로 사용 가능한 명령어를 확인해봅시..