중점문제를 다시 이해해보자. n번째에 있는 탑에서 n-1의 방향으로 신호를 보낸다. 신호는 통과하지 않으며 n보다 작은 순서에 있는 탑중 n번째의 탑보다 크기가 큰 탑을 만나면 신호가 전달된다. 즉 n-1 방향에서 지금 신호를 보내는 탑의 크기보다 큰 탑을 찾으면 된다. 그러면서 n에 제일 가까운. 예를 들어보자 5, 2, 3, 4, 1 의 크기로 탑이 있다고 해보자. 이때 4에서 왼쪽으로 신호를 보낸다. 받게 되는 탑은 1번 탑이다. 2번과 3번 탑은 쓸모가 없다. 그렇다면 5번 탑을 보자 4번탑에서 받을 것이다. 이때도 2번과 3번탑은 쓸모가 없다. 극단적으로 생각해보면 탑이 있는게 아니라 위의 순서로 지어졌다고 생각해보자. 4번탑이 지어지면 2와 3은 제거해도 상관이 없다. -> 스택이라고 생각했다..
전체 글
Hello World!DB 병목 현상DB 병목 현상 - 시스템의 전체 성능을 저하시킬 만큼 데이터베이스 처리 속도가 느려지는 상황을 말합니다. 쉽게 말해, 데이터베이스가 너무 바빠서 다른 시스템 구성 요소들은 일을 하고 싶어도 기다려야 하는 상황입니다. 왜 병목 현상이 일어날까? 1. 과도한 동시 접속많은 사용자가 동시에 DB에 접속하면 커넥션 풀이 한계에 걸리기 때문에, 대기시간이 증가하게 됩니다. 2. 비효율적, 잘못된 인덱스 사용잘못된 칼럼에 인덱스를 사용하거나, 전체 테이블을 스캔하는 경우 속도가 저하되어 대기시간이 증가됩니다. 3. 비효율적인 쿼리인덱스를 타지 않거나, join이 많은 쿼리인 경우 대기시간이 증가됩니다. 4. 디스크 I/O 문제대용량 데이터 읽기 / 쓰기가 일어나는 경우 대기시간이 증가됩니다. 5. ..
RDBMSRDMS 즉 관계형 데이터베이스 관리 시스템은 데이터베이스의 한 종류로 가장 많이 사용됩니다. 이는 데이터베이스에 데이터를 열(Column)과 행(Row)의 테이블 형태로 저장하고, 테이블 형태의 스키마를 지켜야 합니다. 가장 대표적인 RDBMS는 Oracle, MySQL 등이 있다. 그리고 이 관계형 데이터베이스를 다루기 위한 언어를 SQL이라고 합니다. 관계형 데이터베이스(RDBMS)는 다른 테이블과 관계를 맺고 모여있는 집합체로 이해할 수 있습니다. 이러한 관계를 나타내기 위해 외래 키(foreign key)라는 것을 사용해 테이블 간 Join이 가능하다는 게 RDBMS의 가장 큰 특징입니다. 이름과 같이 RDBMS는 RDB를 관리하는 시스템이며 RDB는 관계형 데이터 모델을 기초로 두고 ..
데이터 무결성데이터의 무결성이란 데이터의 정확성, 일관성, 유효성이 유지되는 것을 말합니다. 데이터의 무결성을 유지하는 것은 데이터베이스 관리시스템 (DBMS)의 중요한 기능이며, 주로 데이터에 적용되는 연산에 제한을 두어 데이터의 무결성을 유지합니다. 데이터베이스에서 말하는 무결성에는 다음과 같은 3가지 종류가 있습니다. 1. 개체 무결성모든 테이블이 기본 키 (primary key)로 선택된 필드 (column)를 가져야 합니다. 기본 키로 선택된 필드는 고유한 값을 가져야 하며, 빈 값은 허용하지 않습니다. 2. 참조 무결성관계형 데이터베이스 모델에서 참조 무결성은 참조 관계에 있는 두 테이블의 데이터가 항상 일관된 값을 갖도록 유지되는 것을 말합니다. 아래의 그림은 관계형 데이터베이스 모델에서 참..
트랜잭션Spring에서 사용하는 @Transactional 어노테이션도 AOP의 개념이 적용된 것 입니다. 트랜잭션을 적용해야 하는 메서드 혹은 클래스에 @Transactional 어노테이션만 작성해주면 됩니다. AOP 개념이 적용된 Transaction 처리에서는 아래와 같은 장점이 있습니다.메서드에는 서비스의 비즈니스 로직만을 작성할 수 있기 때문에, 비즈니스 로직에 집중된 코드를 작성할 수 있습니다. 반복적인 Transaction 처리에 대해, @Transactional 어노테이션을 통해 중복된 트랜잭션 처리 코드를 제거할 수 있습니다.@Transactional 남용의 문제점@Transactional 어노테이션은 너무나도 편리합니다.매번 트랜잭션의 시작과 종료를 코드로 명시하지 않아도, Spring..
DI, 의존성 주입이란?의존성 주입(DI)은 스프링 프레임워크가 지원하는 핵심 기능 중 하나로서, 객체 사이의 의존관계가 객체 자신이 아닌 외부에 의해 결정되는 디자인 패턴입니다. 스프링 IoC 컨테이너는 어떤 객체(A)가 필요로 하는, 의존관계에 있는 다른 객체(B)를 직접 생성하여 A 객체로 주입(설정)하는 역할을 담당합니다. 컴포넌트를 구성하는 객체의 생성과 의존관계의 연결 처리를 해당 객체가 아닌 컨테이너가 대신하기 때문에 제어의 역전(Inversion of Control)이라고 합니다. 의존성 주입을 사용하면 종속성과 결합도(coupling)가 낮아져 테스트가 용이해지고 재사용성, 유연성, 확장성을 향상시킬 수 있게 됩니다. 저는 생성자 주입을 통해서 의존관계를 주입하는 방식으로 코드를 구현했습..