자바웹프로그래밍
-
비관적 락(Pessimistic Lock)과 낙관적 락(Optimistic Lock) 차이 with JPA자바웹프로그래밍/JPA 2024. 12. 18. 16:07
1. 비관적 락(Pessimistic Lock)특징:데이터에 대한 충돌이 빈번할 것으로 예상될 때 사용하는 방법.데이터가 다른 트랜잭션에 의해 변경되지 않도록 **락(Lock)**을 이용해 강제적으로 제어.데이터에 접근하려는 시점에 바로 락을 걸어서 다른 트랜잭션이 데이터를 읽거나 수정하지 못하게 한다.데이터의 일관성을 보장하지만, 성능에 영향을 줄 수 있음.장점:데이터 충돌 가능성을 완벽히 방지.데이터의 신뢰성이 중요하거나 다수의 사용자 간 충돌이 예상될 때 적합.단점:락을 사용하기 때문에 성능이 저하될 가능성이 있음.데드락(Deadlock) 상황이 발생할 수 있음.JPA에서의 사용: JPA에서는 @Lock 어노테이션과 엔티티 매니저의 lock() 메서드를 통해 비관적 락을 구현합니다. @Lock(Lo..
-
자바의 타입 시스템에서 참조 타입과 원시 타입(또는 기본형 타입)을 구분한다는것은 무엇을 의미하는가?자바웹프로그래밍/JAVA 2024. 12. 5. 15:35
1. 원시 타입 (Primitive Types)원시 타입은 자바에서 제공하는 기본 데이터 타입입니다. 원시 타입 변수는 값을 직접 저장합니다. 이러한 변수는 메모리 상에 값을 직접 저장하며, 값 자체를 다룹니다. 자바에서 원시 타입에는 다음과 같은 데이터 타입들이 있습니다:int (정수)char (문자)boolean (참/거짓)float, double (실수)byte, short, long (정수 타입의 다른 크기들)원시 타입 변수의 동작:원시 타입의 변수는 값 자체를 저장하고, == 연산자로 비교할 때 값이 같으면 true를 반환합니다.원시 타입 변수는 스택(stack) 메모리에 저장됩니다int x = 5;int y = 5;System.out.println(x == y); // true (값이 같음)..
-
CDN은 왜 사용할까? GSLB는 무엇일까?자바웹프로그래밍 2024. 10. 4. 09:50
CDN(Content Delivery Network)을 사용하는 이유는 주로 성능 향상, 사용자 경험 개선, 그리고 서버 부하 감소를 위함입니다. 주요 이유는 다음과 같습니다:전송 속도 향상: CDN은 전 세계에 분산된 서버를 통해 콘텐츠를 사용자에게 제공하기 때문에, 사용자와 가장 가까운 서버에서 데이터를 전송합니다. 이를 통해 지연 시간을 줄이고 웹 페이지 로딩 속도를 빠르게 합니다.서버 부하 분산: 많은 사용자가 동시에 접근할 때 하나의 서버에만 요청이 몰리는 경우 서버가 과부하되거나 다운될 수 있습니다. CDN은 여러 서버로 트래픽을 분산시켜 서버 부하를 줄여줍니다.높은 가용성 및 신뢰성: CDN은 여러 지역에 서버를 분산시켜 두기 때문에 한 지역의 서버에 문제가 생기더라도 다른 서버가 이를 대신..
-
로컬 캐시(Local Cache)와 글로벌 캐시(Global Cache)는 캐시의 범위와 사용 방법자바웹프로그래밍 2024. 9. 30. 14:54
1. 로컬 캐시 (Local Cache)로컬 캐시는 개별 애플리케이션 인스턴스(또는 서버)의 메모리에 저장되는 캐시입니다. 특정 서버 또는 애플리케이션 프로세스에만 유효하고, 다른 서버나 애플리케이션 인스턴스와 공유되지 않습니다. 주로 서버나 애플리케이션의 성능을 높이기 위해 자주 접근하는 데이터를 메모리에 저장하는 방식입니다.특징:빠른 접근 속도: 메모리 내에 캐시되어 있어 매우 빠른 접근이 가능하며, 네트워크 통신이 필요 없습니다.서버별 독립성: 각 서버나 애플리케이션 인스턴스가 자신만의 캐시를 유지합니다. 서로 다른 서버 간에는 캐시가 공유되지 않기 때문에 다른 서버의 캐시 업데이트를 반영할 수 없습니다.스케일 문제: 여러 대의 서버가 있는 경우, 각 서버가 다른 버전의 캐시를 가지고 있을 수 있습..
-
Http1.1 vs http2.0 차이점 및 분석자바웹프로그래밍 2024. 9. 12. 22:26
HTTP/1.1과 HTTP/2.0의 주요 차이점은 웹 통신 방식과 성능 최적화에 있습니다. 간단하게 설명하자면, HTTP/2.0은 HTTP/1.1의 한계를 극복하고 더 빠르고 효율적인 웹 통신을 지원하기 위해 개발된 버전입니다. 차이점을 자세히 설명하자면:1. 전송 방식HTTP/1.1: 하나의 요청에 하나의 응답만 가능하며, 다중 요청을 처리할 때 병목 현상이 발생할 수 있습니다. 이를 해결하기 위해 여러 연결을 사용해 병렬 처리를 시도하지만, 네트워크 자원을 많이 사용하게 됩니다.HTTP/2.0: 하나의 연결로 여러 요청과 응답을 동시에 처리할 수 있습니다. 이를 **멀티플렉싱(Multiplexing)**이라고 하며, 하나의 연결을 효율적으로 사용하여 성능을 크게 향상시킵니다.2. 헤더 압축HTTP/1..
-
HttpServletReqeust에서 getInpustStream을 한번만 사용가능한 이자바웹프로그래밍 2024. 9. 6. 18:30
1. 네트워크 소켓을 통한 데이터 전달HTTP 요청이 서버로 전달되면, 서버는 클라이언트와의 네트워크 소켓 연결을 통해 데이터를 주고받습니다. 클라이언트가 데이터를 보내면, 이 데이터는 바로 메모리에 적재되는 것이 아니라 서버의 네트워크 버퍼로 먼저 들어오게 됩니다. 이 네트워크 버퍼에서 데이터를 읽어들이기 위해 InputStream을 사용합니다.요청 본문 데이터는 네트워크 소켓을 통해 서버로 전달됩니다.getInputStream()을 호출할 때까지 요청 본문은 메모리로 읽어들이지 않습니다.getInputStream()을 호출하는 순간, 서버는 소켓을 통해 데이터를 읽어들여서 이를 처리합니다.2. InputStream을 통한 데이터 읽기getInputStream()을 호출하면, 서버는 네트워크 버퍼에서 ..
-
내부 스태틱 클래스(static nested class)를 사용하는 이유와 그 동작 방식자바웹프로그래밍/JAVA 2024. 7. 25. 14:00
내부 스태틱 클래스(static nested class)를 사용하는 이유논리적인 그룹화: 내부 스태틱 클래스는 외부 클래스와 밀접한 관련이 있는 클래스를 논리적으로 그룹화하는 데 유용합니다. 이를 통해 코드의 가독성과 유지보수성을 높일 수 있습니다.캡슐화: 내부 스태틱 클래스는 외부 클래스의 private 멤버에 접근할 수 있기 때문에, 외부 클래스의 구현 세부 사항을 캡슐화하는 데 도움이 됩니다.외부 클래스와의 결합도 낮추기: 내부 클래스(non-static inner class)와 달리, 내부 스태틱 클래스는 외부 클래스의 인스턴스에 대한 참조를 갖지 않기 때문에 외부 클래스와의 결합도가 낮아집니다. 이는 내부 스태틱 클래스의 독립성을 높입니다.내부 스태틱 클래스의 메모리 관리내부 스태틱 클래스는 외..
-
BufferedOutputStream를 사용하면 성능이 좋아지는 이유 및 자세한 설명 with FileDescriptor자바웹프로그래밍/JAVA 2024. 7. 24. 14:37
Contents --> Java에서 데이터를 디스크에 쓰는 과정은 여러 단계로 구성되어 있으며, 최종적으로는 운영 체제의 네이티브 파일 시스템 호출로 이어집니다. 여기서 BufferedOutputStream이 실제로 어떻게 작동하는지, 그리고 네이티브 코드에서 어떻게 구현되는지 살펴보겠습니다. 데이터가 디스크에 적재되는 과정Java 애플리케이션 코드: 애플리케이션은 FileOutputStream 또는 BufferedOutputStream을 사용하여 데이터를 파일에 씁니다.Java 클래스: FileOutputStream과 BufferedOutputStream 클래스는 Java 표준 라이브러리의 일부이며, 데이터를 디스크에 쓰기 위한 메서드를 제공합니다.네이티브 메서드 호출: FileOutputSt..