SMALL

POJO(Plain Old Java Object)?


스프링을 공부하다보면 POJO란 단어가 자주 나온다.

POJO는 쉽게 말하면 클래스에 getter, setter로만 이루어진 객체를 말한다.


POJO가 왜 스프링의 중요한 특징이냐면 클래스 상속, 인터페이스 구현, 어노테이션 사용을 강제하지 않기 때문이다. 그러면 개발자는 일반적인 형태로 코드를 작성 할 수 있어서 생산성도 유리하고, 코드 테스트에 대해 유연하게 할 수 있게 된다.


POJO가 아닌 대표적인 객체는 서블릿 코드를 작성할 때는 반드시 HttpServlet를 상속 받아야한다. 그럼으로써 강제로 상속을 할 수 없게 된다.

LIST

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

인터셉터와 필터  (0) 2018.05.13
SMALL

HTTP Method


HTTP Method에는 다음과 같은 메서드가 있다.


이름

 설명

GET

서버에 리소스를 달라고 요청 한다. (Read)

HEAD

GET처럼 동작하지만 헤더 만을 반환한다.

PUT

서버가 요청의 본문을 가지고 요청 URL의 이름대로 새 문서를 만들거나, 이미 URL이 존재하면 본문을 사용해서 교체한다. (Update)

POST

서버에 입력 데이터 전송한다.(Create)

TRACE

클라이언트에게 자신의 요청이 서버에 도달했을 때 어떻게 보이게 되는지 알려준다.

OPTION

웹 서버가 어떤 메서드를 지원하는지 확인한다.

DELETE

파일을 삭제한다. (Delete)


LIST

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

WAS와 웹서버  (0) 2018.05.13
HTTP 상태코드  (0) 2018.05.13
SMALL

프레임워크랑 라이브러리는 엄연히 다르다.

둘의 차이를 알아보자.



Framework


프레임워크는 뼈대나 기반구조를 가지고, 제어의 역전(IOC)개념이 적용된 기술이다.

개념적인 의미는 소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스들의 집합이다.


  • 특징
1. 컴포넌트들을 재사용 할 수 있다.
2. 높은 수준에서 패턴을 조작화 할 수 있다.
3. 객체 지향 개발을 하면서 통합성, 일관성 부족 문제를 해결 할 수 있다.

Library


개발자가 만든 클래스를 호출하여 사용하는 것이다.


차이점


프레임워크와 라이브러리의 차이는 어플리케이션의 흐름을 누가 들고 있느냐에 달려 있다.

쉽게 말하면 프레임워크는 전체적인 흐름을 스스로 쥐고 있고, 사용자는 그 안에서 필요한 부분을 코드를 만드는 것이고, 라이브러리는 그냥 가져다 쓰는 것이다.





LIST

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

Visual SVN 서버 복원  (0) 2020.04.14
마이크로 서비스 아키텍처(MSA)  (0) 2020.04.09
정통기기출3년치  (0) 2019.06.28
정보통신기사 필기 요약집  (1) 2019.06.06
IaaS, PaaS, SaaS  (0) 2018.05.10
SMALL

아파치와 톰캣을 예를 들어서 WAS(Web Application Server)와 웹 서버를 설명 한다.



Web Server


클라이언트가 서버에 요청을 하면 요청을 받아 정적인 데이터를 제공하는 것이다.(html, css 등)

대표적으로 Apach가 있다.


WAS(Web Application Server)


동적인 데이터를 제공하기 위해 사용 되는 것이다.(DB 접근 등)

대표적으로 Tomcat이 있다.


WAS와 Web Server를 나누는 이유


WAS에서 정적인 데이터도 처리하게되면 부하가 생긴다. 그래서 정적인 데이터는 Web Server가 처리하고 동적인 데이터는 WAS에서 처리하게 된다.

LIST

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

HTTP Method  (0) 2018.05.14
HTTP 상태코드  (0) 2018.05.13
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

+ Recent posts