Qna. equals와 hashcode 메서드를 사용하는 이유객체의 동등성 비교와 해시 기반 자료구조에서 일관된 동작을 보장하기 위해 equals와 hashcode 메서드를 사용한다. 객체의 동등성 (Equaility)1. 물리적 동일성== 연산자를 사용하여 두 객체의 메모리 주소(참조값)가 같은지 비교합니다.String a = "hello";String b = "hello";System.out.println(a == b); // true (String Pool 덕분)String c = new String("hello");System.out.println(a == c); // false (다른 객체) 2. 논리적 동일성equals 메서드를 오버라이딩하여 객체의 내부 상태(멤버 변수)를 비교할 수 있습니다..
defaultdict()dict 클래스의 서브 클래스로, 기본값을 지정할 수 있는 딕셔너리입니다.num, list, set 등으로 초기화할 수 있습니다.from collections import defaultdict defaultdict(int)int_dict = defaultdict(int)print(int_dict)print(int_dict["test"])# defaultdict(, {})# 0 처음 키를 지정할 때 값을 설정하지 않아도, 해당 Key에 대한 값을 Default로 설정할 수 있다.특정 값의 카운팅을 처리할 때 용이하다.char_count = defaultdict(int)for char in s: char_count[char] += 1 # key가 없어도 자동으로 0에서 시작 d..
위 글은 유튜브 우아한테크 채널에 도이님 발표 영상을 바탕으로 작성한 글입니다.https://www.youtube.com/watch?v=RWFtuQUx3fo JDBC JAVA에서 범용 데이터 액세스를 위한 표준 인터페이스이다. 순수 JDBC 불편한 점개발자가 모든 코드를 직접 작성해야 한다. 이로 인해 중복 코드가 많아지는 문제가 발생한다. 이를 해결하기 위해 영속성 프레임워크가 생겨나고, 중복된 작업을 처리해줍니다.반복적인 작업들을 추상화하고 편리함 제공ex) DB 연결, 해제, CRUD 등 SQL MapperSQL 문과 객체의 필드를 매핑하여, 관계형 DB의 데이터를 객체화하는 프레임워크이다.직접 작성한 SQL 문과 필드를 매핑하고, 조회 결과의 ROW를 객체화합니다.JDBC Template, MyB..
Qna. ORM이란 무엇인가?객체와 데이터베이스의 관계를 자동으로 매핑해 준다.또한, 객체 지향적으로 데이터를 저장하고 조회할 수 있다. 즉, SQL을 직접 사용하지 객체 지향 언어의 문법으로 데이터베이스를 조작할 수 있다. Qna. ORM의 장단점은 무엇인가?장점생산성 향상JPA에서 기본적인 CURD 지원과 Java 언어로 데이터베이스 조작이 간단하다.보안성 강화SQL Injection 같은 보안 취약점 방지 (ORM이 내부적으로 SQL을 안전하게 생성)단점높은 학습 곡선관련 기술을 익히고, 발생할 수 있는 성능 이슈 문제를 전부 파악하고 있어야 효율적으로 사용할 수 있다.복잡한 쿼리를 해결하기 어렵다. 세부적인 쿼리 최적화는 어렵다.동적 쿼리와 같은 문제는 QueryDSL을 통해 처리할 순 있다.성능..
Qna. Docker란 무엇인가Docker는 경량화된 컨테이너를 만들어 쉽게 배포할 수 있도록 지원하는 컨테이너화 기술이다. Docker Container를 띄울 수 있는 Docker Engine이 설치되어 있다면, 다른 환경에서 유연하게 실행할 수 있습니다. 과거 Linux Container와 달리 시스템 설정이 간단하며, 애플리케이션과 필요한 라이브러리만을 통해 경량화된 상태로 배포할 수 있다. Qna. 가상화란 무엇인가가상화란 하드웨어 자원을 논리적으로 분할하여 여러 개의 독립된 환경을 운영하는 기술이다. 이를 통해 하나의 시스템에 여러 OS를 실행시킬 수 있다. 서버, 네트워크, 스토리지, OS 등을 소프트웨어적으로 분리하여 효율성을 높입니다. 대표적으로 서버 가상화(VM), 컨테이너 가상화(Do..
목표Presigned URL 이해하기Aws S3 이미지 업로드 시 서버 부하 줄이기일반적인 S3 이미지 업로드 처리1. 서버 애플리케이션을 통한 이미지 업로드파일 업로드는 권한 인증 때문에, 서버를 경유해서 진행됩니다.하지만, 용량이 높은 파일의 경우, 서버에 넘겨준 후 서버에서 스토리지에 저장하는 이중 작업은 비효율적일 수 있습니다. (네트워크 I/O or CPU 사용량) 파일의 크기가 크지 않더라도 서버에서 Multipart File을 받아 S3 버킷에 업로드하는 과정에서 서버 쪽에서 파일을 갖고 있어야 하는 리소스 낭비가 발생할 수 있습니다. 2. Aws Lambda를 통한 이미지 업로드Aws API Gateway와 Lambda를 통해 처리하는 경우 10MB 용량 제한이 있어, 더 높은 용량의 이미..
QnA. Memory Paging과 Sementation 차이메모리 공간을 분리하는 방법으로 페이징과 세그먼트가 있습니다. 가장 큰 차이점은 페이징은 고정된 크기로 메모리 공간을 나누며, 세그멘테이션은 서로 다른 크기로 메모리 공간을 다룹니다.두 방식에서 생기는 내부 단편화, 외부 단편화 문제가 있으며, 세그멘테이션 방식에서 세그먼트 테이블에 세그먼트 번호, 시작 주소, 세그먼트 크기 정보를 가지고 있어 페이징 테이블보다 메모리 비용과 관리 비용이 높습니다. 가상 메모리란실제 물리적 메모리의 크기를 넘어서는 메모리 공간을 제공하기 위해 사용되는 메커니즘이다.(메모리에 로드된) 실행 중인 프로세스가 가상의 공간을 참조하여 더 큰 물리 메모리를 갖고 있는 것처럼 사용할 수 있도록 해줍니다. 내가 실행하고자 ..
목표Spring에서 Bean을 사용하는 이유 이해하기Spring이 동시 요청을 처리하는 방법 이해하기QnA. Spring에서 Bean을 사용하는 이유1. 객체의 효율적인 관리 (메모리 절약 & 중복 생성 방지)동일한 역할을 수행하는 객체를 하나만 만들어서 관리할 수 있다.JVM의 Heap 메모리에 객체를 효율적으로 관리한다.만약, Spring Bean 객체를 사용하지 않는다면, 각각의 클래스마다 동일한 객체를 new 연산으로 생성해서 사용해야 한다. → 이는 비효율적인 메모리 낭비로 이어진다. 2. 편리한 의존성 주입 (Dependency Injection, DI)간편하게 의존성을 주입할 수 있다.등록된 객체는 Spring Framework가 자동으로 관리해 주며, 생성자 주입, 필드 주입 등의 방법으로..