반응형

 

작성일자 : 2021.01.24

 

 

1. SSL (Secure Socket Layer) 이란?

서버와 클라이언트 간 데이터 전송 시 응용 계층과 전송 계층 사이에 안전한 보안 채널을 형성해 주는 보안용 프로토콜

 

동작 위치를 표현하기가 조금 애매한데, OSI 계층 모델로는 해당 프로토콜을 정의할 수 없다는 의견도 있고, 세션 계층에서 동작한다는 의견도 있음.

응용 계층(HTTP)과 전송 계층(TCP) 사이에서 동작한다 라는게 정확한 표현

 

 

* TLS (Transaport Layer Security)?

Netscape 에 의해 개발된 SSL 이 IETF 표준화 기구가 관리하게 되면서 TLS 로 이름이 변경되었으나 아직까지 SSL 이라는 이름을 더 많이 사용함. TLS 1.0 은 SSL 3.0 을 계승

 

 

2. SSL 인증서

 

클라이언트 서버간의 통신을 공인된 CA 업체가 보증해주는 전자화된 문서

 

인증서에 포함된 내용 (외에도 더 있다)

  1. 소유자 이름
  2. 소유자의 공개 키
  3. 유효 기간
  4. 고유한 UID
  5. 인증서의 모든정보의 해시값
  6. 발급 기관

 

* CA (Certificate Authority)?

SSL 인증서를 제공하는 공인된 기업

ex) Symantec, Comode etc..

 

 

3. 전자 서명

 

정보의 유효함을 증명하기 위해 데이터에 전자적인 서명을 첨부하는 것

 

서버에서 비공개키를 이용해서 정보를 암호화하고, 암호화된 정보를 공개키를 활용하여 클라이언트에서 복호화한다. 이 때 공개키를 가지고 복호화할 수 있다는 건 암호화할 때 공개키의 쌍인 비공개키로 암호화되었다고 판단하며 전자 서명의 승인이 이루어짐. 비대칭키 알고리즘인 RSA 를 많이 사용.

 

SSL 인증서의 전자 서명(서비스 보증) 방법

  1.  클라이언트가 서버에 접속하면 서버는 공개키와 발급한 CA 가 포함된 인증서를 우선 제공
  2.  클라이언트는 인증서가 신뢰할수 있는지를 판단.
     - 발급 기관이 자신의 CA 리스트에 있는지, Root CA 인지, Root CA 에 체이닝된 Intermediate CA 인지 확인
  3.  인증서의 공개키를 이용하여 인증서 정보를 복호화
  4.  복호화가 완료 되면(성공하면) 인증서를 제공한 서비스가 신뢰할수 있다고 판단 

 

 

4. SSL 동작 방식

 

  1. 클라이언트와 서버 간 전자 서명에 의해서 안전한 채널을 수립(비대칭키 암호화 사용)
  2. 해당 채널을 통해 임의의 대칭키를 생성 및 교환
  3. 대칭키를 사용하여 암/복호화 및 정보 교환 실행

* 대칭키 암호화가 비대칭키 암호화보다 빠르기 때문에 첫 인증에만 비대칭키 알고리즘을 사용

 

 

 

 


* https(HyperText Transfer Protocol over Secure Socket Layer, HTTP over TLS, HTTP over SSL, HTTP Secure)?

SSL 위에서 동작하는 http 를 의미, 즉 http 에 보안 프로토콜이 적용되있는 것

 

 

반응형

'보안' 카테고리의 다른 글

[SSL] Apache, Tomcat SSL 적용  (0) 2021.01.24
[보안] 암호화  (0) 2021.01.17
반응형

작성일자 : 2021.01.17

 

1. 암호화란?

개발에서의 암호화란 어떠한 정보를 특정 알고리즘을 이용하여 의미 없는 데이터로 변경하는 것 (복호화는 그 반대)

 

 

2. 암호화 키

암호화, 복호화 알고리즘 연산에 사용되는 값

ex) 공개 키 ,개인 키 etc..

 

 

3. 암호화 종류

 

1) 단방향 암호화(Hashing)

암호화는 가능하나 복호화가 불가능하여 원래의 데이터로 변환이 불가능하다.

저장된 암호화된 비밀번호와, 입력 받은 사용자의 비밀번호를 암호화하여 그 값이 동일한지를 비교하여 인증을 하는 방식으로 비밀번호 암호화에 주로 사용.

 

ex) MD5 (Message-Digest), SHA (Secure Hash Algorithm)

 

 

2) 대칭키(비공개키) 암호화(Symmetric)

암호화, 복호화 시 동일한 키를 사용함

 

ex) DES (Data Encryption Standard), AES (Advanced Encrypting Standard)

 

 

3) 비대칭키(공개키) 암호화(Asymmetric)

암호화, 복호화 시 서로 다른 키를 사용함, 

공개키로 암호화하고, 개인키로 복호화. 대칭형 암호에 비해 느리다.

 

ex) RSA(Rivest, Shamir, Adleman - 제작자 이름)

 

* 개인키와 공개키의 위치를 바꿔 실행하면 '전자 서명' 이 된다.

 

 

반응형

'보안' 카테고리의 다른 글

[SSL] Apache, Tomcat SSL 적용  (0) 2021.01.24
[보안] SSL  (0) 2021.01.24
반응형

작성일자 : 2021.01.01

 

개요 :

 

db 공부 좀 할겸 자격증을 취득할까 생각했다

 

외국 db 자격증은 너무 비싸서 국내 자격증 찾아봤는데 몇개 없었음

 

sqlp 딸까했는데 생각보다 난이도가 높더라고.. sqlp 는 너무 어려워 sqld 를 공부하기로 했음

 

 

36회 sqld 후기 :

코로나로 인한 취소, 37회 자동 신청

 

37회 sqld 후기 :

코로나로 인한 취소인줄 알고있다가 아니란걸 알고 하루 전날 급하게 취소 후 환불

 

38회 sqld 후기 :

더운 여름날 시험보러 나가고싶지않아서 신청도 안함 

 

39회 sqld 후기 :

시험장소 : 서울 성남고등학교

시험일정 : 2020.11.29

시험환경 : 종이시험지, OMR 카드, 1과목 객관식 10문제, 2과목 객관식 32문제/주관식 8문제

 

내용 보니까 기본 쿼리 내용들은 대부분 아는게 많아서 이론 부분과 뒤쪽 처음보는 함수들 위주로 공부했다

 

데이터산업진흥원 사이트에 이론 정리해놓은게 있는데 해당 내용 출퇴근하면서 핸드폰으로 슥슥 봤고, 뒷내용은 노란색 실전문제 책 사서 문제풀이했음

 

기간은 하루에 15분씩 한달반정도 공부했다

 

개념자체가 크게 어려운건 없었는데 대여섯줄 이상인 쿼리가 나오는 문제는 해석하기가 힘들었다 지금도 잘 못함

 

슈퍼타입 서브타입 개념 읽으면서 오 디비에서도 상속 기능이 있나 생각했었음 ㅋㅋ

 

논리적 데이터 모델의 예시였고 구현할땐 결국 통합 or 분리된 테이블을 생성하는거였음

 

 

시험 당일 엄청 추웠다

 

8시반까지 입실하라고 문자로 안내받았는데 9시 5분전에 들어가도 별말 없었음 시험 시작 전까지만 가면 되는듯하다

 

이게 또 시험이라고 긴장이 되긴했음 근데 시험은 전체적으로 쉬웠다

 

문제에 함정이 있다거나 헷갈리는 보기가 여러개 있지도 않았다 맞추라고 내는 느낌 

 

때문에 알면서도 실수로 틀리는 경우는 적을 것 같다 알면 맞추고 모르면 틀림

 

노란 책에서 그대로 나온 문제도 있고, 보진 않았는데 이전 기출에서와 똑같은 문제도 꽤 나왔다고한다

 

근데 풀때는 엄청 쉬웠는데 막상 점수는 생각보다 낮게 나왔다 내가 몰랐을 뿐 사실 함정이 있었나?

 

틀린 문제 피드백 좀 하고싶은데 데이터산업진흥원은 시험문제, 정답 전부 비공개다 아니 정답은 왜??

 

별 생각없이 수험표에 풀이한 답 적어서 나왔다가 정답을 알수가 없어 걍 버렸다 어디서 뭘 틀렸는지도 잘 모르겠다

 

시험보고 한달정도 뒤에 결과를 발표하는데 시험이 쉬웠어서 기다리는동안 덤덤했다 그래도 막상 합격발표 보고나니깐 좀 기뻣음 

 

 

sqld 는 시험이 난이도가 낮다보니(현직자 기준) 스펙으로써 인정받긴 힘들거같고, 다만 일부 기업에서는 

 

취업 시 가산점을 준다하니 전공 학부생 or 취준생이 따기 좋을 것 같다

 

 

시험얘기

 

1과목 정규화는 꾸준히 2문제 이상은 나오는 것 같음 1,2,3차 정규화 정도는 구분할 수 있으면 좋음

 

2과목 계층형 질의랑 그룹함수 cube, rollup, grouping sets 은 풀어보고도 잘 모르겠어서 시간 내서 공부했는데

 

어려워서 그런지 문제도 응용단계까지는 안내는 것 같음

 

계층형 질의는 문법 키워드, 어떨때 순방향, 역방향인지, 각 방향에 따라 결과가 어떻게 차이나는지 알고있으면 될 것 같고,

 

그룹함수는 동일한 파라미터일 때 각 함수의 결과 개수, 형태 차이랑 grouping 적용 방법 정도만 알고있어도 될 것 같다

 

반응형

'일기' 카테고리의 다른 글

랜섬웨어  (0) 2019.06.23
1901 리눅스 마스터 1급 후기  (4) 2019.06.08
반응형

작성일자 : 2020.12.20

환경 : Spring Boot, Chrome

 

1. 개요

1.1) Web Cache(HTTP Cache)란? 

 

  • 서버 지연을 줄이는 목적으로 정적 리소스 등의 웹 문서들을 임시 저장하여 재활용하기 위한 기술
  • 어디에 적용하느냐에 따라 Browser Cache, Proxy Cache, Gateway Cache 로 구분지을 수 있음

 

- 웹 캐싱 방법

  • Response 에 Cache-Control Header 사용

 

 

1.2) Cache-Control ?

  • 서버와 브라우저 사이의 캐시 정책. 여러 지시자들을 사용하여 옵션을 설정할 수 있음 

 

크롬 개발자 도구에서 Cache-Control 헤더를 아래와 같이 확인 가능하다.

 

 

 

- Cache-Control 기본 지시자 

  • no-cache : 캐시 데이터가 있어도 무조건 서버로부터 유효성을 재검증함 (캐시를 사용하지 않는게 아님)
  • no-store : 캐시 데이터를 저장하지 않음 (캐시를 사용하지 않음)
  • max-age=[sec] : 캐시 데이터가 유효한 시간을 설정. 해당 시간이후에 캐시 데이터가 만료 
  • must-revalidate : 만료된 캐시 데이터를 무조건 서버로부터 유효성을 재검증함

 

- 캐싱 데이터 유효성 검증 방법 (ETag 활용)

  1. 브라우저가 서버로 첫 요청시, 서버는 응답에 해당하는 데이터와과 함께 Etag 를 반환 (이 떄 응답 데이터, Etag 는 캐싱)
  2. 브라우저가 서버로 재요청시, If-None-Match 헤더에 캐싱된 Etag 를 담아서 요청 전송
  3. 서버는 신규 요청에 의해 만들어진 Etag 와 If-None-Match  헤더에 담긴 Etag 를 비교하여, 다르면 새로운 Etag 와 함께 응답 반환. 동일하면 304(Not Modified) Return Code 를 반환

  4. 브라우저는 304(Not Modified) Return Code 반환 시 기존 캐싱 데이터를 활용하며, 200 Return Code 로 반환 시, 1. 으로 돌아감

 

 

1.3)  ETag(Entity Tag) ?

  • 웹 리소스의 특정버전에 할당한 식별자

 

- ETag 사용 예시 :

etag 구현체를 필터로 등록하여 사용. 해당 구현체가 필터에 등록되어 Request, Response 에 etag 를 부여/검증한다.

 

@Bean
public FilterRegistrationBean shallowEtagHeaderFilter() {
    FilterRegistrationBean frb = new FilterRegistrationBean();
    frb.setFilter(new ShallowEtagHeaderFilter());
    frb.addUrlPatterns("MY_PATH/*");
    return frb;
}

 

위처럼 ShallowEtagHeaderFilter 를 등록 시 Etag 를 생성 및 검증해주며, Etag 가 존재하면 동일 URI 재요청 시 자동으로 If-None-Match 헤더에 ETag 가 추가해준다.

 

 

2. 적용 예시

 

2.1 Cache Control 활용

 

* WebMvcConfigurer 를 활용하여 정적 리소스 경로를 설정하였다 가정

 

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        CacheControl cacheControl = CacheControl 
                .maxAge(60, TimeUnit.SECONDS) 
                .mustRevalidate();

        registry.addResourceHandler("**/*.js") 
                .addResourceLocations("classpath:/static/")
                .setCacheControl(cacheControl) 
                ;
    }
}

 

: 위 설정 이후, **/*.js 의 요청은 Cache 이 설정됨

 

 

index.html

 

<script src ="http://localhost:8080/test.js"></script>

 

 

- http://localhost:8080/ 첫 요청 시

 

index.html 반환 및 index.html 에 의해 test.js 요청

 

200 응답코드와 함께 설정한 Cache-Control 반환되며 해당 응답은 캐싱된다

 

 

 

- http://localhost:8080/ 두번째 요청 시

 

index.html 반환 및 index.html 에 의해 test.js 요청

 

요청이 캐싱 이후 60초 이내일 경우(max-age=60) 해당 캐시는 유효하다 판단하며 캐싱 데이터를 재사용한다

 

* 이 경우 서버와 통신하지 않기 때문에 데이터가 변경되더라도 브라우저에서는 알 수없음 

* 단 브라우저 URL 입력창에 직접 호출하는 경우, 무조건 서버와 통신하여 변경 여부를 체크 (Chrome)

* from memory cache, from disk cache 두 종류가 있는데, 일반적인 memory, disk 차이와 비슷하다 어디에 저장할지는 Chrome 이 결정 

 

 

 

2.2 Etag 활용

 

shallowEtagHeaderFilter 필터 설정

 

@Bean
public FilterRegistrationBean shallowEtagHeaderFilter() {
    FilterRegistrationBean frb = new FilterRegistrationBean();
    frb.setFilter(new ShallowEtagHeaderFilter());
    frb.addUrlPatterns("/*");
    return frb;
}

 

: 위 설정 이후, /* 의 요청은 Etag 가 설정됨

 

 

Cache-Control 설정

 

@RequestMapping("/")

public void getIndexPage(... HttpServletResponse response)
{

   ...

   response.setHeader("Cache-Control","no-cache");

   ...

}

 

 

 

 

- http://localhost:8080/ 첫 요청 시

 

Etag 와 함께 응답 반환

 

 

 

- http://localhost:8080/ 두번 째 요청 시

 

Request 에  Etag 를 함께 전송

 

 

 

Etag 검증 후 Not Modified(304) 반환

 

 

반응형

'Java' 카테고리의 다른 글

[SpringBoot] Gradle 변수 Property 활용  (0) 2022.05.30
[MyBatis] List 형식 멤버 변수 조회  (0) 2021.02.12
[SpringBoot] H2 연동  (0) 2020.07.21
[Spring] App 구동 후 자동 작업 실행  (0) 2020.02.23
Stream Example  (0) 2020.01.05
반응형

String 

- 불변

- 생성, 조회 가장 빠름

- Thread-safe(Immutable하기 때문)

- 데이터 변경 시 메모리를 새로 할당하여 참조

 

 

StringBuilder

- 가변

- 생성, 조회 String 보다 느림

- No Thread-safe

 

 

StringBuffer

- 가변

- 생성, 조회 StringBuilder 보다 느림

- Thread-safe(동기화 키워드 지원)

 

 

 

요약 : 

문자열 변경/연산이 잦을경우 -> StringBuffer, StringBuilder

단순 참조(조회)가 잦을경우 -> String

Multi-Thread 환경에서 사용할 경우 -> String, StringBuffer

반응형

'Java > Basic' 카테고리의 다른 글

Servlet / Servlet Container(Web Container)  (0) 2021.03.06
다형성 / 오버로딩 / 오버라이딩  (0) 2020.10.02
추상클래스 / 인터페이스  (0) 2020.09.30
클래스 / 오브젝트 / 인스턴스  (0) 2020.09.26
반응형

다형성(polymorphism)

객체지향개념에서의 다형성이란 '여러 가지 형태를 가질 수 있는 능력' 을 의미. 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현.

 

다형성 예시

- 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 함 ( ex: List list = new ArrayList(); )

- 오버로딩을 통해 하나의 메서드가 인자에 따라 다른 역할을 수행

- 오버라이딩을 통해 하나의 메서드가 상속클래스와 자손클래스에서 각각 다른 역할을 수행

 

 

 

오버로딩이란?

한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것

 

ex)

void println(int x);

void println(long x);

 

 

 

오버라이딩이란?

부모클래스에서 정의한 메서드를 자식클래스에서 재정의하는 것

 

ex)

class A extends B {

   @Override

   BClassMethod(){

      ...

   }

}

반응형

'Java > Basic' 카테고리의 다른 글

Servlet / Servlet Container(Web Container)  (0) 2021.03.06
String / StringBuffer / StringBuilder  (0) 2020.10.02
추상클래스 / 인터페이스  (0) 2020.09.30
클래스 / 오브젝트 / 인스턴스  (0) 2020.09.26
반응형

추상클래스란?

Abstract 로 선언되어 추상 메소드를 0개 이상 가지는 클래스

 

- 단독 사용이 불가능하고, 자식 클래스를 통해 상속하여 사용

- 상속 시 추상 메소드를 오버라이딩을 통해 정의해야함

- 추상 클래스의 기능을 이용하고 확장하는 용도

- 상속 및 확장을 추구

 

문법 예시

AbsctractClass

abstract class AbstractClass {
   ...
   abstract void abstractMethod();
   ...
}

 

SubClass

public class SubClass extends AbstractClass {
   ...
   @Override
   public void abstractMethod(){
      ...
   }
   ...
}

 

 

 

 

인터페이스란?

Interface 로 선언되어 추상 메소드를 0개 이상 가지는 명세

 

- 단독 사용이 불가능하고, 구현체 클래스를 통해 구현하여 사용

- 구현시 추상 메소드를 오버라이딩을 통해 정의해야함

- 인터페이스의 명세(메소드 구현)를 강제하는 용도 

- default method 를 통해 메소드를 미리 선언할 수 있음(JAVA8 이상)

- 다형성을 추구

 

문법 예시

Interface

public interface InterfaceExample {
   void interfaceMethod();
   
   default void defaultMethod(){
      ...
   }
}

 

ImplementClass

public ImplementClass implements InterfaceExample {
   ...
   @Override
   public void interfaceMethod(){
      ...
   }
   ...
}
반응형
반응형

1. Class 

자바에서의 프로그램 구성 단위로 하나 이상의 필드나, 메소드로 구성. 일종의 설계도

 

2. Object 

클래스를 사용하여 구현할 대상

 

3. Instance

클래스에 의해 실제로 구현된(메모리에 할당 된) 실체

 

 

 

: Class 에 의해 구현될 대상을 Object 라 부르고, 실제로 구현된 대상을 Instnace 라 부름

반응형

'Java > Basic' 카테고리의 다른 글

Servlet / Servlet Container(Web Container)  (0) 2021.03.06
String / StringBuffer / StringBuilder  (0) 2020.10.02
다형성 / 오버로딩 / 오버라이딩  (0) 2020.10.02
추상클래스 / 인터페이스  (0) 2020.09.30
반응형

작성일자 : 2020.09.12

환경 : CentOS, BASH Shell, Crontab

 

목표 :

  특정 경로의 생성된지 일정기간 이상 지난 파일(로그)들을 자동으로 삭제 

 

시나리오 :

  위의 목표를 수행하는 쉘 스크립트 생성해 데일리로 수행하도록 크론탭에 등록

 

  

1. 스크립트 작성

 

- deleteExpireFile.sh

 

#!/bin/bash

# ---------- Custom Config Option ----------

path="/myPath/myLogDirectory"
expire_days=30

# -----------------------------------------------


echo "Start deleteExpireFile.sh"
find ${path}/* -type f -mtime +${expire_days} -exec rm -f {} \;

echo "End deleteExpireFile.sh"

 

* find /path/* : /path 아래 모든 파일 검색

* -type f : 디렉토리는 제외하고 파일 타입만 검색하는 옵션

* -mtime +30 : 서버 시간 기준으로부터 생성된지 30*24 시간 이상된 파일/디렉토리 검색하는 옵션

* find ... -exec ... {} : find 의 결과에 특정 명령을 수행 ( {} 에 결과값이 들어감 )

  

 

2. crontab 설정

 

 

- 크론탭 추가 명령어 입력 ( 확인 명령어 : crontab -l )

 

> crontab -e

 

 

 

 

- 매일 0 시 0 분 deleteExpireFile.sh 실행하도록 설정

 

0 0 * * * /scriptPath/deleteExpireFile.sh

 

* crontab 로그는 /var/log/cron 에서 확인 가능

 

 

 

 

------

 

+ 스크립트 작성 없이, crontab에 직접 스크립트 내용을 넣어도 된다.

ex) 0 0 * * * find /myPath/* -type -f -mtime +30 -exec rm -f {} \;

반응형

'Linux' 카테고리의 다른 글

[Linux] Apache, Tomcat 연동 (mod_proxy 사용)  (0) 2018.09.16
[Linux] 계정 별 JDK 설정  (4) 2018.09.16
[Linux] telnet 사용  (0) 2018.09.16
[Linux] Node.js 설치  (0) 2018.09.16
[Linux] MongoDB 설치  (0) 2018.09.16
반응형

작성일자 : 2020.09.11

환경 : Vue 2

 

1. 상위 컴포넌트 -> 하위 컴포넌트

- Props 사용

 

상위 컴포넌트

<template>
   <sub-component v-bind:msg="'myMessage'"></sub-component>
</template>
<script>
   ...
</script>
<style>
   ...
</style>

- 따옴표를 빼고 변수 명 사용 가능

 

하위 컴포넌트

<template>
   {{ msg }}

</template>
<script>
export default {
  ...
  props: {
    msg: String
  },

  ...
}
</script>
<style>
   ...
</style>

 


2. 하위 컴포넌트 -> 상위 컴포넌트

- Event Emit 사용

 

상위 컴포넌트

<template>
   <sub-component
v-on:emitEvent="showEvent"></sub-component>
</template>
<script>
export default {
  ...
  methods: {
    showEvent: function(input1input2) {
      console.log(input1 + ' ' + input2);
    }
  }
  ...
}
</script>
<style>
   ...
</style>

 

하위 컴포넌트

<template>
   <button v-on:click="sendEvent()">Event Emit button</button>
</template>
<script>
export default {
  ...
  methods: {
    sendEvent: function() {
      this.$emit('emitEvent','parameter1''parameter2');
    }

  }
  ...
}
</script>
<style>
   ...
</style>
반응형

'Javascript' 카테고리의 다른 글

화살표 함수  (0) 2021.03.10
javascript example  (0) 2021.02.11
[vue] vue-router 사용  (0) 2020.09.08
[Vue] Component 사용  (0) 2020.09.06
[Vue] Vue Project 생성  (0) 2020.09.03

+ Recent posts