728x90

쉘에서 로그와 같은 텍스트 파일을 다룰때 정규표현식을 자주 사용하게 됩니다. 정규표현식을 지원하는 쉘의 도구들은 여러가지가 있는데요 오늘은 awk 에서 정규표현식을 사용하는 방법을 간단하게 살펴보겠습니다. 

 

// 일반적인 awk 의 사용 : 첫번째 컬럼 값이 server 인 경우 행($0)을 그대로 출력
$ cat my.log | awk '$1="server" { print $0 }'

// 정규표현식을 만족하는 행 찾기 (Positive Match) : /beta/
$ cat my.log | awk '/\/beta\// { print $0 }'

// 정규표현식을 만족하지 않는 행 찾기 (Negative Match) : /beta/ 가 아닌 경우
$ cat my.log | awk '!/\/beta\// { print $0 }'

 

일반적으로 awk 는 독립적으로 사용되지 않고 cat 과 같은 다른 명령과 파이프(|)로 연결해서 문자열을 다룹니다. 위 코드의 첫번째 예시는 awk 가 델리미터 단위로 행을 분할해주는 기능을 이용하여 첫번째 컬럼($1)의 값이 만족하는 경우 해당 행을 출력하는 명령입니다. 

 

정규표현식을 이용하려면 슬래시로 정규 표현식 문자열을 넣어주면 됩니다. 가령 URL 에 /beta/ 라는 path 가 존재할 수 있고, 해당 항목이 있는 경우만 출력한다면 \/beta\/ 로 표현식을 만들면 됩니다. 두번째 예시를 참고하시면 되겠습니다.

 

정규표현식을 만족하지 않는 Negative Match 로 자료를 찾아야 하는 경우도 있습니다. 이때는 정규 표현식을 감싸고 있는 슬래시의 앞에 느낌표(!)를 붙여주기만 하면 됩니다. 

728x90
728x90

좋은 Practice 는 아니겠지만, 간단한 DB 조회를 위해서 mysql 이 제공하는 CLI 를 이용하는 경우가 다들 있으실 겁니다.

데이터를 조회 및 확인만 화면으로 한다면 특별히 문제 없겠지만 가끔을 엑셀 등의 도구로 데이터를 옮겨야 할 경우가 생기곤 합니다.

mysql CLI 의 기본 쿼리 결과는 결과를 테이블, 레이아웃, 혹은 박싱이라 불리우는 형태로 표현해 줍니다.

보기에는 좋지만 다른 도구에 붙여 넣기에는 영~ 불편한게 사실이죠


보기는 좋지만...


보기 좋은 떡이 먹기 좋다는 옛말이 있지만 이 박스를 좀 없애고 싶은 분들도 많으실겁니다.

박스를 없애려면 mysql CLI 구동시 몇 가지 옵션을 추가해 주셔야 합니다. 


$ mysql -u user_name_place -p -s -r

Enter password:

mysql>

mysql> use sys

mysql> select * from version;

sys_version     mysql_version

2.0.0   8.0.12


-s 옵션을 주면 일단 박스가 사라지긴 합니다. 

하지만 출력되는 데이터에 escape 처리를 하게 되니, 완벽한 RAW 데이터 추출을 위해서는

-s 옵션과 함께 -r 옵션을 주는 것이 좋습니다. 






728x90
728x90
  • 타겟 디바이스가 폰과 태블릿이라면 서로 다른 화면 구성이 필요함
  • 큰 화면에서 쓸 액티비티가 작은 화면에서 쓸 액티비티와 중복되는 코드가 발생하면?
  • 프래그먼트
    • 여러 액티비티에서 재활용할 수 있는 모듈화 코드 컴포넌트
    • 레이아웃을 같는다
    • 윈도 프로그램에서의 커스텀 컨트롤 느낌
  • 태블릿을 위해서 쓰기보다는 코드 재활용을 위한 커스텀 컨트롤로 보는게 좋을 듯
  • 안드로이드 공식 문서 : https://developer.android.com/guide/components/fragments?hl=ko

출처 : 안드로이드 fragment 공식문서




728x90
728x90

mysql 8.x 이전 버전에서는 발생하는 이슈인지 조사를 해보진 못했습니다만

최소한 mysql 8.x 버전에서는 이 문제가 발생할 수 있는 상태입니다. 


제 경우 Grafana 에서 mysql 데이터 소스를 만들던 도중 에러를 만났고

소개해 드리는 링크에서 나온 것처럼 Go 로 만든 배치 스크립트에서는

동일한 이슈가 생기지 않았습니다.


// 에러메세지

this authentication plugin is not supported


문제는 강화된 보안 체계로 인해 외부 어플리케이션에서 사용되는 mysql 관련 모듈이

mysql 8.x 의 기본 값으로 설정된 패스워드 보안 알고리즘을 맞추지 못해서 발생하는 문제로 보입니다. 


해결 방법은 여러가지가 있지만 mysql 인스턴스 전체에 영향을 주지 않는 방법으로

사용자 단위로 패스워드 보안 정책을 변경하는 것이 가장 좋아 보입니다.


// mysql 8.x 의 기본 사용자 비밀번호 정책

caching_sha2_password


// 이슈 해결을 위한 비밀번호 정책

mysql_native_password



사용자 단위로 이를 적용하기 위해서는 alter user 를 사용하면 됩니다.

에러메세지를 만난 사용자를 대상으로 명령 수행후 에러가 사라진 것을 확인할 수 있으실 겁니다.


mysql> alter user 대상유저@'%' identified with mysql_native_password by '새비밀번호';


# 몇 가지 다른 대안까지 소개되고 있는 글 : https://github.com/go-sql-driver/mysql/issues/785


728x90

+ Recent posts