전체 글

매일 발전하는 백엔드 개발자
Computer Science/Database

[DB/MySQL] Index ?

인덱스의 개념 자주 사용되는 칼럼으로 생성해 테이블 전체를 찾지 않고도 데이터 조회 동작 속도를 높여주는 자료구조 인덱스가 설정되지 않으면 Table Full Sacn이 일어나 성능이 저하되거나 치명적인 장애로 이어질 수 있다. 사용자가 직접 접근할 수는 없고, 검색과 질의에 대한 처리에만 사용된다. 조회속도는 빨라지지만 쓰기(INSERT, UPDATE, DELETE)속도는 별도의 자료구조의 수정도 필요하므로 낮아진다. 인덱스를 저장하기 위한 데이터베이스 전체 크기의 10%정도의 저장공간도 필요하다. 위와 같은 특징들로 인해 수정보다 검색이 필요한 테이블에서 사용한다 인덱스의 특징 인덱스는 하나 혹은 여러개의 컬럼에 대해 설정할 수 있다. WHERE절을 사용하지 않고 인덱스가 걸린 컬럼을 조회하는 것은 ..

자바

[Java] 자바의 직렬화, 역직렬화

프로젝트를 진행하며 자바와 외부 API의 소통을 하려면 자바에서 사용하는 객체를 전송하는게 아닌 API서버에서 원하는 정보를 보내줘야한다. 그러면 객체를 자바 외부로 전송하려면 어떻게 해야할까? Java I/O처리는 정수, 문자열, 바이트 단위의 처리만 지원하기 때문에 복잡한 객체의 내용을 네트워크 상으로 전송하기 위해서는 변환처리가 필요한데(Object - > byte) 이를 직렬화라고 한다. 역직렬화는 변환된 바이트 형태를 다시 객체로 변환 시키는 것이다. 시스템 적으로 본다면 JVM의 힙, 스택 메모리에 있는 클래스 인스턴스를 바이트 형태로 변환하는 것이 직렬화이고, 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM에 올리는 것을 역직렬화라고 한다. 자바 직렬화의 조건 Primitive 타입이..

자바

[Java] Generic

JDK 5부터 제공되는 제네릭은 소스에서 데이터 타입을 프로그래밍할 때 결정하는 것이 아니고 실행할 때 결정하게 하는 기능으로, 매개변수 타입이라고도 한다. 제네릭이란 ? 다음 그림처럼 가방에 책, 연필통, 노트를 담는 작업을 자바로 구현한다고 가정한다. class Bag{ Book book; Pecil pencil; } class Book{} class Pencil{} Bag에 객체를 담는 작업은 자바에서 "has a"관계로 표현하고 이는 필드 선언으로 나타낸다. 만약 가방에 책만 들어가면 연필은 사용하지 않으므로 메모리를 낭비하는 코드가 된다. 이런 문제점을 해결하기 위한 방법이 제네릭으로 데이터 타입을 매개변수로 지정하는 것을 의미한다. 타입 매개변수는 실행 시 인자로 전달하는 타입을 변수의 타입으..

디자인 패턴

[Design Pattern] 프록시 패턴

프록시 패턴? 프록시는 대리인이라는 뜻으로, 누군가를 대신해서 그 역할을 수행하는 존재이다. 프로그래밍에서는 어떤 객체를 사용할 때, 객체를 직접적으로 참조하는 것이 아닌 해당 객체를 대항하는 객체를 통해 객체에 접근하는 방식을 사용하면 해당 객체가 메모리에 존재하지 않아도 기본적인 정보를 참조하거나 설정할 수 있고, 실제 객체의 기능이 필요한 시점까지 객체의 생성을 미룰 수도 있다. 프록시 코드 예제 public interface Subject { void request(); } public class RealSubject implements Subject{ @Override public void request() { System.out.println("request start"); } } public..

Computer Science/Database

[DB] 정규화(Normalization)

데이터베이스 정규화? 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정으로 단계별로 구분해 정규형이 높아질수록 이상현상을 줄인다. 이상현상? 데이터베이스에서 정규화를 수행하지 않으면, 데이터의 중복이 발생하고 전체적인 무결성의 저하로 이어진다. 이러한 원인은 이상현상으로 인해 실제 값과 데이터베이스에 저장된 값이 일치하지 않는 문제가 발생한다. 이상현상을 설명할 대학교 릴레이션이다. 학번 학생명 학과명 동아리 1 바트 컴퓨터공학과 피아노 2 호머 물리학과 마술 3 마지 신소재공학과 밴드 삽입 이상 튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL을 입력해야하는 현상 새로 개설된 탁구 동아리를 테이블에 추가 해야하지만 동아리원이 없어 특정 속성에 해당하는 값이 없어 NULL을 입력해야한다. ..

Computer Science/Database

[DB] 관계형 데이터베이스(RDB)

2월 2주차 스터디 발표자료 DB, DBMS, RDB 등에 대한 개념정리 데이터베이스란? 여러사람에 의해 공유되어 사용될 목적으로 통합하여 관리하는 데이터의 집합 DBMS란? 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 데이터를 관리해주는 소프트웨어 RDBMS란? DBMS의 한 종류로 관계형 데이터베이스를 이용한다. 관계형 데이터베이스? RDB(관계형 데이터베이스)는 테이블, 행, 열의 정보를 구조화하고 테이블을 조인하여 정보 간 관계 또는 링크 설정을 통해 여러 데이터 포인트 간의 관계를 쉽게 얻을 수 있다. 관계형 데이터베이스의 모든 테이블에는 행에서 고유하게 식별가능 한 기본 키라는 속성이 있으며, 외래 키(다른 기존 테이블의 기본키를 참조)를 사용하여 각 행에서 서로 다른 테이블 간의 관계..

스프링

[Java/Spring] 스프링 코어(컨테이너, 빈)

스프링은 Ioc 컨테이너가 객체를 관리하는 프레임워크임을 아는게 중요하다. 스프링의 특징 프레임 워크 vs 라이브러리 스프링은 프레임워크이고 라이브러리와의 차이점이 중요하다. 가장 큰 차이점은 제어의 흐름을 누가 갖고 있느냐인데 프레임워크는 사용자의 코드가 프레임워크의 흐름에서 필요할 때 불러 사용하고 라이브러리는 사용자의 코드 흐름에 맞춰 사용자가 필요할 때 라이브러리를 불러 사용한다. 이와 같이 개발자가 작성한 객체나 메서드의 제어를 프레임워크가 하는 설계 원칙을 Ioc(Inversion of Control)이라고 한다. IoC(Inversion of Control) 실현을 위한 DI(Dependency Injection) DI는 의존관계 주입이라고 하고, 스프링을 사용해봤다면 @Autowired로 ..

개발 도서/스프링 입문을 위한 자바 객체지향의 원리와 이해

[스프링 입문을 위한 자바 객체지향의 원리와 이해] 5장 SOLID 원칙

SOLID는 OOP 4대특성을 발판으로 하고, 디자인 패턴을 공부하기 전에 꼭 알아야할 SOLID 원칙에 대해 알아본다. 객체지향 프로그래밍의 의미는 '객체에게 데이터를 요구하지 말고 작업을 요구하라'라고 하는데 .. 철학을 하는건지 개발을 공부하는건지 모르겠지만 일단 SOLID 원칙에 대해 알아본다. SRP(Single Responsibility Principle) "어떤 클래스를 변경해야하는 이유는 오직 하나뿐이여야한다." 는 하나의 클래스는 하나의 책임만 가져야한다로 해석할 수 있다. 비단 클래스에만 국한 되는 것이 아닌 메서드도 하나의 책임(기능)만 맡도록 짜는 것이 유지보수하기에 용이하다. 이유는 해당 클래스, 메소드에 대한 변경이 필요할 때 쉽게 찾을 수 있고, 파급효과도 적기 때문이다. 이전..

비오베베
우당탕탕 개발