전체 글 26

인덱스는 언제, 왜, 어떻게 사용해야 좋을까?

언제 : 읽기 작업 속도 향상이 필요할 때왜 : 인덱스를 통해 비용이 가장 많이 요구되는 디스크 랜덤 I/O를 최대한 줄일 수 있기 때문이다. 기본적으로, 인덱스를 통한 접근이 디스크 직접 접근보다 비용이 많이 듦. 일단 한 번 인덱스 탐색을 더 거쳐야하는 것이기 때문에.. 하지만, 데이터가 대규모이고 찾는 레코드의 건수가 전체 레코드의 20% 이하일 경우인덱스를 통한 탐색인덱스는 정렬 상태이기 때문에, 빠르게 탐색을 완료할 수 있음. -> 인덱스틀 통해 정확한 데이터 위치를 찾았음으로, 디스크 접근 시 한 번의 랜덤 I/O가 추가 발생. 만약, 인덱스에 있는 칼럼만으로도 결과 반환이 가능하면 디스크 접근까지 하지 않아도 된다.직접 디스크 탐색디스크에 있는 실제 데이터는 정렬되어 있지 않다. 따라서 모든..

DataBase 2024.07.31

[이펙티브 자바] 객체 생성과 파괴

객체는 언제 어떻게 생성해야할까? 객체의 불필요한 생성을 피해서 효율적인 코드를 작성하는 방법을 알아보자  item 01. 생성자(new) 대신 정적(static) 팩터리 메서드장점팩터리 메서드는 메서드의 "이름" 을 지을 수 있음으로, 객체의 특성 묘사가 가능어떤 때에 이런 장점이 유용한가?하나의 시그니처는 하나의 생성자만 가질 수 있다. 시그니처의 순서가 개수가 다를 때 매번 새로운 생성자를 통해 객체를 생성해야 한다. -> 생성자는 이름이 없기 때문에 이럴 경우 각각의 다른 시그니처로 생성하는 객체가 어떤 객체인지 명확하게 파악하기 힘들다.이 때, 팩터리 메서드로 이름을 명명하고, 팩터리 메서드를 통해 객체를 생성하면 해당 객체가 어떤 역할인지 파악하기 쉽다.호출 시마다 인스턴스 새로 생성 안 됨자..

JAVA 2024.07.13

트랜잭션 격리 수준, 스프링 @Transactional

1. 트랜잭션 격리 수준트랜잭션 : 데이터베이스의 일관성과 무결성을 유지하기 위한 논리적인 작업 단위. 원자성, 일관성, 고립성, 지속성을 유지한다.트랜잭션 격리 수준(isolation level) : 트랜잭션이 얼만큼 고립되어 있는 지 그 정도를 말한다. 동시에 여러 트랜잭션이 진행될 때, 이 격리 수준에 따라서 다른 트랜잭션에서 작업되는 데이터에 얼만큼 접근할 수 있는 지가 제어된다.  격리 수준에 따라 발생할 수 있는 문제점더티 리드 : 어떤 트랜잭션에서 처리한 작업이 완료(COMMIT)되지 않았음에도, 다른 트랜잭션에서 해당 작업에 의한 데이터를 볼 수 있는 현상이다. 이는 데이터의 일관성을 깨뜨려서 정합성에 큰 문제를 일으킬 수 있다.ex) A,B 트랜잭션A -> 선재의 계좌 잔액 10000에서..

DataBase 2024.05.29

싱글톤 패턴과 프록시 패턴

디자인 패턴프로그래밍 시 자주 발생하는 문제를 해결하기 위한 최적의 방법 싱글톤 패턴클래스의 인스턴스를 하나만 생성해서 사용하기 위한 패턴전역 접근 지점을 제공When단 하나의 인스턴스만 필요한 경우공유 자원(데이터베이스 연결 등)에 대한 일관된 접근이 필요한 경우시스템 설정, 환경 설정과 같은 시스템 전반에 걸쳐 하나만 존재해야 하는 구성 요소을 적용해야 하는 경우Why & Benefit자원의 효율적 관리 : 중복 생성 방지해서 메모리 사용 최적화일관된 접근 제어 : 전역 인스턴스를 통해 일관되게 하나의 인스턴스에 접근데이터 공유 : 하나의 인스턴스를 통해 다양한 클라이언트, 프로세스 간에 데이터 공유Key Pointnew 로 새로운 인스턴스를 생성할 수 없도록 private 접근 제어자 필수유일한 단..

JAVA 2024.05.01

IoC, DI, AOP 와 Spring

의존성이란 무엇인가? 한 클래스가 다른 클래스의 메소드나 데이터를 사용하는 경우를 '의존한다.'라고 말한다. 코드레벨에서의 의존성 1. 생성자 의존성클래스가 다른 클래스의 인스턴스를 필요로 할 때, 생성자를 통해 직접 생성하는 경우class Engine {}class Car { private Engine engine; public Car() { this.engine = new Engine(); // Engine 클래스에 대한 의존성 }} !발생할 수 있는 단점Car 객체 생성자에서 Engine 생성자를 new를 통해 직접 생성하고 있음--> Car가 Engine에 직접적으로 의존하고 있고, 클래스 간에 너무 강하게 결합되어 있다.--> Engine 클래스의 구현을 변경하거나,..

JAVA 2024.05.01

자바의 제네릭(Generic)

1. 제네릭이란 무엇인가? 구현 시에 클래스 내부에서 타입을 지정하는 것이 아니라, 일반화 해두고 선언시에 개발자가 타입을 지정하여 사용하는 것. public class Box { private T content; public void setContent(T content) { this.content = content; } public T getContent() { return content; } public static void main(String[] args) { // Integer를 위한 Box 생성 Box integerBox = new Box(); integerBox.setContent(10); int intValue = integerBox.getContent(); System.out.print..

JAVA 2024.04.08

자바의 신 인사이트 정리

클래스와 인스턴스 1. 클래스란 무엇인가? 자바의 최소 단위, 클래스는 상태와 행동을 가짐 상태와 행동이란 무엇인가? 자바에서 상태는 속성들의 집합, 행동은 메서드로 정의할 수 있음 변수는 그 자체로 상태라기보다는 하나의 속성! 속성이 메서드에서 어떤 행동들을 하게 되고 -> 그러면 어떤 상태라고 정의할 수 있다. 2. 인스턴스란 무엇인가? 클래스는 인스턴스(객체)를 생성하기 위한 틀. 클래스 자체로는 어떤 작업을 할 수 없음. 인스턴스 생성해서, 인스턴스를 통해 작업을 수행하는 것 즉, 인스턴스가 메모리(heap) 영역에 올라가서 실제로 작업이 되는 것. public class Person { // 필드(속성) private String name; private int age; // 생성자(Constr..

JAVA 2024.03.21

[졸업프로젝트] Ex.Pose 회고

https://youtu.be/FWR8aQnoqdU https://github.com/2022-ex-pose/Expose-Backend.git 프로젝트 내용 Ex.pose 개인 데이터 기반 포즈 추천 카메라 어플리케이션 팀원 개발3(백1, 프론트1, ML 1) 프로젝트 기간 2022.09 기획 2022.10 ~ 2022.03.20 개발 배운점 -추천 알고리즘 콘텐츠 기반 필터링, 협업 필터링 등 대표적인 추천 알고리즘에 대해 처음 알게 됐다. 우리 어플에서는 어떤 필터링을 적용해야할까에 대해 고민이 있었다... 결국 콘텐츠 기반 필터링을 이용한 알고리즘을 구현했는데 이유는 다음과 같다. 1. '개인' 데이터 기반 추천인만큼, 다른 사용자와의 유사도를 측정하는 협업보다는, 나에게 축적된 데이터만을 기준으로..

프로젝트 회고 2023.07.06

[토비의 스프링vol.1 8장] 스프링이란 무엇인가?

8장 스프링이란 무엇인가 정리 노션 페이지 8장 스프링이란 무엇인가? 8.1 스프링의 정의 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크 애플리케이션 프레임워크란? 일반적인 라이브러리나 프레임워크, 특정 계층에서 동작하는 한 가지 기술 분야에 집중 ex1) 웹 계층을 MVC 구조로 손쉽게 만들 수 있게 함 ex2) 포맷과 출력장치 유연하게 변경가능한 애플리케이션 로그 기능 제공 ex3) 관계형 DB와 자바 obj 매핑해주는 ORM 기술 제공 등 애플리케이션 프레임 워크 특정 계층,기술, 업무 분야에 국한 X, 애플리케이션 전 영역을 포괄하는 범용적인 프레임워크 애플리케이션 전 영역을 관통하는 일관된 프로그래밍 모델과 핵심 기술을 바탕으로 각 분야의 특성에 맞는 필요를 채워..

[토비의 스프링vol.1 6장] AOP - 2

6장 AOP-2 정리 노션 페이지 스프링 AOP 자동 프록시 생성 프록시 팩토리 빈 방식의 한계로 인한 문제점 부가기능이 타깃 오브젝트마다 새로 만들어지는 문제 → ProxyFactoryBean 어드바이스 통해 해결 부가기능 적용이 필요한 타깃 오브젝트마다 비슷한 내용의 ProxyFactoryBean 설정정보 추가 → 어떻게 중복을 제거할까? 중복 문제의 접근 방법 다이내믹 프록시라는 런타임 코드 자동생성 기법을 통해 프록시 클래스 코드의 중복문제 해결 → ProxyFactoryBean설정 문제에도 자동등록/생성 기법 사용할 수 있을까? → 일정한 타깃 빈의 목록을 제공하면, 자동으로 각 타깃 빈에 대한 프록시를 만들어주는 방법 → 하지만 지금까지는 위의 방법이 없었음 빈 후처리기를 이용한 자동 프록시 ..