php 업그레이드 작업 중 해결이 너무 안된 경우가 있어서 기록

 

php7버전 에서 php8 버전으로 업그레이드 해야할일이 있어서 테스트서버에 세팅하던 중

 

php에서 db를 접속하려면 permission denied 가 발생

 

php서버와 db서버는 따로 있었고 db는 기존 다른 버전의 php로 이상없이 접속이 되던 상황이었음

 

php와  apache를 세팅하고 php설정 등 오류가 발생한 상황들을 해결해 가던 중 db접속시 permission denied가 발생

 

해결하려고 시도한 방법

 

1. db에 해당 서버로 접근하는 계정 생성 후 권한 부여

 - '계정'@'%' 로 생성해보았지만 해결 안됨

 - 이미 같은 대역폭에서 해당 db로 접속하던 상황이었기 때문에 권한 이상없는거 확인

 

2. 방화벽 확인

 - curl 로 접속 확인

 - php서버에 mysql 설치하여 직접 접속시도 했을시 접속됨

 

3. ssl/tls

 - php 8.3 버전에는 ssl 접속 제한하는 경우가 있다고 하여 해당 기능 비활성화

 

4. selinux 비활성화

 - selinux에서 접근 제한 하는 경우가 있다고 하여 php서버의 selinux 비활성화

 

5. php.ini 설정

 - php서버에서 db서버로 직접 접근은 가능한데 php에서만 안되기에 php 설정문제인 것으로 생각되어 php.ini 설정 모두 확인

 

검색해서 나온 사례와 생각나는 부분 모두 테스트 해보았지만 해결안됨

 

그러던 중 한 검색결과를 보고 시도 해보니 바로 해걸...-_-

 

참고 : https://veneas.tistory.com/entry/SELinux-Php-mysqlconnect-Permission-denied-SELinux%EC%B0%A8%EB%8B%A8-%EB%AC%B8%EC%A0%9C

 

[SELinux] Php mysql_connect(): Permission denied (SELinux차단 문제)

목차 1. 문제 1.1. 현상 - Php가 설치된 서버에서 다른 DB서버로의 원격 접속할 경우 Permission denied가 발생하는 현상 발생 mysql_connect(): Permission denied 1.2. 원인 - 에러 원인은 SELinux(Security-Enhanced Linux)가

veneas.tistory.com

 

SELinux를 비활성화 했다고 생각 했는데 apache 서버의 설정이 활성화 된 상태여서 안됬던것

 

1. getsebool -a | grep httpd 조회

 

이중 httpd_can_network_connect가 off 인 것을 확인

 

setsebool -P httpd_can_network_connect on 명령으로 on으로 변경

 

다시 확인

 

 

 

on 으로 변경됨 확인

 

테스트시 문제 해결

 

SELinux 설정이지만 httpd 관련된 설정이기에 apache 카테고리로 설정

 

쉽지않네...

 

 

jmeter 를 사용해서 로그인 후 접근 가능한 사이트의 성능 테스트를 실행하고자 한다.

 

현재 테스트 한 방법은 HTTP 쿠키 관리자를 통해 사이트에서 로그인된 쿠키를 사용하여

 

로그인 된 상태로 테스트 하는 방법이다.

 

추후 다른 시나리오 등 기능을 활용하는 방법을 알아봐야겠다.

 

- jmeter 다운로드

 

https://jmeter.apache.org/download_jmeter.cgi

 

Apache JMeter - Download Apache JMeter

Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava

jmeter.apache.org

 

해당 사이트에서 jmeter 다운로드

 

다운로드 후 압축해제 한뒤 실행

-- jmeter폴더/bin/ApacheJMeter.jar

 

 

 

- 테스트 실행

- 프로젝트 명칭 수정

- 쓰레드 그룹 추가

 

- 쓰레드 그룹 설정

 ㄴ 쓰레드들의수(사용자 수) : 테스트할 가상의 사용자 수

 ㄴ Ramp-up 시간 : 쓰레드 수들을 얼마 시간 동안 테스트 할지에 대한 설정

   = 쓰레드 수에 100, Ramp-up에 10을 입력하면 1초에 10번씩 요청이 전송

 ㄴ 루프 카운트 : 사용자들이 몇번 요청할지 설정

   = 만약 쓰레드100, 루프 카운트 10이면, 100명이 10번씩 요청해서 총 1000번의 요청이 전송

 

 

 

- 부하 테스트시 로그인이 필요한 경우 

 ㄴ HTTP 쿠키 관리자 추가

 


- 테스트할 사이트의 쿠키 정보 가져오기

 ㄴ f12 Dev Tools > NetWork > Cookies 탭에서 Name, Value, Domain, Path 정보 가져오기

 

 

- HTTP 쿠키 관리자 설정

 ㄴ 사용자 정의 쿠키들 [추가]

 ㄴ 위에서 가져온 정보 입력

 

- HTTP 요청 추가

 

- HTTP 요청 설정

 ㄴ 이름 : 요청의 이름 설정

 ㄴ 프로토콜 : http, https

 ㄴ 서버 이름 또는 IP : 사이트 URL

 ㄴ 포트 번호 : 사이트 포트 번호 (보통 80 or 443)

 ㄴ 경로 : 사이트 접속 주소 (사이트URL 제외한 나머지 주소)

 

 

- 결과 리스너 참고 화면

- 메뉴에 추가 > 리스너 하위에 여러 리스너가 결과들을 정리하여 준다.

- 아래에 몇개의 리스너 화면들을 정리했으니 필요한 리스너를 추가해서 테스트 하자.

 

 -- 결과들의 트리 보기

 

 

-- 요약 보고서

 

-- 총합 보고서

 

-- 응답시간 그래프

 

-- 결과들을 테이블로 보기

 

--결과 그래프

 

-- 총합그래프

 

 

 

 

mybatis 사용하여 변수를 넘겨 배열로 처리하는 방법

 

변수 tmp 에 배열 데이터 a,b,c 를 넘기는 경우 

 

쿼리 조회시 where절에 In 으로 사용하고 싶으면 아래처럼 사용한다.

 

AND TMP IN
<foreach item="cd" index="index" collection="tmp.split(',')" open="(" separator="," close=")">#{cd}</foreach>

 

collection : 불러오는 인자값을 split 하여 배열로 변환

item : 전달받은 인자 값을 alias로 사용

open : 시작될때 삽입할 문자열

close : 종료될때 삽입할 문자열

separator : 반복되는 사이에 삽입할 문자열

index : 반복되는 구문 번호 

 

사용시 실행되는 쿼리

AND TMP IN ('a','b','c')

새 프로젝트 세팅할때 mave update 가 제대로 안되고

 

Failed to execute goal on project com: Could not resolve dependencies for project

 

등등 pom.xml 파일에 엑스 표시 뜨면서 update Project 랑 mave install이랑 다 안될때

 

http://www.egovframe.go.kr/maven/

불러오는 중입니다...

이거를

 

http://maven.egovframe.kr:8080/maven/

불러오는 중입니다...

 

이거로 바꾸면 된다.

 

jar 파일을 받아오는데 방화벽 등등으로 막히는 경우가 있다고 함

개인정보 마스킹 처리 예제

 

email 이나 이름 나머지를 * 로 마스킹 처리 할때 사용

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private static final String EMAIL_PATTERN = "([\\w.])(?:[\\w.]*)(@.*)";
private static final String LASTNAME_PATTERN = "(?<=.{0}).";
private static final String LAST_6_CHAR_PATTERN = "(.{6}$)";
 
@Test
public void maskingTest() {
    // 이름 형식
    String firstName = "Steve";
    String lastName = "Jobs";
 
    // 이메일 형식
    String email = "test@test.com";
 
    // 주민번호 형식
    String certNum = "123456-1234567";
 
    // 여권번호 형식
    String passPortNum = "M12345678";
 
    System.out.println("이름 : " + firstName + " " + lastName.replaceAll(LASTNAME_PATTERN , "*"));
    System.out.println("이메일 : " + email.replaceAll(EMAIL_PATTERN, "$1****$2"));
    System.out.println("주민번호 : " + certNum.replaceAll(LAST_6_CHAR_PATTERN, "******"));
    System.out.println("여권번호 : " + passPortNum.replaceAll(LAST_6_CHAR_PATTERN, "******"));

 

 

출처 ] https://stufeel.tistory.com/30

 

자바에서 몇 가지 유용한 정규식 패턴(정규식을 이용한 개인정보 마스킹)

private static final String EMAIL_PATTERN = "([\\w.])(?:[\\w.]*)(@.*)"; private static final String LASTNAME_PATTERN = "(?<=.{0})."; private static final String LAST_6_CHAR_PATTERN = "(.{6}$)"; @Tes..

stufeel.tistory.com

 

'web > java' 카테고리의 다른 글

java timestamp  (0) 2020.04.01
java jsonObject 처리  (0) 2020.04.01
java 비동기 처리 하기  (0) 2020.04.01
엑셀 다운로드시 로딩바 보이게  (0) 2020.03.13

1. 컬럼 추가

ALTER TABLE 테이블명 ADD 추가칼럼명 데이터형(크기) 속성

 

EX) ALTER TABLE TEST ADD REGI_YN CHAR(1) NOT NULL DEFAULT 'N';

 

2. 칼럼 변경

ALTER TABLE 테이블명 ALTER COLUMN 칼럼명 데이터형(크기)

'DB > mssql' 카테고리의 다른 글

MS-SQL 상위 몇건만 들고 오기  (0) 2020.04.01

한글 기안기 데이터를 한글 파일로 저장해야 해서 확인

 

한글 기안기에서 데이터 저장시 SetTextFile 호출 한다

 

호출시 옵션으로 format, option 을 설정하는데 format 에는 아래의 형식이 있다

 

format

설명

비고

HWP

HWP native format

BASE64 로 인코딩되어 있어야 한다. 저장된 내용을 다른 곳에서 보여줄 필요가 없다면 이 포맷을 사용하기를 권장합니다.ver:0x0505010B

HWPML2X

HWP 형식과 호환

문서의 모든 정보를 유지

HTML

인터넷 문서 HTML 형식

글 고유의 서식은 손실된다.

UNICODE

유니코드 텍스트

서식정보가 없는 텍스트만 저장

TEXT

일반 텍스트

유니코드에만 있는 정보(한자, 고어, 특수문자 등)는 모두 손실된다.

그중 HWPML2X 의 경우 모든 정보를 유지 하기 때문에 해당 데이터를 그대로 .hwp 파일로 저장하게 되면 한글파일이 그대로 추출 된다.

 

하지만 이전 프로젝트에서는 HWP 형식으로 저장했기 때문에 BASE64 디코딩 하여 파일 저장하도록 진행하였다

 

디코딩할때 java.util 에 있는 base64 로 디코딩 했을때는 Illegal base64 character d 에러 가 발생

 

검색 하다가 apache 가 어쩌구 저쩌구 하는 글을 발견하고 혹시나 싶어서

 

apache base64 로 디코딩 했을시 디코딩 성공!

 

그런데 디코딩된 byte 배열을 출력 해보려니까 계속 글자가 깨짐..

 

변환할때 뭘 잘못했나 싶어서 계속 삽질중 걍 파일을 만들어 보자 싶어서

 

 fileinputstream 으로 byte 배열을 그대로 만들어보니 성공.!

 

진작 해볼껄..

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
String data = EgovStringUtil.nullConvert(map.get("docCnts")); //기안기 데이터 가져오기
String docTitle = EgovStringUtil.nullConvert(map.get("docTitle")); //제목
byte[] decodeData = Base64.decode(data.getBytes()); //디코딩
 
String path = "D:/dev/test"; //첨부파일 경로
String fileName = cnt + ". " + docTitle + ".hwp"; //파일명이 중복될수 있어서 앞에 숫자. 붙임
 
File saveFolder = new File(path); //파일 생성
//경로가 없을경우 경로 생성
}    
                
String fullPath = path + "/" + fileName;
 
//파일 생성
File lOutFile = new File(fullPath);
FileOutputStream lFileOutputStream = new FileOutputStream(lOutFile);
lFileOutputStream.close();
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

 

function checkPassword(form){
var str = form.value;
    if(str.match(/^.*(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!,@,#,$,%,^]).*$/) == null){
     alert("비밀번호는 영문대소문자, 숫자, 특수문자의 조합으로 입력해주세요");
     form.focus();
     return false;
    }
    return true;
}

 

//아이디 검사
function idCheckStr(form){
var id   = form.value;
var isID = /^[a-zA-Z0-9_]{6,20}$/;
     if (!isID.test(id)) {
alert("아이디는 6자 ~ 20자, 영어, 숫자만 사용가능합니다.");
form.focus();
        return false;
     }
 return true;
}

'web > jsp' 카테고리의 다른 글

금액 처리  (0) 2020.04.01

+ Recent posts