본문 바로가기

전체 글

(133)
[Docker] sudo 없이 docker 명령어 사용하기 1. 현재 사용자를 docker group에 포함 sudo usermod -aG docker ${USER} 2. 터미널 재시작 후 결과 확인 id -nG
JVM의 힙 & 스택 메모리 JVM의 스택과 힙메모리 영역에 대해 아는 만큼 설명해주실 수 있을까요? 자바의 메모리 영역 자바 프로그램이 실행되면 JVM(자바 가상 머신)은 OS로부터 메모리를 할당받고, 그 메모리를 용도에 따라서 여러 영역으로 나누어 관리합니다. JVM의 메모리 공간(Runtime Data Area)은 크게 Method(Static)영역, Stack 영역, Heap 영역으로 구분되고 데이터 타입(자료형)에 따라 각 영역에 나누어 할당 되게 된다. 컴파일러에 .java -> .class컴파일 클래스 로더에 의해서 클래스 파일을 메모리 영역에 로드 후 초기화 작업을 수행 메모리 영역에 Static(Method)부터 로드가 된다. 클래스 로드가 끝난 후 JVM은 main 메소드를 찾아 지역변수, 객체변수, 참조변수를 스..
[Kafka] Kafka Topic 삭제 Docker 에 Kafka가 설치되어있다고 가정한다. (base) bagjeongmin@bagjeongmin-ui-MacBookAir ~ % docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6ddf989d6e5b wurstmeister/kafka "start-kafka.sh" 42 hours ago Up 2 hours 0.0.0.0:9092->9092/tcp kafka f6443c680f8c wurstmeister/zookeeper "/bin/sh -c '/usr/sb…" 42 hours ago Up 2 hours 22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp zookeeper c38864..
[Java] 컴파일되는 과정 컴파일되는 과정에 대해 설명해주세요. 자바는 OS에 독립적인 특징을 가지고 있다. JVM(Java Vitual Machine) 덕분이다. 컴파일 순서 개발자가 자바 소스코드(.java)를 작성합니다. 자바 컴파일러가 자바 소스코드(.java)파일을 읽어 바이트코드(.class)코드로 컴파일 합니다. 바이트코드(.class)파일은 아직 컴퓨터가 읽을 수 없는 JVM(자바 가상 머신)이 읽을 수 있는 코드이다.(java -> class) 컴파일된 바이트코드(.class)를 JVM의 클래스로더(Class Loader)에게 전달합니다. 클래스 로더는 동적로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Runtime Data Area의 Method Area), 즉..
[Docker/Kafka] zookeeper/Kafka 설치 로컬에서 설치해봐도.. 강의를 따라서 설치해봐도 도저히 설치되지 않았는데 docker로 설치하는것도 안됐는데 한 블로그 그대로 하니 설치가 되었다. 하루내내 삽질한 기록 Zookeeper 컨테이너 이미지 가져오기 docker pull wurstmeister/zookeeper Kafka 컨테이너 이미지 가져오기 docker pull wurstmeister/kafka docker-compose.yml # compose 파일 버전 version: '3' services: # 서비스 명 zookeeper: # 사용할 이미지 image: wurstmeister/zookeeper # 컨테이너명 설정 container_name: zookeeper # 접근 포트 설정 (컨테이너 외부:컨테이너 내부) ports: - "..
동시성제어(1) - Redis 레이스 컨디션(race condition) @Service public class ApplyService { ... public void apply(Long userId){ long count = couponRepository.count(); if(count > 100){ return; } couponRepository.save(new Coupon(userId)); } } TestCode @Test public void 여러명응모() throws InterruptedException { int threadCount = 1000; ExecutorService executorService = Executors.newFixedThreadPool(32); //다른스레드에서 수행해주는 작업을 기다려주는 클래스 C..
[Java] JVM이란 무엇인지? 왜 필요한지? JVM이란 Java Virtual Machine 의 줄임말로, Java Byte Code 를 운영체제에 맞게 해석해주는 역할을 한다. 즉, 작성한 자바 프로그램의 실행 환경을 제공하는 자바 프로그램의 구동 엔진이다. Java compiler 는 .java 파일을 .class 라는 자바 바이트코드로 변환시켜주는데 Byte Code 는 기계어(Native Code)가 아니므로 OS 에서 바로 실행이 되지 않는다. 이때 JVM은 OS가 Byte Code 를 이해할 수 있도록 해석해주는 역할을 담당한다. JVM은 메모리 관리도 담당한다. 이를 '가비지 컬렉터'라고 하는데, 가비지 컬렉터는 Java7부터 힙 영역의 객체들을 관리하는 역할을 담당한다.
[JPA] 더티 체킹(dirty checking) 정리 JPA의 더티체킹이란 무엇인가요? 더티 체킹이란 영속성 컨테이너가 관리하는 엔티티의 상태를 감지해서, 변경된 부분이 있다면 자동으로 트렌젝션이 끝나는 시점에 데이터베이스 반영하는 기능이다. dirty는 "엔티티 데이터의 변경된 부분"을 뜻하며 dirty checking은 변경된 부분을 감지한다는 의미이다. 따라서 개발자가 update에 관련된 쿼리를 작성하지 않아도 되기 때문에, 코드의 복잡성을 줄일 수 있다는 특징이 있다. 더티체킹의 순서 영속성 컨텍스트는 엔티티를 조회할 때 시작되며, 이후 변경을 감지한다. 준영속/비영속 상태의 엔티티는 더티 체킹의 대상이 되지 못한다. Transaction이 커밋되기 전까지는 영속성 컨텍스트는 변경 사항을 추적하고, DB에 반영하지 않는다. Transaction이 ..