전체 글
-
Spring에서 @Autowired를 사용하는 것보다 생성자 주입 방식이 나은 이유?Spring 2024. 7. 24. 10:33
Spring에서 @Autowired를 사용하는 것보다 생성자를 통해 구성하는 방식이 더 나은 이유는 다음과 같습니다:불변성(Immutable) 보장: 생성자 주입은 필드를 final로 선언할 수 있게 하여 객체의 불변성을 보장합니다. 불변 객체는 상태 변화를 방지하여 안전성을 높입니다.명시적 의존성(Explicit Dependency): 생성자 주입은 클래스의 의존성을 명확하게 보여줍니다. 어떤 의존성이 필요한지 명확하게 드러나기 때문에 코드의 가독성이 향상됩니다.테스트 용이성(Testability): 생성자 주입을 사용하면 테스트 코드에서 setter나 리플렉션을 사용하지 않고도 의존성을 쉽게 주입할 수 있습니다. 따라서 단위 테스트 작성이 더 용이합니다.순환 의존성 방지: 생성자 주입은 순환 의존성을..
-
JSESSIONID의 역할 및 생성과정 및 JSESSIONID가 필요없는경우자바웹프로그래밍 2024. 7. 23. 14:42
Contents --> JSESSIONID는 Java EE 및 Spring 기반 웹 애플리케이션에서 사용되는 세션 식별자(Session Identifier)입니다. 이 식별자는 서버가 클라이언트와의 세션을 관리하기 위해 사용됩니다. 세션은 서버와 클라이언트 간의 상태 정보를 유지하기 위한 기술로, HTTP의 무상태(stateless) 특성을 보완하기 위해 사용됩니다. JSESSIONID의 역할세션 식별:JSESSIONID는 서버에서 생성되며, 각 클라이언트에 대해 고유합니다. 클라이언트가 서버에 요청할 때마다 JSESSIONID를 사용하여 해당 요청이 어느 클라이언트로부터 왔는지 식별할 수 있습니다.세션 상태 유지:HTTP는 본래 무상태 프로토콜이므로, 각 요청 간에 상태를 유지하지 않습니다. JS..
-
웹 브라우저를 통해 도메인 주소를 입력하는 경우, 실제로는 IP 주소와 MAC 주소를 모두 얻는 과정컴퓨터과학/네트워크 2024. 7. 23. 10:02
Contents --> 전체 과정 요약DNS 조회: 도메인 주소를 IP 주소로 변환ARP 조회: IP 주소를 MAC 주소로 변환 (로컬 네트워크 내)데이터 전송: IP 및 MAC 주소를 이용해 데이터를 전송 1. DNS 조회도메인 주소 (예: www.example.com)를 입력하면, 먼저 해당 도메인에 대한 IP 주소를 알아내야 합니다.DNS 조회 과정호스트 파일 확인: 클라이언트는 먼저 로컬 호스트 파일을 확인하여 도메인에 대한 IP 주소가 지정되어 있는지 확인합니다.DNS 캐시 확인: 운영체제의 DNS 캐시에 도메인에 대한 IP 주소가 저장되어 있는지 확인합니다.DNS 서버 질의: 캐시에 없으면 설정된 DNS 서버에 질의합니다.질의 과정:클라이언트의 DNS 리졸버가 DNS 서버에 www.exam..
-
DB 커넥션 풀을 사용해도 시스템 성능의 영향을 끼치는것데이터베이스/최적화 2024. 7. 22. 11:32
MyBatis와 같은 ORM 툴을 사용할 때, 동일한 데이터를 가져오기 위해 5번의 쿼리를 호출하는 것과 5개의 쿼리를 WITH 구문을 통해 하나의 쿼리로 요청하는 것 사이에는 성능상의 차이가 있습니다. 이 차이가 발생하는 이유는 여러 가지가 있지만, 주요 원인은 다음과 같습니다: 네트워크 레이턴시:각 쿼리 호출 시마다 네트워크 요청이 발생합니다. 네트워크 왕복 시간이 누적되면 지연이 발생할 수 있습니다. 커넥션 풀을 사용해도 각 요청마다 네트워크 레이턴시가 존재하기 때문에, 5번의 네트워크 왕복 시간이 1번의 왕복 시간보다 더 큽니다.쿼리 실행 준비:각 쿼리 호출 시마다 데이터베이스는 쿼리 파싱, 최적화, 실행 계획 수립 단계를 거쳐야 합니다. 5번의 쿼리 호출은 이 단계를 5번 반복하는 셈이 됩니다..
-
인덱스 온리 스캔 불가능데이터베이스/최적화 2024. 7. 17. 09:29
인덱스 온리 스캔은 쿼리에서 필요한 모든 데이터가 인덱스에 포함되어 있을 때만 가능하며, 그렇지 않은 경우 실제 테이블 데이터를 읽기 위해 디스크 접근이 필요합니다. SELECT name, age, phoneFROM example_tableWHERE name = 'Alice' AND age = 30; 상황 설명인덱스 온리 스캔 불가: 위 쿼리는 name과 age뿐만 아니라 phone 컬럼도 필요로 합니다. 하지만 인덱스 idx_name_age는 name과 age만 포함하고 있으며 phone은 포함하지 않습니다.테이블 접근 필요: 쿼리에서 phone 컬럼의 값도 필요하므로, 인덱스를 사용하여 name과 age에 대한 조건을 만족하는 행을 찾은 후, 해당 행의 phone 값을 얻기 위해 실제 테이블 데이터를..
-
org.springframework.core.io.Resource란 무엇인가 !!?자바웹프로그래밍/JAVA 2024. 7. 15. 22:02
org.springframework.core.io.Resource 인터페이스는 Spring 프레임워크에서 리소스 추상화를 제공하는 인터페이스입니다. 이 인터페이스는 파일 시스템, 클래스패스, URL 등 다양한 소스로부터 리소스를 쉽게 접근하고 읽을 수 있도록 합니다.주요 메서드Resource 인터페이스는 여러 메서드를 제공합니다. 그 중 주요 메서드는 다음과 같습니다:boolean exists(): 리소스가 존재하는지 확인합니다.boolean isReadable(): 리소스를 읽을 수 있는지 확인합니다.boolean isOpen(): 리소스가 현재 열려 있는지 확인합니다.URL getURL(): 리소스의 URL을 반환합니다.URI getURI(): 리소스의 URI를 반환합니다.File getFile():..
-
JVM의 메모리 영역에 대한 이해와 예시와 reflection의 이해자바웹프로그래밍/JAVA 2024. 7. 11. 13:52
Contents --> JVM의 메모리 영역은 각각의 역할이 있으며, 이를 이해하는 것은 Java 프로그램의 실행 방식을 이해하는 데 중요합니다. 각 메모리 영역의 역할과 이를 설명하기 위한 예제를 살펴보겠습니다. JVM 메모리 영역PC 레지스터 (Program Counter Register): 현재 실행 중인 JVM 명령의 주소를 가리킵니다. 각 스레드는 자신의 PC 레지스터를 가지고 있습니다.Java 스택 (Java Stack): 메서드 호출과 관련된 정보를 저장합니다. 각 스레드는 자신의 스택을 가지고 있으며, 각 스택 프레임은 메서드 호출, 지역 변수, 매개 변수, 그리고 연산 중간 결과를 포함합니다.네이티브 메서드 스택 (Native Method Stack): 네이티브 메서드 호출과 관련된 ..
-
jvm 클래스 로더 작동방식자바웹프로그래밍/JAVA 2024. 7. 11. 13:16
Contents --> JVM의 클래스 로더는 Java 애플리케이션에서 클래스를 메모리로 로드하고, 링크하고, 초기화하는 역할을 합니다. 이를 통해 필요한 클래스들이 적절히 사용될 수 있도록 합니다. 클래스 로더의 작동 방식을 이해하기 위해 다음과 같은 주요 단계와 구성 요소를 살펴보겠습니다 1. 클래스 로더의 유형JVM에는 세 가지 기본 클래스 로더가 있습니다:Bootstrap Class Loader: JVM의 핵심 클래스 로더로, JDK의 rt.jar와 같은 핵심 라이브러리를 로드합니다. 이는 네이티브 코드로 작성되어 있으며, JVM이 시작될 때 로드됩니다.Extension Class Loader: 확장 클래스 로더로, JRE의 lib/ext 디렉토리에 있는 클래스들을 로드합니다.Applicati..