728x90
반응형

인증(Authentication)과 인가 (Authorization, 권한 부여) 비교 – 특징 및 차이점

인증과 인가(혹은 권한 부여) 무엇이 다를까요? 인증 단계에서는 사용자의 신원을 확인합니다. 인가 권한 부여 단계에서는 신원이 확인된 사용자에게 리소스에 액세스할 있는 권한을 부여합니다.

인증과 인가가 비슷하게 들릴 수도 있지만 IAM(Identity and Access Management) 환경에서는 명확히 구분되는 보안 프로세스입니다.

인증에 대한 정의

인증은 사용자의 신원을 검증하는 행위로서 보안 프로세스에서 번째 단계입니다

인증 프로세스는 다음과 같이 구성됩니다.

  • 비밀번호사용자 이름과 비밀번호는 가장 많이 사용되는 인증 요소입니다. 사용자가 데이터를 올바르게 입력하면 시스템은 아이덴티티가 유효하다고 판단하고 액세스를 허용합니다.
  • 일회용 . 단일 세션이나 트랜잭션에 한하여 액세스를 허용합니다.
  • 인증 액세스를 허용하는 외부 기관을 통해 보안 코드를 생성합니다.
  • 생체인식사용자가 시스템에 액세스하기 위해 지문이나 망막 스캔을 제출합니다

상황에 따라 인증 요소를 2가지 이상 성공적으로 확인해야만 시스템에 액세스할 있는 경우도 있습니다. 이러한 다중 요소 인증(MFA) 요건이 배포되어 비밀번호의 한계를 넘어 보안을 강화하는 경우도 많습니다.

인가 (권한 부여) 대한 정의

시스템 보안에서 인가란, 사용자에게 특정 리소스나 기능에 액세스할 있는 권한을 부여하는 프로세스를 말합니다. 용어는 흔히 액세스 제어나 클라이언트 권한을 서로 대체하여 사용되기도 합니다.

대표적으로, 서버에서 특정 파일을 다운로드할 있는 권한을 부여하거나, 개별 사용자에게 관리자 권한으로 애플리케이션에 액세스할 있는 권한을 부여하는 경우가 여기에 해당합니다.

보안 환경에서 권한 인증은 항상 인증 이후에 진행되어야 합니다. 사용자가 먼저 자신의 자격 증명을 입증하면 기업의 관리자가 해당 사용자에게 요청한 리소스에 액세스할 있는 권한을 부여합니다.

 

 

인증과 인가의 비교

인증과 인가는 로그인 프로세스에서 서로 다른 단계입니다. 따라서 IAM 솔루션을 성공적으로 구현하려면 둘의 차이점을 알고 있어야 합니다.

이를 비유적으로 설명해보겠습니다.

여기 가족이 휴가를 떠나 집에 홀로 남겨진 반려 동물을 보살피기 위해 누군가가 잠긴 문으로 다가가고 있습니다. 사람에게 필요한 것은 다음과 같습니다.

  • 열쇠 형태의 인증 필요합니다. 자격 증명을 정확하게 입력하는 사용자에 한해서 액세스가 허용되는 것처럼 현관 자물쇠에 맞는 열쇠를 가진 사람에게만 접근이 허용됩니다.
  • 출입 허가에 해당하는 인가 권한 부여가 필요합니다. 일단 안으로 들어가면 주방에 가서 반려 동물 사료가 보관된 찻장을 있는 권한 인증을 받게 됩니다. 하지만 침실에 들어가서 낮잠을 있는 권한은 없습니다

위의 예에서 인증과 권한 인증은 함께 작동합니다. 반려 동물 관리인은 집에 들어갈 있는 권한(인증) 있으며, 일단 내부로 입장하면 특정 영역에 접근할 있습니다(권한 인증).

  인증 (Authentication) 인가 (Authorization)
기능 자격 증명 확인 권한 허가/거부
진행 방식 비밀번호, 생체인식, 일회용 또는 보안 팀에서 관리하는 설정 사용
사용자가 있는가? 아니오
사용자가 직접 변경할 있는가? 부분적으로 가능 불가능 
데이터 전송 ID 토큰 사용 액세스 토큰 사용 

 

시스템도 동일한 방식으로 이러한 개념을 구현하므로 IAM 관리자는 가지 프로세스의 활용 방식에 대해 알고 있어야 합니다.

  • 인증선택한 인증 요건과 관련하여 적합한 자격 증명을 입력하는 직원에게 기업 시스템에 대한 액세스를 허용합니다.
  • 인가 (권한 부여). 부서별 파일에 액세스할 있는 권한을 부여하고, 필요할 경우 금융 정보 등의 기밀 데이터에 대한 액세스 권한도 갖습니다. 직원은 업무 수행에 필요한 파일에도 액세스할 있어야 합니다

인증과 인가의 차이점에 대해 알았다면 이제 프로세스를 확실하게 지원할 있는 IAM 솔루션을 구현해야 합니다. 이를 통해 기업의 데이터 유출을 막고 직원의 생산성을 더욱 높일 있습니다.

Okta 통한 권한 부여

Okta Lifecycle Management에서는 사용자 권한을 한눈에 확인하여 필요에 따라 시스템과 툴에 대한 액세스를 손쉽게 허용하거나 취소할 있습니다. 또한 Okta Adaptive MFA (Multi-factor Authentication, 다중 인증 요소)에서는 선택한 인증 요소를 통해 인프라를 안전하게 보호할 있습니다

예를 들어 기업 자격 증명과 음성 인식을 모두 사용해 인증에 성공하는 사용자에 한하여 생산 오더에 액세스하도록 허용할 있습니다

728x90
반응형
728x90
반응형

 

tail 명령어를 이용해 Tomcat 로그(catalina.out)를 실시간으로 모니터링하면서 별도 파일로 저장하는 방법입니다.

1. tail -f를 사용하여 로그 저장

가장 간단한 방법은 tail -f를 사용하여 로그를 저장하는 것입니다.

실행 명령어 (기본)

tail -f /path/to/tomcat/logs/catalina.out > /path/to/logs/my_tail.log​
  • tail -f: 로그를 실시간 모니터링
  • >: 출력 내용을 새로운 파일로 저장
  • 단점: 이 방식은 Ctrl + C로 종료하면 로그 저장도 멈춥니다.

2. tee를 사용하여 파일과 화면에 동시에 출력

tee 명령을 사용하면 로그를 파일에 저장하면서 동시에 터미널에 출력할 수 있습니다.

파일과 터미널 동시 출력

tail -f /path/to/tomcat/logs/catalina.out | tee -a /path/to/logs/my_tail.log​
  • tee -a: 파일에 추가(-a: append 모드)

장점

  • 로그를 실시간 확인하면서 저장 가능
  • 중간에 Ctrl + C로 종료해도 파일이 유지됨

3. nohup을 사용하여 백그라운드 실행

터미널을 닫아도 로그 저장이 계속되도록 하려면 nohup을 사용할 수 있습니다.

터미널 종료 후에도 로그 저장 유지

nohup tail -f /path/to/tomcat/logs/catalina.out > /path/to/logs/my_tail.log 2>&1 &​
  • nohup: 터미널 종료 후에도 실행 유지
  • 2>&1: 표준 에러 출력도 포함
  • &: 백그라운드 실행

백그라운드 프로세스 확인 및 종료

ps aux | grep tail
kill -9 <PID>  # 특정 프로세스 종료​

 

 

4. screen 또는 tmux를 사용하여 안정적인 로그 저장

만약 원격 서버에서 로그를 장시간 저장해야 한다면, screen 또는 tmux를 사용하는 것이 좋습니다.

screen을 이용한 로그 저장

screen -S tail_log
tail -f /path/to/tomcat/logs/catalina.out > /path/to/logs/my_tail.log​
  • Ctrl + A, D: 세션을 백그라운드로 보내기
  • 다시 접속: screen -r tail_log

5. cron을 이용한 로그 자동 저장 및 관리

일정 시간마다 로그를 저장하고 싶다면 cron을 사용하면 됩니다.

매일 로그 저장 (예: 00:00마다 실행)

crontab -e​

 

추가할 내용:

0 0 * * * tail -n 1000 /path/to/tomcat/logs/catalina.out > /path/to/logs/catalina_$(date +\%F).log​
  • 매일 자정(0 0 * * *)에 최근 1000줄을 새로운 파일로 저장
  • 날짜별(catalina_YYYY-MM-DD.log)로 저장됨

최종 정리 (추천 방법)

방법설명명령어
기본 로그 저장 로그를 파일로 저장 (터미널 닫으면 중단됨) tail -f catalina.out > my_tail.log
화면 + 파일 저장 실시간 확인하면서 저장 `tail -f catalina.out
터미널 종료 후에도 실행 백그라운드 실행 nohup tail -f catalina.out > my_tail.log 2>&1 &
원격 서버에서 사용 screen을 활용하여 안정적 실행 screen -S tail_log + tail -f catalina.out > my_tail.log
자동 로그 저장 cron으로 일정 시간마다 저장 crontab -e

이제 상황에 맞게 tail 로그를 별도로 저장할 수 있습니다! 🚀

728x90
반응형
728x90
반응형

1. sed 사용 (빠르고 간편)

sed -n '1000,$p' catalina.out > new_output.out
  • 1000,$p: 1000번째 줄부터 끝까지 출력 ($는 마지막 줄 의미)
  • > new_output.out: 결과를 new_output.out 파일에 저장

장점: 빠르고 간단하며 대용량 파일에도 적합
단점: 원본 파일이 너무 크면 속도가 느릴 수도 있음

2. tail 사용 (끝에서 특정 줄을 기준으로 복사)

tail -n +1000 catalina.out > new_output.out
  • -n +1000: 1000번째 줄부터 끝까지 출력
  • > new_output.out: 새로운 파일에 저장

장점: 속도가 빠르며 메모리 사용량이 적음
단점: tail 명령이 특정 시스템에서 동작 방식이 다를 수도 있음

3. awk 사용 (유연한 처리 가능)

awk 'NR>=1000' catalina.out > new_output.out
  • NR>=1000: 1000번째 줄부터 끝까지 출력

장점: 조건을 추가하여 더 세밀한 조정 가능 (예: 특정 패턴 이후부터 복사)
단점: sed보다는 약간 느릴 수 있음

4. Python 스크립트 사용 (복잡한 조건 적용 가능)

with open("catalina.out", "r") as infile, open("new_output.out", "w") as outfile:
    for i, line in enumerate(infile, start=1):
        if i >= 1000:
            outfile.write(line)
  • enumerate()를 사용하여 1000번째 줄부터 출력
  • Python을 사용하면 정규식 필터링도 가능

💡 장점: 복잡한 조건을 적용 가능 (예: 특정 문자열 이후부터 복사)
💡 단점: 스크립트를 실행해야 해서 번거로울 수 있음

추천 방법

  • 빠르게 처리하고 싶다면 → sed 또는 tail
  • 유연한 조건이 필요하다면 → awk
  • 복잡한 패턴 분석이 필요하다면 → Python

어떤 방법이든, 특정 라인부터 원하는 대로 catalina.out을 복사할 수 있습니다! 

728x90
반응형
728x90
반응형

 

MySQL 백업 파일(.sql.gz)을 복원하려면 먼저 압축을 풀고 mysql 명령어를 사용해야 합니다.

방법 1: 압축을 풀면서 바로 복원

.gz 파일을 압축 해제 없이 직접 MySQL로 복원할 수 있습니다.

gunzip -c backup.sql.gz | mysql -u [username] -p [database_name]

설명

  • gunzip -c backup.sql.gz: 압축 해제된 내용을 표준 출력(stdout)으로 보냄.
  • | mysql -u [username] -p [database_name]: 해제된 SQL을 바로 MySQL로 복원.
  • -p 입력 후 비밀번호를 입력해야 합니다.

예제

gunzip -c mybackup.sql.gz | mysql -u root -p mydatabase
  • mybackup.sql.gz의 내용을 mydatabase에 복원.

 

방법 2: 압축을 먼저 풀고 복원

.gz 압축을 먼저 풀고 .sql 파일을 복원하는 방법입니다.

1. 압축 해제

gunzip backup.sql.gz
  • backup.sql.gz → backup.sql로 압축 해제됨.

2. MySQL로 복원

mysql -u [username] -p [database_name] < backup.sql

💡 예제

mysql -u root -p mydatabase < backup.sql

 

방법 3: zcat을 사용한 직접 복원

Linux에서 zcat을 활용하면 압축을 풀면서 즉시 복원할 수 있습니다.

zcat backup.sql.gz | mysql -u [username] -p [database_name]

💡 예제

zcat mybackup.sql.gz | mysql -u root -p mydatabase

추가 옵션

1. 복원 진행 상태 보기

기본적으로 mysql 명령어로 복원하면 진행 상태가 보이지 않지만, 다음과 같이 하면 진행 상황을 확인할 수 있습니다.

gunzip -c backup.sql.gz | pv | mysql -u [username] -p [database_name]
  • pv 명령어는 데이터 처리 속도 및 진행률을 표시합니다.
  • 설치 필요: sudo apt install pv (Ubuntu) 또는 sudo yum install pv (CentOS)

2. 특정 테이블만 복원

.gz 파일에서 특정 테이블만 복원하려면 압축 해제 후 수동 편집해야 합니다.

gunzip -c backup.sql.gz | grep -i 'INSERT INTO table_name' | mysql -u [username] -p [database_name]
  • grep을 활용하여 특정 테이블만 필터링할 수도 있음.

 

복원 전 확인해야 할 사항

1. 데이터베이스가 존재하는지 확인

mysql -u root -p -e "SHOW DATABASES;"
  • 데이터베이스가 없으면 먼저 생성:
mysql -u root -p -e "CREATE DATABASE mydatabase;"

 

2. 백업 파일 크기 확인

ls -lh backup.sql.gz
  • 너무 큰 경우 screen이나 nohup을 사용하여 백그라운드에서 실행 가능.

3. 기존 데이터 백업 복구 전에 현재 데이터를 백업하는 것이 안전합니다.

mysqldump -u root -p mydatabase > mydatabase_backup.sql

 

 

결론

방법명령어

압축 풀면서 복원 `gunzip -c backup.sql.gz
압축 해제 후 복원 gunzip backup.sql.gz → mysql -u root -p mydatabase < backup.sql
zcat 활용 `zcat backup.sql.gz
진행률 표시 (pv) `gunzip -c backup.sql.gz

가장 빠른 방법은 gunzip -c 또는 zcat을 사용한 실시간 복원입니다.
하지만 데이터 크기에 따라 미리 gunzip으로 압축을 풀고 복원하는 방법이 더 안정적일 수 있습니다. 

728x90
반응형
728x90
반응형

MySQL에서는 일반적인 TRUNCATE TABLE 명령어로 특정 파티션만 비우는 기능이 없습니다. 그러나 ALTER TABLE ... TRUNCATE PARTITION 명령어를 사용하여 특정 파티션을 개별적으로 삭제할 수 있습니다.


특정 파티션의 데이터 삭제

ALTER TABLE table_name TRUNCATE PARTITION partition_name;

예제

ALTER TABLE sales TRUNCATE PARTITION p2023;
  • sales 테이블에서 p2023 파티션의 모든 데이터를 삭제.
  • 테이블의 다른 파티션에는 영향을 주지 않음.

전체 테이블을 비우는 경우

테이블의 모든 데이터를 삭제하려면 일반적인 TRUNCATE TABLE 사용:

TRUNCATE TABLE sales;

주의: 모든 파티션이 삭제되며 자동 재생성됨.

 

특정 파티션만 삭제 후 재사용 가능하게 만들기

MySQL에서 TRUNCATE PARTITION은 단순히 데이터를 비우는 것이지, 파티션 자체를 제거하지 않습니다.
특정 파티션을 삭제하고 다시 추가하려면:

ALTER TABLE sales DROP PARTITION p2023;
ALTER TABLE sales ADD PARTITION (PARTITION p2023 VALUES LESS THAN (2024));

주의: DROP PARTITION을 사용하면 데이터와 함께 파티션 자체가 삭제되므로 신중히 사용해야 합니다.


TRUNCATE PARTITION을 지원하는 MySQL 버전

  • MySQL 5.7 이상에서 지원됨.
  • 일부 스토리지 엔진(InnoDB, NDB)에서만 가능. MyISAM은 지원되지 않음.

결론

  1. 특정 파티션의 데이터를 삭제하려면:
  2. 모든 데이터를 삭제하려면:
  3. 특정 파티션을 삭제 후 다시 생성하려면:

1. 특정 파티션의 데이터를 삭제하려면:

ALTER TABLE table_name TRUNCATE PARTITION partition_name;

 

 

2. 모든 데이터를 삭제하려면:

TRUNCATE TABLE table_name;

 

 

3. 특정 파티션을 삭제 후 다시 생성하려면:

ALTER TABLE table_name DROP PARTITION partition_name;
ALTER TABLE table_name ADD PARTITION (PARTITION partition_name VALUES ...);

 

이 방법을 활용하면 MySQL의 파티션 테이블에서 원하는 데이터만 효율적으로 삭제할 수 있습니다.

728x90
반응형
728x90
반응형

 

MySQL에서 BLOB 타입의 경우, 문자열 길이에 따라 테이블이 차지하는 용량을 계산할 수 있습니다.

4000 Characters를 BLOB로 저장할 때 크기를 계산하는 방법은 다음과 같습니다.

  1. MySQL BLOB 특성:
    • BLOB 타입은 바이너리 데이터(binary data)를 저장합니다.
    • 문자열이 아니라 바이너리 데이터로 저장되므로, 문자 개수가 아니라 바이트 수로 계산합니다.
    • MySQL에서 일반적으로 1 character = 1 byte로 계산되지만, 문자열이 멀티바이트 (UTF-8 등) 문자 집합을 사용한다면 1 character가 1 byte 이상일 수 있습니다.
  2. 4000 Characters가 차지하는 용량:
    • 문자열이 UTF-8로 인코딩된 경우, 문자당 최대 4바이트가 될 수 있습니다.
    • 최악의 경우(모든 문자가 4바이트를 차지하는 경우) 4000 characters × 4 bytes = 16,000 bytes가 됩니다.
    • 따라서 **16,000 bytes (16 KB)**가 됩니다.
  3. 테이블의 크기 계산:
    • MySQL에서 BLOB 칼럼을 갖는 테이블은 칼럼 외에도 인덱스, 테이블 메타데이터 등의 추가 공간을 차지할 수 있습니다.
    • 그러나, 단순히 BLOB 데이터 자체만 계산한다면 위의 16 KB가 해당 데이터의 크기입니다.
  4. MegaBytes로 변환:
    • 16 KB = 0.015625 MB
    • 따라서, 4000 characters의 데이터가 BLOB 컬럼으로 저장된 경우 약 0.016 MB를 차지합니다.

요약하면, BLOB으로 4000 characters를 저장할 때 데이터가 차지하는 대략적인 크기는 약 0.016 MB입니다.

728x90
반응형
728x90
반응형

 

왼쪽 열의 "장치"에서 기본 폴더에 액세스 할 수 있습니다. 

키보드 키 Cmd + Shift + . (점)를 누릅니다. 

이 키 조합을 누르면 모든 숨김 폴더와 파일이 보입니다.

 

728x90
반응형
728x90
반응형

 

(llm311) dongsik@dongsikleeui-MacBookPro ~ % cd /Volumes && ll
total 544
drwxr-xr-x   6 root     wheel     192 Sep  5 07:43 .
drwxr-xr-x  20 root     wheel     640 Aug  4 19:31 ..
drwxr-xr-x@  7 dongsik  staff     306 Sep  2 00:58 DBeaver Community
lrwxr-xr-x   1 root     wheel       1 Sep  2 09:31 Macintosh HD -> /
drwx------   1 dongsik  staff   16384 Aug 31 17:54 bpifs
drwx------   1 dongsik  staff  262144 Jan  1  1970 gabriel
(llm311) dongsik@dongsikleeui-MacBookPro /Volumes % pwd
/Volumes

 

728x90
반응형
728x90
반응형

이 오류는 Latin-1 인코딩이 특정 문자를 처리할 수 없어서 발생하는 것으로 보입니다. 이 문제를 해결하기 위해 다음과 같은 몇 가지 접근 방법이 있습니다:

 

UTF-8 인코딩 사용: Python에서 기본적으로 UTF-8 인코딩을 사용하는 것이 좋습니다. UTF-8은 대부분의 유니코드 문자를 처리할 수 있습니다.

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

 

문자 인코딩 명시적으로 지정: 파일을 읽거나 쓸 때 문자 인코딩을 명시적으로 지정하여 UnicodeEncodeError를 방지할 수 있습니다.

with open('file.txt', 'w', encoding='utf-8') as f:
    f.write(data)

 

문자열 인코딩 변환: 문자열에 대해 encode() 함수를 사용하여 Unicode 문자열을 바이트 문자열로 변환할 수 있습니다.

encoded_string = your_string.encode('utf-8')

 

latin-1 대신 utf-8로 출력: 프로그램이 텍스트를 출력하는 경우, 출력 스트림의 인코딩을 utf-8로 설정하여 Unicode 문자를 올바르게 처리할 수 있습니다.

import sys
sys.stdout.reconfigure(encoding='utf-8')

 

이러한 접근 방법 중 하나를 사용하여 오류를 해결할 수 있습니다. 선택한 방법은 상황에 따라 다를 수 있으므로 실험을 통해 가장 적합한 방법을 찾아보시기 바랍니다.

728x90
반응형
728x90
반응형

B가 A보다 몇 퍼센트 큰지 계산하려면 다음과 같은 공식을 사용할 수 있습니다.

  1. A와 B의 값이 주어졌다고 가정합니다.
  2. B가 A보다 얼마나 큰지 계산합니다.
  3. 계산된 값에 100을 곱하여 백분율로 표시합니다.

수식으로 나타내면 다음과 같습니다.

 

예를 들어, A가 50이고 B가 70이라면 다음과 같이 계산할 수 있습니다.

 
 

따라서 B가 A보다 40% 큽니다.

 
 
 
 
728x90
반응형

+ Recent posts