SMALL
HTTP 상태코드 종류

상태코드

설명 

100

서버가 요청의 일부를 받았으며, 나머지 요청을 더 기다리고 있음 (Continue)

200

요청이 성공적으로 수행되었음(OK)

201

새로운 리소스 생성(Created)

301

접속주소가 다른 위치로 이동(Moved Permanently)

302

임시 이동 (Not temporarily)

400

사용자의 잘못된 요청 처리 못함(Bad request) 

401

인증이 필요한 페이지 요청 할 때(Unauthorized)

403

권한이 없을 때 (Forbidden)

404

요청 페이지 없음(Not found)

405

허용되지 않은 메서드 사용(Method not allowed)

500

내부 서버 오류(Internal server error)

502

잘못된 게이트웨이(Bad Gateway)

503

서비스 제공 불가(Service unailable)

504

게이트웨이 시간 초과(Gateway timeout)


LIST

'전공 > Web' 카테고리의 다른 글

HTTP Method  (0) 2018.05.14
WAS와 웹서버  (0) 2018.05.13
SMALL

스프링을 하다보면 인터셉터와 필터를 접하게 된다.

인터셉터와 필터의 차이점을 알아보자.


우선 다음 그림을 보자.


위의 그림을 보면 인터셉터와 필터는 컨트롤러에 들어가기전에 접근하는 것으로 나타나있다.


간단한 예시를 들어보면 로그인을 하지 않았는데 로그인 후의 페이지를 url로 접근을 하면 세션 값이 null로 되어있는데, 로그인 확인하는 컨트롤러에 접근하기전에 처리를 하면 성능이 더 좋아진다.


인터셉터와 필터의 호출 시점이 다른것이 보인다.



Interceptor


  • 사용시기
1. 요청 경로마다 접근 제어를 다르게 해야 할 때 사용
2. 특정 URL을 요청할 때 접근 내역을 기록하고 싶을 때 사용

  • Filter와 차이점
1. Spring bean을 받아 올 수 있음.
2. 처리 시점이 다르다.

  • 메서드
1. preHandle() : 컨트롤러 들어가기 전
2. postHandle() : 컨트롤러 들어가고 나온 후 뷰로 전송 전
3. afterCompletion() : 뷰까지 완료되고 나서



Filter


Filter는 Interceptor이 호출되기 전, DispatcherServlet에 요청이 들어오기 전에 호출 된다. 그리고 Filter는 web.xml에서 정의됨으로 Bean을 DI로 받을 수 없다.


  • 메서드
1. init() : Filter Instance 초기화
2. doFilter() : 전/후 처리
3. destroy() : Filter Instance 종료



결론


필자의 생각으론 필터의 경우 호출 시점이 자유롭지 않으므로, 스프링 기반으로 개발을 한다면 Interceptor을 사용하는 것이, 단순 Servlet 구현이라면 Filter 사용을 하는 것이 나을 꺼 같다.


Filter에서도 스프링 bean을 사용 할 수는 있다.



LIST

'전공 > Spring' 카테고리의 다른 글

POJO  (0) 2018.05.14
SMALL

컬렉션(Collection)


자바에서 데이터를 저장하는 기본적인 자료구조를 모아서 편하게 사용하기 위해 컬렉션을 제공한다.




인터페이스

구현 클래스

특징

List

LinkedList

Stack

Vector

ArrayList 

순서가 있는 데이터의 집합이고, 데이터 중복을 허용 

Set

HashSet

TreeSet

순서가 없는 데이터의 집합이고, 데이터 중복을 허용하지 않는다. 

Map

HashMap

TreeMap

HashTable

Properties

키와 값의 쌍으로 이루어진 데이터의 집합이고, 데이터의 순서가 없고, 키는 중복을 허용하지 않고 값의 중복은 허용 



Collection Interface


모든 컬렉션의 상위 인터페이스로 add,isEmpty,size 같은 핵심 메소드를 선언


List Interface


  • LinkedList
양방향 포인터 구조로 데이터 삽입, 삭제가 빈번할 경우 성능이 좋음
  • Stack
LIFO(Last In First Out) 형식으로 먼저 들어온게 출력 되는 구조 (http://noil0816.tistory.com/15?category=663296 참고)
  • Vector
ArrayList의 구형 버전이고, 모든 메소드가 동기화 되어 있음
  • ArrayList
속도가 빠르며 크기를 마음대로 조절할 수 있는 배열이며 단방향 포인터 구조로 자료에 대한 순차적 접근에 강점이 있음

Set Interface

  • HashSet
가장 빠른 임의 접근 속도를 가지고 있으며 순서를 예측 할 수 없음
  • TreeSet
정렬된 순서대로 보관하여 정렬 방법을 지정 할 수 있음
  • LinkedHashSet
가장 최근에 접근한 순서 또는 추가된 순서로 접근 가능



Map Interface


  • HashMap
중복을 허용하지 않고 순서를 보장 할 수 없고, 키와 값으로 null 허용
  • TreeMap
BST 형태로 키와 값으 쌍으로 이루어진 데이터를 저장하며 정렬된 순서로 키와 값을 저장하므로 빠른 검색이 가능하며 저장시 정렬(오름차순)하기 때문에 시간이 오래 걸림 
  • HashTable
HashMap 보다 느리지만 동기화를 지원하고 키와 값으로 null 허용 하지 않음
  • LinkedHashMap

HashMap을 상속받아 사용하므로 HashMap과 유사하며, Map에 있는 엔트리들의 연결 리스트를 유지하므로 입력한 순서대로 반복 가능















LIST

'전공 > JAVA' 카테고리의 다른 글

JNI  (0) 2020.06.24
try-with-resource  (0) 2018.07.08
JVM  (0) 2018.05.02
접근제어자  (0) 2018.05.02
오버라이딩과 오버로딩  (0) 2017.11.24
SMALL

이번에 L사 면접에서 싱글턴 패턴에 자세히 물어봐서 대답을 잘하지 못하였다. 그래서 이번에 다시 공부를 해보려 한다.


싱글턴 패턴(Singleton Pattern)


싱글턴 패턴은 최초에 한번만 메모리를 할당하여 생성된 인스턴스 하나로 계속 사용하는 패턴이다. 

두 번째 이용시부터 객체 로딩 시간이 줄어 성능이 좋아진다. 하지만 싱글턴 인스턴스가 너무 많은 일을 하거나 많은 데이터 공유를 할 경우 개방-폐쇄 원칙을 위배하고, 멀티 쓰레드에서 동기화 처리를 안하면 문제가 발생한다.

그래서 꼭 사용해야할 경우에만 사용 하는 것이 좋다.


고전적인 싱글턴 패턴


위와 같은 코드는 멀티스레드 환경에서 동시에 접근을 함으로써 한 개 이상의 인스턴스가 생성됨으로써 문제가 발생한다.


Synchronized



위와 같이 synchronized를 사용함을써 해결을 할 수 있으나 속도가 느려져 성능이 저하된다.


DCL(Double Checking Locking)



위와 같이 두번 체크를 함으로써 초기에 객체를 생성하지 않으면서 동기화하는 부분을 줄여서 해결 하였다. 하지만 멀티 환경에서 하나의 CPU를 제외하고는 다른 CPU가 lock에 걸림으로써 완전 해결 한 것은 아니다.


Holder에 의한 초기화



위와 같이 클래스안에 클래스를 만들어서 JVM의 클래스가 로드 되는 시점을 이용한 방법을 사용하여 해결 하였다.


getTest 매서드가 호출되기 전까지는 싱클턴 인스턴스를 생성하지 않고 getTest가 호출 될 때 TestHolder가 참조되고 싱글턴 인스턴스가 생성된다. Lazy Initialization 기법을 사용하기 때문에 메모리 점유율 에서 유리하고,synchronized를 사용하지 않았기 때문에 성능적인 문제도 발생하지 않는다.


LIST

'전공 > 디자인패턴' 카테고리의 다른 글

디자인패턴  (0) 2021.06.07
SOLID 원칙  (0) 2021.06.07
SMALL

클라우드 서비스 유형에는 Iaas, PaaS, SaaS가 있다.


IaaS(Infrastructure as a Service)


IaaS 는 스토리지나 서버같은 하드웨어 자원만 빌려주는 클라우드 서비스이며 PaaS, Saas의 기반이 된다

하드웨어 자원만을 제공하기 때문에 사용자가 관리해야 하는 영역이 넓다.

IaaS의 대표적인 유형은 AWS가 있다.


PaaS(Platform as a Service)


PaaS는 서비스를 개발 할수 있는 안정적인 플랫폼과 그 플랫폼을 이용하는 응용 프로그램을 개발 할 수 있는 API까지 제공한다. 플랫폼을 제공하기 때문에 사용자는 필요한 서비스를 선택하고 제작하면 된다. 안정적인 플랫폼과 API를 제공하기 때문에 사용자의 부담이 줄어든다.

PaaS의 대표적인 유형은 구글 앱 엔진이 있다.


SaaS(Software as a Service)


SaaS는 클라우드 환경에서 동작하는 응용프로그램을 서비스 형태로 제공한다.

모든 부분을 클라우드 서비스로 제공을 하는 것으로 네이버 클라우드, 네이버 메일, G메일, 구글 드라이브같은 것이 SaaS의 대표적인 유형이다.

LIST

'전공 > 기타' 카테고리의 다른 글

Visual SVN 서버 복원  (0) 2020.04.14
마이크로 서비스 아키텍처(MSA)  (0) 2020.04.09
정통기기출3년치  (0) 2019.06.28
정보통신기사 필기 요약집  (1) 2019.06.06
프레임워크와 라이브러리  (0) 2018.05.13
SMALL

면접 및 필기시험에 자주 나오는 대칭키와 비대칭키에 대해 알아보기


대칭키?


대칭키는 비밀키라고도 불리며 암호화 복호화키가 동일한 것을 의미한다.

암호화된 문서를 암호화에 사용된 키를 일반에게 공개하지 않고 개인이 비밀로하여 이 키를 아는 자만이 볼 수 있도록 하게 한다.

대체적으로 bit 수가 작고 비대칭키 알고리즘에 비해 속도가 빠르다.

하지만 각 쌍의 사용자들마다 유일한 키가 생성되어 다수의 쌍이 존재할 경우 키의 수가 증가되고, 키 관리가 어려워진다. 그리고 인증 기능이 없다.

대표적인 알고리즘에는 DES가 있으며, 디스크 암호화에 주로 사용된다.


비대칭키?


비대칭키는 공개키,개인키라고도 불리며 암호화 복호화키가 다른 것을 의미한다.

대칭키의 문제점을 해결하기 위해 사용된 것이며, 공개키로 암호화 한것을 개인키로 복호화 하는 것이다.

대체적으로 bit 수가 많고 대칭키 알고리즘에 비해 속도가 느리다.

키가 공개되어 있기 때문에 따로 분배할 필요가 없으며 인증 기능을 제공한다.

대표적인 알고리즘에는 RSA가 있으며, 비밀번호 암호화에 주로 사용된다.

LIST

'전공 > 보안' 카테고리의 다른 글

정보보호의 목표  (0) 2020.10.02
디지털 저작권 관리(DRM)  (0) 2020.09.17
스테가노그래피, 워터마크, 핑거프린팅  (0) 2020.09.17
리눅스 로그파일(wtmp, utmp, btmp, lastlog)  (0) 2020.09.08
방화벽  (0) 2020.04.09
SMALL

커널 레벨 쓰레드


커널 레벨 쓰레드는 운영체제가 제공하는 시스템 함수 호출을 통해서 쓰레드 생성을 요구해야 한다. 쉽게 말하면 사용자 요청에 따라 쓰레드 생성 및 관리를 하는 것이 커널을 말한다.


장점

커널에서 직접 제공해주므로 안정성과 다양한 기능이 제공된다.


단점

유저 모드에서 커널 모드로의 전환이 빈번하게 이루어 지기 때문에 성능 저하가 있다.


유저 레벨 쓰레드


유저 레벨 쓰레드는 커널에서 쓰레드 기능을 지원하지 않을 때, 쓰레드 기능을 가진 라이브러리를 활용하는 방식을 말한다.


장점

커널은 쓰레드의 존재를 모르기 때문에 유저 모드에서 커널 모드로 전환이 없기 때문에 성능이 좋다.


단점

운영체제는 프로세스의 존재만 알고, 쓰레드의 존재를 모르기 때문에 쓰레드 문제가 발생하지 않게 프로그래밍을 해야 하는데, 프로그래밍이 어렵고, 커널 레벨 쓰레드에 비해 결과 예측이 어려워진다.

LIST

'전공 > 운영체제' 카테고리의 다른 글

Mutex(뮤텍스), Semaphore(세마포어)  (0) 2020.09.17
Starvation(기아현상), Aging(노화)  (0) 2020.09.17
Thread Pool(스레드 풀)  (0) 2020.09.17
페이지 테이블  (0) 2020.09.14
Segmentation, Paging  (0) 2020.09.14
SMALL

트랜잭션이란?


트랜잭션은 데이터베이스의 상태를 변화시키는 작업 단위를 의미한다.


ATM 출금을 예시를 들어본다.


1. 예금 출금을 누른다.

2. 카드를 넣는다.

3., 비밀번호를 누른다.

4. 출금할 금액을 입력한다.

5. 출금 완료


위와 같은 과정을 트랜잭션이라고 한다.


트랜잭션 특징


트랜잭션 특징에는 ACID 라는 4가지 특징이 있다.


  • 원자성(Atomicity)
원자성은 트랜잭션이 데이터베이스에 모두 반영되거나, 아니면 전혀 반영되지 않아야 한다.

위의 ATM 출금 과정에서 비밀번호를 실패하면 트랜잭션을 실패를 하고, 출금 완료까지하면 트랜잭션을 성공 하는 것이 원자성이다.

  • 일관성(Consistency)
일관성은 트랜잭션의 작업 처리 결과가 항상 일관성 있어야 한다.

위의 ATM 출금을 완료하면 A의 계좌의 남은 잔액과 출금한 금액의 합이 ATM 출금하기전의 잔액과 같아야 하는 것이 일관성이다.

  • 고립성(Isolation)
고립성은 하나의 트랜잭션이 실행 중 일때 변경한 데이터는 트랜잭션이 완료 될 때까지 다른 트랜잭션이 참조할수 없어야 한다.

위의 ATM에서 A의 계좌로 출금 중 일때는 A의 계좌에 대해 관여 할 수 없는 것이 고립성이다.

  • 지속성(Durability)
지속성은 트랜잭션이 완료되면, 영구적으로 데이터가 보존 되어야 한다.

위의 ATM에서 출금 완료를 하면 영구적으로 잔액이 저장되어야 하는 것이 지속성이다.

Commit, Rollback 연산


  • Commit
커밋은 하나의 트랜잭션이 완료되었음을 알려주는 것이다.
ATM 출금이 완료되면 커밋이 되었다라고 말을 한다.

  • Rollback
롤백은 하나의 트랜잭션 처리가 비정상적으로 종료되면 다시 처음 상태로 되돌리는 것이다.
ATM 출금 과정 중 어느 과정에서 에러가 나면 다시 처음 화면으로 돌아 가는 것이다.


LIST

'전공 > 데이터베이스' 카테고리의 다른 글

UNDO와 REDO  (0) 2018.06.14
UNION과 UNION ALL  (0) 2018.06.11
DB정규화  (0) 2018.05.17
조인  (0) 2018.05.02
SQL 인젝션  (0) 2017.11.24
SMALL

스택(Stack)?


한 방향에서 자료의 입력과 출력이 이루어지는 자료구조이며 LIFO(Last In First Out)라고 불린다. 

ex) 함수의 콜스택, 문자열 역순 출력, 연산자 후위표기법


큐(Queue)?


한 방향에서는 자료의 입력이 이루어지고, 반대편 방향에는 자료의 출력이 이루어지는 자료구조이며 FIFO(First In First Out)라고 불린다.

ex) 버퍼


덱(Deque)?


자료의 입력과 출력을 양 쪽 끝에서 가능하게 하는 자료구조


  • 스크롤(Scroll) : 입력이 한쪽에서만 가능하도록 제한한 덱
  • 셀프(Shelf) : 출력이 한쪽에서만 가능하도록 제한한 덱


LIST

'전공 > 자료구조' 카테고리의 다른 글

트리 순회  (0) 2020.09.13
트리(Tree)  (0) 2020.09.13
선형구조와 비선형구조  (0) 2020.09.13
연산자 우선순위  (0) 2020.09.01
벨만포드와 다익스트라 알고리즘  (0) 2018.07.04
SMALL

JOIN?


관계형 데이터베이스에서 서로 관계있는 데이터가 여러 테이블로 나뉘어 저장되어 있는데, 각 테이블에 저장된 데이터를 효과적으로 검색하기 위해 조인을 사용한다.


조인에는 내부 조인이랑 외부 조인이 있다.


INNER JOIN


내부 조인은 둘 이상의 테이블에 존재하는 공통 속성의 값이 같은 것을 결과로 추출한다. 내부조인에는 동등 조인, 자연 조인, 교차 조인, 셀프 조인이 있다.


1. 동등 조인(EQUI JOIN)

둘 이상의 테이블에 존재하는 공통 속성을 비교하여 출력한다.


SELECT *

FROM emp INNER JOIN dept

ON emp.deptno = dept.deptno


2. 자연 조인(NATURAL JOIN)

조인 대상 테이블의 모든 속성을 비교하여, 공통 속성을 가진 속성으로 조인을 수행한다. 같은 이름을 가진 속성은 한 번만 나타난다.


SELECT *

FROM emp NATURAL JOIN dept



3. 교차 조인(CROSS JOIN)

교차 조인은 카티션 프로덕트로 불리며, 조인에 참여한 모든 데이터가 나타난다.


1) JOIN 조건을 잘못 기술했을 때

2) JOIN 조건을 정의하지 않았을 때

3) JOIN 조건이 JOIN 조건에 참여하는 테이블의 모든 행이 JOIN되는 경우


위와 같은 상황이면 교차 조인이 발생한다.

그래서 조인을 수행 한 뒤, 결과를 확인 해봐야한다.


SELECT *

FROM emp CROSS JOIN dept


4. 셀프 조인(SELF JOIN)
셀프 조인은 EMP 테이블에 사원 정보와 관리자 정보를 함께 보고 싶을 때, 사용한다.


SELECT e.empno, e.ename, m.empno, m.ename

FROM emp E INNER JOIN emp M

ON E.mgr = M.empno




OUTER JOIN


외부 조인은 특정 테이블의 데이터를 모두 포함하는 조인이다. 외부 조인에는 왼쪽 외부 조인, 오른쪽 외부 조인, 완전 외부 조인이 있다.


1. 왼쪽 외부 조인(LEFT OUTER JOIN)




위와 같이 왼쪽의 데이터를 모두 포함하고 있다.


SELECT *

FROM emp

LEFT OUTER JOIN dept

ON emp.deptno = dept.deptno




2. 오른쪽 외부 조인(RIGHT OUTER JOIN)



위와 같이 오른쪽의 데이터를 모두 포함하고 있다.

SELECT *

FROM emp

RIGHT OUTER JOIN dept

ON emp.deptno = dept.deptno



3. 완전 외부 조인(FULL OUTER JOIN)




SELECT *

FROM emp

FULL OUTER JOIN dept

ON emp.deptno = dept.deptno



JOIN 사용 시 주의 사항


1. SQL 문장의 의미를 제대로 파악

  -> 성능이 크게 좌우 된다.

2. 조인 조건을 명확하게 제공

  -> CROSS JOIN이 발생 할 수 있다.

3. 조인 적용 후 테스트를 수행

  -> 여러 개 테이블을 조인 할시 예상 못한 결과를 얻을수 있으니, 테스트를 습관 시해야 한다.



JOIN 사용 시 고려 사항



조인은 생각보다 많은 자원을 소비한다. 그래서 JOIN 사용 시 고려 해야 할 것이 있다.


1. 조인 대상의 양을 최소화

  -> 조인 할 집합에 먼저 조건을 걸 수 있으면 조건을 적용하여 조인의 양을 최소화한다.

2. 인덱스의 활용

  -> 조인 연산의 비용을 낮출 수 있음


LIST

'전공 > 데이터베이스' 카테고리의 다른 글

UNDO와 REDO  (0) 2018.06.14
UNION과 UNION ALL  (0) 2018.06.11
DB정규화  (0) 2018.05.17
트랜잭션  (0) 2018.05.04
SQL 인젝션  (0) 2017.11.24

+ Recent posts