반응형
반응형

📝 파라미터 변조

BackEnd에 값을 보낼때 이상한 값을 보내서 프로그램이 오동작하게끔 하는 방식이다
예를 들어 GET 방식인 경우 http://www.naver.com?doc=100 http://www.naver.com?doc=101 ...
이런식으로 계속 호출해서 권한이 없어도 값을 읽던가 아니면 POST방식이여도 주문을 넣을 때 문자같은 걸 넣어서 처리하면 BackEnd에서 이상하게 동작해 서버를 공격하거나 이상하게 동작하게 만들 수도 있다

📝XSS (Cross Site Scripting)

자바스크립트를 Injection하는 해킹 공격으로 크게 3가지 유형이 있다.

반사형 공격

http://naver.com?search=<script>alert("hello")</script>와 같은 형식으로 URL을 만들어 다른 사용자가 누를시 해당 사용자에게 해당 script를 실행하게끔 한다

저장형 공격

게시글 따위를 저장할 때 본문 내용에 스크립트를 넣어서 DB에 저장하게하고 다른 사용자가 읽었을 때 본문내용의 script가 js엔진에서 해석해 공격하는 방식이다.

DOM based XSS

http://127.0.0.1:5501/test.html가 본래 URL이고 http://127.0.0.1:5501/test.html#javascript:function%20a(){alert(%22hello%22);}%20a(); 같은 걸 호출 할 시 url 파싱이 script문에 있다면 이런식으로 자바스크립트 Injection이 가능합니다

<!DOCTYPE html>
<head>
    <style>
    </style>
    <script type="text/javascript">
        const hash = window.location.hash.slice(1)
        console.log(hash)
        
        if (hash) {
            window.location.href = decodeURIComponent(hash)
        }
<!--https://blogpack.tistory.com/105-->
    </script>
    <meta charset="UTF-8">
    <title>DOM Based XSS 공격</title>
</head>

<body>
<h1>DOM Based XSS 공격</h1>

<div class="container">
</div>
</body>
</html>

이것도 여러가지 방법 중 하나입니다

방지하는 방법은 백단으로 해당 데이터를 넘기기 전에 <script>등과 같은 위험 요소를 없애는 과정 또는 check하는 과정을 통해 XSS가 일어나지 못하게 막을 수 있다 또는 잘 만들어진 lucy-xss 라이브러리로 간단하게 처리할 수 있다
내가 직접 만들어서 처리할 수 있지만 경우의 수가 워낙 많아서 잘 만들어진 화이트리스트 라이브러리인 lucy-xss를 이용해 처리하는게 좋다

📝 SQL 인젝션

SQL을 오동작하게끔 하는 공격방식이다

 

예를 들어 SELECT * FROM users where auth = 'root' AND id = ? 이러한 식으로 권한 요청 체크가 있을 때
id적는 란에 ' OR '1' = '1라고 적을 경우 SELECT * FROM users where auth = 'root' AND id = '' 에서
SELECT * FROM users where auth = 'root' AND id = '' OR '1' = '1'이 되어 전부 뚫리게된다.

또한 '; DROP DATABASE mysql; -- 이런식으로 적을 경우 
SELECT * FROM users where auth = 'root' AND id = ''; DROP DATABASE mysql; --' 
이런식으로 되어 마지막 ' 부분은 주석처리가 되고 데이터베이스를 날려버리는 괴랄한 짓도 가능하다.

📝 CSRF

로그인 된 상태로 스크립트가 주입된 게시물 따위를 읽을 때 가짜 사이트로 Ajax 실행 또는 url 클릭이 일어날 경우
로그인 된 사용자의 권한에 따라 해당 사용자의 정보만 가져가거나 관리자 권한일 경우 사용자의 정보를 다 훔쳐갑니다

 

XSS와 다른 점은 인증된 상태 즉, 인가로 인해 내 계좌에 이체할 수 있는 권한을 행사하는 등에서 차이점이 있다.

스크립트를 주입해서 공격하는 방식은 동일합니다

방지 방법

  • Front-End, Back-End 두 곳에서 이러한 값들을 방지해야한다.
  • 에러가 났을 때 에러에 대한 디버깅 페이지가 아닌 500 , 404 등에 대한 페이지를 따로 보여줘야한다
  • SQL의 경우 CRUD 및 테이블 권한별로 계정을 따로따로 만들어서 제공해줘야한다
  • Referrer 검증request Referrer을 확인 해 동일 서버에서 호출한지 확인하기
  • Security Token (CSRF Token)로그인시 사용자 세션에 난수 따위 복잡한 값을 Token에 넣습니다
    • 사용자가 해당 서버에 요청할 때 세션을 넣어서 요청합니다 즉, URL 클릭이나 Ajax로 해커 서버를 요청한경우 해당 서버에서 현재 로그인된 사용자의 권한으로 요청을 할텐데 URL 클릭이나 Ajax로 해커 서버에 요청을 할 때 CSRF값이 넘어가지지 않기 때문에 사용자 권한으로 처리할 수 없습니다
  • 위에 행위를 멈추기 위해 자기가 직접 막을수도 있지만 어떤 업체에서 쓰라고 만든 것을 쓰는게 훨씬 안전하다
  • 예) spring boot prevent sql injection 등

 

📝 세션 하이재킹 (Session Hijacking)

공격자가 사용자의 세션 ID를 탈취하여 사용자가 인증된 상태로 시스템에 접근하는 공격 기법을 의미합니다

 

 

 

🔗 참고 및 출처
https://blogpack.tistory.com/105

반응형
반응형

📝파이프라인 / 파이프라이닝

CPU 내부에는 여러가지 일꾼들이 있습니다

대표적인 일꾼으로 읽기, 해석, 실행, 기록이 있습니다

 

 

 

시간에 따른 명령어 처리를 도식화할 시 위 이미지와 같습니다

마치 파이프와 비슷한 형태이죠? 이걸 파이프라인이라고 합니다

명령어(덧셈, 뺄셈 등)가 들어왔을 때 먼저 해당 명령어를 읽고 해석한 뒤 실행시키고 기록이 필요한 경우 기록합니다.

하지만 이렇게 하나의 명령어가 끝날때까지 다른 파트들이 노는 시간이 발생합니다 이렇게 되면 그 후에 들어오는 명령어에 대한 처리가 길어지겠죠

 

 

이걸 해결 하기 위해서는 노는 시간에 다른 명령어들이 들어오도록 하면 됩니다.

밑 사진과 같은 방식으로 처리할시에는 노는 시간도 없어지고 리소스를 최대한 활용이 가능하겠죠?

이러한 행동을 파이프라이닝이라고합니다 → 물론 그만큼 CPU에 부담이 가긴 합니다

 

인텔에서는 CPU의 파이프라인이 길어 명령어를 많이 축적시킬 수 있고 AMD에서는 파이프라인 폭이 넓다고합니다

폭이 넓다는 건 "읽기 처리하는 파이프라인이 여러개이다"라고 해석이 가능할 것 같습니다

 

 

📝클럭

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    clock_t start, end;
    double result;


    start = clock();			// 현재 시간 반환

    long sum = 0;
    for (long i = 0; i <= 380000000; i++) {
        sum += i;
    }

    end = clock();
    result = (double)(end - start);

    printf("수행 시간 : %f", result);

    return 0;
}

CPU의 속도를 나타내는 단위로서 1초동안 파장이 한번 움직인 시간을 의미하는데 클럭이 높아질수록 발열량과 소비 전력이 커지는 문제 생긴다 → CPU 3.8GHz 의 경우 1초당 (380,000,000) = 3억 8천만의 연산이 가능하다

위에는 3억 8천만번 덧셈 연산을 한 결과이다 보면 대략 1초가량 걸린 걸 확인할 수 있다

 

📝하이퍼스레드

물리적인 CPU(2코어[2개의 CPU] 4코어[4개의 CPU] 등)을 논리적인 CPU로 나누어서 처리하는 방법

즉 2코어 4스레드의 경우 1개의 CPU를 2개의 CPU로 인식시켜서 처리하게 한다

 

파워포인트, 카카오톡, 크롬, 엑셀을 사용한다고 가정하자

멀티 프로세싱의 경우 (2개 설정 시) 파워포인트에 1번 CPU를 카카오톡에 2번 CPU를 할당한다 그리고 크롬과 엑셀의 경우 1번 또는 2번에서 번갈아가면서 처리한다

 

하이퍼스레드의 경우 2개의 CPU(듀얼코어)인 경우 4개의 논리적 CPU가 생겨난다

1번 스레드의 경우 파워포인트, 2번 스레드의 경우 카카오톡, 3번 스레드의 경우 크롬, 4번 스레드의 경우 엑셀

이렇게 실행되게 된다

게임의 경우 하이퍼스레드를 사용하면 4개를 병렬적으로 처리하기 때문에 더 빠른 화면 렌더링이 가능하다

물론 게임도 하이퍼스레드를 지원하는 프로그램이여야만 한다

하지만 어떤 처리가 CPU를 많이 먹는 경우 하이퍼 스레드를 안 쓰는게 좋다 → 100%를 50% 50%로 분할하기 때문이다

 

🔗 참고 및 출처

https://smsinfo.tistory.com/514

반응형
반응형

📝컴퓨터 동작 구조

 

 

사용자가 명령어(입력 또는 저장 등)을 주면 주기억장치에서 해당 명령어를 가지고 있습니다

그러면 해당 명령어를 CPU로 보내고 다시 RAM으로 가져와서 휘발성의 데이터(인터넷 창 키기 등)일 경우 바로 출력하고 보조기억 장치가 필요한 경우(프로그램 저장, 다운로드 등) HDD에 저장합니다.

 

HDD의 데이터를 읽어야하는 경우라면 저도 정확히는 모르겠지만 주기억장치에 명령어가 들어오고 CPU에 적재되어 처리된 후 RAM을 거쳐서 HDD를 다시 읽어서 주기억장치에 올리고 CPU가 그걸 가지고 연산처리한 후에 더이상 HDD 접근이 필요 없는 경우 해당 정보를 RAM에 올려 사용자 화면등 출력 장치에 출력하는 형태인 것 같습니다.

반응형
반응형

CALL  

  1. 사용자 웹브라우저 URL 호출

DNS  

  1. DNS 방문
  2. DNS가 알려준 해당 아이피 주소로 이동 

3 Ways Handshake   

  1. 웹브라우저가 서버에 임의의 값을 건네준다
  2. 서버가 1을 더해 다시 웹브라우저에게 돌려준다
  3. 웹브라우저가 다시 1을 더해 웹브라우저에게 돌려준다 (3-ways handshake)

 

Request & Response 

  1. 서버에게 데이터 요청 (HTTP Request)
  2. 서버가 데이터를 준다 (HTTP Response)

DOM Tree

  1. W3C 명세에 따라 HTML과 CSS 해석 (Parsing)HTML 해석해 DOM Tree 생성
    1. CSS를 찾을 경우 DOM Tree 작업을 일시 중단하고 CSS Parsing 작업을 해 CSSOM Tree 생성
    2. 스크립트(JS)를 찾을 경우 Tree 생성 작업을 일시 중단하고 JS Engine 기동 해 AST(Abstract Syntax Tree) 생성
  2. Parsing이 끝나면 CSSOM Tree  + DOM Tree를 합쳐 Render Tree를 생성

Rendering

  1. 랜더링엔진이 Layout 작업 실시 (화면에 그릴 장소 체크)UI Backend가 Layout 작업이 실시된 곳에 UI를 그린다
  2. 레이어의 z-index를 기준으로 위치 재배치 (composition)
  3.  
  1. 웹 브라우저는 모든 데이터를 다 Parsing한 후에 이루어지는 것이 아니라 중간 중간에 그리고 화면에 표시한다

 

 

🔗 참고 및 출처

https://www.youtube.com/watch?v=FQHNg9gCWpg 

 

반응형
반응형

📝Man Month

프로젝트 제안서 작성시 투입 인원의 개념으로 작업시간과 투입 예정 시간을 의미한다.

  • 1 M/M 이면 1명이 한달간 하면 끝낼 수 있다.
  • 5 M/M 이면 1명이 5달 해야 끝나고 5명이 한달에 끝낼 수 있다

 

📝헬스체크

서버나 네트워크 등이 정상 가동되는지 상태를 확인하는 것 (ping 8.8.8.8 을 통해 네트워크 통신이 되고 있다)

📝백오피스(Back Office) BO

서비스를 제공하기 위하여 상품 등록 및 마케팅을 설정하고 결제와 매출, 수익 등을 관리하는 서비스를 제공 페이지로서 Admin이라고도 불린다

📝VoC

Voice of Customer 의 약자로 고객의 소리를 의미한다.
고객사의 컴플레인, 요청사항등이 포함된다.

 

📝whiteList(화이트리스트)

신뢰할 수 있는 대상들의 리스트로서 신뢰할 수 있는 대상만 허용하고 이외의 것들을 차단하게 된다

 

📝blackList(블랙리스트)

신뢰할 수 없는 대상을 제외한 모든 이메일을 허용한다.

 

📝로그 롤링

일정 단위로 로그파일을 재갱신하는 작업으로 2022-12-14(오늘날짜) 로그 쌓은 후 2022-12-15(내일)이 되었을 때

2022-12-14 로그는 2022-12-14 이름으로 저장되고 2022-12-15일 데이터를 따로 쌓기 시작합니다.

 


🔗 참고 자료 및 출처
 https://sb.pe.kr/7337

반응형
반응형

📝Saas

클라우드 IaaS 상에 개발 환경을 구축하고, 그 위에 소프트웨어를 얹어 고객에게 제공합니다.

Google 스프레드 시트, Google Driver 등

 

📝Paas

서비스형 플랫폼으로 애플리케이션 및 서비스를 구축할 수 있는 플랫폼을 의미합니다.

MariaDB, Nginx 등

 

📝IaaS

비즈니스 운영에 필요한 스토리지, 네트워킹 및 컴퓨팅 리소스를 제공합니다 (서버 제공) 

AWS, GCP 등

 

📝pinpoint

네이버에서 제공하는 APM로 유명하다

 

📝슬로우 쿼리

DBMS가 Query를 수행할 때 일정시간 동안 수행 못 한 Query 입니다.

 

📝DevOps 

개발과 운영의 합성어로 어플리케이션과 서비스를 빠른 속도로 제공할 수 있도록 조직 역량을 향상시키는 방식 및 도구의 조합을 의미한다

 

📝5가지 철학

  • 문화
    • 서로간의 의사소통 및 자원(도구) 및 시간 등
  • 자동화
    • 지속적인 자동화 배포 (CI / CD) 및 인프라 및 보안 및 장애 푸시 알람
  • 측정
    • 자동화 배포에 대한 측정 (모니터링) APM
  • 공유
    • 서로의 지식 및 문제들을 공유
  • 축적
    • 지금까지의 지식 및 문제들을 기록
반응형
반응형

📝VPS

하나의 물리서버를 여러 개의 가상 서버로 쪼개어 사용하는 것을 의미합니다

 

📝언리얼 엔진  

미국의 에픽게임즈에서 개발한 3차원 게임 엔진

 

📝헥스(Hex)

헥스(Hex)16진수를 의미하며 헥스코드RGB값을 16진수로 표현하는데 사용됩니다 → FF00FF

 

📝커널

소프트웨어가 컴퓨터에서 수행되기 위해서는 메모리에 해당 프로그램이 있어야하는데 운영체제도 마찬가지로 전원이 켜짐과 동시에 메모리에 올라가야 동작한다. 하지만 운영체제처럼 규모가 큰 경우 모두 올라가면 메모리 공간 낭비가 심할 것이다 따라서 운영체제중 항상 필요한 부분을 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때 메모리에 올려 사용한다. 이때 메모리에 상주하는 운영체제의 부분을 커널이라고 하며 좁은 의미의 운영체제이다.

 

📝CGI

CGI란 공통 게이트웨이 인터페이스(Common Gateway Interface)의 약어로 웹서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약입니다

웹의 초기 단계에서 많이 사용 로서 CGI 프로그램은 Pyhton, Perl, Ruby 따위로 작성한 스크립트이며 성능, 보안, 스케일링, 유지보수 등에 문제로 사라지게 되었다프론트랑 백엔드 통신하는 것과 비슷한 역할을 하기 때문에 크게 보면 Rest API도 이에 해당한다고 볼 수 있다

 

 

반응형
반응형

📝해시

데이터를 value에 두고 인덱스(key)를 만든 형태로 "key:value" 데이터 구조를 가지게 된다 시간복잡도가 O(1) 로 매우 빠르다

 

📝해싱

해시의 키를 이용해 값을 구하는 작업을 의미한다

 

📝해시 테이블

해시(key, value)로 되어있는 자료구조로 Map이 있다

 

📝해시함수

해싱할 때 필요한 함수를 의미한다 예를 들면 HashMap에서 Key를 이용해 Value를 구하는 걸 의미한다

 

📝해시값

해시함수를 거쳐서 나온 값

 

📝SSL 인증서

SSL(Secure Sockets Layer) 인증서는 웹사이트의 신원을 확인하는 디지털 인증서이며 SSL 기술을 이용하여 서버에 전송

되는 정보를 암호화 이 포맷은 적합한 암호 해독 키로만 판독 가능한 포맷으로 되돌릴 수 있습니다.
사용자의 웹브라우저와 인터넷 사이트의 웹서버간 암호화 통신을 가능하게 하는 제3의 신뢰기관이 인증한 인증서  웹브라우저와 서버간 암호화 통신을 위한 프로토콜

 

📝SHA-256 (Secure Hash Algorithm 256)

단방향 암호화 방식으로 복호화가 되지 않는다
어떤 길이의 값을 입력하더라도 256비트의 고정된 결과값을 출력한다
대표적으로 외부로 유출되면 안되는 유저들의 패스워드 같은 것들을 DB에 저장을 할 때 그대로 저장하기 보다는 암호화를 한 뒤 저장을 한다
복호화가 필요한 데이터는 SHA256이 아닌 다른 방식으로 암호화 시키는 것을 추천한다

 

📝RSA

비대칭키 암호화 방식으로 암호화할 때 키와 복호화할 때 키가 다르다 
암호화할 때 키를 "공개키", 복호화할 때 키를 "개인키" 클라이언트가 가지고 있는 "공개키"로 데이터를 암호화하여, 서버로 전달한다

 

📝AES (Advanced Encryption Standard)

대칭키 알고리즘으로 "대칭키" 하나로 암호화 및 복호화 모두 진행하고 문자열 길이에 제약이 없다

 

📝솔트 (Salt)

솔트값은 랜덤으로 생성되며 길이는 어느 것이든 될 수 있다.

솔트값은 평문 암호에 추가되는 형태로 위에 나온 해시함수들의 암호화를 더 보완해줄 수 있다

솔트는 최소 128bit 정도 되어야 안전하다

 

  • SHA256 = 비밀번호 + 솔트값(암호값)
    • 비밀번호 = 1234abc
    • E1F53135E559C253 = 솔트값
    • 1234abcE1F53135E559C253 (비밀번호 + 솔트값) → SHA256 → EFA123JQVZ4FJ6PROW…. (해시된 값)
반응형
반응형

📝GraphQL

 

GraphQL은 페이스북이 2012년에 개발하여 2015년에 공개적으로 발표된 데이터 질의어이다

REST API는 기능이 추가될 때 마다 호출해야할 HTTP URL이 많아지고 클라이언트의 코드가 점점 복잡해지고있고 이 부분을 해결하기 위해서 만들어졌다 → 간결한 형식의 요청으로 유지보수가 편해진다

Front End단에서 내가 원하는 데이터만 요청이 가능하기 때문에 효율적이지만 중간에 GraphQL에 대한 호출 형식을 정해줘야하기 때문에 API 유지관리자의 경우 GraphQL 스키마를 작성하기 위한 일을 해야한다

 

// 호출 방식
query {
  user(id: 1) {
    name
    address
  }
}
// 응답
{
  "data": {
    "person": {
      "name": "martin",
      "address" : "seoul
    }
  }
}

 

 

📝모놀리식 아키텍처 (Monolithic Architecture)

컴포넌트로 구분이 안 되어 있고 하나의 서비스로 돌아간다 그렇기 때문에 작은 수정에도 시스템 전체를 빌드해야하고 테스트 시간 또한 길어지고 하나의 서비스가 모든 서비스에 영향을 준다

예를 들어 이벤트 서비스가 추가될 때 트래픽이 몰려서 서버가 죽으면 다른 서비스도 마비가 된다

또한 하지만 시스템이 커지기 시작하고 여러 컴포넌트들이 더해지면 문제가 발생하게 된다

하지만 하나의 컴포넌트이기 때문에 여러 설정을 할 필요 없어서 작은 볼륨의 시스템 개발시에 매우 유용하다.

 

간단한 예제로는 네이버를 만들면 네이버에는 네이버 쇼핑, 검색, 지식 IN 등이 있는데 이거를 하나의 프로젝트에 넣어서 관리하는 형태이다

 

📝Micro Service Architecture (MSA)

기능별로 여러 컴포넌트들로 나눈 형태이다

타 컴포넌트와 의존성이 없기 때문에 서버가 하나 죽더라도 나머지 서비스는 작동하게 된다

트래픽이 가장 많은 서비스에 서버를 개별적으로 증설이 가능하기 때문에 비용적 측면에서도 이점이 있다.

→ Monolithic의 경우는 하나의 컴포넌트이기 때문에 어떤 서비스가 트래픽이 많아 그 부분만 증가시키려고 해도 똑같은 서버를 하나 더 증설하는 수밖에 없다 (만약 주문 서비스에 고성능의 서버 5대가 필요할 경우 MSA의 경우 주문 서비스 5대 분량의 서버만 증설하면 되지만 Monolithic의 경우 모든 서비스를 받쳐줄 수 있는 성능의 서버가 기본이 되고 추가적으로 필요한 성능을 더 추가하거나하면 어마무시하게 비싸지게 된다)

 

MSA에는 Multi-Repo와 Monorepo 방식이 존재한다

 

📝Multi-Repo

다중 저장소로 네이버로 치면 네이버쇼핑 프로젝트, 네이버 검색 프로젝트, 네이버 지식 IN 프로젝트가 따로 존재하는 것이다 이럴 경우 MSA조건에 합당하지만 서로간의 리소스(package.json, 공통 모듈 등)는 공유 할 수 없다

 

📝Monorepo

하나의 코드 베이스 내에서 여러 프로젝트를 관리한다 실제로 거대한 프로젝트가 있고 그 안에 여러개로 나눈 형태이다  물론 MSA처럼 개별적으로 돌아가고 Multi-Repo에서는 서로간의 리소스를 공유할 수 없지만 Monorepo는 거대한 프로젝트 안에서 리소스(package.json, 공통 모듈 등)를 공유할 수 있다

 

 

MSA가 유행하고 있지만 꼭 정답은 아니고 프로젝트 특성 및 현재 상황에 따라 적절한 아키텍처를 선택해야한다.

 

 

📝B2B 

B2B 영업은 기업 대 기업(Business to Business)의 약자로 기업 간의 거래를 위한 영업 방식입니다.

고객은 회사이고 상품 수량이 많습니다 (인력 포함)

예를 들어 기업이 사용할 솔루션을 개발해서 판매하거나 개발할 때 인력이 필요해 SI 인력을 보내는 것도 포함됩니다

 

📝B2C

B2C 영업은 기업 대 소비자(Business to Customer)  즉, 소비자를 대상으로한 영업방식입니다

예를 들어서 일반인들이 사용하는 배달의민족, 네이버 포털와 같은 서비스 업들이 있습니다

 

 

🔗 참고 및 출처

http://clipsoft.co.kr/wp/blog/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98msa-%EA%B0%9C%EB%85%90/

 

마이크로서비스 아키텍처(MSA) 개념 소개 - CLIPSOFT

작성자 : 이응호 과장   마이크로서비스 아키텍처(MSA) 개념 소개   프리랜서로 일하고 있는 지인이 최근 구직을 하고 있었습니다. 그러면서 하는 말이 요즘 IT업계 구직시장에서 최고의 화두가 M

clipsoft.co.kr

https://medium.com/@magenta2127/monorepo-vs-multi-repo-vs-monolith-7c4a5f476009

 

반응형