본문 바로가기

Development41

Spring Initializr 에서 선택한 자바 버전은 어떤 의미일까? 목차 Spring Initializr는 자바 버전을 선택할 수 있다! 근데 알다시피 스프링 부트 3.0 부터는 자바 17 이상을 써야 하는데, Spring Initializr는 아무튼 버튼은 그대로 표출되어 있다. 이와 관련된 에러는 '스프링부트 3.0.0 프로젝트 생성시 에러 해결법' 에서 볼 수 있다. 그럼 궁금한건 그럼 저 "자바 버전을 선택하는게 어떤 의미가 있나?" 라는 부분이었다. 자바 버전을 변경하면 바뀌는 부분 스프링부트 2.7.X 버전이하일 경우 자바 버전을 바꾸면 변경되는 부분은 build.gradle의 sourceCompatibility 부분이다. 그리고 스프링부트 3.0.x 버전의 경우, 분명 3.0.0 초창기에는 Spring Initializr로 생성 시 17버전이 아니라면 저 부.. 2023. 4. 3.
IntelliJ는 왜 jdk(java)를 설치 안해도 동작할까? 어찌보면 당연한내용인데, 인텔리제이를 처음 썼을 땐 엄청 신기했던 것 같다. 인텔리제이의 경우 jdk를 설치하지 않아도 잘 동작한다. 혹시 당연히 자바를 설치해야 한다고 생각해서 따로 설치하고 환경변수까지 등록해서 사용중인 사람들도 있을 것 같은데, 사실 환경변수에 등록 안되있어도 인텔리제이는 혼자서 잘 동작한다. 프로젝트마다 독립적으로 동작하기 위해 jdk를 환경변수로 등록 안하고 사용하는게 더 좋을 것 같다. 그렇지 않으면 프로젝트마다 실행하기 전에 환경변수를 가서 버전 바꿔주거나, 리눅스쪽이라면 sdkman 같은걸로 자바 버전을 변경해주면서 써야 할 것이다. 인텔리제이에서는 File -> Project Structure에서 자바 버전을 선택할 수 있고, 또 원한다면 추가할 수 있다. 이렇게 받아진 .. 2023. 3. 28.
귀찮지만 확실한 랜섬웨어 예방 (윈도우 디펜더만 사용) 목차 서론 평소 별도의 백업 방법을 가지고 있다면 몰라도, 일반적으로 개인이 백업 방법을 마련해두긴 어려울 수 있다. 또 주기적으로 백업을 하더라도, 모든 데이터에대해 백업을 실시간을 계속 하긴 힘들다. 그렇다고 백신을 설치하자니 어떤게 좋은지도 모르겠고, 언제나 창이 방패보다 우세하므로 백신을 깔아도 불안하긴 마찬가지다. 내 경우엔 백신을 추가로 설치하는것도 싫고, 윈도우 디펜더만 쓰고 싶다. 그리고 좀 귀찮더라도 확실한 방법이 더 좋다. 정확힌 걸리는건 못막더라도, 아무튼 데이터를 살리는게 목적이다. 데이터만 무사하다면 랜섬웨어가 걸려도 그냥 한번 밀어버리고 다시 원래대로 되돌려주면 될 것이다. 확실한 방법이란, 그냥 본인이 허용한 프로그램 이외의 프로그램에 대한 파일 수정(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를 사용해야 합니다. 물론 언제나 팀의 .. 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.
스프링부트 헥사고날 아키텍쳐 코드 구조 스터디 메인 페이지 * 헥사고날 아키텍쳐를 이제 공부 시작해보는거라 틀린 내용이 있을 수 있습니다. 헥사고날 아키텍쳐 스터디를 시작했는데, 책(만들면서 배우는 헥사고날 아키텍처 설계와 구현)의 개념들이 초반부터 좀 어려웠다. 구체적인 코드를 먼저 짜보지 않고 설명만 보면 너무 이해가 더딜 것 같았다. 내 경우에 스프링부트로 프로젝트를 만들 때 사용할 아키텍쳐를 공부해보기 위해 시작한거라 책에서 설명한 헥사고날 구조가 스프링부트에 어떤식으로 적용될지부터 감이 와야 이후 내용을 진행할 수 있을거라 생각했다. 그래서 책의 내용을 보고 예상되는 코드 구조를 한번 짜봤다. 현업에서 현재 헥사고날 아키텍쳐를 적용중인 분께 여쭤보니 다행히 코드 구조 자체는 헥사고날 구조가 맞다고 들어서 만들어본 코드를 기준으로 헥사.. 2023. 2. 17.
[이펙티브 자바 정리] 2장 - 객체 생성과 파괴 스터디 메인 페이지 목차 * 책 내용 자체 정리 보다는 제가 각 아이템을 이해한 방식대로 제 생각을 주저리주저리 적는 글 입니다. 따라서 틀린 내용이 있을 수 있습니다. 2장. 객체 생성과 파괴 아이템 1 - 생성자 대신 정적 팩터리 메서드를 고려하라 장점 1 - 이름을 가질 수 있다. 생성자에는 이름을 줄 수 없으므로 실수의 여지가 많다. 또한 생성자에 어떠한 의미를 부여하기도 힘들다. 따라서 정적 팩터리 메소드에 이름을 주면 사용하는 쪽에서도 실수의 여지를 많이 줄일 수 있다. 이하 코드에서 생성자를 통한 생성은 타입 혹은 boolean 처럼 판단 기준을 넘겨줘야 한다. 정적 팩터리 메서드를 사용한게 더 깔끔하고 실수의 여지도 적을 것 같다. new Member("nahwasa", MemberType.. 2023. 2. 17.