반응형 개발134 M1 MAC에서 VAGRANT 활용하기 Vagrant는 가상 머신 환경을 관리하고 자동화하는 도구로, 특히 로컬에서 개발 환경을 코드로 정의하고 프로비저닝하는 데 유용하다. 이번에는 Vagrant를 통해 로컬에서 VM을 다뤄보겠다.먼저 아래와 같이 준비를 진행하자. m1에서 Virtual Box가 아직 베타버전이라 vmware를 활용했다. brew tap hashicorp/tapbrew install hashicorp/tap/hashicorp-vagrantbrew install --cask vmware-fusion 이후 vagrant와 vmware를 연동하기 위한 플러그인을 설치하자.vagrant plugin install vagrant-vmware-desktop 그런데 vmware와 vagrant 플러그인을 다운로드 받아도 다음과 같은 문제.. 개발 2024. 11. 25. Java Virtual Thread 정리 이번 포스팅은 아래 영상을 정리한 글입니다.https://www.youtube.com/watch?v=BZMZIM-n4C0&t=2277s Virtual Thread 2018년 Project Loom으로 부터 시작된 경량 스레드 모델이다. jdk 21에서 정식 feature로 추가되었다. 기존 Java Thread 단점기존 자바 스레드는 생성 비용이 컸다. 우리가 스레드 풀을 사용하는 이유는 바로 기존 스레드 생성 비용이 크기 때문이다.기존 스레드는 공간적인 비용도 상당히 크다. 최대 2MB까지 사용하며 많은 메모리를 사용한다.JVM이 아닌 OS에 의해 스케줄링 된다. 스레드 생성 및 소멸과 같은 스케줄링 과정에서 항상 OS와 통신해야하므로 시스템 콜이 발생하는데, 시스템 콜 오버헤드가 발생한다. Virtu.. 개발/Java 2024. 9. 13. 스프링 배치 개선하기 정리 스프링 배치 성능에 관한 아래 두 영상을 간략하게 정리한 글입니다. Batch Performance 극한으로 끌어올리기https://www.youtube.com/watch?v=2IIwQDIi3ys&t=589sSpring Batch 애플리케이션 성능 향상을 위한 주요 팁https://www.youtube.com/watch?v=VSwWHHkdQI4&t=1011s Batch Performance 극한으로 끌어올리기 영상 정리대량 데이터 READbatch 성능 개선에서 제일 중요한 것은 Reader를 개선하는 것이다.일반적으로 Read의 복잡한 조건으로 인해 Write보다 성능의 더 큰 영향을 받는다.읽을 때 항상 Chunk 프로세싱이다. 예를 들어 천 만개를 1000개씩 나누어 1만번 처리한다.JpaPagi.. 개발/Spring Batch 2024. 9. 10. 컴퓨터가 소숫점 계산을 잘 하지 못하는 이유 이상한 소숫점 계산 컴퓨터는 소숫점 계산을 잘 하지 못한다고 한다.자바를 사용해 아래와 같은 테스트 코드를 만들어 보았다. public class CalculateExampleTest { @Test void test() { System.out.println(1.1 + 0.1 == 1.2); }} 어떤 값이 출력될까? 편하게 생각하면 '당연히 1.1 + 0.1은 1.2니까 true가 출력되겠네!' 라고 생각할 수 있다.눈으로 확인한 출력 값은 우리의 예상과 다르다. false가 출력됐다. 어떻게 false가 출력된 것일까..??이제 왜 이런일이 일어나는지 알아보자. 컴퓨터는 기본적으로 이진법을 사용한다. 0과 1만 사용하는 것이다.컴퓨터가 이진법을 사용하는 이유는 효율성은 물.. 개발 2024. 6. 13. Tomcat Connector 오늘은 지난시간에 자세히 다루지 못했던 Tomcat Connector에 대해 공부해보려고 한다. Connector는 클라이언트와의 요청을 처리해 서버(서블릿 컨테이너)로 넘겨주는 역할을 맡는다. Tomcat에는 크게 AJP Connector와 HTTP Connector 2가지가 있다.이 두 Connector는 BIO Connector(현재는 사용 X), NIO Connector, NIO2 Connector, Apr Connector로 구현된다. 참고로 BIO Connector는 Tomcat 9.0부터 사용할 수 없다.Tomcat 9.0부터 NIO 및 NIO2 Connector에서 OpenSSL을 사용하여 TLS(TLS/SSL) 암호화를 지원할 수 있다. 아래 표를 참고하면 커넥터에서 JSSE와 OpenS.. 개발 2024. 6. 3. @RequestBody 직렬화와 역직렬화 눈으로 확인하기 자바 스프링에서 @RequestBody 직렬화, 역직렬화에 대해 알아보겠다. Java에서 @RequestBody필자는 요청 바디에 json 객체를 담아 요청했다.따라서 헤더의 content-type은 application/json이다. @RequestBody를 사용하면 RequestResponseBodyMethodProcessor가 HTTP 요청을 우리가 정의한 자바 객체로 변환해준다. 그럼 어떻게 HTTP 요청을 자바 객체로 변환해주는지 살펴보자. 실습 코드는 아래와 같다.import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.s.. 개발/Spring MVC 2024. 5. 30. Apache Tomcat 서블릿 기반 스프링 MVC를 사용해 개발을 진행하고 있다면 서블릿 컨테이너이자 WAS(Web Application Server)로 대부분의 개발자들이 Tomcat을 선택할 것이다. 오늘은 많은 개발자들이 사용하고 있는 Tomcat에 대해 정리해보고자 한다.필자가 공식문서에서 참고한 Tomcat 문서의 버전은 10.1.24이다. Architecture전반적인 Tomcat 아키텍쳐와 그 구성요소를 살펴보겠다. 크게 Server, Service, Engine, Host, Connector, Context로 구성된다.Tomcat은 Servlet 사양의 빠르고 효율적인 구현을 목표로 설계되었다. ServerTomcat 환경에서 Server는 전체 컨테이너를 의미한다. 즉 Server는 전체 Catalina 서블릿.. 개발 2024. 5. 16. 자바에서 모니터가 동작하는 원리 (with synchronized) 모니터란 모니터란 뮤텍스나 세마포어보다 더 고수준의 동기화 기법이다. 전공 수업에서는 세마포어를 편리하게 사용하기 위해 인터페이스를 제공한 것이 모니터라고 배웠었다. 부족하지만 수업을 듣고 정리해 놓은 글이 있다. https://devdebin.tistory.com/16#%EC%84%B8%EB%A7%88%ED%8F%AC%EC%96%B4-1 임계 구역과 임계 구역 해결 방법 2021. 10. 2. 00:51 2022. 6. 22. 15:30 복습을 위한 수정 시작 프로세스는 독립적으로 작업을 할 수도 있고 공유된 자원을 가지고 공동 작업을 할 수도 있다고 이전 장에서 언급했다. 이번에는 본격적으로 devdebin.tistory.com 자바에서의 모니터 모든 자바 객체는 모니터를 가진다. 여러 스레드가 객체.. 개발/Java 2023. 12. 28. Java Thread (version 2) Java Thread 자바 스레드는 JVM에서 User Thread를 생성할 때 시스템 콜을 통해서 커널에서 생성된 커널 스레드와 1:1로 매핑이 되어 최종적으로 커널에서 관리된다. JVM에서 스레드를 생성할 때마다 커널에서 자바 스레드와 대응하는 커널 스레드를 생성한다. 자바에서는 플랫폼 스레드로 정의되어 있다. 즉 OS 플랫폼에 따라 JVM이 사용자 스레드를 매핑하게 된다. 스레드 생성은 Thread 클래스를 상속하는 방법과 Runnable 인터페이스(함수형 인터페이스)를 구현하는 방법이 있다. Thread 실행 및 종료 자바 스레드는 OS 스케줄러에 의해 실행 순서가 결정되며 스레드 실행 시점을 JVM에서 제어할 수 없다. 새로운 스레드는 현재 스레드와 독립적으로 실행되고 최대 한번 시작할 수 있고.. 개발/Java 2023. 12. 14. equals()와 hashCode() 자바에서 모든 클래스는 Object 클래스를 부모 클래스로 가진다. Object 클래스에는 equals()와 hashCode()가 있다. 오늘은 이 둘에 대해 정리해보려고 한다. 동등성과 동일성 동일성은 두 객체가 동일한 인스턴스임을 의미하며 == 연산자로 확인이 가능하다. 동등이란 두 객체가 동일한 상태나 값을 갖는다는 것을 의미하며, equals 메서드로 확인할 수 있다. 동일성은 동등하다고 말할 수 있지만, 동등하다고해서 동일성을 가진다고 말할 수는 없다. equals() public boolean equals(Object obj) { return (this == obj); } equals()는 객체가 동등한지(논리적 동치성, 동등성)를 검사한다. 기본적으로 Object 클래스의 equals 메서드.. 개발/Java 2023. 12. 13. Java MetaSpace 오늘은 Java 8 버전에서 등장한 MetaSpace에 대해 알아보자. Permanent Generation 자바 7버전까지는 Permanent Generation이라는 영역이 존재했다. 줄여서 PermGen라고 부른다. PermGen은 로드되는 클래스, 메서드 등에 관한 정보 등 메타 데이터(리플렉션)를 저장한다. 모든 static 메서드, static 변수를 저장한다. Java 7 버전까지는 String Pool도 PermGen의 일부 바이트 코드, 이름, JIT 정보도 가지고 있다. 이 영역은 제한된 메모리가 큰 단점이다. 제한 된 메모리로 인해 Out Of Memory(OOM) 문제가 발생할 수 있다. Permanent Generation은 Heap 영역인가? 위 사진만보면 PermGen은 Hea.. 개발/Java 2023. 12. 12. GC (Garbage Collection) 오늘은 GC에 대해 공부를 진행해보겠습니다. Stop The World stop-the-world는 GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다. stop-the-world가 발생하면 GC를 실행하는 스레드를 제외한 나머지 스레드는 모두 작업을 멈춘다. GC 작업을 완료하 이후에야 중단했던 작업을 다시 시작한다. 어떤 GC 알고리즘을 사용하더라도 stop-the-world는 발생한다. 대개의 GC 튜닝은 stop-the-world 시간을 줄이는 것이다. GC 자바에서는 개발자가 프로그램 코드로 메모리를 명시적으로 해제하지 않기 때문에 Garbage Collector가 더 이상 필요 없는 객체를 찾아 지우는 작업을 한다. 필요 없는 객체란 유효한 참조가 없어진 객체다. 즉 JNI 스택에.. 개발/Java 2023. 12. 11. 이전 1 2 3 4 ··· 12 다음 반응형