728x90

Session

  • 특정 웹사이트에서 사용자가 머무르는 기간 또는 한명의 사용자의 한번의 방문을 의미한다.
  • Session에 관련된 데이터는 Server에 저장된다.
  • 웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라진다.
  • Cookie에 비해 보안성이 좋다.

 

Cookie

  • 사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복할 수 있는 방법
  • 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해 주는 정보이다.
  • Cookie는 사용자가 웹 서버에 접속할 때, 생성되는 개인 아이디와 비밀번호, 방문한 사이트의 정보를 담은 임시파일.
  • Server가 아닌 Client에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 웹서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용한다.
  • Cookie는 Client PC에 저장되는 정보이기 때문에, 다른 사용자에 의해서 임의로 변경이 가능하다.(정보 유출 가능)

 

Session과 Cookie 사용 이유

  • 인터넷에서 사용하고 있는 HTTP프로토콜은 연결 지향적인 성격을 버렸기 때문에 새로운 페이지를 요청할 때마다 새로운 접속이 이루어며 이전 페이지와 현재 페이지 간의 관계가 지속되지 않는다.
  • HTTP프로토콜을 이용하게 되는 웹사이트에서 웹페이지에 특정 방문자가 머무르고 있는 동안에 그 방문자의 상태를 지속시키기 위해 세션과 쿠키를 사용한다.

보안성 낮은 Cookie대신 Session만 사용하면 안되는 이유

  • 모든 정보를 Session에 저장하면 Server의 메모리를 과도하게 사용하여 Server에 무리가 가기 때문이다.

 

Session vs Cookie

  세션(Session) 쿠키(Cookie)
저장 위치 웹 서버 클라이언트(접속자PC)
저장 형식 Object text
만료 시점 브라우저 종료시 삭제
(기간 지정 가능)
쿠키 저장시 설정
(브라우저가 종료되도, 만료시점이 지나지 않으면 자동으로 삭제되지 않는다.)
사용하는 자원(리소스) 웹 서버 리소스 클라이언트 리소스
용량 제한 서버가 허용하는 한 제한 없음. 총300개
하나의 도메인 당 20개
하나의 쿠키 당 4KB
속도 쿠키보다 느리다. 세션보다 빠르다.
보안 쿠키보다 좋다. 세션보다 안좋다.
728x90
728x90

Get 방식

  • 클라이언트에서 서버로 데이터를 전달할 때 주소 뒤에 이름과 값이 결합된 스트링 형태로 전달
  • 주소창에 쿼리 스트링이 그대로 보여지기 때문에 보안성이 떨어진다.
  • 길이에 제한이 있다.(전송 데이터의 한계가 있다)
  • Post방식보다 상대적으로 전송 속도가 빠르다.

 

Post 방식

  • 일정 크기 이상의 데이터를 보내야 할 때 사용한다.
  • 서버로 보내기 전에 인코딩하고 전송 후 서버에서는 다시 디코딩 작업을 한다.
  • 주소창에 전송하는 데이터의 정보가 노출되지 않아 Get방식에 비해 보안성이 높다.
  • 속도가 Get방식보다 느리다.
  • 쿼리스트링 데이터 뿐만 아니라, 라디오 버튼, 텍스트 박스 같은 객체들의 값도 전송이 가능하다.

 

Get vs Post

  • Get방식은 주로 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용한다.
  • Post방식은 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용한다.
  • Get방식을 사용하면 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩되어 URL에 붙는다.
  • Post방식은 전달되는 데이터가 보이지 않는다.
  • Get방식은 전달되는 데이터가 255개의 문자를 초과하면 문제가 발생할 수 있다.
  • 웹서버에 많은 데이터를 전달하기 위해서는 Post 방식을 사용하는 것이 바람직하다.
728x90
728x90

Heap

  • 자바의 힙 공간은 객체와 JRE 클래스들에게 메모리를 할당할 때 사용 된다.
  • 객체가 생성되면 힙 공간에 할당되며, 이 객체에 대한 참조가 스택 메모리에 저장된다.
  • 가비지컬렉션은 힙 메모리에 더이상 참조하지 않는 객체들을 정리 한다.
  • 힙에 만들어진 객체는 어디서든 접근할 수 있고, 어플리케이션 어디에서나 참조될 수 있다.

 

Heap 특징

  • 힙 영역이 가득차면 OutOfMemoryError가 발생
  • 스택 영역에 비해 엑세스 속도가 조금 느리다.
  • 스택 영역과 달리 메모리 해제가 자동으로 되지 않는다.
  • 메모리 사용의 효율성을 위해 GC가 필요하다.(Garbage Collection)
  • Thread-safe하지 않기 때문에 적절히 synchronizing을 해야한다.

 

Stack

  • 정적 메모리 할당 및 쓰레드 실행을 위해 사용되는 영역
  • 메소드에 고유한 기본 값과 메소드에서 참조하는 힘 개체에 대한 참조값을 포함하고 있다.
  • LIFO(Last-In-First-Out) 순서로 동작된다.
  • 새 메소드가 호출될 때마다 스택 상단에 해당 메소드에 대한 새블록이 생성된다.
  • 메소드 실행이 완료되면 해당 스택에서 pop되고, 호출한 메소드로 흐름이 돌아가게 된다.

 

Stack 특징

  • 스택 내부의 변수는 변수를 생성한 메소드가 실행되는 동안만 존대한다.
  • 메소드 실행에 따라 자동으로 할당되고 해제된다.
  • 해당 메모리 영역이 가득차면 StackOverFlowError가 발생.
  • 힙 메모리에 비해 엑세스 속도가 빠르다.
  • 쓰레드마다 고유의 스택 영역을 가지고 있으므로, Threa-safe하다.

 

Heap과 Stack 차이점

  • 힙 메모리는 어플리케이션의 모든 부분에서 사용된다.
    스택 메모리는 하나의 쓰레드가 실행 될 때 사용된다.
  • 객체가 생성되면 항상 힙 공간에 저장된다.
    스택 메모리는 힙 공간에 있는 객체를 참조만 한다.
    스택 메모리는 primitive 타입의 지역변수와 힙 공간에 있는 객체 참조 변수만 갖고 있다.
  • 힙 공간에 저장된 객체는 어디서든 접근이 가능하다.
    스택 메모리는 다른 쓰레드가 접간할 수 없다.
  • 스택 메모리의 생명주기는 매우 짧다.
    힙 메모리는 어플리케이션의 시작부터 끝까지 남아있다.
  • 스택 메모리가 가득차면 java.lang.StackOverFlowError 발생
    힙 메모리가 가득차면 java.lang.OutOfMemoryError 발생
  • 스택 메모리의 사이즈는 힙 메모리와 비교시 매우 적다.
728x90
728x90

Abstract Class

  • 추상클래스(Abstract Class)는 하나 이상의 추상 메소드를 포함하는 클래스이다.
  • 추상 메소드란 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것.
  • 추상메소드는 추상클래스를 상속 받은 서브 클래스에서 구현된다.
  • JAVA에서 추상클래스와 추상메소드를 선언하기 위해서는 접근제어자 뒤에 abstract를 붙인다.
  • 클래스를 abstract로 지정하면 new를 통해 객체를 직접 생성할 수 없다.
  • 메소드에 abstrat를 사용하면 interface의 메소드와 같이 구현 부분은 없다.
  • abstract로 선언한 메소드를 자식클래스에서 반드시 구현해야 한다.(오버라이딩)

 

Interface

  • 인터페이스(Interface)는 추상메소드로만 구성되어 있다.
  • 추상클래스와 마찬가지로 인터페이스에서 선언된 추상메소드는 서브클래스에서 구현.
  • JAVA에서 예약어로 class 대신 interface를 사용하며 extends 대신 implement로 서브클래스에서 상속 받는다.
  • 모든 멤버 변수는 public static final 이어야 하며, 생략할 수 있다.
  • 모든 메소드는 public abtract 이어야 하며, 생략할 수 있다.

public static final 사용 목적

인터페이스 변수는 아무 인스턴스도 존재하지 않는 시점이기에 스스로 초기화 될 권한이 없다.

public static final을 사용해 구현 객체의 같은 상태를 보장한다.

 

Interface vs Abstract

공통점

  • New 연산자로 인스턴스 생성 불가능
  • 프로토타입만 있는 메소드를 갖는다
  • 사용하기 위해서는 하위클래스에서 확장/구현해야 한다

차이점

  • 사용하는 키워드가 다르다
  • Abstrat는 일반 메소드를 사용할 수 있지만, Interface는 메소드 선언만 가능하다

 

 

728x90
728x90

기본형(Primitive type)

  • 실제 연산에 사용되는 것은 모두 기본형 변수.
  • 기본형 변수는 4가지 타입 8개로 나눌 수 있다.
    • 정수형 타입 : byte(1byte), short(2byte), int(4byte), long(8byte)
    • 실수형 타입 : float(4byte), double(8byte)
    • 문자형 타입 : char(2byte)
    • 논리형 타입 : boolean(1byte)

 

기본형(primitive type) 특징

  • 기본형 변수는 산술 연산이 가능하다.
  • null로 초기화 할 수 없다.

 

참조형(Reference type)

  • 어떠한 값이 저장되어 있는 주소를 값으로 가진다.
  • 기본형 8가지를 제외한 나머지 모든 타입
  • 참조형 타입의 범주를 크게 나누어 보면
    • 배열 타입(array type)
    • 열거 타입(enum type)
    • 클래스 타입(class type)
    • 인터페이스 타입(interface type)
// EX)
Integer number = new Integer(1);
Date today = new Date();

 

참조형(Reference type) 특징

  • 참조형 변수는 산술 연산 불가
  • null로 초기화 할 수 있다.
  • DB와 연동시 DTO 객채에 null이 필요한 경우 사용 할 수 있다.

 

기본형과 참조형 차이점

  • 기본형 변수는 Stack에 실제 값을 저장하여 사용하며, 참조형 변수는 객체를 저장하는 것처럼 Heap에 실제 값을 저장하고 해당 주소를 Stack에 저장하는 방식
  • 기본형 변수는 실제 값만 가져오는 것이기에 읽기만 가능하다.
  • 참조형 변수는 값을 읽고 변경할 수 있다.

 

728x90
728x90

프로세스(Process)

  • 실행중인 프로그램을 의미 (a program in execution)
  • 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)를 할당받아 프로세스가 된다.
  • 프로세스는 자원과 쓰레드로 구성된다.
  • 모든 프로세스는 최소 1개이상의 쓰레드가 존재한다.
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구저에 접근이 불가능.

 

쓰레드(Thread)

  • 프로세스 내에서 실행되는 여러 흐름의 단위.
  • 프로세스의 자원을 이용해 실제로 작업을 수행하는 것.
  • 쓰레드는 프로세스 내에서 각각 stack만 따로 할당받고 Code,Data,Heap영역은 공유한다..
  • 한 번 종료된 쓰레드는 다시 실행할 수 없다.
  • 모든 쓰레드는 독립적인 작업을 수행하기 위한 자신만의 호출스택을 필요로 한다.
  • JAVA에는 프로세스가 존재하지 않고 쓰레드만 존재
  • JAVA에서는 운영체제의 역할을 JVM이 한다.
싱글쓰레드 = 자원(메모리) + 쓰레드
멀티쓰레드 = 자원(메모리) + 쓰레드 + 쓰레드 + ...

 

멀티 프로세스

  • 하나의 응용프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하게 한다.
  • 여러 자식 프로세스 중 하나에 문제가 발생하면 해당 자식 프로세스만 죽고 다른 영향이 확산되지 않는다.
  • 각각 독립된 메모리 영역을 가지고 있어 작업량이 많을 수록 오버헤드가 발생.
  • Context Swiching으로 인한 성능 저하.

 

멀티 쓰레드

  • 하나의 프로세스을 여러개의 쓰레드로 구성하고 각 쓰레드로 하여금 하나의 작업을 처리하게 한다.
  • 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있다.
  • 쓰레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어든다.
  • 쓰레드는 프로세스 내의 stack을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적다.
  • 하나의 쓰레드가 데이터 공간을 망가뜨리면 모든 쓰레드가 작동 불능 상태가 된다.
  • 대표적 멀테쓰레드 응용프로그램은 웹 서버이다.
728x90
728x90

OOP란

OOP(Object-Oriented Programming)이란 객체 지향 프로그래밍.

 

OOP 특성 4가지

  • 캡슐화
  • 추상화
  • 다형성
  • 상속성

위 특징을 이용해 코드의 재사용성을 증가시키고 유지보수를 쉽게 하기 위해 객체지향적 프로그래밍을 한다.

 

캡슐화(Encapsulation)

  • 객체의 필드와 메소드를 하나로 묶고, 실제 구현 내용을 외부에 감춘다.
  • 외부 객체는 제공하는 필드와 메소드만 이용할 수 있다.
  • 캡슐화는 외부의 잘못된 사용으로 인해 객체가 침해 당하지 않게 한다.
  • 노출을 위해 접근 제한자(Access Modifier)를 사용한다.

 

추상화(Abstraction)

  • 목적과 관련 없는 부분을 제외해서 필요한 부분을 포착한다.
  • 객체의 공통된 속성들 중 필요한 부분을 포착해서 클래스로 정의한다.
  • 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념으로 다룬다.

 

다형성(Polymorphism)

  • 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다.
  • 오버라이딩과 오버로딩의 현태로 자주 활용된다.

오버라이딩 - 부모클래스에 메소드와 같은 이름으로 사용되며, 매개변수를 재정의하여 함수를 활용하는 것

오버로딩 - 동일한 이름의 함수명을 여러개로 정의하고 매개변수의 타입과 갯수를 다르게하여 매개변수에 따라 다르게 호출 할 수 있게 하는것

 

상속성(Inheritance)

  • 상위(부모) 클래스의 속성(변수)과 기능(메소드)을 재사용하여 하위(자식) 클래스가 전부 물려 받는 것.
  • 물려받는 것 외에 속성과 기능을 추가 할 수 있다.
  • 코드의 재사용성과 유지보수를 위해 사용.

 

 

 

728x90
728x90

Class(클래스)

개념

  • 객체를 정의하고 만들어 내기 위한 설계도 혹은 틀
  • 연관되어 있는 변수와 메소드의 집합

특징

  • 객체의 상태를 나타내는 필드와 객체의 행동을 나타내는 메소드로 구성
  • 필드란 클래스에 포함된 변수
  • 메소드란 어떠한 특정 작업을 수행하기 위한 명령문의 집합

 

Object(객체)

개념

  • 소프트웨어 세계에 구현할 대상
  • 클래스에 선언된 모양 그대로 생성된 실체

특징

  • 클래스의 인스턴스라 부른다
  • 객체는 모든 인스턴스를 대표하는 포괄적인 의미
  • oop 관점에서 클래스의 타입으로 선언되었을 때 객체라고 부른다

※ OOP(Object Oriented Programming) - 객체 지향 프로그래밍

 

Instance(인스턴스)

개념

  • 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체
  • 객체를 소프트웨어에 실체화 하면 인스턴스라 부른다
  • 실체화된 인스턴스는 메모리에 할당

특징

  • 인스턴스는 객체에 포함된다
  • oop 관점에서 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라 부른다
  • 추상적인 개념과 구체적인 객체사이에 초점을 맞출 경우 사용
  • 인스턴스 용어는 반드시 클래스와 객체 사이의 관계로 한정지어서 사용할 필요는 없다
  • 인스턴스는 어떤 원본(추상적 개념)으로 부터 생성된 복제본을 의미

 

클래스, 객체, 인스턴스 차이점

클래스 vs 객체

  • 클래스는 설계도, 객체는 설계도로 구현한 모든 대상을 의미

객체 vs 인스턴스

  • 클래스의 타입으로 선언되었을 때 객체라 부른다
  • 그 객체가 메모리에 할당되어 사용될 때 인스턴스라 부른다
  • 객체는 현실 세계에 가깝고, 인스턴스는 소프트웨어 세계에 가깝다
  • 객체는 실체, 인스턴스는 관계에 초점되어 있다
728x90

+ Recent posts