본문 바로가기

공부방

(97)
다양한 종류의 Garbage Collection(가비지 컬렉션) 알고리즘 (2/2) 1. 다양한 Garbage Collection(가비지 컬렉션) 알고리즘 JVM이 메모리를 자동으로 관리해주는 것은 개발자의 입장에서 상당한 메리트이다. 하지만 문제는 GC를 수행하기 위해 Stop The World에 의해 애플리케이션이 중지되는 것에 있다. Heap의 사이즈가 커지면서 애플리케이션의 지연(Suspend) 현상이 두드러지게 되었고, 이를 막기 위해 다양한 Garbage Collection(가비지 컬렉션) 알고리즘을 지원하고 있다. [ Serial GC ] Serial GC의 Young 영역은 앞서 설명한 알고리즘(Mark Sweep)대로 수행된다. 하지만 Old 영역에서는 Mark Sweep Compact 알고리즘이 사용되는데, 기존의 Mark Sweep에 Compact라는 작업이 추가되었..
[Java] Garbage Collection(가비지 컬렉션)의 개념 및 동작 원리 (1/2) 1. Garbage Collection(가비지 컬렉션)이란? [ Garbage Collection(가비지 컬렉션)이란? ] 프로그램을 개발 하다 보면 유효하지 않은 메모리인 가바지(Garbage)가 발생하게 된다. C언어를 이용하면 free()라는 함수를 통해 직접 메모리를 해제해주어야 한다. 하지만 Java나 Kotlin을 이용해 개발을 하다 보면 개발자가 메모리를 직접 해제해주는 일이 없다. 그 이유는 JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리해주기 때문이다. 대신 Java에서 명시적으로 불필요한 데이터를 표현하기 위해서 일반적으로 null을 선언해준다. 예를 들어 아래와 같은 코드가 있다고 가정하자. Person person = new Person(); person.setName("Ma..
노드 설치 1. 리눅스 OS version 확인 cat /etc/redhat-release 2. nvm 설치 wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash 3. reboot 또는 소스 재시작한 뒤 버전 확인 #reboot source ~/.bashrc nvm --version 4. 원하는 노드 버전을 설치한다 nvm install 14.16.0 5. Nginx 설치 /etc/yum.repos.d 경로에 nginx.repo 파일을 추가하고 내용은 다음과 같이 작성한다. Nginx 설치는 root 계정으로 진행한다. [nginx-stable] name=nginx stable repo baseurl=http://nginx...
equals, hashcode 배열에 대한 공부를 하는데 문자열 비교와 배열 복사에 대한 내용을 만났다. 관련하여 이전에 공부했던 개념을 리마인드도 하고 새롭게 문서를 찾아 보며 공부를 또 하면 좋을 것 같아 해당 주제에 대해 조사해보았다. equals() 우선 정말 좋은 원본 글을 또 망개님이 다시 정리한 글이 있어 해당 글을 참고했다는 것을 미리 말한다. equals와 hashCode는 Object 클래스에 정의되어 있다. 따라서 Java의 모든 객체는 이 두 함수를 상속받고 있게 된다. 그래서 equals() 란? 2개의 객체가 동일한지 검사하기 위해 사용 2개의 객체가 가리키는 곳이 동일한 메모리 주소일 경우에만 동일한 객체this == obj 가 주소를 비교하는 것이다. 하지만 개발을 하다 보면 equals()는 내 의도와는..
ipv4와 ipv6의 차이
deleteAll 대신 deleteAllInBatch를 사용하자 최근 받은 코드 리뷰에서 deleteAll 대신에 deleteAllInBatch 를 사용하라는 리뷰를 받았다. 내부적인 구현이 어떠한지 궁금하여 알아본 내용을 포스팅한다 최근에 받은 코드리뷰 이런 리뷰를 받게 되었다. repository.deleteAll() 과 repository.deleteAllInBatch 는 차이가 무엇일까? repository.deleteAll() /* * (non-Javadoc) * @see org.springframework.data.repository.Repository#deleteAll() */ @Override @Transactional public void deleteAll() { for (T element : findAll()) { delete(element); } ..
동기-비동기, 블로킹-논블로킹 사실 저는 동기-비동기와 블로킹-논블로킹을 제대로 알지 못하고 있었습니다. 막연하게 동기면 다음 작업 처리 못하고 비동기면 계속 작업하는거 아니야?라고 생각했었습니다. (이러면 동기와 블로킹의 차이가 없어져버리죠) 공부해보니 동기-비동기와 블로킹-논블로킹은 좀 다른 개념이었습니다. 그리고 이해하기 쉽지 않은 헷갈리는 개념이기도 했습니다. 앞으로 비동기 처리나 논블로킹 IO를 활용할 일이 많을 것으로 예상하기 때문에 미리 정리를 하는 시간은 가져보려 합니다. 설명의 편의를 위해 함수 또는 작업이라는 용어를 사용하게 될텐데요, 단순히 코드에 작성한 함수 뿐 아니라 IO를 진행하는 프로세스, 네트워크 모델에서의 요청 및 응답 등에도 적용되는 개념이라고 생각해주시면 편할 것 같습니다. 저는 설명의 편의를 위해 ..
Tomcat 설정 1. conf 파일 확인 참고 https://pshcode.tistory.com/108 server.xml: 톰캣 설정에서 가장 중요한 파일이다. 톰캣의 Service, Connector(포트 설정 등), Host 정보와 같은 중요한 정보들을 설정한다. catalina.policy: 보안 정책 권한 설정 파일이다. JVM에 의해서 웹 애플리케이션에 강제적으로 보안 정책 권한을 설정한다. catalina.properties: 서버를 시작할 때 검색하는 서버, 공유로더, jar 등의 공유정보를 포함한다. tomcat-users.xml: 사용자 권한과 인증 정보를 설정한다. - 톰캣 관리자를 사용할 때 활용되는 정보이며, 기본적으로 주석처리가 되어 있다. 주석해제 및 설정을 하여야 톰캣 관리자가 활성화 된다...