본문 바로가기

Development28

귀찮지만 확실한 랜섬웨어 예방 (윈도우 디펜더만 사용) 목차 서론 평소 별도의 백업 방법을 가지고 있다면 몰라도, 일반적으로 개인이 백업 방법을 마련해두긴 어려울 수 있다. 또 주기적으로 백업을 하더라도, 모든 데이터에대해 백업을 실시간을 계속 하긴 힘들다. 그렇다고 백신을 설치하자니 어떤게 좋은지도 모르겠고, 언제나 창이 방패보다 우세하므로 백신을 깔아도 불안하긴 마찬가지다. 내 경우엔 백신을 추가로 설치하는것도 싫고, 윈도우 디펜더만 쓰고 싶다. 그리고 좀 귀찮더라도 확실한 방법이 더 좋다. 정확힌 걸리는건 못막더라도, 아무튼 데이터를 살리는게 목적이다. 데이터만 무사하다면 랜섬웨어가 걸려도 그냥 한번 밀어버리고 다시 원래대로 되돌려주면 될 것이다. 확실한 방법이란, 그냥 본인이 허용한 프로그램 이외의 프로그램에 대한 파일 수정(UPDATE, CREATE.. 2023. 3. 20.
자바에서 N개짜리 배열 생성은 O(N)이 걸린다. (C++, C 도 마찬가지) 혹시 C를 써봤다면, 자바에서는 배열 생성하면 모든 값이 초기화가 되어있는게 신기한 적이 있을 것이다. 배열을 만들어서 무언가 담고 싶을 때 C계열에서는 메모리 할당만 받고 끝나서 금방 끝나지만, 자바의 경우 배열을 만들고 초기화까지 해주는 아주 친-절한 언어이다. 그럼 단순히 int형 RxC 짜리 배열(int[][] arr = new int[R][C])을 만들 때 시간 복잡도가 어떻게 될까? 당연히 O(1)일 것 같지만, 자바에선 무려 O(RC)가 필요하다. 이하 10만x1만 짜리 배열 하나 만든건데 이것만 1초가 넘게 걸린다. 그럼 이하 코드를 보자. 알고리즘을 풀 때 bfs를 여러번 돌릴 수 있다. 이 때, 사실 하나의 방문체크로 가능하지만(예를들어 하나의 큰 배열에서 빈 칸들의 구역을 나눌 때) .. 2023. 3. 13.
자바에서 문자열 합칠 때 '+' 연산을 쓰지 마세요! (StringBuilder, StringJoiner, String.join, StringBuffer) 목차 최근 String에 대한 '+' 연산을 사용해 timeout이 나고있는걸 봤습니다. 해당 코드를 디버깅해본 개발자는 timeout이라는 exception 자체를 해결하려 했겠지만, 실은 로직이 느린게 문제입니다. 일종의 XY problem 입니다. 개발자로써 대부분의 문제야 구글링해보면 해결할 수 있지만, 위의 경우 이 글의 내용에 대해 모르면 exception은 timeout으로 나오니 구글링으로 알 수 없는 내용입니다. 이하 글에서 시간복잡도 표현을 위해 big-O 표기가 나오는데, O(N)과 같은 표기를 모르거나 시간복잡도에 대해 모른다면 '알고리즘 시간복잡도에 대해' 글을 참고해주세요. 결론부터 말하자면 문자열을 합쳐서 만들 때 StringBuilder를 사용해야 합니다. StringBuil.. 2023. 3. 7.
깃허브, 인텔리제이 마크다운(md)에 다이어그램(mermaid) 넣기 인텔리제이와 깃허브 md 파일에 다이어그램을 넣고 싶었다. 예전에 대학생때 사용하던 plantuml이 코드처럼 작성하면 알아서 UML로 바꿔주던 툴이어서 이게 적용되는지 우선 확인해봤다. 대강 살펴보니 좀 적용하기 지저분한 것 같긴했지만 github과 인텔리제이에서 모두 사용 가능하긴 했다. 하지만 적용이 살짝 지저분해 보였고(md 파일만 가지고 안되는듯), 공식 홈페이지를 들어가보니 상당히 선넘는 광고가 떠있어서 (2023-02-27 기준 글을 아예 덮는 광고가 떠있다.) 수틀려서 다른걸 찾아보기로 했다. mermaid 라는게 내가 원하듯이 코드같이 작성하면 알아서 다이어그램을 만들어주고, 인텔리제이도 인텔리제이에서 만들어둔 플러그인이 있어서 깔끔하게 한방에 적용되고, 깃헙도 Native support.. 2023. 2. 27.
구글 번역기 틀어두고 개발하는 분들을 위한 인텔리제이 플러그인 영어가 부족해 개발할 때 구글 번역기를 틀어두면서 변수명, 함수명, 클래스명 등을 정할 때 참고하는 편입니다. reference에 있는 인프런 강의를 보다가 좋은 플러그인을 알게되어 공유해봅니다. Translation 플러그인 설치 - File - Settings - Plugins - "Translation" 검색 (못찾겠으면 플러그인 링크) 후 설치해주시고, 인텔리제이 재시작 해주시면 됩니다. 번역 엔진 선택 - File - Settings - Tools - Translation (플러그인 설치 후 들어갈 수 있음) 에서 번역 엔진 선택이 가능합니다. 전 구글 번역기를 자주 쓰니 구글 번역기로 했습니다. 사용법 - 영어로 된 코드 번역 마우스 우클릭을 누르면 Translation 메뉴가 생깁니다. 혹은.. 2023. 2. 24.
인텔리제이 코드창 usage, usages 힌트 제거 (remove intellij usage hints) 2023-02-18 내용 추가 : 삭제 대신 여러줄만 안되게 우측으로 보내기! (맨 아래쪽) 몇달 전(얼마 안됨) 인텔리제이 업뎃을 하면서 코드내에 usage, usages 힌트가 추가되었었다. 물론 좋은 기능이긴 하지만, 개인적으로 매번 보이면서 한줄씩 잡아먹는 것 처럼 보이니깐 오히려 코드 짜는데 방해된다. 어차피 알고 싶으면 Alt+F7을 눌러주면 나온다. 그러니 저걸 제거해보자. 방법은 간단하긴 한데 찾긴 어려웠다. 영어가 딸리기도 하고, 최근에 추가된거라 검색해도 딱히 나오지가 않았다. usage 자체도 이미 기능들이 있던터라 다른 기능으로 검색될때가 많았다. 그래서 그냥 settings에서 usage로 검색해서 나오는걸 확인해보면서 찾았다. 아무튼 결론은 file -> settings -> E.. 2023. 2. 18.
스프링부트 3.0이상 Spring Security 기본 세팅 (스프링 시큐리티) 목차 1. 시작하기 전에 1.1 설정 이해 보다는 당장 시큐리티 설정 복붙이 필요한 분들에게 이하 글에서는 import 를 제외하고 작성했고, 코드들이 글에 작성되어 있다보니 완전 초보라면 이해하기 힘들 것 같습니다. 또는 당장 급하게 복붙할 스프링 시큐리티 기본 세팅이 된 프로젝트를 찾는 경우도 있을겁니다. 그러니 우선 예시 프로젝트를 첨부합니다. 이 글은 이하의 예시 프로젝트를 만들기 위해 세팅하는 과정을 다룹니다. - 프로젝트 (스프링부트 3.0.2 기준) : github (main 브랜치를 보시면 됩니다. base-without-spring-security 브랜치는 이 글을 따라하면서 설정을 이해할 분들이 받아서 실습 해보실 수 있게 스프링 시큐리티 설정을 제거한 프로젝트 입니다.) 1.2 스프링.. 2023. 2. 10.
스프링 부트 2.0에서 3.0 스프링 시큐리티 마이그레이션 (변경점) 목차 스프링 부트 3.0 부터 스프링 시큐리티 6.0.0 이상의 버전이 적용되었습니다. 스프링 부트 2.7.8 까지는 deprecated는 되었더라도 기존 설정대로 대부분 사용 가능했으나, 스프링 부트 3.0 부터는 아예 삭제된 부분들이 있어서 마이그레이션 시 주의할 부분(변경점)에 대해 다룹니다. - 스프링 부트 2.7 이하 스프링 시큐리티 기본 세팅 : 링크 - 스프링 부트 3.0 이상 스프링 시큐리티 기본 세팅 : 작성중 0. 스프링 시큐리티 설정 마이그레이션 예시 완전히 동일한 세팅은 아니지만, 스프링 부트 2.6 기반으로 작성된 기본 세팅 코드와 스프링 부트 3.0 기반으로 작성된 기본 세팅 코드 입니다. 이하에 나올 변경점들이 적용되어 있는걸 코드로 볼 수 있습니다.(각각 위 2.7 이하 기본.. 2023. 2. 9.
자바 날짜 관련 코딩 시 Date와 Calendar를 쓰지 마세요! 결론 : 날짜 관련 코드짤 때 Date, Calendar 쓰지 마세요! Date(jdk 1.0), Calendar(jdk 1.1) 클래스의 문제점 - 불변 객체가 아님. setter가 존재하므로 Calendar나 Date 객체가 여러 객체에서 공유되면 한 곳에서 바꾼 값이 다른 곳에 영향을 미칠 수 있음. - int 상수 필드의 남용. CalendarSECOND 같은 상수 필드때문에, 여기에 Calendar.JUNE 같은 엉뚱한게 들어가도 컴파일 시점에 확인할 방법이 없음. - 헷갈리는 월 지정. Date 클래스에서 1월을 0부터 표현하며, Calendar에서도 마찬가지. 따라서 1582년 10월 4일은 다음과 같이 작성해야 하며 당연히 휴먼에러가 많이 나옴. calendar.set(1582, 9, 4).. 2023. 2. 6.
인텔리제이 JUnit 테스트 리포트 한글 깨짐 해결법 문제 인텔리제이에서 JUnit5를 사용해 테스트 돌릴 시 한글로 설정해둔 DisplayName이 깨져서 나왔다. @DisplayName("생성함") 해결법 1. shift를 두 번 눌러준다. 2. "edit vm" 쳐줘서 저거 눌러준다. 3. 이하의 문구를 추가해준다. -Dfile.encoding=UTF-8 4. 인텔리제이를 껐다킨다. 5. 다시해보면 잘 뜬다. 2022. 12. 15.