ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개발자 기초 개념 정리(2022-03-24 5차 업데이트)
    코딩 지식 2021. 11. 29. 14:00

    새롭게 알게 된게 있으면 업데이트, 재미겸 상식겸 읽기.

    -----------------

    업데이트

    2021-11-29

    2021-12-14

    2021-12-16(TIMESTAMP 부터)

    2022-01-03(프록시저 부터)

    2022-03-24(시스템 아키텍쳐 부터)



    -----------------




    JAVA

    JAVA는 네트워크 상에서 쓸 수 있도록 미국의 선 마이크로 시스템즈가 개발한 객체 지향 프로그래밍 언어



    JAVA의 특징으로는

    1. 자바가상머신(JVM)만 설치하면 컴퓨터의 운영체제에 상관없이 작동한다.(운영체제에 독립적)

    2. 기본 자료형을 제외한 모든 요소들이 객체로 표현

    3. 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어

    4. Garbage Collector를 통한 자동적인 메모리 관리

    5. 멀티쓰레드를 지원

     

     




    프록시 

    핵심 기능의 실행은 다른 객체에 위임하고 부가적인 기능을 제공하는 객체를 프록시(proxy)라고 부른다.

    실제 핵심 기능을 실행하는 객체는 대상 객체라고 부른다.



    프록시의 특징은 핵심 기능은 구현하지 않는다는 점이다.

    프록시는 핵심 기능을 구현하지 않는 대신 여러 객체에 공통으로 적용할 수 있는 기능을 구현한다.




    AOP(관점 지향 프로그래밍)



    AOP를 쉽게 말하자면 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하겠다는 것이다.



    AOP는 Aspect Oriented Programming의 약자로, 여러 객체에 공통으로 적용할 수있는 기능을 분리해서 재사용성을 높여주는 프로그래밍 기법이다. AOP는 핵심 기능과 공통 기능의 구현을 분리함으로써 핵심 기능을 구현한 코도의 수정 없이 공통 기능을 적용할 수 있게 만들어 준다.



    1. 컴파일 시점에 코드에 공통 기능을 삽입하는 방법

    2. 클래스 로딩 시점에 바이트 코드에 공통 기능을 삽입하는 방법

    3. 런타임에 프록시 객체를 생성해서 공통 기능을 삽입하는 방법



    첫번째 방법은 AOP 개발 도구가 컴파일 하기 전에 공통 구현 코드를 소스에 삽입하는 방식으로 동작한다.

    두번째 방법은 클래스를 로딩할 때 바이트 코드에 공통 기능을 클래스에 삽입하는 방식으로 동작한다.



    이 두 가지는 스프링 AOP에서는 지원하지 않으며 AspectJ와 같이 AOP 전용 도구를 사용해서 적용할 수 있다.


    스프링이 제공하는 AOP 방식은 프록시를 이용한 세 번째 방식이다.

    두번쨰 방식을 일부 지원하지만 널리 사용되는 방법은 프록시를 이용한 방식이다.

    프록시 방식은 앞서 살펴본 것처럼 중간에 프록시 객체를 생성한다.

    그리고 실제 객체의 기능을 실행하기 전 · 후에 공통 기능을 호출한다.


    스프링 AOP는 프록시 객체를 자동으로 만들어준다.

    공통 기능을 구현한 클래스만 알맞게 구현하면 된다.


    AOP에서 공통 기능을 Aspect라고 하는데 Aspect 외에 알아두어야 할 용어를 [표 7.1]에 정리했다.




    프레임워크(FRAME + WORD)



    많은 소프트웨어에서 사용되는 일반적인 기능을 담은 틀로 개발과정을 보다 빠르고 편리하게 해주는 오픈 소스

    특정한 틀을 만들어놓고 거기에 살을 붙여 놓음으로써 프로그램을 만들어 작업시간을 줄여주는 것이다.



    프레임워크 컴포넌트 들은 재사용이 가능하다.

    프레임워크가 중요한 이유는 객체지향 개발을 하게 되면서 개발자의 취향에 따라 다양한 프로그램이 나오게 되었다.

    프로그램 개발에 투입되는 개발자도 점점 늘어남에 따라 전체 시스템의 통합성, 일관성이 부족하게 되었기 때문이다.

    그래서 개발자의 자유를 제한하기 위해 프레임워크를 도입했다.

    예시) Java의 경우 Spring, Python 개발자라면 Django!



    프레임워크가 가져야할 특징

    1. 개발자들이 따라야할 가이드라인을 가진다.

    2. 개발할 수 있는 범위가 정해져 있다.

    3. 개발자를 위한 다양한 도구들이 지원된다.



    프레임워크의 장/단점

    장점 - 개발시간을 줄일 수 있고 오류로부터 자유로울 수 있다.

    단점 - 프레임워크에 너무 의존하면 개발 능력이 떨어져서 프레임워크 없이 개발하는 것이 불가능해지는 점이다.



    라이브러리(Library)

    단순하게 활용 가능한 도구들의 집합

    - 개발자가 필요에 의해 만든 클래스를 호출하여 사용하는 방식

    라이브러리와 프레임 워크의 차이점은


    "개발 주도성이 어디에 있는가?" 로 구분할 수 있다.
    라이브러리는 개발자에게 주도성이 있으며 프레임워크는 개발자가 아닌 핵심 구조 안에 주도성이 담겨있다.
    라이브러리는 쓰고싶을때 호출해서 사용하면 되지만 프레임 워크는 프레임워크의 규격에 맞춰야 사용이 가능하다.



    파싱(Parsing)

    언어학에서 따온 용어로 '어떤 문장을 구성 성분으로 분해하고 그들 사이의 위계 관계를 분석하여 문장의 구조를 결정하는 것을 의미합니다.

    IT 실무에서 쓰이는 '파싱'은 데이터를 조립해 특정한 데이터만을 추출한다는 의미를 내포하고 있습니다. 어떤 큰 자료에서 원하는 정보만 가공하고 뽑아서 원하는 때에 불러올 수 있게 하는 것

    이러한 파싱을 수행하는 프로그램은 '파서(Parser)'라고 합니다.

     



    마스킹(Masking)

    마스킹은 뜻 그대로 일부를 가리는(=Mask) 것을 말하는데요. 기호의 열 또는 비트 패턴을 대상으로 해서 그 일부를 추출하거나 삭제하는 것을 뜻합니다.

    주로 개인정보 등과 함께 쓰여 개인정보 보호를 위한 하나의 보안과정을 의미하기도 합니다.

    예시) 김*선님, 960514-1******

     



    프론트엔드(FE, Front-end) / 벡엔드(BE, Back-end)



    ?'프론트엔드'는 웹/앱등에서 사용자에게 보여지는 부분에 대한 설계를 뜻하며 사용자에게 문서, 동영상 등 다양한 콘텐츠를 제공하여 사용자의 요구에 따라 반응하여 동작합니다.(디자인)

    '벡엔드'는 사용자에게 보여 지지 않는 정보 처리(서버, 데이터베이스 등)와 관련된 설계를 뜻합니다.(내부설계)



    프로토콜

    프로토콜은 컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계입니다.

    기기간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구합니다.

    이런 형식을 정의하는 규칙의 집합을 프로토콜이라고 합니다.

    예시) HTTPS, HTTP, SMTP



    API(Application Programming Interface)

    응용 프로그램 프로그래밍 인터페이스는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 주로 파일 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.

    개발자가 프로그램을 만드는 데 필요한 어떤 기능을 직접 구현하지 않고 API 제공자들이 제공하는 데이터와 모듈 등을 갖다 쓸 수 있게 해주는게 API와 API 문서이다.

    API는 응용 프로그램을 만드는데 필요한 연결 장치나, 매개체라고 생각하시면 되겠습니다.

    API가 공개되지 않았다면 쓸 수 없다. 또 공개 API라고 하더라도 호출 횟수가 많아지면 비용을 지불해야 할 수 도 있다.



    OOP(객체지향프로그래밍)

    Object-Oriented Programming

    데이터를 객체로 취급하여 객체를 기준으로 코드를 나누어  프로그램에 구현하는 것이며, 순차적으로 프로그램이 동작하는 기존의 것들과는 다르게 객체와 객체의 상호작용을 통해 프로그램이 동작하는 것들을 말한다.

    재사용성이 높은 인간중심적 프로그래밍 패러다임이라고 할 수 있다.

    객체는 데이터와 프로시저로 구성되며 절차지향에 비해서 처음 프로젝트를 시작할 때 어려울 수 있다.

    데이터와 프로시저를 알맞게 작성하고, 나누어야 하는 부분에서 어려울 수 있다.

     

    OOP의 특징

    1. 코드의 재사용성이 높다.

    2. 코드의 변경이 용이하다.

    3. 직관적인 코드분석이 가능하다.

    4. 개발속도가 향상된다.

    5. 상속을 통한 장점이 극대화 된다.

     



    객체 지향적 설계 5대 원칙(S.O.L.I.D)

    SPR : 단일 책임 원칙 

    클래스는 단 하나의 책임을 져야하며 클래스를 변경하는 이유는 단 하나의 이유여야 한다.
    OCP : 개방-폐쇄 원칙

    확장에는 열려 있어야 하고, 변경에는 닫혀있어야 한다.
    LSP : 리스코프 치환 원칙

    상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램을 정상적으로 동작해야한다.
    ISP : 인터페이스 분리 원칙

    한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다.(인터페이스의 단일 책임 강조)
    DIP : 의존 역전 원칙

    고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.



    메소드 오버로딩, 메소드 오버라이딩

    Overloading(오버로딩)

    - 같은 이름의 메소드를 여러개 정의하는 것

    - 매개변수의 타입이 다르거나 개수가 달라야 한다.

    - return type과 접근 제어자는 영향을 주지 않음.

    Overriding(오버라이딩)

    - 상속에서 나온 개념

    - 상위 클래스(부모 클래스)의 메소드를 하위클래스(자식 클래스)에서 재정의

    - parameter 및 return type는 같아야 한다.

    - 자식 클래스가 필요에 의해 메소드 구현을 다양하게 하기 위해서

     



    Get과 Post 방식

    Get 방식

    - 클라이언트에서 서버로 데이터를 전달할 때, 주소뒤에 "이름"과 "값"이 결합된 스트링 형태로 전달

    - 주소창에 쿼리 스트링이 그대로 보여지기 때문에 보안성이 떨어진다.

    - 길이에 제한이 있다.(= 전송 데이터의 한계가 있다.)

    - Post 방식 보다 상대적으로 전송 속도가 빠르다.

     


    Post 방식

    - 일정 크기 이상의 데이터를 보내야 할 때 사용한다.

    - 서버로 보내기 전에 인코딩하고, 전송 후 서버에서는 다시 디코딩 작업을 한다.

    - 주소창에 전송하는 데이터의 정보가 노출되지 않아 Get 방식에 비해 보안성이 높다.

    - 속도가 Get방식 보다 느리다.

    - 쿼리스트링(문자열) 데이터 뿐만 아니라, 라디오 버튼, 텍스트 박스 같은 객체들의 값도 전송가능.

    Get과 Post의 차이점

    - Get은 주로 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용

    - Post는 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용

    - Get을 사용하면 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩되어 URL에 붙는다.

    - Post방식은 전달되는 데이터가 보이지 않는다.

    - Get방식은 전달되는 데이터가 255개의 문자를 초과하면 문제가 발생할 수 있다.

    - 웹서버에 많은 데이터를 전달하기 위해서는 Post 방식을 사용하는 것이 바람직하다.

     



    Session과 Cookie



    Session과 Cookie 사용 이유

    - 현재 우리가 인터넷에서 사용하고 있는 HTTP프로토콜은 연결 지향적인 성격을 버렸기 때문에 새로운 페이지를 요청할 때마다 새로운 접속이 이루어지며 이전 페이지와 현재 페이지 간의 관계가 지속되지 않는다.

    이에 따라 HTTP 프로토콜을 이용하게 되는 웹사이트에서는 웹페이지에 특정 방문자가 머무르고 있는 동안에 그 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용한다.



    Session

    - 특정 웹 사이트에서 사용자가 머무르는 기간 또는 한명의 사용자의 한번의 방문을 의미한다.

    - Session에 관련된 데이터는 Server에 저장된다.

    - 웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라진다.

    - Cookie에 비해 보안성이 좋다.



    Cookie

    - 사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복할 수 있는 방법

    - 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해주는 정보이다.

    - Cookie는 인터넷 사용자가 특정 웹 서버에 접속할 때, 생성되는 개인 아이디와 비밀번호, 방문한 사이트의 정보를 담은 임시 파일로써, Server가 아닌 Client에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 웹서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용된다.

    - Cookie는 Client Pc에 저장되는 정보기 때문에, 다른 사용자에 의해서 임의로 변경이 가능하다.(정보 유출가능, Session보다 보안성이 낮은 이유)

    보안성이 낮은 Cookie를 사용하는 이유 => 모든 정보를 Session에 저장하면 Server의 메모리를 과도하게 사용하게 되어 Server에 무리가 감.



    MVC 패턴

    - 객체지향 프로그래밍에서, MVC란 사용자 인터페이스르 성공적이며 효과적으로 데이터 모형에 관련 시키기 위한 방법론 또는 설계 방식중 하나이다.

    - MVC 패턴은 목적코드의 재사용에 유용한 것은 물론, 사용자 인터페이스와 응용프로그램 개발에 소요되는 시간을 현저하게 줄여주는 형식이라고 많은 개발자들이 평가하고 있다.

    MVC 구성요소

    - Model - 데이터를 가진 객체, 파라미터로 자주 쓰인다. DB의 테이블과 대응하는 경우가 많다.

    - View - UI를 담당한다. 클라이언트측 기술인 HTML, CSS, JavaScript 등으로 만들어진 컨테이너이다.

    - Controller - UI를 통한 사용자의 입력 명령에 응답 및 데이터 흐름 제어를 담당한다.

     



    Interface, Abstract

    Interface

    - 일종의 추상 클래스

    - 오직 추상메서드와 상수만을 멤버로 갖는다.

    - Implements 키워드를 사용

    - 상속의 관계가 없는 클래스간 서로 공통되는 로직을 구현하여 쓸 수 있도록 한다.

    - Extends는 하나의 클래스만 상속 가능하나 Interface는 다중 상속이 가능하다.

    - public으로만 사용가능

     


    Abstract

    - 추상메서드를 하나 이상 가진 클래스

    - 자신의 생성자로 객체 생성 불가능

    - 하위 클래스를 참조하여 상위 클래스의 객체를 생성

    - 하위 클래스를 제어하기 위해 사용


    Interface vs Abstract

    공통점

    - new 연산자로 인스턴스 생성 불가능.

    - 프로토타입만 있는 메서드를 갖는다.

    - 사용하기 위해서는 하위클래스에서 확장/구현 해야 한다.

    차이점

    - 사용하는 키워드가 다르다

    - Abstract는 일반 메서드를 사용할 수 있지만, Interface는 메서드 선언만 가능하다.



    Static의 의미

    - 클래스가 로딩될 때, 메모리 공간을 할당하는데 처음 설정된 메모리 공간이 변하지 않음을 의미

    - 객체를 아무리 많이 만들어도 해당 변수는 하나만 존재(객체와 무관한 키워드)



    Spring Framework(스프링 프레임워크)



    자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크

    자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크

    자바로 된 프레임워크로 자바SE로 된 자바 객체(POJO)를 자바EE에 의존적이지 않게 연결

    스프링 특징

    1. 경량 컨테이너로서 자바 객체를 직접 관리.

     - 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.

    2. 스프링은 POJO 방식의 프레임워크

     - 일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다.

    3. 스프링은 제어의 역행(IoC)을 지원.

     - 컨트롤의 제어권이 사용자가 아니라 프레임워크에 이어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.

    4. 스프링은 의존성 주입(DI)를 지원

     - 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.

    5. 스프링은 관점 지향 프로그래밍을 지원

     - 따라서 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리할 수 있다.

    6. 스프링은 영속성과 관련된 다양한 서비스를 지원

     - Ibatis나 Hibemate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.

    7. 스프링은 확장성이 높음.

     - 스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이하다.



    싱글톤 패턴

    - 객체를 단 하나만 생성하여 생성된 객체를 프로그램 어디에서나 접근하여 사용할 수 있도록 하는 패턴을 말한다.

    - 객체 생성 단 한번으로 객체들의 복제와 메모리 낭비를 방지할 수 있으며, 싱글톤으로 만들어진 클래스와 다른 클래스의 인스턴스들의 데이터 공유가 쉽다.

    - 인스턴스가 절대적으로 한개만 존재하는 것을 보증하기에 개발 시 실수를 줄일 수 있으며, 싱글톤 객체를 사용하지 않는 경우 인스턴스를 생성하지 않는다.

    - 싱글톤을 상속시킬 수 있다는 장점이 있다.

    - 하지만 전역변수보다 사용하기가 불편하며, 싱글톤의 역할이 커질 수록 결합도가 높이지기 떄문에 객체 지향 설계 원칙에 어긋날 수가 있다.



    Thread


    쓰레드 - 프로세스 내에서 동시에 실행되는 독립적인 실행 단위를 말함, 장점으로는 자원을 많이 사용하지 않고 구현이 쉬우며 범용성이 높다.

    프로세스 - 운영체제에서 실행중인 하나의 프로그램(하나 이상의 쓰레드를 포함한다)

    Thread 장점

    - 빠른 프로세스 생성

    - 적은 메모리 사용

    - 쉬운 정보 공유

    Thread 단점

    - 교착상태에 빠질 수 있다.

    * 교착상태 - 다중프로그래밍 체제에서 하나 또는 그 이상의 프로세스가 수행할 수 없는 어떤 특정 시간을 기다리고 있는 상태

    Thread와 Process 차이

    여러 분야에서 '과정' 또는 ' 처리'라는 뜻으로 사용되는 용어로 컴퓨터 분야에서는 '실행중인 프로그램'이라는 뜻으로 쓰인다.

    이 프로세스 내에서 실행되는 각각의 일을 스레드라고 한다.

    프로세스 내에서 실행되는 세부 작업 단위로 여러 개의 스레드가 하나의 프로세스를 이루게 되는 것이다.



    접근제한자(public > protexted > default > private )

     - public : 접근 제한이 없다(같은 프로젝트 내에 어디서든 사용가능)

     - protected : 같은 패키지 내, 다른 패키지에서 상속받아 자손클래스에서 접근 가능

     - default : 같은 패키지 내에서만 접근 가능

     - private : 같은 클래스 내에서만 접근 가능



    아키텍처

    - 시스템의 물리적 또는 기능적 구조를 말한다

    - 최적화를 목표로 두고 시스템 구성과 동작원리 그리고 시스템의 구성환경등을 설명 및 설계하는 청사진 또는 설계도 입니다.



    도커

    - 리눅스 기반 가상 환경 구축 소프트웨어.

    - 컨테이너와 이미지 기반으로 다양한 가상 서벌르 구축하여 사용이 가능하다.

    - 도커는 가상 환경의 상태를 IMAGE로 저장할 수 있어 복구 및 배포가 편리하다(ISO와 데몬을 생각하면됨)

    - 테스트 환경 구축 : 현재 상태에 대한 저장과 복구가 자유로움,

                               다양한 환경으로 테스트 가능,

                               배포가 간단함.

    - 운영 환경 구축 : 백업 및 복구 정책의 간소화,

                            1서버 멀티 컨테이너 구성 가능,

                            데이터 베이스, 운영 체제 등 개발 환경 공유 가능

    - 개발 환경 공유 : 데이터 베이스,

                            운영 체제 등 개발 환경 공유 가능



    마크업 언어(Markup Language)

    - 태그 등을 이용해 문서나 데이터의 구조를 표시한 언어. 프로그래밍 언어와는 다르며, HTML, CSS, XML이 대표적인 마크업 언어다.



    리팩토링(Refactoring)

    - 이미 완성된 코드의 구조를 개선하는 일.

    - 결과값은 바뀌지 않지만, 코드 내부를 뜯어고쳐 다른 사람이 이해하기 쉽고 간결하게 만드는 행위.

    - 때문에 버그를 고치거나 새로운 기능을 만드는 건 아니지만, 코드의 생산성을 높이고 유지보수가 쉽게끔 만들어준다.

     



    버그(Bug)

    - 소프트웨어에서 발생하는 예견치 못한 오류나 오작동을 말한다.

     

    에러(Error)

    - 유저가 입력한 내용이 잘못됬을 때 발생하는 문제를 뜻한다.

    - 잘못 작성한 코드처럼 내부 문제로 예상하지 못한 문제가 일어나는 버그와 달리, 예를 들면 숫자만 적도록 되어 있는 주민번호 입력창에 영어를 적는다면 에러가 일어나는 것처럼 외부에 있는 유저가 오탈자를 내거나 띄어쓰기를 실수하는 등의 내부에서 정한 형식을 따르지 않을 때 주로 발생한다.


    Exception - 체크예외와 언체크예외

    Exception은 주로 자바에서 제공하는 java.lang.Exception 클래스와 Exception 클래스의 서브클래스 들이 쓰이는 상황을 말한다.

    예외는 체크 예외(Checked Exception)와 언체크 예외(Unchecked Exception), 두 가지로 나눌 수 있다.

    언체크 예외는 RuntimeException을 상속한 것들을 말하고, 체크 예외는 이외의 예외를 말한다.

    물론, RuntimeException 또한 Exception 클래스의 서브 클래스이지만, 프로그램이 동작하는 상황에서 발생하는 예외를 처리한다는 점에서 조금 특별하게 취급한다.


    체크 예외(Checked Exception)

    체크 예외는 RuntimeException을 상속하지 않는 예외들을 말하는데, 체크 예외가 발생할 수 있는 메소드를 사용할 경우, 복구가 가능한 예외들이기 때문에 반드시 예외를 처리하는 코드를 함께 작성해야 한다.
    (try~catch, throws 등) 

    만약 예외를 처리하는 코드를 넣지 않을 경우 컴파일 에러가 발생한다.
    대표적으로 IOException 이나 SQLException 등이 존재한다.


    언체크 예외(UnChecked Exception)

    RuntimeException을 상속한 예외들은 따로 언체크 예외라고 부르는데, 명시적으로 예외처리를 강제하지 않기 때문이다.
    언체크 예외는 따로 런타임 예외라고도 부른다.
    언체크 예외는 프로그램에 오류가 있을 때 발생하도록 의도된 것들이다.
    대표적으로는 NullPointerException 이나 IllegalArgumentException 등이 존재한다.

     


    디버깅(Debugging)

    - 디버깅 또는 디버그(Debug)라고 하며, 프로그래밍 과정에서 발생하는 버그를 찾아 바로 잡는 작업이다.
    - 단순히 버그를 없애는 것 뿐만 아니라 문제가 발생한 근본적인 원인을 찾아 해결해 나가는 과정을 말한다.

     


    로깅(logging)

    - 운영 중인 웹 애플리케이션이 문제가 발생했을 경우, 문제의 원인을 파악하려면 문제가 발생했을 때 당시의 정보가 필요하다.

    - 이런 정보를 얻기 위해서 예외가 발생했거나, 중요 기능이 실행되는 부분에서는 적절한 로그를 남겨야 한다.

    - 즉, 정보를 제공하는 일련의 기록인 로그(log)를 생성하도록 시스템을 작성하는 활동이다.

     



    포워딩(Forwarding)

    웹 컨테이너(Web Container) 차원에서 페이지 이동만 있는 것이다. 실제로 클라이언트는 다른 페이지로 이동을 했는지 알 수 없다. 그렇기 때문에 웹 브라우저에는 최초에 호출한 URL이 표시되며 이동한 페이지의 URL 정보는 볼 수 없다. 동일한 웹 컨테이너에 있는 페이지로만 이동 할 수 있다.

    포워딩은 클라이언트와 통신없이 서버에서만 처리되는 것이기 때문에 리다이렉트보다 나은 성능을 보여준다.

    그리고 현재 실행중인 페이지와 Forwarding에 의해 호출될 페이지는 Request와 Response 객체를 공유한다. 객체를 요청에 담고 해당 요청을 사용할 다음 자원에 전송한다는 뜻이다.

    간단히 말하여 말 그대로 Forward(건내주기)한다는 것이다. 따라서 사용자가 최초로 요청한 요청정보는 다음 URL에서도 유효한 것이다.

    리다이렉트(Redirect)

    웹 컨테이너(Web Container)는 sendRedirect() 메서드가 호출되어 리다이렉트(Redirect) 명령이 들어오면 웹 브라우저에게 다른 페이지로 이동하라고 명령한다. 이 명령에는 브라우저가 웹 컨테이너의 응답을 받은 후 다시 요청을 보낼 새로운 URL을 포함한다. 그러면 웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소로 이동한다. 다른 웹 컨테이너에 있는 주소로 이동이 가능하며 새로운 페이지에서는 Request와 Response 객체가 새롭게 생성된다.

    리다이렉트는 추가적으로 발생한 처리 때문에 포워딩보다 느리다. 중요한 것은 마지막으로 수행하는 작업은 새로운 요청에 의한 것이고, 이것을 클라이언트가 알고있기 때문에 브라우저창의 주소가 처음 요청한 주소가 아닌 다시 요청을 보낼 새로운 주소값으로 변한다.

    간단히 말하여 최초 요청을 받은 첫 번째 URL에서 클라이언트에 Redirect할 두 번째 URL을 리턴하고, 클라이언트는 전혀 새로운 요청을 생성하여 두 번째 URL에 다시 요청을 보낸다. 따라서 처음 보냈던 요청정보는 더이상 유효하지 않는 것이다.



    TIMESTAMP

    데이터를 실수로 삭제(DELETE) 또는 수정(UPDATE)를 하고 COMMIT을 했다면 당황하지 말고 TIMESTAMP를 사용하여 이전의 데이터를 조회하여 복구할 수 있다.

    -- 10초전 데이터 조회
    SELECT  *  FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' SECOND)
    WHERE 컬럼 = 'A'; -- 필요에 따라서 조건문

    -- 10분전 데이터 조회
    SELECT  *  FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '10' MINUTE)
     
    -- 3시간전 데이터 조회 
    SELECT  *  FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '3' HOUR)

    -- 1일전 데이터 조회 
    SELECT  *  FROM 테이블 AS OF TIMESTAMP(SYSTIMESTAMP-INTERVAL '1' DAY)

    -- 특정시간 기준으로 데이터 조회
    SELECT * FROM USER_TB AS OF TIMESTAMP(TO_DATE('20200605000000', 'YYYYMMDDHH24MISS'));



    DML, DDL, DCL

    DML 데이터 조작어, Data Manipulation Language)

    정의된 데이터베이스에 입력된 레코드를 조회하거나 수정하거나 삭제하는 등의 역할을 하는 언어를 말한다.
    쉽게 말하면, 테이블에 있는 행과 열을 조작하는 언어라고 생각하면 된다.
    데이터베이스 사용자가 질의어를 통하여 저장된 데이터를 실질적으로 처리하는데 사용하는 언어이다.

    DML 명령은 자동으로 커밋되지 않습니다.
    즉 DML 명령에 의한 변경은 데이터 베이스에 영구적이지 않으므로 롤백할 수 있습니다.
    SELECT  데이터를 조회하는 역할을 한다.
    INSERT 데이터를 삽입하는 역할을 한다.
    UPDATE 데이터를 수정하는 역할을 한다.
    DELETE 데이터를 삭제하는 역할을 한다.


    DDL 데이터 정의어, Data Definition Language

     테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 (생성, 변경, 삭제, 이름변경) 데이터 구조와 관련된 명령어들을 말함.

    직접 데이터베이스의 테이블에 영향을 미치기 떄문에 DDL 명령어를 입력하는 순간, 명령어에 해당하는 작업이 즉시(AUTO COMMIT) 완료됩니다.
    CREATE  데이터베이스, 테이블 등을 생성하는 역할을 한다. 
    ALTER  테이블을 수정하는 역할을 한다.
    DROP  데이터베이스, 테이블을 삭제하는 역할을 한다.
    TRUNCATE  테이블을 초기화 시키는 역할을 한다.


    DCL 데이터 제어어, Data Control Language

    데이터베이스에 접근하거나 객체에 권한을 주는 등의 역할을 하는 언어를 말한다.
    데이터를 제어하는 언어이다.
    데이터의 보안, 무결성, 회복 등을 정의하는데 사용한다.

    직접 데이터베이스의 테이블에 영향을 미치기 때문에 DCL 명령어를 입력하는 순간, 명령어에 해당하는 작업이 즉시(AUTO COMMIT) 완료됩니다.
    GRANT 특정 데이터베이스 사용자에게 특정 작업에 대한 수행권한 부여를 한다.
    REVOKE 특정 데이터베이스 사용자에게 특정 작업에 대한 권한을 박탈, 회수한다.
    COMMIT 트랜잭션의 작업이 정상적으로 완료되었음을 관리자에게 알려준다.
    ROLLBACK 트랜잭션의 작업이 비정상적으로 종료 되었을 때 원래의 상태로 복구한다.


    DDL을 통해 데이터 베이스와 테이블을 생성 및 변경, 제거하고

    DML을 통해 생성된 테이블 내에 있는 데이터들을 입력, 수정, 삭제하고

    DCL을 통해 데이터베이스의 접속 권한 등을 삭제할 수 있다.



    프록시저

    - 특별한 로직을 처리하기만 하고 결과 값을 반환하지 않는 서브 프로그램이다.
    - 테이블에서 데이터를 추출해 조작하고 그 결과를 다른 테이블에 다시 저장하거나 갱신하는 일련의 처리를 할 때 주로 프로시저를 사용한다.



    TDD(테스트 주도 개발, Test Driven Development)



    테스트 주도 개발(TDD)은 설계 이후 코드 개발 및 테스트케이스를 작성하는 기존의 개발 프로세스와 다르게 테스트 케이스를 작성 한 후 실제 코드를 개발하여 리펙토링 하는 절차를 따른다.






    TDD 개발 방식의 장점



    - 보다 튼튼한 객체 지향적인 코드 생산



    - 재설계 시간의 단축



    - 디버깅 시간의 단축



    - 테스트 문서의 대체 가능



    - 추가 구현의 용이함



    TDD 개발 방식의 단점



    - 생산성의 저하



    - 개발시간이 일반적인 개발 방식에 비해 대략 10~30% 정도로 늘어난다.





    Jenkins (젠킨스)



    - CI(지속적인 통합)툴



    - 빌드 자동화를 도와줌. 



    Build란 서버에 올릴 수 있는 상태로 만드는 것을 빌드라고 합니다.



    빌드를 하루에 한번을 할 수도 있고, 안할 수도 있지만 1주일, 1달로 따지면 많이 하고, 그게 1년이 된다면 엄청 많이 한다고 할 수 있습니다.



    그렇기에 이렇게 반복되는 과정은 자동화 시킬 필요가 있습니다.

    왜냐하면 이 작업을 하는데도 집중력, 긴장감 등이 소모 되기 때문입니다. 그리고 빌드는 시간이 꽤 걸리는 작업인데 빌드를 실행 시키고 나서 빌드가 될 때 까지 기다리는 시간도 모아보면 엄청 길 것입니다.



    이럴 때 사용 하는 것이 Jenkins로 젠킨스의 대표적인 기능은



    1. 대쉬보드 제공

    여러가지 배포 작업의 상황을 모니터링 할 수 있습니다.



    2. 배포 스크립트를 실행해주기

    배포 스크립트를 개발자 로컬에서도 실행 할 수 있는데 젠킨스를 띄워놓으면 스케줄링을 해줍니다. 





    2022-03-24 추가



    시스템 아키텍쳐(System Architecture)



    - 하드웨어와 소프트웨어를 포함하는 시스템 전체에 대한 논리적인 기능 체계입니다.

    - 시스템이 어떻게 작동하는 지를 설명하는 프레임 워크이며 시스템이 목적을 달성하기 위해 시스템의 컴포넌트가 무엇인지, 시스템이 어떻게 상호작용하는지, 시스템의 정보가 어떻게 교환되는지 설명한다.





    소프트웨어 아키텍쳐(S/W Architecture)



    - 소프트웨어 구조를 비롯한 개발에서 요구되는 기능과 품질을 확보하고, 소프트웨어 구축 및 지속적인 개선이 용이하도록 하는 역할을 한다.

    - 요구사항 분석 활동에 의해 도출된 요구사항을 모두 충족시킬 수 있는 시스템이 만들어질 수 있도록 하기 위한 설계 활동이다.





    알고리즘(Algorithm)



    - 문제를 해결하기 위해 필요한 계산 절차를 말한다.

    - 프로그래밍 언어를 통해 알고리즘을 프로그램으로 만들어가는 작업을 프로그래밍이라고 한다.





    UX(User Experience)



    - 사용자가 서비스를 이용하며 느끼고 얻는 경험을 뜻한다.





    UI(User Interface)



    - 사용자가 서비스를 이용하는 환경을 말하며, UI는 사용자 경험(UX)에 큰 영향을 미친다.





    WBS(Work Breakdown structure)



    - 프로젝트 범위와 일정을 세부적으로 나눈 '작업 분할 구조도'이다.

    - 프로젝트 목표를 달성하기 위해서 필요한 활동과 업무를 계층으로 분류 및 세분화하여 전체 범위를 정의한 구조도이다.

    - WBS를 활용하면 프로젝트에 필요한 인력과 일정 계획을 세우는 데 용이하며, R&R(Role&Responsibilties)를 한눈에 파악할 수 있기 때문에 실무에서 많이 사용된다.





    애즈이즈(AS-IS) VS 투비(TO-BE)



    - AS-IS는 개선되기 이전의 상태이고 TO-BE는 개선된 후의 상태를 말한다.





    헬스체크(Health Check)



    - IT업에서 헬스체크는 서버나 네트워크 등이 정상적으로 가동하는지 상태를 확인하는 것을 말한다.

    - 미리 답이 정해진 일정한 규칙을 실행시켜 장애의 유무를 확인하고, 필요할 때에는 장애 단위를 분리시키기도 한다.





    페일 오버(Fail Over) vs 페일 백(Fail Back)



    - 페일 오버는 서버나 시스템, 네트워크 문제가 발생했을 때 예비 시스템으로 자동 전환되는 기능을 말한다.

    - 이 때 사람이 수동으로 전환하면 '스위치 오버' 라고 한다.

    - 페일 백은 페일오버로 자동 전환된 시스템을 기존 상태로 돌려 놓는 것을 말한다.





    GUI(Graphic User Interface)



    - 사용자가 화면안의 요소를 시각적으로 확인하고, 마우스로 아이콘을 클릭하여 기능을 작동시키는 환경을 의미한다.

    - 도스처럼 문자로 된 명령어를 입력시켜야 하는 CLI(Command-Line Interface)에 반대되는 개념이다.





    SDK(Software DEvelopment Kit)



    - 소프트웨어나 시스템을 만드는 데 쓰이는 개발 도구 키트를 말한다.

    - SDK안에는 개발에 필요한 샘플 코드, 코드 편집기 같은 툴이나 콘솔, 안내 문서, APT(어노테이션 툴) 등이 포함되어 있다.

    - 안드로이드용 모바일 앱을 개발하는 데는 Android SDK, 자바 개발하는 데는 JDK(자바 개발 키트)가 쓰이는 등 여러 가지 SDK를 찾아볼 수 있다.





    JDK(Java Development Kit)



    - 자바로 소프트웨어를 개발할 수 있도록 여러 기능들을 제공하는 개발 도구 키트이다.

    - JDK의 종류로는 Java EE, Java EE, Java SE 가 있다.





    Java EE(Java Platfrom, Standard Edition)



    - 표준 자바 플랫폼으로 표준적인 컴퓨팅 환경을 지원하기 위한 자바 가상머신 규격 및 API 집합을 포함한다.

    - Java EE, ME는 구체적인 목적에 따라 자바 SE를 기반으로 API를 추가하거나 자바 가상머신 규격 및 API의 일부를 택하여 정의된다.





    Java SE(Java Platform, Enterprise Edition) 



    - JavaSE에 웹 어플리케이션 서버에서 동작하는 기능을 추가한 플랫폼이다.

    - 이 스펙에 따라 제품을 구현할 것을 WAS라고 한다.





    Java ME(Java platform, Micro Edition)



    -  제한된 자원을 가진 휴대전화, PDA 등에서 Java 프로그래밍 언어를 지원하기 위해 만든 플랫폼 중 하나이다.





    JRE(Java Runtime Enviroment)



    - 자바가 동작하는데 필요한 JVM, 라이브러리 등 다양한 파일을 포함한다.





    JVM(Java Virtual Machine)



    - 자바가 실제로 동작하는 가상 환경이다.

    - JVM으로 하나의 자바 프로젝트를 개발해도 여러 환경에서 원활하게 실행시킬 수 있다.





    IDE(Integrated Development Environment)



    - 프로그램을 개발하는데 필요한 소스 코드 작성 및 편집, 컴파일, 디버깅 등 모든 작업을 한번에 할 수 있는 통합 개발 환경을 말한다.





    펌웨어(Firmware)



    - 하드웨어를 제어하는 소프트웨어이다.

    - 하드웨어가 출고된 때부터 포함되어 있는 프로그램인 만큼 하드웨어보다는 교체하기 쉽지만 일반적인 소프트웨어에 비해서는 어렵기 때문에 soft도 hard도 아닌 그 중간쯤의 firm 이라는 이름이 붙었다.





    ERP(Enterprise Resource Planning)



    - 전사적 자원 관리라고 부르며, 말 그대로 기업 활동을 위해 쓰여지고 있는 기업 내의 모든 인적, 물적 자원을 효율적으로 관리하여 궁극적으로 기업의 경쟁력을 강화시켜주는 역할을 하게 되는 통합정보시스템이라 할 수 있다.

    - 기업은 경영 활동의 수행을 위해 생산, 판매, 인사, 회계 등의 운영 시스템을 갖고 있는데 ERP는 이처럼 전 부문에 걸쳐 있는 경영 자원을 하나의 체계로 통합적 시스템을 재구축함으로써 생산성을 극대화 하려는 대표적인 기업 리엔지니어링 기법이다.





    데이터베이스(Database)



    - 데이터의 집합을 뜻하여 줄여서 DB라고도 부른다.

    - 서버를 통해 넘어오는 데이터를 저장하고 관리하는 일종의 창고같은 개념이다.

    - 데이터베이스에 과부하가 걸리면 서버에도 지장을 주며 관리를 잘못하면 데이터가 사라지는 상황이 벌어질 수 있으니 주의해야 한다.





    데이터베이스 관리 시스템(Database Management System)



    - 줄여서 DBMS라고 부르며, 데이터베이스를 통해 데이터를 저장, 수정, 추출할 수 있도록 관리하는 프로그램을 말한다.





    관계형 데이터베이스(Relational Datavbase)



    - 줄여서 RDB라고 부르며, 데이터베이스에서 키(KEY)와 값(VALUE)의 관계로 이루어진 표(table)로 데이터를 구성하는 방식으로 오라클(ORACLE), MySQL, MSSQL 등 가장 널리 쓰이는 데이터베이스 관리 시스템이 관계형 데이터베이스 모델을 따르고 있다.





    필드(Field)



    - 데이터베이스 시스템에서 처리의 최소 단위가 되는 것을 말한다.

    - 예를 들면 엑셀에서 열(column)에 해당하는 가장 작은 단위의 데이터가 필드이다.





    레코드(Record)



    - 정보를 처리하는 기본적인 단위로 하나 이상의 필드의 집합을 말한다.

    - 예를 들면 엑셀의 행(row)에 해당되고, 레코드 또는 튜플(Tuple)이라고 하며, 여러 행이 모여 한 열을 이루듯이 여러 필드가 모여 한 레코드를 이룬다.





    튜플(Tuple)



    - 릴레이션을 구성하는 각각의 행을 말하며 속성의 모임으로 구성된다.

    - 파일 구조에서 레코드와 같은 의미이다.

    - 튜플의 수를 카디널리티(Cardinality) 또는 기수, 대응수라고 한다.





    속성(Attribute)



    - 데이터베이스를 구성하는 가장 작은 논리적 단위이며, 개체의 특성을 기술한다.

    - 파일 구조상의 데이터 항목 또는 데이터 필드에 해당한다.

    - 속성의 수를 디그리(Degree) 또는 차수라고 한다.





    릴레이션(Relation)



    - 데이터들의 표(Table_의 형태로 표현한 것으로 구조를 나타내는 릴레이션 스키마와 실제 값들인 릴레이션 인스턴스로 구성된다.

    - 주로 테이블과 같은 의미로 사용되며, 데이터의 집합을 의미한다.

    [릴레이션(Relation)의 특징]

         ● 한 릴레이션에서 튜플들은 모두 다르다(똑같은 튜플이 포함될 수 없다.)

         ● 한 릴레이션에서 튜플들은 순서에 무관하다.

         ● 튜플들의 삽입, 삭제 등의 작업으로 인해 릴레이션은 시간에 따라 변한다.

         ● 릴레이션 스키마를 구성하는 속성(attribute)의 값은 동일해도 된다.

         ● 속성의 값은 논리적으로 더 이상 쪼갤수 없는 원자값으로 구성된다.

         ● 튜플을 식별하는 속성들의 부분집합을 키(Key)로 설정한다.





    스키마(Schema)



    - 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터 집합이다.

    - 데이터 베이스를 구성하는 데이터 개체(Entity), 속성(Attribute), 관계(Relationship) 및 데이터 조작 시 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의한다.

    - 스키마는 현실 세계의 특정한 한 부분의 표현으로써 특정 데이터 모델을 이용해서 만들어진다.

    - 시간에 따라 불변인 특성을 가지고, 데이터의 구조적 특성을 의미하며, 인스턴스에 의해 규정된다.



    [스키마의 3계층]

    ● 외부 스키마(External Schema)

    - 사용자나 응용프로그래머 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의한 것이다.

    - 전체 데이터베이스의 한 논리적인 부분으로 볼 수 있으므로 서브스키마(Sub Schema)라고도 한다.

    - 하나의 데이터베이스시스템에는 여러개의 외부 스키마가 존재할 수 있으며, 하나의 외부 스키마를 여러개의 응용 프로그램이나 사용자가 공용할 수도 있다. (= 사용자 뷰(View))



    ● 개념 스키마(Conceptual Schema)

    - 데이터베이스의 전체적인 논리적 구조로서, 모든 응용 프로그램이나 사용자들이 필요로 하는 데이터를 종합한 조직 전체의 데이터베이스로 하나만 존재한다.

    - 개체간의 관계와 제약 조건을 나타내고 데이터베이스의 접근 권한, 보안 및 무결성 규칙에 관한 명세를 정의한다.

    - DBA에 의해서 구성된다. (= 전체적인 뷰(View))



    ● 내부 스키마(Internal Schema)

    - 물리적 저장장치의 입장에서 본 데이터베이스 구조로, 물리적인 저장장치와 밀접한 계층이다.

    - 실제로 데이터베이스에 저장될 레코드의 물리적인 구조를 정의하고, 저장 데이터 항목의 표현방법, 내부 레코드의 물리적 순서 등을 나타낸다.

    - 시스템 프로그래머 시스템 설계자가 보는 관점의 스키마다. (= 저장 스키마(Storage Schema))





    트랜잭션(Transaction)



    - 데이터베이스 시스템에서 병행 제어 및 회복 잡업 시 처리되는 작업의 논리적 단위이다.

    - 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.

    - 또, 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위이다.





    NoSQL(Not Only SQL)



    - 기본 RDBMS 형태의 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술을 의미하며, 관계형 데이터베이스의 한계를 극복하기 위한 데이터 저장소의 새로운 형태이다.

    - 테이블-컬럼과 같은 스키마 없이, 분산 환경에서 단순 검색 및 추가 작업을 위한 키 값을 최적화하고, 대규모 확대가 가능한 수평적인 확장성과 지연 및 처리율이 우수하다.

    - 문서, 그래프, 키 값, 인 메모리, 검색을 포함해 다양한 데이터 모델을 사용한다.

    - RDBMS가 클라이언트/서버 환경에 맞는 데이터 저장기술이라면, NoSQL은 클라우드 환경에 맞는 저장 기술이다.

    - 대표적인 예로 아파치 카산드라(Apache Cassandra), 하둡(Hadoop), MongoDB 등이 이다.





    프로시저(Stored Procedure)



    - 영구저장모듈(Persistent Storage Module)이라고 하며, SQL Server에서 제공하는 프로그래밍 기능이다.

    - 쿼리문을 마치 하나의 메서드 형식으로 만들고 어떠한 동작을 일괄적으로 처리하는 용도로 사용된다.

    - 여러 개의 컬럼을 조회하고 여러개의 테이블을 조인하고 거기에 조건까지 넣어줌으로써 하나의 쿼리를 만드는데 긴 쿼리문이 생기게 되는데, 이러한 여러개의 쿼리를 사용할 때마다 긴 쿼리문을 작성해야 한다면 매우 불편하기 떄문에 이를 프로시저에 저장하고 저장된 프로시저를 호출하여 프로그래밍을 하는 것이 훨씬 효율적이다.

    - 하나의 요청으로 여러 SQL문을 실행할 수 있고, 네트워크 소요 시간을 줄일 수 있으며, 개발 업무를 구분하여 개발 할 수 있다.

    - 하지만 처리 성능이 낮고 디버깅이 어려우며, 데이터베이스의 확장이 매우 힘들다는 단점이 있다.





    시퀀스(Sequence)



    - 시퀀스는 자동으로 순차적으로 증가하는 순번을 반환하는 데이터베이스 객체이다.

    - 보통 PK값에 중복값을 방지하기 위해 사용하며, 주로 ID와 같이 순차적으로 증가하는 컬럼에 많이 사용된다.

    - 시퀀스는 테이블과는 독립적으로 저장되고 생성되기 떄문에 여러 테이블에서 참조해서 공유되지 않도록 해야한다.

    - 메모리에 캐시되었을 때, 시퀀스 값의 액세스 효율이 증가한다.





    뷰(View)



    - 뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된 이름을 가지는 가상 테이블이다.

    - 그래서 기본 테이블과 같은 형태의 구조를 사용하며, 조작도 기본 테이블과 거의 같다.

    - 뷰는 저장장치 내에 물리적으로 존재하지 않지만 사용자에게 있는 것처럼 간주된다.

    - 데이터 보정작업, 처리과정 시험 등 임시적인 작업을 위한 용도로 활용되어 필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하고 명령문이 간단해진다.

    - Join문의 사용 최소화로 사용상의 편의성을 최대화한다.

    - 뷰를 통해서만 데이터에 접근하게 하면 뷰에 나타나지 않는 데이터를 안전하게 보호할 수 있다.

    - 기본 테이블의 기본키를 포함한 속성(열) 집합으로 뷰를 구성해야만 CRUD 사용이 가능하다

    - 일단 정의된 뷰는 다른 뷰의 정의에 기초가 될 수 있다.

    - 뷰가 정의된 기본 테이블이나 뷰를 삭제하면 그 테이블이나 뷰를 기초로 정의된 다른 뷰도 자동으로 삭제된다.





    트리거(Trigger)



    - 테이블에 대한 이벤트에 반응하여 자동으로 실행되는 작업을 말한다.

    - DML의 데이터 상태의 관리를 자동화 하는데 사용된다.

    - 트리거를 사용하여 데이터 작업 제한, 작업 기록, 변경 작업 감사 등을 할 수 있다.

    - 테이블과 뷰 데이터베이스 작업을 대상으로 정의할 수 있으며, 전체 트랜잭션 작업에 대해 발생되는 트리거와 각 행에 대해 발생되는 트리거가 있다.





    인덱스(Index)



    - 데이터베이스 분야에 있어서 테이블에 대한 저장 공간을 활용하여 데이터베이스 테이블의 동작의 속도를 높여주는 자료구조이다.

    - 인덱스는 테이블 내의 1개의 컬럼, 혹은 여러개의 컬럼을 이용하여 생성될 수 있다. 고속의 검색 동작 분만 아니라 레코드의 접근과 관련 효율적인 순서 매김 동작에 대한 기초를 제공한다.

    - 인덱스를 저장하는 데 필요한 디스크 공간은 보통 테이블을 저장하는 데 필요한 디스크 공간보다 작다. 왜냐하면 보통 인덱스는 키-필드만 갖고 있고, 테이블의 다른 세부 항목들을 갖고 있지 않기 때문이다.

    - 관계형 데이터베이스에서는 인덱스는 테이블 부분에 대한 하나의 사본이다.

    - 인덱스는 고유 제약 조건을 실현하기 위해서도 사용된다.

    - 고유 인덱스는 중복된 항목이 등록되는 것을 금지하기 때문에 인덱스의 대상인 테이블에서 고유성이 보장된다.





    스크립트(Script) 언어



    - 소스 코드를 컴파일 하지 않고도 실행할 수 있는 프로그래밍 언어를 말한다.

    - Java, C언어 같은 경우 컴파일러를 통해 기계어로 코드를 바꿔주어야 사용자가 실행할 수 있는 실행 파일이 얻어지지만 스크립트 언어는 별도의 컴파일 없이 내장된 번역기에 의해 번역되므로 바로 실행이 가능하다.

    - 인터프리터 언어라고도 한다.

    [스크립트 언어의 종류]

    ● 서버 사이드 스크립트(Server-side-script)

    - 해당 소스의 실행 결과를 확인하기 위해 웹서버를 거쳐야 하는 스크립트를 말하며, 대표적인 예로 ASP, PHP, JSP, PYTHON 등이 있다. 

    ●클라이언트 사이드 스크립트(Client-side-script)

    - 내장된 번역기에 의해 실행되는 스크립트로 서버를 거치지 않고 뷰 창에서 처리되는 스크립트를 말하며, JavaScript, VBScript, JScript 등이 있다. 





    동기방식(Sync.) vs 비동기방식(Async.)



    - 동기방식(Synchronous)은 기능에 대한 요청을 보내고 응답을 받아야만 동작이 순차적으로 처리되는 방식이며, 반대로 비동기방식(Asynchronous)은 요청을 보내는 순서와 상관없이 동작이 처리되는 방식이다.





    AJAX(Async JavaScript and XML)



    - 비동기적 자바스크립트와 XML의 약자로, 한 웹 페이지를 로딩할 때 페이지의 일부 데이터만을 갱신하는 웹 개발 기법을 말한다.

    - 기존 웹 페이지의 로딩 방식은 웹 사이트 내부에서 페이지를 넘겨 이동할 떄마다 다른 웹페이지를 통째로 불러오기 때문에 시간이 오래 걸린다는 단점이 있었다.

    - 하지만 AJAX는 웹 페이지의 기본적인 디자인 틀을 갖춰놓은 뒤 자바 스크립트를 통해 웹 서버에 필요한 데이터를 요청하고, 디자인 틀 안에서 XML로 이루어진 데이터를 불러와 변경한다.

    - 즉, 전체를 로딩할 필요없이 일부분만 불러오기 때문에 웹 페이지를 처리하는 속도가 빨라지고 코드의 양도 줄어든다는 장점이 있다.





    JSON(JavaScript Object Notation)



    - 속성-값의 쌍 또는 키-값의 쌍으로 이루어진 데이터 객체를 전달하기 위해 인간이 읽을 수 있는 데이터 교환용으로 설계된 경량 텍스트 기반 개방형 표준 포멧이다.

    - 비동기 브라우저/서버 통신(AJAX)을 위해 넓게는 XML을 대체하는 주요 데이터 포멧이다.

    - 특히 인터넷에서 자료를 주고 받을 때 그 자료를 표현하는 방법으로 알려져 있다.

    - 자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수 값을 표현하는데 적합하다.

    - 본래는 자바스크립트 언어로부터 파생되어 자바스크립트의 구문 형식을 따르지만 언어 독립형 데이터 포멧이다. 즉, 프로그래밍 언어나 플랫폼에 독립적이므로 구문 분석 및 JSON 데이터 생성을 위한 코드는 C, C++, 자바 파이썬 등 수많은 프로그래밍 언어에서 쉽게 이용할 수 있다.





    제이쿼리(JQuery)



    - 클라이언트 측 HTML 스크립팅을 간소화하기 위해 고안된 크로스 플랫폼 자바스크립트 라이브러리이다.

    - 여러 브라우저에서 동작하는 사용하기 쉬운 API를 통해 HTML 문서 탐색과 조작, 이벤트 처리, 애니메이션, AJAX 등을 훨씬 더 간단하게 만들어준다.





    DOM(Document Object Model)



    - 문서 객체 모델이라고 하며, 브라우저에 내장되어 있는 웹 페이지에 대한 프로그래밍 인터페이스를 말한다.

    - 기본적으로 여러 프로그램들이 페이지의 콘텐츠 및 구조, 그리고 스타일을 읽고 조작할 수 있는 API를 제공한다.

    - 즉, HTML 요소로 이루어진 각각의 Node들을 자바스크립트를 이용해서 조작할 수 있게 해주고 컴퓨터가 구조를 이해하여 화면을 그려주는 기능을 한다고 볼 수 있다.





    콜백함수(CallBack)



    - 이름 그대로 나중에 호출되는 함수를 말한다.

    - 자바스크립트에서 콜백함수는 다른 함수의 매개변수로 함수를 전달하고, 어떠한 이벤트가 발생한 후 매개변수로 전달한 함수가 다시 호출되는 것을 말한다. 즉, 어떤 일을 다른 객체에게 시키고, 그 일이 끝나는 것을 기다리지 않고 끝나고 부를 때까지 다른 일을 하는 것이다.





     

     

     

     

     

     

     

     

     

     

Designed by Tistory.