SCP : Secure copy의 줄임말로 ssh프로토콜을 이용하여 로컬 호스트와 원격 호스트간 파일을 전송하는 수단이다. 

 

 

옵션

-r : 하위의 디렉터리 및 파일까지 복사
-p : 원본 파일의 변경 시간, 접근 시간, 퍼미션을 보존
-P port : 포트 지정 (ssh 프로토콜 포트가 22번이 아닌 경우 사용)
-v : 상세 정보 출력
-F ssh_config : 설정파일 지정
-c : 압축 복사
-a : 아카이브 모드 복사

 

 

1. 로컬 -> 원격지 (파일 보내기)

scp [옵션] [원본 경로] [원격지user명]@[원격지IP]:[복사할 경로]

1-1. 단일파일

scp /home/tester/temp/abc.txt root@xxx.xxx.xxx.xxx:/test

1-2. 복수파일

scp /home/tester/temp/abc.txt /home/tester/temp/def.txt root@xxx.xxx.xxx.xxx:/test

1-3. 디렉토리

scp -r /home/tester/temp/dir root@xxx.xxx.xxx.xxx:/test

 

 

2. 로컬 <- 원격지 (파일 가져오기)

scp [옵션] [원격지user명]@[원격지IP]:[원본 경로] [복사할 경로]

2-1. 단일파일

scp root@xxx.xxx.xxx.xxx:/test/abc.txt /home/tester/temp/

2-2. 복수파일 (원격지 복수파일을 ""로 묶어야함)

scp root@xxx.xxx.xxx.xxx:"/test/abc.txt /test/def.txt" /home/tester/temp/

2-3. 디렉토리

scp -r root@xxx.xxx.xxx.xxx:/test/dir /home/tester/temp/

  1. Mr콩랑 2021.12.15 17:42 신고

    sftp를 이용해서 데이터를 전송하는 방법도 있답니다.
    이 부분도 다음에 공부해두면 좋을 것 같네요.

서버를 새로 증설해야하는데 4테라짜리 하드 4개를 RAID0으로 구성해야 했다.

 

HP ProLiant MicroServer Gen10

 

 

HP 공식 document를 보고 진행 하려는데 IDE Configuration를 클릭 하라고 한다.

https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c03004814

 

 

아래 화면에서 DEL키를 눌러 접속하니

IDE Configuration 항목은 없고 "For System RAID setting, you could type command "RAID" on UEFI shell." 문구가 보인다. UEFI shell에서 RAID 명령어를 통해 셋팅이 가능하다는데 방법을 알아보자.

 

 

1. F11키를 눌러 Boot Benu 진입

 

2. Built-in EFI Shell 선택 후 엔터

 

3. EFI Shell - RAID를 입력하고 엔터

help를치면 사용가능한 명령어가 나온다.

 

4. 진입 화면

 

5. HBA 0: Marvell 0에서 엔터 -> Configuration Wizaerd에서 엔터

 

6. 레이드 구성할 하드를 SPACE로 선택 후 엔터

 

7. 원하는 RAID레벨 선택 후 Next -> Y -> Y

 

8. 레이드 구성 완료

F10키를 눌러 나오고 재부팅 해주면 끝

비개발자가 데이터를 쉽게 준비하기위해 기존 데이터를 csv로 export해서 전달했고

이제 추가된 데이터와 함께 다시 csv를 import 시켜야한다.

SQL Loader를 이용하면 되었고 간단하게 사용법을 정리한다.

 

1. 사용방법

LOAD DATA

INFILE '파일경로'

APPEND

INTO TABLE 테이블명

fields terminated by ","

(
COL1
COL2
....
)

간단하게 구성해보았다.

1. INFILE에 적은 파일을 읽어

2. 기존 데이터는 두고 새로운 행을 추가하여

2. 타겟 테이블에

3. 각각 필드 구분자는 ,로 인식해

4. (co1, co2...) 컬럼에 각각 넣는다

 

 

2. 옵션

LOAD DATA
CHARACTERSET UTF8

INFILE '파일경로'
BADFILE '파일경로'
LOGFILE '파일경로'
DISCARDFILE '파일경로'

--(REPLACE, APPEND, INSERT)
TRUNCATE

INTO TABLE 테이블명

WHEN (5) = 'test'

FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'

TRAILING NULLCOLS

(
COL1,
COL2,
COL3,
....
)

몇가지 옵션을 더 추가했다

 

인코딩 설정을 하고 

 

 BADFILE은 데이터가 잘못되었을때 그 행을 기록하는 파일

 LOGFILE은 해당 Load 작업 로그파일

 DISCARDFILE은 WHEN절에 맞지 않아 로드 못한 행을 기록하는 파일이다

모두 설정을 안해주면 

컨트롤 파일과 같은 경로, 이름으로 확장자만 다르게 저장된다.

 

 

INSERT : 비어있는 테이블에 데이터를 로드한다. (테이블이 비어있지 않으면 에러)

APPEND : 새로 데이터를 추가한다

REPLACE : 기존 데이터가 있으면 덮어쓴다

TRUNCATE : 해당 테이블을 truncate 한 후 데이터를 로드한다

 

 

WHEN (5) = 'test'는 5번째 필드 데이터가 test인 경우만 로드한다는 뜻으로 조건절이다.

여기서 조건이 맞지 않은 행은 DISCARDFILE에 기록된다.

 

 

FILEDS TERMINATED BY ',' 

필드 구분자를 ,로 설정하고

OPTIONALLT ENCLOSED BY '"'

" (큰따옴표) 로 감싸진 필드를 인식한다

위 2개 설정을하면 데이터파일은 다음과같이 준비해야한다

"col1","col2","col3".......
"col1-1","col2-1","col3-1".......

 

 

TRAILING NULLCOLS : 실제 필요한 필드수보다 데이터파일의 데이터가 적을경우 나머지는 Null로 등록하는 설정

 

 

더 자세한 내용, 옵션은 아래 링크 참조

https://docs.oracle.com/cd/B19306_01/server.102/b14215/part_ldr.htm

 

 

3. 실행

위와 같이 컨트롤파일을 작성 후 sqlldr 명령어로 다음과 같이 실행하면 된다.

sqlldr userid=loader/loader control='/파일경로/load.ctl'

 

 

Load 작업을 하며 삽질했던 내용을 공유하며 글을 마무리한다.

1. 마지막 필드는 반드시 값이 있어야한다 (행의 끝이 구분자로 끝나면 안됨)
2. 윈도우에서 csv파일을 만들고 리눅스 환경에서 load를 진행하였는데 자꾸만 invalid number가 나오며 로드가 안됐는데 알고보니 윈도우 개행문자가 각 행 끝에 포함되어 있어서 발생한 문자였다. 윈도우 개행문자 삭제 후 해결
윈도우 개행문자는 다음 링크 참조
https://sleepyeyes.tistory.com/83?category=799682

 

'데이터베이스 > Oracle DB' 카테고리의 다른 글

[Oracle DB] csv import (SQL Loader)  (0) 2021.10.01
[Oracle DB] SQL Plus csv export (spool)  (0) 2021.09.30

oracle db 데이터를 엑셀파일로 만들어야하는 상황이 생겼는데 tool을 이용하지도 못하는 상황이라 이리저리 찾아보는 도중 sqlplus에서 실행한 쿼리 결과를 파일로 만들어주는 spool 명령어를 알게 되었다.

 

1. 사용방법

set 옵션 값
spool 파일명(경로까지)
내보낼 sql문(select문)
spool off

 

예시

--컬럼 구분자 
set colsep ,

-- pagesize의 default는 14이며 그대로 하면 14줄마다 1줄씩 공백이 생기므로 
-- 그런 현상을 방지하기 위해 크게 지정
set pagesize 50000	

-- linesize도 데이터 길이만큼 지정하여 
-- 아래로 구분되지 않도록 크게 지정
set linesize 10000

-- linesize 이하로 행이 짧을 때 나머지부분을 자른다. 줄 끝 공백제거
set trimspool on

-- 컬럼명 헤더 출력 여부
set heading on

-- 결과 파일 경로
spool /home/oracle/test.csv

SELECT *
FROM TB_TABLE;

spool off

 

 

이외에도 여러 옵션이 있다. 아래에서 참조

https://docs.oracle.com/cd/B19306_01/server.102/b14357/ch12040.htm#i2683501

 

 

편하게 .sql 스크립트 파일을 작성하고

sqlplus에 로그인해서 해당 스크립트 파일을 아래와 같이 불러주면 된다.

@test.sql

 

'데이터베이스 > Oracle DB' 카테고리의 다른 글

[Oracle DB] csv import (SQL Loader)  (0) 2021.10.01
[Oracle DB] SQL Plus csv export (spool)  (0) 2021.09.30

tar : 흔히 압축 형식의 일종으로 간주되지만 압축은 전혀 하지 않으며 단순히 파일을 묶어주는 개념이다. Tape Archive의 약자.

 

tar.gz : tar파일을 gzip으로 압축시킨 파일 확장자.

 

 

 

tar

압축

tar -cvf [압축파일명.tar] [압축할 파일 or 디렉토리]

디렉토리를 지정하면 하위 내용 포함 모두 묶인다.

 

해제

tar -xvf [압축파일명.tar]

 

 

 

tar.gz

z만 추가하면 된다.

압축

tar -zcvf [압축파일명.tar.gz] [압축할 파일 or 디렉토리]

디렉토리를 지정하면 하위 내용 포함 모두 묶인다.

 

해제

tar -zxvf [압축파일명.tar]

 

 

 

옵션 설명

-z gzip(gz)으로 압축
-c tar로 묶기
-x tar를 풀기
-v 각 파일 압축 메시지 출력
-f 파일을 묶도록 지정 (반드시 추가되어야 함)
-p 파일의 권한 저장

됐지만

bad interpreter: No such file or directory 라는 에러 메세지와 함께 쉘파일 실행이 안되었었다.

 

원인은 윈도우 개행문자가 포함되어 있었던것

그냥 vi로 보면 다른점이 없지만 vi 바이너리 모드(-b)로 실행해보면 ^M 문자가 포함된 것 을 볼 수 있다.

 

vi -b test.txt

 

:%s/^M/

vi replace 명령어로 윈도우 개행문자를 모두 지워주면 된다.

이 때 ^M은 단순 문자가 아닌 Ctrl + v + m 으로 입력해야 한다.

치환 후

 

 

++ MobaXterm을 이용중인 경우 Ctrl + m을 누르면 창이 최소화 되는데 기본 단축키를 변경 해주자

Settings -> Keyboard shortcuts 에서 Ctr + M 키 변경 (한번 껐다 켜야 적용되었음)

환경 : java 1.8, windows10

1. 소나큐브 설치 (7.7 버전)

Java 1.8버전을 사용중이여서 최신버전은 못쓰고 7.7버전을 사용하였다.

소나큐브 Docs을 보면 버전별로 지원하는 환경이 잘 나와있다.

https://www.sonarqube.org/downloads/

[

Download | SonarQube

Get the latest LTS and version of SonarQube the leading product for Code Quality and Security from the official download page.

www.sonarqube.org

](https://www.sonarqube.org/downloads/)

소나큐브 다운로드 사이트에 들어가보면 하단에 Show all versions이 있어 다양한 버전 선택이 가능하다.

다운로드 페이지 하단

다운을 받고 압축을 풀면된다.

2. 실행

{압축 푼 소나큐브 폴더}/bin 경로에가면 OS별 폴더가 보인다

os 목록

윈도우 환경이므로 windows-x86-64 폴더에 들어가면 여러개의 bat파일이 보이는데 파일명이 친절하게 어떤 bat파일인지 설명해주고있다.

친절한 파일명

관리자 권한으로
InstallNTService.bat -> StartNTService.bat -> StartSonar.bat 순으로 실행하면 된다.

SonarQube is up이 보이고 소나큐브 기본 포트인 localhost:9000으로 접속시 다음과 같은 페이지가 보이면 성공

기본 계정은 admin/admin 이다.

※ 실행시 에러

https://stackoverflow.com/questions/47294700/sonarqube-exception-caught-on-transport-layer

실행시 위와 같은 에러가 안오면서 실행이 안되면

{압축 푼 소나큐브 폴더}/conf 경로에 sonar.properties에서

#sonar.web.port
기본 9000에서 다른 포트로 수정
#sonar.search.port
기본 9001에서 0으로 수정하고 다시 시작하면 된다.

sonar.web.port 를 수정한경우 바꾼 포트로 접속해주자 localhost:{바뀐포트}

 

 

3. 프로젝트 업로드

3-1. pom.xml에 다음과 같은 플러그인 추가

pom.xml <build>태그에 다음과 같은 플러그인을 추가한다.

<pluginManagement>

  <plugins>

    <plugin>

      <groupId>org.codehaus.mojo</groupId>

      <artifactId>sonar-maven-plugin</artifactId>

    </plugin>

  </plugins>

</pluginManagement>

 

3-2. mvn sonar:sonar -Dsonar.host.url=http://localhost:9000 구문으로 실

 

만약 포트를 변경했다면 적절히 파라미터 값을 변경해주면 된다. pom.xml이 있는 위치에서 직접 실행해도 되고 이클립스를 사용하고 있다면

 

프로젝트 우클릭 -> Run As -> Run Configurations

 

Run Configurations

Goals에 mvn을 제외하고 넣어 Run 해주면 된다.

 

해당 프로젝트가 올라간걸 볼 수 있다.

 

 

※ DB

기본값으로 H2내장 DB를 사용한다. 로컬에서 돌리기엔 지장이 없어보이나 DB설정을 바꾸려면 아래 사진과 같이 sonar.properties에서 원하는 db엔진으로 설정해주면 된다. (단 maria db 지원 X)

sonar.properties

 

  1. dalpang.e 2021.06.30 10:39 신고

    잘 보고 갑니다

개발중 post방식으로 전송을 하는데

파라미터가 넘어가지 않는 현상이 있었다.

 

해당 post는 여러개의 사진을 업로드하는 전송이었는데 

이는 톰캣 파라미터 설정중 최대 size를 넘겨 발생한 현상이었다.

 

기본 톰캣 파라미터 설정

최대 size 2097152 -> 2M
최대 개수 10000개

 

기본설정 2M보다 전송할 파라미터 크기가 더 커서 발생하였으니 설정을 바꿔주자

 

server.xml 에서

<Connector 부분에 maxPostSize 특성을 주면된다

 

maxPostSize : 직접 size를 지정해도 되고 -1로 설정시 무제한

maxParameterCount : 파라미터 개수 설정 역시 -1로 설정시 무제한

 

ex)

<Connector connectionTimeout="20000" port="8081" protocol="HTTP/1.1" redirectPort="8443" maxPostSize="-1" maxParameterCount="-1"/>

 지금까지 기존에 있던 이미지 그 중에서 우분투 이미지를 받아 그 위에 nginx설치를 하고 mysql 설치를하여 서버셋팅을 하였다. 하지만 매번 서버셋팅을 하는건 매우 귀찮고 번거로운 작업이다. 내 서버환경을 이미지로 직접 만들어 둔다면 매우 편할 것이다. 이번 포스팅에는 그 방법을 알아본다.

 

Dockerfile

 베이스가 되는 이미지에 추가적인 미들웨어나 어플리케이션을 설치하여 배포할 수 있게 해주는 파일이다. 파일명은 확장자 없이 Dockerfile이여야 하며 스크립트 처럼 한줄 한줄 위에서 부터 아래로 실행되는 구조이다. 명령어는 대문자로 사용한다.

 

 

 

Dockerfile 명령어

명령어 설명
FROM 생성할 이미지의 베이스가  이미지.
MAINTAINER 이미지를 생성한 개발자의 정보. 일반적으로 메일 정보를 작성
RUN 이미지 상의 리눅스 커맨드를 실행하도록 해주는 명령어
WORKDIR 명령어를 실행할 디렉토리 지정
EXPOSE 생성된 이미지와 호스트간 연결할 포트번호
CMD 도커 컨테이너가 시작할 때마다 실행할 명령어 설정

 오늘 사용할 명령어만 간단히 정리 하였다. 명령어는 위 이외에도 많으며 CMD와 ENTRYPOINT등 비슷하지만 조금씩 다른 헷갈리는 명령어가 있으므로 따로 정리하여 포스팅하기로 한다.

 

 

 

Dockerfile 작성

 vim Dockerfile 명령어로 에디터를 열어 아래와 같이 작성해 주었다.

우분투 이미지를 베이스로 사용하며 update와 nginx, nano를 설치 해주고 nginx실행까지 하는

이미지를 만드는 Dockerfile이다.

해당 도커파일로 만들어진 이미지로 컨테이너를 생성하면 호스트 pc에서 바로 nginx접속이 가능할 것이다.

 

 

 

이미지 생성

 작성한 Dockerfile을 이용해 이미지를 생성한다

$docker build --tag mydocker:0.1 ./

tag 옵션은 빌드할 이미지 이름을 지정하는 옵션이며 뒤에 '이름:버전'을 인자로 받는다.

뒤에 ./은 Dockerfile에 위치를 넣어준다.

Step이 다 실행되고 Successfully를 확인

 

docker images명령어로 확인해보니 이미지가 잘 생성됨을 알 수 있다.

 

 

 

 

만들어진 이미지 확인

이미지가 잘 만들어 졌는지 확인을 해보자. 이미지로 컨테이너 생성만 하면 nginx웹서버에 접속이 가능해야 한다.

 

컨테이너 생성.

 

확인.

 

nginx접속 확인. 

실제 서버 배포를 위해 디테일한 셋팅까지 해놓은 이미지를 만들어 두면 굉장히 유용할 것 같다.

 

 

 

 

Docker hub에 배포하기

 우선 도커계정이 필요하다. 없는 사람은 가입이 필요. 회원가입을 하면 나의 repository가 생긴다. 여기에 배포를 해보자.

 

가입 후 도커 커널에서 로그인

매우 간 - 단

 

$docker push [이미지명]

명령어로 간단히 배포를 할 수있다. 

단. 도커 로그인계정에 권한이 있는 레포지토리에만 push가 가능하다. 이미지명이 레포지토리 경로까지 포함되는거 같으므로 아래와 같이 이미지명을 xzxz1002/mydocker로 바꾸어 다시 만들었다.

내 계정으로 도커hub에 접속해보니 잘 push됨을 확인할 수 있다.

 

1. docker run -it --name [컨테이너이름] -p 80:80 debian:buster

buster는 데비안 버전이며 nginx기본포트가 80이므로 컨테이너 포트도 80으로 잡아주었다.

 

 

2. apt-get install nginx

nginx 설치 후 

service start를 해주자.

잘 실행 중이라면 웹브라우저에서 localhost로 접속하였을 때 기본 index페이지가 나와야 한다. 

 

 

3. apt-get install php7.3 php-mysql php-fpm php-cli php-mbstring php-curl php-gd

php와 추후에 사용할 각종 관련 패키지까지 한번에 설치

7.3버전을 받았다.

 

 

4. 환경 설정

nginx쪽과 php 둘다 환경설정을 해주어야 한다.

/etc/nginx와 /etc/php폴더안에 있는 환경설정 파일을 수정할 예정

 

 

4.1 nginx 환경설정

/etc/nginx/sites-available 경로에 default파일을 들어가서

아래와 같이 주석 되어진 부분을 주석만 풀어준다.

수정 전
수정 후

 

4.2 php 환경설정

/etc/php/7.3/cli 경로와 /etc/php/7.3/fpm 경로에 둘다 php.ini파일이 있는데 동일하게 수정하면 된다.

Off를 -> On으로
1을 -> 0으로

cli폴더 안에 php.ini도 위와 동일하게 수정.

 

 

5. nginx와 php 재시작

service nginx restart

service php7.3-fpm start

service php7.3-fpm restart

nginx는 이미 돌아가는 중이니 restart해주고 php는 처음이니 start후 다시 한번 더 재시작 해준다.

 

아까 주석을 풀어 설정해준 파일이 생성된걸 확인할 수 있다.

 

 

6. 파일 생성 후 확인

/etc/nginx/sites-available 경로에 default파일에 보면 root경로가 있다.

아래 41번줄 경로안에 php파일을 만들면 nginx웹서버로 php파일을 읽어 접속할 수 있다.

/var/www/html/test.php

test.php파일을 만들고

localhost/test.php로 접속하여 확인

hello world!

+ Recent posts