DBMS 기초 완벽 이해: Oracle, Tibero, MySQL의 INSERT, UPDATE, DELETE 실무 활용법🌟

INSERT, UPDATE, DELETE

“데이터베이스에서 가장 기본적이지만 꼭 알아야 하는 작업은 바로 INSERT, UPDATE, DELETE입니다. Oracle, Tibero, MySQL에서의 구현 방법과 주의점을 상세히 살펴보세요!”
데이터베이스를 다룰 때 데이터를 추가, 수정, 삭제하는 작업은 가장 기본적이고도 중요한 기능입니다. 하지만 각각의 DBMS는 SQL 문법과 동작 방식에 약간씩 차이가 있습니다. 오늘은 Oracle, Tibero, MySQL에서의 INSERT, UPDATE, DELETE 문법과 활용법, 그리고 성능 최적화 팁까지 상세히 정리해 드리겠습니다.


1. INSERT: 데이터를 추가하는 기본 작업 📝

1) Oracle

INSERT INTO 테이블명 (컬럼1, 컬럼2, 컬럼3)
VALUES ('값1', '값2', '값3');
  • 다중 행 삽입:
INSERT ALL
  INTO 테이블명 (컬럼1, 컬럼2) VALUES ('값1', '값2')
  INTO 테이블명 (컬럼1, 컬럼2) VALUES ('값3', '값4')
SELECT * FROM DUAL;

2) Tibero

INSERT INTO 테이블명 (컬럼1, 컬럼2, 컬럼3)
VALUES ('값1', '값2', '값3');
  • Tibero는 Oracle과 호환성이 높아 동일한 문법을 사용합니다.

3) MySQL

INSERT INTO 테이블명 (컬럼1, 컬럼2, 컬럼3)
VALUES ('값1', '값2', '값3');
  • 다중 행 삽입:
INSERT INTO 테이블명 (컬럼1, 컬럼2)
VALUES 
  ('값1', '값2'),
  ('값3', '값4');

INSERT 사용 시 주의점

  • NULL 처리: 값이 없는 컬럼에 NULL을 명시적으로 지정하거나 생략해야 합니다.
  • 제약 조건: PRIMARY KEY나 UNIQUE KEY 위반 여부를 사전에 확인하세요.

2. UPDATE: 데이터를 수정하는 필수 기능 🔧

1) Oracle

UPDATE 테이블명
SET 컬럼1 = '값1', 컬럼2 = '값2'
WHERE 조건;

2) Tibero

UPDATE 테이블명
SET 컬럼1 = '값1', 컬럼2 = '값2'
WHERE 조건;
  • Oracle과 동일한 문법을 사용합니다.

3) MySQL

UPDATE 테이블명
SET 컬럼1 = '값1', 컬럼2 = '값2'
WHERE 조건;

UPDATE 사용 시 주의점

  • WHERE 조건 필수: 조건을 생략하면 모든 데이터가 수정됩니다.
  • 트랜잭션 관리: 대규모 데이터 수정 시 ROLLBACK 가능성을 대비해 트랜잭션을 설정하세요.

3. DELETE: 데이터를 삭제하는 강력한 명령 🗑️

1) Oracle

DELETE FROM 테이블명
WHERE 조건;
  • 테이블 전체 데이터 삭제:
TRUNCATE TABLE 테이블명;

TRUNCATE는 DELETE보다 빠르지만, ROLLBACK 불가.

2) Tibero

DELETE FROM 테이블명
WHERE 조건;
  • Oracle과 동일한 문법을 사용합니다.

3) MySQL

DELETE FROM 테이블명
WHERE 조건;
  • 테이블 전체 데이터 삭제:
TRUNCATE TABLE 테이블명;

DELETE 사용 시 주의점

  • WHERE 조건 필수: 조건을 지정하지 않으면 모든 데이터가 삭제됩니다.
  • TRUNCATE와 DELETE 차이: TRUNCATE는 테이블 구조를 초기화하지만 로그를 남기지 않기 때문에 복구 불가능합니다.

4. Oracle, Tibero, MySQL 차이점 비교표 ⚖️

기능OracleTiberoMySQL
INSERTINSERT ALL 지원INSERT ALL 지원다중 행 삽입 문법 단순함
UPDATE표준 SQL 문법Oracle과 동일표준 SQL 문법
DELETETRUNCATE 지원TRUNCATE 지원TRUNCATE 지원
트랜잭션완벽한 트랜잭션 지원Oracle과 동일트랜잭션 지원 (MyISAM 제외)
성능 최적화대규모 데이터 처리에 유리Oracle과 호환성 우수경량화된 쿼리로 빠른 속도 지원

5. 성능 최적화 팁 🚀

1) INSERT 최적화

  • 대량 삽입: 대량 데이터를 삽입할 때는 배치 작업이나 로딩 도구를 사용하세요.
    • 예: Oracle SQL*Loader, MySQL LOAD DATA INFILE.
  • 제약 조건 비활성화: 삽입 중 성능 저하를 방지하려면 작업 전에 제약 조건을 비활성화.

2) UPDATE 최적화

  • 인덱스 활용: WHERE 조건에서 사용되는 컬럼에 인덱스를 생성해 성능을 향상.
  • 최소 데이터 수정: 필요 없는 컬럼 수정은 피하세요.

3) DELETE 최적화

  • 대규모 삭제: DELETE 대신 TRUNCATE를 활용하면 성능이 크게 향상됩니다.
  • 배치 삭제: 데이터가 많을 경우 작은 단위로 나누어 삭제 작업 수행.

결론: 데이터 관리의 기초, 완벽히 이해하세요! 🎉

Oracle, Tibero, MySQL에서의 INSERT, UPDATE, DELETE는 데이터베이스 관리의 기초입니다. 하지만 각각의 DBMS가 제공하는 기능과 최적화 방법을 이해하면 더 효율적으로 데이터를 처리할 수 있습니다.


🌟 “기본을 알면 데이터 관리가 더 쉬워집니다! 지금 바로 INSERT, UPDATE, DELETE를 활용해 데이터를 자유자재로 다뤄보세요. 😊✨”

궁금한 점이나 추가 정보가 필요하다면 언제든 말씀해주세요! 🚀

실수로 삭제된 데이터, Oracle AS OF TIMESTAMP로 되찾아보세요!⏳✨

TIMESTAMP

“과거 데이터를 복구하거나 특정 시점의 데이터 상태를 확인하고 싶으신가요? Oracle의 AS OF TIMESTAMP 기능을 활용하면 데이터의 시간여행이 가능합니다!”
데이터베이스를 운영하면서 실수로 데이터를 삭제하거나 업데이트했을 때, 특정 시점의 데이터를 확인해야 할 경우가 생깁니다. 이럴 때 Oracle의 AS OF TIMESTAMP 기능은 강력한 도구가 됩니다. 이번 글에서는 AS OF TIMESTAMP의 개념, 사용 방법, 주요 활용 사례, 그리고 동적 시점 쿼리 활용과 최적화 팁까지 모두 살펴보겠습니다.


1. Oracle AS OF TIMESTAMP란? 📜

**AS OF TIMESTAMP**는 **플래시백 쿼리(Flashback Query)**의 핵심 기능 중 하나로, 특정 시점의 데이터 상태를 조회할 수 있습니다. Oracle 데이터베이스는 UNDO 데이터를 활용해 과거 데이터를 재현하는데, 이를 통해 데이터의 복원이나 문제 해결이 가능합니다.

주요 특징

  • 특정 시점의 데이터를 조회 가능.
  • 데이터 복구 및 문제 해결에 유용.
  • UNDO 테이블스페이스를 활용해 작동.
  • DML 작업(INSERT, UPDATE, DELETE) 이력 추적 가능.

2. AS OF TIMESTAMP 기본 사용법 💻

기본 쿼리 문법

SELECT *
FROM 테이블명
AS OF TIMESTAMP TO_TIMESTAMP('YYYY-MM-DD HH24:MI:SS', 'YYYY-MM-DD HH24:MI:SS');

예제: 특정 시점의 데이터 조회

SELECT *
FROM employees
AS OF TIMESTAMP TO_TIMESTAMP('2024-11-26 10:00:00', 'YYYY-MM-DD HH24:MI:SS');
  • employees 테이블에서 2024년 11월 26일 오전 10시의 데이터를 조회합니다.

3. 동적 시점 조회: SYSTIMESTAMP - INTERVAL 활용 🌟

Oracle의 AS OF TIMESTAMP는 고정된 시점뿐만 아니라 동적 계산을 통해 특정 시간 전의 데이터를 조회할 수 있습니다.
이를 활용하면 실시간 문제 해결과 데이터 추적이 훨씬 더 간단해집니다.

기본 문법

SELECT *
FROM 테이블명
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR);

예제: 1시간 전 데이터 조회

SELECT *
FROM employees
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR);
  • 현재 시간 기준으로 1시간 전의 데이터를 조회합니다.

INTERVAL 사용법

INTERVAL 값설명예시
INTERVAL '1' HOUR1시간 전SYSTIMESTAMP - INTERVAL '1' HOUR
INTERVAL '30' MINUTE30분 전SYSTIMESTAMP - INTERVAL '30' MINUTE
INTERVAL '7' DAY7일 전SYSTIMESTAMP - INTERVAL '7' DAY
INTERVAL '2' MONTH2개월 전SYSTIMESTAMP - INTERVAL '2' MONTH

4. AS OF TIMESTAMP 활용 사례 📂

1) 실수로 삭제된 데이터 복구

INSERT INTO employees_recovered
SELECT *
FROM employees
AS OF TIMESTAMP TO_TIMESTAMP('2024-11-26 09:00:00', 'YYYY-MM-DD HH24:MI:SS');
  • 과거 시점의 데이터를 새로운 테이블에 복구할 수 있습니다.

2) 데이터 변경 내역 추적

SELECT *
FROM orders
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '2' HOUR)
WHERE order_id = 12345;
  • 주문 번호 12345의 상태를 2시간 전 기준으로 확인합니다.

3) 데이터 무결성 확인

SELECT a.*, b.*
FROM employees AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' HOUR) a
FULL OUTER JOIN employees b
ON a.employee_id = b.employee_id
WHERE a.salary != b.salary;
  • 현재 데이터1시간 전 데이터를 비교하여 변경된 항목을 확인합니다.

5. 플래시백 쿼리 작동 원리 🔍

1) UNDO 테이블스페이스 활용

Oracle은 UNDO 데이터(트랜잭션 로그)를 사용해 이전 상태를 재현합니다.

  • UNDO 보존 기간: 플래시백 쿼리가 가능한 시점은 UNDO 데이터 보존 기간에 따라 결정됩니다.
    UNDO_RETENTION 파라미터로 설정. SHOW PARAMETER UNDO_RETENTION;

2) SCN(System Change Number) 기반

AS OF TIMESTAMP는 내부적으로 SCN을 활용해 특정 시점의 데이터를 조회합니다.


6. 사용 시 주의점 🚨

1) UNDO 보존 기간 확인

  • AS OF TIMESTAMP는 UNDO 테이블스페이스에 저장된 데이터를 참조하므로, UNDO_RETENTION 기간 내의 시점만 조회가 가능합니다.

2) 성능 고려

  • 플래시백 쿼리는 UNDO 데이터를 읽기 때문에 대규모 데이터를 조회할 경우 성능 저하가 발생할 수 있습니다.

3) 권한 필요

  • 플래시백 쿼리를 실행하려면 SELECT ANY TABLEFLASHBACK 권한이 필요합니다.

결론: Oracle AS OF TIMESTAMP로 데이터 복구와 추적을 간단하게! 🎉

Oracle의 AS OF TIMESTAMP는 실수로 데이터를 삭제하거나 과거 상태를 복구해야 할 때 매우 유용한 기능입니다. 특히, SYSTIMESTAMP - INTERVAL과 같은 동적 시점 활용은 실무에서 빠르고 유연한 데이터 관리를 가능하게 합니다.


🌟 “과거 데이터를 손쉽게 복구하세요! Oracle AS OF TIMESTAMP로 데이터 관리를 완벽히 마스터해보세요. 😊✨”

더 궁금한 사항이 있다면 언제든 말씀해주세요!

Tibero와 Oracle에서 JOIN UPDATE, 실무에서 바로 써먹는 꿀팁 대방출! 🌟

JOIN UPDATE

“데이터베이스에서 JOIN UPDATE는 필수적인 작업입니다. Tibero와 Oracle의 차이점과 활용법을 알아보세요!”
데이터베이스를 운영하다 보면 특정 조건에 맞는 데이터를 업데이트해야 할 때가 많습니다. 특히 여러 테이블을 연결하여 데이터를 갱신하는 JOIN UPDATE는 실무에서 자주 사용하는 쿼리 중 하나입니다. Tibero와 Oracle에서는 이 작업을 약간 다른 방식으로 처리해야 하죠. 이번 글에서는 JOIN UPDATE의 기본 개념, Tibero와 Oracle에서의 구현 방법, 그리고 주의점 및 최적화 팁까지 모두 정리했습니다.


1. JOIN UPDATE란? 🛠️

JOIN UPDATE는 두 개 이상의 테이블을 조인(JOIN)하여 특정 조건을 만족하는 데이터를 업데이트하는 SQL 작업입니다.
예를 들어, 고객 테이블의 고객 이름을 주문 테이블의 고객 ID를 기준으로 업데이트한다고 가정해봅시다.

기본 SQL 구조

UPDATE 테이블A
SET 테이블A.컬럼 = 테이블B.컬럼
FROM 테이블A
JOIN 테이블B
ON 테이블A.조건 = 테이블B.조건
WHERE 추가 조건;

2. Oracle에서의 JOIN UPDATE 💾

Oracle에서는 UPDATE 문 내에서 서브쿼리를 활용하거나 MERGE 문을 사용해 JOIN UPDATE를 수행합니다.

방법 1: 서브쿼리 활용

UPDATE 테이블A
SET 컬럼1 = (
  SELECT 테이블B.컬럼2
  FROM 테이블B
  WHERE 테이블A.조건 = 테이블B.조건
)
WHERE EXISTS (
  SELECT 1
  FROM 테이블B
  WHERE 테이블A.조건 = 테이블B.조건
);
  • 장점: 직관적이며 단순한 쿼리 구조.
  • 단점: 서브쿼리가 복잡할수록 성능 저하 가능.

방법 2: MERGE 문 활용

Oracle의 MERGE는 업데이트와 삽입을 동시에 처리할 수 있는 강력한 도구입니다.

MERGE INTO 테이블A A
USING 테이블B B
ON (A.조건 = B.조건)
WHEN MATCHED THEN
  UPDATE SET A.컬럼1 = B.컬럼2;
  • 장점: 성능 최적화 가능, 대규모 데이터 처리에 적합.
  • 단점: 단순한 업데이트에는 코드가 복잡하게 느껴질 수 있음.

3. Tibero에서의 JOIN UPDATE 🔧

Tibero는 SQL 표준에 더욱 충실하여 JOIN UPDATE를 직접 지원합니다.
아래와 같은 구문으로 두 테이블 간의 조인을 이용한 업데이트가 가능합니다.

Tibero JOIN UPDATE

UPDATE 테이블A
SET 컬럼1 = 테이블B.컬럼2
FROM 테이블A
JOIN 테이블B
ON 테이블A.조건 = 테이블B.조건
WHERE 추가 조건;
  • 장점: 직관적이며 간결한 코드.
  • 단점: 표준 SQL을 지원하지 않는 데이터베이스와의 호환성 문제.

4. Oracle과 Tibero의 JOIN UPDATE 차이점 ⚖️

특징OracleTibero
JOIN UPDATE 지원 여부서브쿼리 또는 MERGE 사용직접 지원
문법 간결성MERGE 문 사용 시 복잡할 수 있음간단하고 직관적
성능 최적화튜닝 필요 (서브쿼리 비효율성)표준 SQL로 간단히 최적화 가능
호환성표준 SQL 준수SQL Server 등과 유사한 문법

5. JOIN UPDATE 사용 시 주의점 및 최적화 팁 🚀

1) WHERE 조건 필수 확인

WHERE 절을 생략하면 전체 데이터가 갱신되므로 큰 실수를 초래할 수 있습니다.

2) 인덱스 최적화

조인에 사용되는 컬럼에는 반드시 인덱스를 생성해 성능을 높이세요.

3) 데이터 검증

업데이트 전후 데이터를 비교하여 정확성을 확인해야 합니다.
예시:

SELECT COUNT(*) FROM 테이블A WHERE 조건;
SELECT COUNT(*) FROM 테이블B WHERE 조건;

4) 트랜잭션 관리

대규모 업데이트는 COMMITROLLBACK을 적절히 사용해 안정성을 확보하세요.


결론: Tibero와 Oracle, 상황에 맞는 JOIN UPDATE 활용하기! 🎉

Tibero와 Oracle 모두 JOIN UPDATE를 구현하는 방식이 다르지만, 각자의 장단점이 있습니다. Tibero는 직관적인 문법으로 간단히 작업할 수 있는 반면, Oracle은 다양한 옵션을 제공하여 복잡한 작업에 적합합니다.


🌟 “데이터베이스도 전략적으로 관리하세요! Tibero와 Oracle의 JOIN UPDATE를 활용해 데이터 관리를 마스터해보세요. 🧠✨”

더 많은 개발 팁을 확인하시려면 WOOYIT 테크 블로그 개발 페이지를 방문해보세요.

[2024] WebtoB 서버에서 CORS 설정하기: 완벽 가이드

webTobe

Webtobe 서버는 대한민국에서 주로 사용되는 웹서버로, 자체적인 설정 방식을 통해 CORS (Cross-Origin Resource Sharing) 정책을 설정할 수 있습니다. 이 글에서는 Webtobe 서버에서 CORS를 설정하는 구체적인 방법을 단계별로 안내해드리겠습니다. 이 설정을 통해 다른 도메인의 웹 애플리케이션에서 자원을 안전하게 요청할 수 있게 됩니다.

WebtoB 서버의 cors 설정하기

1. 설정 파일 수정

WebtoB 서버의 설정은 주로 server.xml 파일이나 다른 관련 설정 파일에서 관리됩니다. 먼저, 서버의 설정 파일을 찾아 열어주세요.

2. CORS 필터 추가

다음은 WebtoB 서버에 CORS를 설정하기 위한 필터를 추가하는 방법입니다. 설정 파일에서 원하는 웹 애플리케이션의 <Context> 섹션에 아래 필터 설정을 추가합니다.

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>com.thirautech.webtobe.CorsFilter</filter-class>
    <init-param>
        <param-name>cors.allowed.origins</param-name>
        <param-value>https://example.com</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.methods</param-name>
        <param-value>GET, POST, HEAD, OPTIONS</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.headers</param-name>
        <param-value>Content-Type, Authorization</param-value>
    </init-param>
    <init-param>
        <param-name>cors.exposed.headers</param-name>
        <param-value>Some-Custom-Header</param-value>
    </init-param>
    <init-param>
        <param-name>cors.support.credentials</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>cors.preflight.maxage</param-name>
        <param-value>1800</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

이 설정은 다음을 지정합니다:

  • cors.allowed.origins: 허용할 출처
  • cors.allowed.methods: 허용할 HTTP 메소드
  • cors.allowed.headers: 허용할 헤더
  • cors.support.credentials: 자격 증명 정보 지원 여부
  • cors.preflight.maxage: 사전 요청 캐싱 시간

3. 서버 재시작

모든 설정 변경 후, WebtoB 서버를 재시작해야 새 설정이 적용됩니다. 서버 재시작은 서버 관리 툴을 통하거나 명령어를 사용하여 진행할 수 있습니다.

추가 사항

  • WebtoB 서버의 버전에 따라 설정 방법이나 필터 클래스 이름이 다를 수 있습니다. 사용 중인 서버의 문서를 참고하거나 기술 지원에 문의하여 정확한 정보를 확인하세요.
  • CORS 정책은 보안을 강화하는 중요한 설정입니다. 필요에 따라 특정 도메인에만 CORS를 제한적으로 허용하는 것이 바람직합니다.

이 가이드를 통해 WebtoB 서버에서 CORS 설정을 완료하고, 보다 안전하게 자원을 공유할 수 있게 되기를 바랍니다.

WebToB doc

linux(CentOS Stream 9)에 SVN 설치하기

svn

안녕하세요, 여러분! 오늘은 linux CentOS Stream 9에서 Subversion (SVN) 리포지토리를 설정하는 방법에 대해 쉽게 알아보겠습니다. 먼저, Subversion이라는 것이 무엇인지 간단히 소개하겠습니다.

Subversion(SVN)이란?

Subversion은 코드, 문서 등의 버전 관리를 도와주는 시스템입니다. 여러분이 작성한 코드나 문서의 변경 내용을 저장하고, 필요할 때 이전 버전으로 돌아갈 수 있게 해줍니다. 그리고 여러 사람이 동시에 작업할 때도 변경 사항을 쉽게 병합할 수 있게 도와줍니다.

준비물

  • CentOS Stream 9이 설치된 서버 혹은 컴퓨터
  • 인터넷 연결

자, 그럼 시작해볼까요?

1. linux에 Subversion 설치하기

먼저, Subversion을 설치해야 합니다. CentOS에서는 dnf 라는 패키지 관리자를 사용하여 손쉽게 설치할 수 있습니다.

sudo dnf install subversion

2. ‘svn’ 사용자 생성하기

Subversion 리포지토리를 관리할 사용자인 ‘svn’을 생성합니다.

sudo useradd svn 
sudo passwd svn

3. 홈 디렉토리에서 리포지토리 생성하기

이제 ‘svn’ 사용자의 홈 디렉토리에 리포지토리를 생성합니다.

sudo -u svn svnadmin create /home/svn/repo
5 6

4. svnserve를 사용하여 리포지토리에 접근하기

Subversion은 여러 가지 접근 방법을 제공하는데, 그 중 가장 간단한 svnserve 툴을 사용해 보겠습니다.

sudo -u svn svnserve -d -r /home/svn/repo
6 5

5. 보안 및 인증 설정하기

보안은 항상 중요합니다. 여러분의 리포지토리를 안전하게 보호하기 위해 간단한 인증 절차를 설정해 보겠습니다.

sudo vi /home/svn/repo/conf/passwd
7 3

사용자에 jjl / jjl 를 추가하였습니다.

다음으로 아래 파일을 열어 아래와 같이 설정하세요.

sudo vi /home/svn/repo/conf/svnserve.conf 
8 2

다음 파일을 열어 다음과 같이 수정하세요.

sudo vi /home/svn/repo/conf/authz
10 3
[groups]
dev = jjl

[/]
@dev =rw
* = r
9 3

dev라는 그룹에 jjl을 포함시키고 모든 경로에 dev 그룹에 r 읽기, w 쓰기 권한을 다른 모든 사용자에게는 r 읽기 권한을 부여합니다.

12

마지막으로 svn을 연결하여 사용하는 모습입니다.

이로써 간단한 Subversion 리포지토리 설정이 완료되었습니다. SVN은 프로젝트의 크기에 상관없이 누구나 사용할 수 있는 강력한 버전 관리 시스템입니다. 오늘 배운 내용을 통해 여러분의 프로젝트 관리에 Subversion을 활용해 보세요. 다음에는 SVN의 다양한 기능과 활용 방법에 대해 더 자세히 알아보도록 하겠습니다.

여러분의 프로젝트가 성공적으로 진행되길 바랍니다! 😄

[wooyung’s IT 블로그]

CentOS Stream 9에서 Docker 설치하기

Docker

Docker는 애플리케이션의 환경을 표준화하여 일관성 있는 배포와 운영을 가능하게 해줍니다. 이 가이드에서는 CentOS Stream 9에서 Docker를 설치하고 구성하는 방법을 자세히 설명하겠습니다.

1. Docker란?

Docker는 애플리케이션과 그 애플리케이션의 종속성을 함께 패키징하는 컨테이너 기반의 오픈 소스 플랫폼입니다. 이렇게 패키징된 애플리케이션은 Docker를 지원하는 어느 시스템에서든 동일하게 실행될 수 있습니다.

2. 설치 전 준비

  • 시스템 요구사항: CentOS Stream 9가 설치된 시스템
  • 사용자 권한: sudo 권한을 갖는 사용자 계정

3. Docker 설치 과정

  • 시스템 업데이트
    먼저, 시스템의 패키지를 최신 상태로 업데이트합니다.
sudo dnf update -y
1 6
  • 필요한 패키지 설치
    Docker 설치에 필요한 패키지와 종속성을 설치합니다.
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2
2 5
  • Docker 저장소 추가
    Docker 공식 저장소를 시스템에 추가합니다.
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3 5
  • Docker CE 설치
    Docker의 Community Edition을 설치합니다.
sudo dnf install -y docker-ce --nobest
4 2
  • 여기서 --nobest 옵션은 Docker의 가장 최신 버전을 설치하는 데 필요한 것입니다.
  • Docker 서비스 활성화 및 시작
    시스템 부팅 시 Docker 서비스가 자동으로 시작되도록 설정하고, Docker 서비스를 시작합니다.
sudo systemctl enable --now docker
5 3
  • 설치 확인
    Docker의 상태와 버전을 확인하여 올바르게 설치되었는지 확인합니다.
sudo systemctl status docker 
sudo docker --version
6 3
7 2

4. Sudo 권한 없이 Docker 사용하기

기본적으로 Docker 명령을 실행하려면 sudo 권한이 필요합니다. 하지만, 사용자를 Docker 그룹에 추가함으로써 sudo 없이 Docker 명령을 실행할 수 있게 됩니다.

sudo usermod -aG docker your_username
9 1

이 변경을 적용하려면 로그아웃했다 다시 로그인해야 합니다. 그러나 이렇게 설정하면 보안 상의 위험이 있으니 주의가 필요합니다.

8

Docker 그룹에 포함된 사용자로 로그인하여 sudo 없이 docker 명령어를 사용하였습니다.

5. 결론 및 추가 리소스

이제 CentOS Stream 9에 Docker가 성공적으로 설치되었습니다. Docker를 사용하여 컨테이너화된 애플리케이션의 배포와 관리를 시작해보세요. 추가적인 정보와 도움말은 Docker의 공식 문서인 Docker Documentation에서 확인할 수 있습니다.

이 가이드를 통해 CentOS Stream 9에서 Docker 설치 과정을 순차적이고 명확하게 이해하고 수행할 수 있기를 바랍니다. Docker는 애플리케이션의 배포와 운영을 혁신적으로 바꾸는 플랫폼이니, 이 기회를 통해 그 힘을 체험해보시길 추천합니다!

[wooyung’s IT 블로그]

[2023] Visual Studio Code 설치하기

안녕하세요, 여러분! 오늘은 프로그래머로서 필수 툴이라 할 수 있는 Visual Studio Code 설치 방법에 대해 함께 알아보려고 합니다. Visual Studio Code는 Microsoft에서 개발한 코드 편집기로, 각종 프로그래밍 언어를 지원하며 다양한 확장 기능 덕분에 더욱 편리하게 코딩할 수 있습니다. 지금부터 설치 방법을 단계별로 따라와 주세요!

Visual Studio Code 설치

1. 공식 홈페이지 방문

  • 먼저, VSCode의 공식 홈페이지 https://code.visualstudio.com/로 이동합니다.
  • 화면 중앙의 큰 ‘Download for Windows’ 버튼이 보이실 텐데, 여러분의 운영체제에 맞게 버튼 이름이 변경될 수 있습니다. (예: macOS, Linux 등)
Visual Studio Code

2. 다운로드 및 설치

  • 운영체제에 맞는 버튼을 클릭하여 설치 파일을 다운로드 받습니다.
  • 다운로드한 파일을 실행합니다.
  • ‘설치’ 버튼을 클릭 후, 나오는 화면의 안내에 따라 진행하면 됩니다. (기본 설정으로도 충분합니다!)
  • 설치가 완료되면 ‘완료’ 버튼을 클릭하고 VSCode를 실행해봅니다.

3. 기본 설정 살펴보기

VSCode를 처음 실행하면 여러분을 위한 기본 설정과 인터페이스를 볼 수 있습니다.

  • 왼쪽 사이드바에는 여러 아이콘들이 있습니다. 파일 탐색기, 검색, 소스 제어, 확장 기능, 디버그 등의 기능을 사용할 수 있습니다.
  • 처음에는 어색하겠지만, 사용하면서 익숙해질 것입니다!

4. 확장 기능 설치

VSCode의 가장 큰 장점 중 하나는 다양한 확장 기능을 통해 개인의 코딩 환경을 맞춤 설정할 수 있다는 것입니다.

  • 왼쪽 사이드바의 네모 상자 아이콘(확장)을 클릭합니다.
  • 상단의 검색창에 여러분이 필요한 확장 기능의 이름을 입력합니다. (예: Python, JavaScript, Live Server 등)
  • 원하는 확장 기능을 찾아 ‘설치’를 클릭합니다.
9

5. 테마 및 폰트 변경하기

  • VSCode의 외관을 변경하고 싶다면, 확장 기능 탭에서 ‘Theme’ 또는 ‘Font’를 검색하여 원하는 테마나 폰트를 설치할 수 있습니다.
  • 설치 후, Ctrl + K, Ctrl + T를 순서대로 눌러 테마를 변경할 수 있습니다.

6. 단축키 활용하기

  • VSCode는 다양한 단축키를 제공합니다. 이를 통해 훨씬 더 빠르게 작업을 할 수 있습니다.
  • ‘File’ 메뉴 > ‘Preferences’ > ‘Keyboard Shortcuts’를 통해 단축키를 확인하고, 필요에 따라 설정을 변경할 수 있습니다.
10

7. 마무리

VSCode 설치부터 기본 설정까지 간단히 살펴보았습니다. 처음에는 익숙하지 않겠지만, 사용하다 보면 여러분만의 최적의 코딩 환경을 구축할 수 있을 것입니다. 여러분의 코딩 생활이 VSCode와 함께 더욱 풍요롭게 진행되길 바랍니다!

[wooyung’s IT 블로그]

[2023] Maven 프로젝트에 Nexus를 설정하는 방법

Maven 프로젝트에 Nexus를 설정하는 방법

안녕하세요, 오늘은 Maven 프로젝트에 Nexus를 설정하는 방법에 대해 다루려고 합니다. Nexus Repository Manager는 소프트웨어 컴포넌트의 중앙 저장소 역할을 하는 오픈 소스 도구로, 라이브러리, 패키지, 플러그인 등 다양한 종류의 콘텐츠를 한 곳에서 관리하고 배포하는데 도움이 됩니다.

시작전에 Nxus가 설치되어있지 않다면 아래 글을 확인해주세요.

[2023] 리눅스에서 Nexus 설치 및 설정

우선, Nexus Repository Manager에 접속하여 시작해봅시다.

Maven 프로젝트에 Nexus를 설정하는 방법

Nexus 에 액세스

웹 브라우저를 열고 Nexus Repository Manager가 설치된 서버의 주소에 접속합니다. 예를 들어, 로컬에서 실행되는 경우 http://localhost:8081/로 접속하면 됩니다.

새로운 저장소 설정

1, ‘서버 관리 및 구성’ 사이드바에서 ‘저장소’를 클릭합니다.

2. ‘저장소 생성’을 클릭합니다.

3. Maven 패키지를 호스팅할 새 리포지토리에 대해 ‘maven2 (호스트됨)’ 유형을 선택합니다. 이 선택은 프로젝트의 빌드 시스템에 따라 달라질 수 있습니다.

4. 리포지토리 이름을 지정하고 필요에 따라 기타 설정을 구성한 다음 ‘리포지토리 생성’을 클릭합니다.

빌드 도구에 Nexus Repository Manager 설정하기

예를 들어 Maven을 사용하는 경우, settings.xml 파일에 Nexus Repository Manager 설정을 추가해야 합니다.

<servers>
  <server>
    <id>nexus</id>
    <username>admin</username>
    <password>admin123</password>
  </server>
</servers>

그리고 pom.xml 파일에도 Nexus Repository Manager를 가리키도록 <distributionManagement> 태그를 추가합니다.

<distributionManagement>
  <repository>
    <id>nexus</id>
    <url>http://localhost:8081/repository/maven-releases/</url>
  </repository>
  <snapshotRepository>
    <id>nexus</id>
    <url>http://localhost:8081/repository/maven-snapshots/</url>
  </snapshotRepository>
</distributionManagement>

다른 빌드 도구, 예를 들어 Gradle을 사용한다면 도구에 맞는 방식으로 설정을 변경해야 합니다.

eGovFramework와의 통합

이제 Nexus Repository Manager가 설정되었으니, 이를 eGovFramework 프로젝트의 모든 종속성에 대한 중앙 저장소로 사용할 수 있습니다. 

이를 위해 프로젝트의 빌드 구성이 Nexus Repository Manager에서 종속 항목을 가져오도록 설정되어 있는지 확인하시면 됩니다.

Nexus Repository Manager를 사용하는 것은 시스템 관리 작업에 어느 정도 익숙해야 하며, 보안 역시 중요한 요소입니다. 

Nexus Repository Manager가 인터넷에 공개된 경우 잠재적인 공격 벡터가 될 수 있으므로 적절하게 보안 설정을 관리해야 합니다.

이상으로 Maven 프로젝트에 Nexus를 설정하는 방법에 대해 알아보았습니다.

[우영이네]

[2023] Spring Security의 context-security.xml 설정 분석하기

context-security
context-security

안녕하세요. 오늘은 Spring Security의 context-security.xml 설정에 대해 자세히 살펴보려 합니다. 각 섹션별로 구성을 나눠서 어떤 개념과 역할이 포함되어 있는지 알아보겠습니다.

context-security.xml 설정

1. 인증 설정:

loginUrl="/cmns/login/loginUser.do"
logoutSuccessUrl="/EgovContent.do"
loginFailureUrl="/cmns/login/loginUser.do?login_error=1"
accessDeniedUrl="/sec/ram/accessDenied.do"
  • loginUrl: 사용자가 인증을 위해 자신의 자격 증명을 POST할 예상되는 엔드포인트입니다.
  • logoutSuccessUrl: 사용자가 성공적으로 로그아웃하면 이 URL로 리다이렉트됩니다.
  • loginFailureUrl: 인증이 실패하면(예: 잘못된 자격 증명) 사용자는 이 URL로 리다이렉트됩니다.
  • accessDeniedUrl: 사용자가 접근 권한이 없는 리소스에 접근하려고 할 때 리다이렉트될 엔드포인트입니다.

2. 사용자 세부 정보 설정:

데이터베이스에서 사용자 세부 정보와 해당 권한을 가져오는 것과 관련이 있습니다.

dataSource="dataSource"
jdbcUsersByUsernameQuery="SELECT ... FROM TB_USER_INFO WHERE USER_NTE_ID = ?"
jdbcAuthoritiesByUsernameQuery="SELECT ... FROM TB_USER_AUTHRT_MPP A, TB_USER_INFO B WHERE A.USER_NTE_ID = B.USER_NTE_ID AND B.USER_NTE_ID = ?"
  • dataSource: 데이터베이스 소스 빈을 참조합니다.
  • jdbcUsersByUsernameQuery: 제공된 사용자 이름을 기반으로 사용자 세부 정보를 가져오기 위한 SQL 쿼리입니다.
  • jdbcAuthoritiesByUsernameQuery: 특정 사용자에 할당된 역할 또는 권한을 가져오기 위한 SQL 쿼리입니다.

3. 세션 관리:

concurrentMaxSessons="1"
concurrentExpiredUrl="/EgovContent.do"
  • concurrentMaxSessons: 사용자가 가질 수 있는 동시 세션의 최대 수를 지정합니다. 여기서는 사용자당 하나의 세션만 허용됩니다.
  • concurrentExpiredUrl: 새 세션을 생성하고 최대 수를 초과하면 이전 세션은 만료되고 사용자는 이 URL로 리다이렉트됩니다.

4. 보안 헤더:

sniff="true"
xframeOptions="SAMEORIGIN"
xssProtection="true"
csrf="false"
  • sniff: MIME 타입 감지 보호를 활성화 또는 비활성화합니다.
  • xframeOptions: 콘텐츠를 iframe에 어떻게 포함시킬 수 있는지 결정합니다.
  • xssProtection: XSS (Cross-Site Scripting) 보호를 활성화 또는 비활성화합니다.
  • csrf: CSRF (Cross-Site Request Forgery) 보호를 활성화 또는 비활성화합니다.

5. 역할 계층 구조 및 접근 제어:

이 섹션에서는 URL 패턴, 메서드 등에 따라 계층적 역할 및 해당 접근 제어를 정의합니다.

  • sqlHierarchicalRoles: 데이터베이스에서 역할 계층 구조를 가져옵니다.
  • sqlRolesAndUrl: 특정 URL 패턴에 역할을 매핑합니다.
  • sqlRolesAndMethod: 특정 HTTP 메서드에 역할을 매핑합니다.
  • sqlRolesAndPointcut: 특정 포인트컷에 역할을 매핑합니다.
  • sqlRegexMatchedRequestMapping: 특정 정규 표현식 기반 URL 패턴에 역할을 매핑합니다.

6. 추가 초기화:

<egov-security:initializer id="initializer" supportMethod="true" supportPointcut="false" />

이 초기화는 추가 구성 옵션을 설정합니다. supportMethod 속성이 true로 설정된 경우 메서드 수준 보안이 활성화됩니다.


이 분석을 통해 context-security.xml의 Spring Security 설정의 다양한 구성 요소와 역할에 대한 명확한 이해를 얻으셨기를 바랍니다. 즐거운 코딩되세요~! 🚀

[우영이네]

[wooyung’s IT 블로그]

[2023]Tibero 사용자 및 권한 설정 및 테스트 과정

Tibero 사용자 및 권한 설정
Tibero 사용자 및 권한 설정

이 포스트에서는 Tibero 사용자 및 권한 설정에 대한 과정과 테스트하는 방법을 설명하겠습니다.

Tibero 사용자 및 권한 설정 과정

1. 테이블 스페이스 생성

먼저, 테이블 스페이스를 생성해야 합니다. 이 예시에서는 TEST_TBLTEST_IDX라는 두 개의 테이블 스페이스를 생성합니다.

CREATE TABLESPACE TEST_TBL
    DATAFILE '/tibero_naqs/tbdata/test_tbl.tbf' SIZE 100M AUTOEXTEND OFF
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
    
CREATE TABLESPACE TEST_IDX
    DATAFILE '/tibero_naqs/tbdata/test_idx.tbf' SIZE 100M AUTOEXTEND OFF
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

2. 사용자 추가

다음으로, 새로운 사용자를 추가합니다. 이 예시에서는 TEST이라는 사용자를 추가하며, 비밀번호도 TEST으로 설정하였습니다.

CREATE USER TEST
    IDENTIFIED BY TEST
    DEFAULT TABLESPACE TEST_TBL;

3. 사용자 삭제

아래와 같은 방법으로 데이터베이스에서 사용자를 삭제할 수 있습니다.

DROP USER [유저명] cascade;

예를 들어 TEST이라는 사용자를 삭제하려면 다음과 같이 입력합니다.

DROP USER TESTcascade;

4. 권한 설정

데이터베이스에 연결하는 권한 및 테이블 조회 권한을 부여합니다.

GRANT RESOURCE,CONNECT TO TEST;
GRANT SELECT ANY TABLE TO TEST;

사용자 TEST에게서 DBA 권한을 제거합니다.

REVOKE DBA FROM TEST;

DBA 권한 등록을 조회하려면 다음과 같이 입력합니다.

SELECT *
     FROM DBA_SYS_PRIVS
    WHERE GRANTEE = 'TEST';

5. 통계 데이터 생성

통계 데이터는 성능 튜닝을 위해 필요합니다. 아래와 같이 TEST 사용자에 대한 통계 데이터를 생성 및 삭제할 수 있습니다.

EXEC DBMS_STATS.DELETE_SCHEMA_STATS(ownname => 'TEST', no_invalidate =>false);
EXEC DBMS_STATS.GATHER_SCHEMA_STATS (ownname => 'TEST',method_opt => 'FOR ALL COLUMNS SIZE 10',cascade => true, no_invalidate => false);

6. 권한 설정

TIBERO에 부여된 권한과 동일하게 EXAM에 권한을 부여합니다. 이를 위해, 먼저 기존 권한을 조회하고, 그러한 권한을 TEST에 부여합니다.

begin 

for X in (
select 'GRANT '|| PRIVILEGE || ' TO TEST;' AS GRANT1
FROM DBA_SYS_PRIVS
    WHERE GRANTEE = 'TIBERO'
) 
loop
execute immediate x.GRANT1;
end loop;
 end;

더욱 구체적인 권한을 TEST에 부여하려면 아래의 예시를 참고하세요.

GRANT DROP USER TO TEST;
GRANT LOCK ANY TABLE TO TEST;
GRANT SELECT ANY TABLE TO TEST;
GRANT INSERT ANY TABLE TO TEST;
GRANT UPDATE ANY TABLE TO TEST;
GRANT DELETE ANY TABLE TO TEST;
GRANT SYSDBA TO TEST;
GRANT CREATE VIEW TO TEST;
GRANT SELECT ANY SEQUENCE TO TEST;
GRANT GRANT ANY ROLE TO TEST;
GRANT EXECUTE ANY PROCEDURE TO TEST;
GRANT DROP ANY TRIGGER TO TEST;
GRANT GRANT ANY PRIVILEGE TO TEST;
GRANT GRANT ANY OBJECT PRIVILEGE TO TEST;
GRANT EXECUTE ANY LIBRARY TO TEST;
GRANT CREATE ANY TABLE TO TEST;

7. 동의어 설정(Synonym)

동의어는 객체를 참조할 때 다른 이름을 사용하여 간편하게 참조할 수 있도록 해줍니다. 아래는 동의어 생성에 대한 예시입니다.

GRANT CREATE SYNONYM TO TEST;
GRANT CREATE PUBLIC SYNONYM TO TEST;
GRANT DROP PUBLIC SYNONYM TO TEST;

CREATE SYNONYM e2 FOR emp2 ;
CREATE PUBLIC SYNONYM d2 FOR department ;

동의어를 조회하거나 삭제하려면 아래와 같이 입력하세요.

SELECT * FROM user_synonyms ;
SELECT * FROM DBA_SYNONYMS;
DROP SYNONYM E2;

8. 기타

사용자의 비밀번호를 변경하거나, 특정 권한을 제거하려면 아래와 같이 입력하세요.

ALTER USER [유저명] IDENTIFIED BY [변경할 비밀번호];
REVOKE CREATE SESSION FROM [유저명];

이 가이드는 Tibero 사용자 및 권한 설정 및 테스트에 대한 기본적인 개요를 제공합니다. 더 자세한 정보는 Tibero의 공식 문서를 참조하세요.

이상으로 Tibero 사용자 및 권한 설정에 대한 포스팅을 마치겠습니다.

[우영이네]

[wooyung’s IT 블로그]