역대급 핫 이슈였던 `Log4J(Log4Shell) 역대 최악 보안 취약점(CVE-2021-44228)` 외 8개까지 정리해봅니다.(`22.01.24 업데이트). 한번 터지더니 최근 계속해서 이슈가 되고 있는 것 같습니다. 아예 log4j 취약점을 찾는 사람들이 계속해서 파고 있는 느낌? 나름 IT 밥을 먹고 있는 사람으로 정리를 하지 않고 넘어가면 안될것 같아서 남들이 정리한걸 다시 재정리하는 느낌으로 정리해봅니다. Log4J(Log4Shell) 어떤 취약점인데? Log4J는 프로그램 언어 자바 기반에 로깅 유틸리티 라고 할수 있습니다. 전산 시스템에 여러가지 기록들을 남길때 사용하는 라이브러리라고 생각하면 되는데요. 이 라이브러리에 보안 취약점은 원격코드 실행(RCE : Remote Code Exec..
자바로 작성한 프로그렘에서 에러 발생시 트레이스 정보에는 에러가 발생한 라인수가 표시된다. 그런데 라인수가 표시되어야 할 부분에 "Unknown Source"라고 표시 되기도 하는데 이는 컴파일시에 디버깅 정보를 포함시키는 옵션을 넣지 않아서 그렇다. javac -g *.java ant 사용시 자바에서 Stack Trace 내 보통 소스 파일과 라인 번호가 있어야 할 자리에 Unknown Source가 자리할 수 있다. 다음은 이를 테스트하기 위한 코드이다. Unknown Source 테스트 코드 public class ExceptionUnknownSourceTest { public static void main(String[] args) { throw new RuntimeException(); } } ..
일을 하다보면 netstat 명령어를 자주 사용하게 된다. 현재 LISTEN 중인 포트를 확인하려는 용도가 거의 대부분인데 상태를 보면 ESTABLISHED, CLOSE_WAIT, TIME_WAIT, FIN_WAIT_2 이런 것들이 보인다. 막연하게만 봤던 상태들인데 정리해보자. 네트워크 지식이 빈약해서 다른 글들을 그대로 카피하여 정리했다. MS .NET에 TcpState 정의가 있어서 가져왔다. 어디서 별도로 정리한걸 보는것보다 더 나을 것 같다. CLOSED 1 TCP 연결이 닫혀 있습니다. CLOSE_WAIT 8 TCP 연결의 로컬 엔드포인트에서 로컬 사용자로부터의 연결 종료 요청을 기다리고 있습니다. Passive Close 하는 쪽에서 프로그램이 소켓을 종료시키는 것을 기다리기 위한 상태. 가..
오늘은 개인적으로 자바 활용의 익스퍼트 급이라고 생각하는 것 중에 하나인 BCI(Byte Code Instrumentation)에 대해서 포스팅해보고자 합니다. 저도 제가 공부하고 이해하는 선 내에서 진행해보도록 하겠습니다. 제가 신입시절... 자바의 리플렉션을 활용하며 그래 이것만 있으면 뭐든 다 할수 있겠는데?라고 생각하고 지냈다가 제니퍼소프트의 APM(Application Performance Monitoring) 솔루션을 만나며 마냥 신기한데? 라고 생각 했었습니다. 제니퍼소프트는 나름 국내 IT업계에서 신의 직장으로 많이 알려진 회사지요? ㅎㅎㅎ 그러다 몇년 후 EJB와 스트럿츠의 시대를 지나 스프링 프레임워크의 시대를 맞으며 AOP(Aspect Oriented Programming : 관점지향..
OWASP top 10대 웹 보안 취약점에 대해서 정리해보도록 하지요. OWASP( The Open Web Application Security Project )는 오픈소스 웹 어플리케이션 보안 프로젝트로 소프트웨어 보안을 개선하기 위한 비영리 재단입니다. 2001년 12월 1일에 시작된 OWASP 재단이며 이제 20년이 넘어가는 역사가 깊은 미국 비영리 자선 단체입니다. 이 곳에서 보안 취약점 중에서 빈도가 많고 보안 취약점 리스크가 큰 것 10가지를 선정하여 2004년부터 2017년까지 3년 주기로 OWASP TOP 10에 대해서 발표했는데요. 2021년이 지났지만 아직 개정되지 않고 2017년이 가장 최신판인 것은 취약점에 대한 분류가 어느정도 자리를 잡은 것으로 이해가 됩니다. 10가지 개념에 대..
자바(JDK, JRE) 쉽고 빠른 설치, 환경 설정 방법에 대해서 알아봅시다. 먼저 자바 설치 파일 다운로드가 필요한데요. 설치 파일이 필요하신 경우 아래 링크를 통해서 운영체제에 맞는 버전을 먼저 다운로드 받고 와주시기 바랍니다. 자바(JDK, JRE) 모든 버전 다운로드( 6,7,8,9,10,11,12,13,14,15, 16 등) 자바 개발자들은 대부분이 느끼겠지만 환경설정 할때마다 오라클 사이트에 접속하여 사용하는 버전에 맞는 자바 버전을 다운로드 받는 것도 굉장히 귀찮고 스트레스 받는 일입니다. 뭔가 찾아 nhj12311.tistory.com 1. 윈도우 자바(JDK, JRE) 설치 대부분 많은 분들이 윈도우에 설치할 일이 많을것 같습니다. 윈도우 OS 버전에 맞는 설치 파일 다운로드까지 받으셨을..
IT를 전공하거나 아니면 실무를 접하다보면 이 놈의 ftp, ftps, sftp(ssh) 프로토콜에 대해서 이야길 하게 되거나 듣거나 사용하게 됩니다만 개념이라도 좀 정확하게 갈무리하고 접해야한다는 생각이 듭니다. 그냥 FTP 하면 파일질라나 사용하고 telnet 이나 ssh를 이용한다고 해서 putty만 사용할 줄 안다고 해서 다가 아닌것 같습니다. 적어도 IT를 공부하고 일을 해나가야 하는 입장이라면요. 다른 직군이라 하더라도 최소한의 기본 개념은 알고 가는 것이 좋을 것 같네요. 코더를 하려고 해도 기본적인 지식은 필요하니까요. 지난번에 http와 https에 대한 설명을 했으니 남은 대표적인 프로토콜에 대해서 알아보겠습니다. ( 알기 쉽게 설명하는 http와 https의 차이점 ) 이번 포스팅에서..
뭐 유명하신 코딩계의 유튜버님인 니꼴라스님이 리뷰를 하신 뒤 여러 유튜버와 여러 블로거들이 줄지어 Github Copilot AI 페어 프로그래머에 대해서 리뷰들을 하고 있습니다. 저도 경험차 안써볼수가 없으니 이걸 설치해보도록 하겠습니다. 과연 얼마나 코딩을 잘해줄지? 홈페이지 주소는 https://copilot.github.com/ 입니다. https://copilot.github.com/ GitHub Copilot · Your AI pair programmer GitHub Copilot works alongside you directly in your editor, suggesting whole lines or entire functions for you. copilot.github.com 접속하자..
최근에 활용해본 적이 있는 형태소 분석을 node.js로 해보려고 합니다. 형태소에 대해서 간략하게 알아봅시다. 1. 형태소란. 문장을 의미가 있는 가장 작은 단위로 나누는 것이죠. 예를 들어 '아버지가방에들어가신다.' 라고 있다면 ['아버지', '가', '방','에','들어가신다'] 머 이런식으로 나눈다는 거죠. 가방은 어미의 '가'와 '방'으로 나뉠수도 있고 '가방'으로 분리될 수도 있는거구요. 개발쪽에서 봤을 때는 일정한 글에서 가장 많이 사용되는 단어를 파악하는 용도라던지 유사 글을 찾는다던지 할 때 사용할 수 있을 것 같습니다. 형태소로 나누어 활용하려는 방안이 있다면 무엇에든 사용할 수 있겠죠. ? 그럼 기본적인 node.js 설치가 되어있다는 가정 하에 node.js 버전으로 형태소 분석을 ..
막연하게 자바 해쉬 테이블이나 해쉬 맵을 당연하게 사용하고 있었다. 이를 테면 자전거를 타는 방법은 아는데 남한테 설명을 하라고 하면 제대로 설명을 하지 못하는 것과 비슷한 느낌이다. 예전에 자바를 초기에 공부할 때 LinkedList를 직접 구현해서 사용해본적이 있었는데 10년이 지난 지금까지 정확하게 기억은 안나도 시간이 조금 주어지면 금방 다시 만들수 있을 것 같기도 한데... 암튼 해시 테이블, 해시맵 정리해보자. 아주 간단히 생각해보자면 키와 값을 저장하는 컨테이너 컬렉션이다. 자바 해시 테이블(HashTable) vs 해시맵(HashMap) 차이 비교 중복 키에 대한 처리 키가 같은 값을 두번 넣게 되면 초기 값을 유지하게 되고, 해시맵은 키가 같은 값을 두번 넣게 되면 두번째 값으로 덮어버리..
현재 개인 미니 프로젝트를 만들고 있는데 nuxt.js를 이용하고 있다. 아마 next.js를 비롯해서 vue.js 등등 webpack을 이용한 환경에서 주로 발생하는 것 같다. 내 환경에서 발생한 내용은 아래와 같다. ERROR Failed to compile with 2 errors friendly-errors 16:34:37 These dependencies were not found: friendly-errors 16:34:37 friendly-errors 16:34:37 * net in ./node_modules/redis/index.js friendly-errors 16:34:37 * tls in ./node_modules/redis/index.js friendly-errors 16:34:37..
최근 작은 개인 프로젝트로 인하여 ci/cd 설정할 일이 생겨서 설정을 진행했는데 아직 서비스가 불안정한 것 같아서 다시 젠킨스로 갈아타려고 한다. 지금 nuxt + vuetify 환경에서 개발을 진행하고 있으며 프로세스 관리로는 pm2의 클러스터링까지 묶어서 사용하려고 하고 있다. 그래서 깃허브 홈페이지에서 알려주는 대로 깃허브 액션을 설치하고 연동까지는 잘 진행되었다. 깃허브 레파지토리에 소스를 푸시하자마자 돌아가는 명령어들 ... 그것들이 깃허브 사이트에서 일목요연하게 보여지니까 기분이 좋았다. 그런데 내가 사용하기에는 치명적인 단점이 있었으니 nuxt 서비스를 깃허브액션으로 구동하고 나면 로그가 나오지가 않는다. 몇시간이고 삽질을 했는데도 고쳐지지가 않는다. 처음에는 권한 문제인가 해서 모든 권한..
최근 vuetify 로 개인 미니 프로젝트를 만들고 있는데 이런 증상이 많다. 아직 부트스트랩에 비교해서 충분히 성숙되지 못했다고 느끼는점이 개발 모드에서는 잘 되다가 실제 릴리즈 모드로 빌드하고 올리게 되면 스타일이 적용이 안되는 경우가 있다. 어쩔수 없이 스타일을 적용하는 방법을 변경하거나 스타일을 하나 별도로 추가해서 해결을 했다. before. 변경 전. 스타일이 적용이 되지 않는 문제 height="40vh" style="overflow-x:hidden;overflow-y:auto;" alfter 변경 후. height를 style에 추가해서 해결함. style="overflow-x:hidden;overflow-y:auto;height:40vh" 꼭 height 스타일을 추가해야 해결되는 것이 ..
프로젝트 생성할 때 깃허브에 먼저 만들고 내려받는 경우도 있겠지만 로컬에서 먼저 프로젝트를 간편하게 만드는 방법들이 많기 때문에 로컬에 있는 프로젝트를 올리고 싶은 경우들이 많을 겁니다. 이런 방법들을 매일 검색해서 처리하다보니 방법도 조금씩 달라서 가장 하기 쉬운 방법을 찾아봤습니다. 깃허브에 올릴 프로젝트 생성! 먼저 로컬에 아무 프로젝트나 만듬. D:\workspace> D:\workspace>mkdir project-tmp D:\workspace>cd project-tmp D:\workspace\project-tmp>dir/w D 드라이브의 볼륨: 새 볼륨 볼륨 일련 번호: F89F-63BC D:\workspace\project-tmp 디렉터리 [.] [..] 0개 파일 0 바이트 2개 디렉터리 ..
예전에 스프링과 타임리프 조합을 사용해보면서부터 SSR와 CSR의 적절한 조합이 최적의 프로젝트 환경이라고 생각을 해왔고 나중에 기회가 된다면 SSR + CSR을 조합해서 써봐야겠다고 다짐다짐을 했엇더랬다. 그런데다 최근 node.js 만능설과 vue.js에 빠진 내가 nuxt.js를 선택하지 않는 것은 거의 불가능에 가까운 일이었다. 그리고 UI/UX 프레임워크로는 부트스트랩과 vuetify 를 비교하다가 부트스트랩이 vue와 잘 맞지 않는 부분이 있고 bootstrap-vue 프로젝트 자체가 업데이트가 더딘 것이 보여서 최종적으로 vuetify 를 선택하게 됐다. vuetify 는 굉장히 업데이트가 잘 되고 있는 프로젝트로 보인다. 그리고 vue.js와 궁합도 당연히 최적화되어있고... 부트스트랩-v..
최근 범용 고유 식별자(汎用固有識別子, 영어: universally unique identifier, UUID)를 사용하기 위해서 틈틈히 알아보는 중인데요. 생각보다 구글에서도 원하는 자료를 찾기는 쉽지 않아서 애를 먹는 중입니다. 아니, 자료는 있는데 실제로 적용하기 위한 근거 자료로는 부족하다는 생각이 들어서 자료를 조사하고 있습니다. 일단 원하는 건 불특정 다수 클라이언트에게 키 값을 부여해서 식별하려는 값으로 사용하려는건데요. 중복 체크를 하지 않고 알고리즘으로 중복이 검증되지 않는 이 UUID 스펙을 얼마나 신뢰할 수 있는지 알아보려고 합니다. 1. UUID란? UUID는 128비트 수입니다. 표준 형식에서 UUID는 32개의 십육진수로 표현되며 총 36개 문자(32개 문자와 4개의 하이픈)로 ..
node를 이용하다보면 스케줄러를 이용할 일이 있는데 node 같은 경우엔 cron 사용방법을 구현한 라이브러리들이 인기가 많은 것 같다. 그 둘에 대한 비교 자료가 없어서 간단하게 비교하는 이야길 해보자. 1. os 스케줄러( cron) vs node 스케줄러 OS 스케줄러를 사용하게 되면 윈도우, 맥, 리눅스 os 별로 별도 스케줄러를 등록하고 관리해야 하는 단점이 있다. 대신 node 스케줄러보다 조금 더 안정적일 수 있고, 불필요하게 별도 스케줄러 프로세스를 띄우지 않아도 되니 리소스도 낭비 되지 않을 것이다. 또 node 프로세스가 죽는 경우 스케줄러 자체가 동작되지 않는 문제도 미연에 방지 할수 있다. 하지만 node 프로세스 관리 라이브러리인 pm2나 forever 같은 것까지 사용하게 되면..
얼마 전 , 비교적 최근 업무시간에 UTF8와 AL32UTF8에 대한 이야기가 나온적이 있다. 그냥 UTF8 종류 중 한개겠지라고 생각하고 넘기려다가 UTF8과 차이점이 무엇인지 비교되는 정보가 별로 없어서 간단하게 정리해본다. UTF8은 3byte 기준으로 문자열을 저장할 수 있다. 그 범위는 U+9999까지인데 AL32UTF8은 그 외 보충 문자열(Supplementary characters, 보조 문자) 는 U+ 10000에서 U+ 10FFFF까지 코드 포인트가 할당 된 문자까지 저장할 수 있는 타입이라고 생각하면 된다. 즉, U + FFFF( 3byte 표현) 보다 큰 유니 코드 문자다. 조금 유식하게 Compatibility Encoding Scheme for UTF-16: 8-Bit (CESU..