분류 전체보기

옵티마이저옵티마이저(Optimizer)는 사용자가 질의한 SQL문에 대해 최적의 실행 방법을 결정하는 역할을 수행이러한 최적의 실행방법을 실행계획(Execution Plan)이라고 한다.다양한 실행 방법들 중에서 최적의 실행방법을 결정하는 것이 바로 옵티마이저의 역할이다. 옵티마이저가 최적의 실행 방법을 결정하는 방식에 따라 규칙기반 옵티마이저(RBO, Rule Based Optimizer)와 비용기반 옵티마이저(CBO, Cost Based Optimizer)로 구분된다.(현재 대부분의 데이터베이스는 비용기반 옵티마이저만을 제공) 규칙기반 옵티마이저=> 규칙(우선순위)을 가지고 실행계획을 생성한다.규칙기반 옵티마이저가 조인 순서를 결정할 때는 조인 컬럼 인덱스의 존재 유무가 중요한 판단의 기준이된다.Si..
List 구현체 Vector 와 ArrayListList 인터페이스를 구현하기 때문에 데이터의 저장순서가 유지되고 중복을 허용한다는 공통적인 특징을 갖는다. 공통점 차이점 List 인터페이스를 구현한다. 저장순서가 유지되고 중복을 허용한다.데이터의 저장 공간으로 배열을 사용한다. Vector는 멀티쓰레드에 대한 동기화가 되어 있으나 ArrayList는 그렇지 않다. => Vector는 동기화처리 때문에, 성능이 좋지않으므로 사용할때 주의해야 한다. LinkedList배열은 가장 기본적인 형태의 자료구조로 사용하기 쉽고 데이터를 읽어오는데 걸리는 시간(access time)이 가장 빠르다는 장점을 가지고 있다.하지만 !! 아래와 같은 단점이 존재한다.1. 크기를 변경할 수 없다. 크기가 넘으면 새로운 배열..
IoC컨테이너 계층구조빈의 개수가 많아져서 설정파일이 커지는게 문제라면 파일을 여러개로 쪼개서 만들고 하나의 애플리케이션 컨텍스트가 여러 개의 설정파일을 사용하게하면 그만이다. 하지만 한 개 이상의 IoC컨테이너를 만들어두고 사용해야 할 경우가 있다. 바로 트리 모양의 계층구조를 만들때다. 부모컨텍스트를 이용한 계층구조 효과모든 애플리케이션 컨텍스트는 부모 애플리케이션 컨텍스트를 가질 수 있다.모든 컨텍스트는 각자 독립적인 설정정보를 이용해 빈 오브젝트를 만들고 관리독립적으로 자신이 관리하는 빈을 갖고 있지만, DI를 위해 빈을 찾을 때는 부모 애플리케이션 컨텍스트의 빈까지 모두 검색(필요한 빈을 찾고 없으면 부모 컨텍스트에게 빈을 찾아달라고 요청. 없으면 부모의 부모.. 루트 컨텍스트까지 전달) 중요한..
IoC 컨테이너컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다.(IoC 컨테이너)실제로 스프링 컨테이너 또는 IoC컨테이너라고 말하는 것은 바로 이 ApplicationContext 인터페이스를 구현한 클래스의 오브젝트이다. (BeanFactory 인퍼에스 상속)IoC 컨테이너가 사용하는 빈(bean) 메타정보는 대략 다음과 같다.빈 아이디, 이름, 별칭 : 빈 오브젝트를 구분할 수 있는 식별자클래스 또는 클래스 이름 : 빈으로 만들 POJO 클래스 또는 서비스 클래스 정보스코프 : 싱글톤, 프로토타입과 같은 빈의 생성 방식과 존재 범위프로퍼티 값 또는 참조 : DI에 사용할 프로퍼티 이름과 값 또는 참조하는 빈의 이름생성자 파라미터 값 또는 참조 : DI에 사용할 생성..
스프링에서는 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 빈(bean)이라고 부른다.(자바빈 또는 엔터프라이즈 자바빈EJB에서 말하는 빈과 비슷한 오브젝트 단위의 어플리케이션 컴포넌트) 스프링에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC오브젝트를 빈 팩토리(bean factory)라고 부른다. 빈 팩토리보다는 이를 좀 더 확장한 애플리케이션 컨텍스트(application context)를 주로 사용한다. 스프링 IoC의 용어 정리빈(bean)스프링이 IoC방식으로 관리하는 오브젝트라는 뜻(스프링이 직접 생성과 제어를 담당하는 오브젝트만을 빈이라고 부른다.)빈 팩토리(bean factory)IoC를 담당하는 핵심 컨테이너를 가리킨다. 빈을 등록하고, 생성하고, 조회하고 돌려주..
1. POJO 기반의 구성스프링은 다른 프레임워크들과 달리 관계를 구성할 때 별도의 API을 사용하지 않는 POJO의 구성만으로 가능하도록 제작되어있음 이것이 중요한 이유는 코드를 개발할 때 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않다는 것을 의미함개발자는 가장 일반적인 형태로 코드를 작성하고, 실행할 수 있기 때문에 생산성에서도 유리하고, 코드에 대한 테스트 작업 역시 좀 더 유연하게 할 수있다는 장점이 생김 2. 의존성 주입(DI)를 통한 객체 간의 관계 구성"제어의 역행"메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미 개발자는 필요한 부분을 개발해서 '끼워 넣기'의 형태로 개발하고, 실행하면 됨제어의 역전은 스프링에서만 있는 개념일까?=> 제..
애플리케이션 아키텍처 책임과 성격이 다른 것을 크게 그룹으로 만들어 분리해두는 것을 아키텍처 차원에서는 계층형 아키텍처(layered architrecture)라고 부른다. 또는 계층이라는 의미를 가진 영어 단어인 티어(tier)를 써서 멀티 티어 아키텍처라고도 한다.(보통 3계층 3-tier 혹은 3-layer)애플리케이션이라고도 한다. 3계층 아키텍처와 수직 계층3계층 아키텍처는 백엔드의 DB나 레거시 시트메과 연동하는 인터페이스 역할을 하는 데이터 엑세스(DataAccess)계층비즈니스 로직을 담고있는 서비스 계층주로 웹 기반의 UI를 만들어내고 그 흐름을 관리하는 프레젠테이션 계층으로 구분클라이언트 프레젠테이션 계층 서비스계층 데이터 엑세스 계층 DB/레거시 데이터 엑세스 계층DAO 계층이라고 불..
객체지향프로그래밍(Object Oriented Programming)의 특성은 크게 추상화, 캡슐화, 상속, 다형성이 있음=> 루틴을 하나의 "독립된 객체"로 바라보는 시선=> 기존에 만들었던 내용을 쉽게 상속, 다형성 등을 이용해 재사용 가능 추상화(Abstraction)추상화를 통해서 Class를 만들어 놓고, 상세한 부분들을 채워나가는 것공통의 속성이나 기능을 묶어 이름을 붙이는 것불필요한 부분을 무시하고 필요하고 공통점만을 다루어 현실의 복잡성을 극복하고 목적에만 집중캡슐화(Encapsulation)객체의 내용 중 숨기고 싶은 부분은 외부에서 접근할 수 없다.(정보은닉 기능 => 접근제어)객체 스스로가 자신의 상태를 책임데이터 캡슐화 - 객체는 상태(멤버변수)와 행동(메소드)을 하나의 단위로 묶는..
LinkedList에서 빠른포인터와 느린포인터를 사용하여서 중간노드를 구하는 방법느린포인터가 한 칸 갈때, 빠른포인터는 두 칸 증가한다.빠른포인터가 마지막에 다달았을때, 느린포인터가 가르키는 위치가 중간 노드 우선, 테스트에 필요한 구현체 구현 - 간단한 Node 클래스12345678public class Node { int val; Node next; Node(int val){ this.val = val; }} cs- 1~7까지의 linkedList 생성123456789101112131415161718public static Node makeLinkedList(){ Node head = new Node(1); Node node1 = new Node(2); Node node2 = new Node(3); ..
Git 스테이징단계 이해Git은 다른 형상 관리시스템과 다르게 소스 코드를 직접 추가하거나 변경하지 않더라도 이를 인지하지 못하며 Git add 명령을 통해서만 인식할 수 있다. => Git의 형상 관리가 3가지 영역으로 진행되기 때문(출처 : http://devstory.ibksplatform.com/2017/09/git-1-git-git.html)워킹 디렉터리 : 소스 코드를 작업하는 영역으로 코드를 추가, 수정, 삭제한느 작업이 이루어지는 영역을 의미스테이징 영역 : 워킹 디렉터리에 Git add 명령을 실행하면 파일들은 Git의 스테이징 영역으로 이동하며 이를 통해 소스 코드의 상태 정보를 확인할 수 있다.저장소 영역 : 스테이징 영역에 있는 소스 코드에 Git commit 명령을 실행하면 최종적..
깡냉쓰
'분류 전체보기' 카테고리의 글 목록 (54 Page)