반응형

웹 관련 개발을 하다보면 HTML 코드를 변환 해야하는 경우가 종종 생깁니다.

보통 타 시스템과의 연동시에 이런 경우가 많이 발생합니다.


여러 변환중에 기본적인 이미지 태그의 가로 세로 설정을 바꿔치기하는 소스를 공유 합니다.


기본적으로 정규식을 이용해서 속성 width, height / 스타일 width, height 를 모두 지워 버리고 style="width:100%" 를 넣어주는 소스 입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static String htmlImgWidth100Percent(String source) {
    Pattern pattern = Pattern.compile("<img[^>]+>");
    Matcher matcher = pattern.matcher(source);
    while (matcher.find()) {
      String imgTag = matcher.group(0);
      String newImgTag = imgTag//
          .replaceAll("width\\s*=\\s*[^\\s>]+""")//
          .replaceAll("width\\s*:\\s*[^'\"\\s]+""")//
          .replaceAll("height\\s*=\\s*[^\\s>]+""")//
          .replaceAll("height\\s*:\\s*[^'\"\\s]+""");
      if (newImgTag.matches(".*style\\s*=\\s*['\"].*")) {
        newImgTag = newImgTag.replaceAll("(style\\s*=\\s*['\"])""$1width:100%;");
      } else {
        newImgTag = newImgTag.replaceAll("<img""<img style='width:100%;' ");
      }
      source = source.replace(imgTag, newImgTag);
    }
    return source;
  }




자세한 궁금점은 댓글 달아 주시면 답변 드립니다.

반응형
반응형

- 여러 버전을 동시에 관리하기 위한 방법 입니다.


- Window OS를 예를 들어보겠습니다.

윈도우 버전 10, 8, 7 등이 있습니다.
윈도우 10이 출시 된다고 해서 윈도우 7의 패치가 바로 중지되지 않습니다.
윈도우 10과 윈도우 7은 별개로 개발 및 유지보수가 진행되고 있다는 뜻 입니다.
이런 경우 브랜치를 이용해 윈도우 10 브랜치, 윈도우 7 브랜치로 나누어서 소스를 관리하면 됩니다.

- Git에서는 일반적으로 브랜치 이름에 따라서 몇 가지 분류를 하고 있습니다.

제품 브랜치 : master
현재 서비스 중인 제품의 브랜치 입니다.
상용서버 배포에 이용됩니다.
개발 브랜치에서 모두 검증 후 제품 브랜치로 병합하게 됩니다.
개발 브랜치 : develop
개발진행하고 있는 브랜치 입니다.
개발서버 배포에 이용됩니다.
기능 브랜치 접두어 : feature/
규모가 있는 기능이나 모듈단위를 개발할 때 이용 됩니다.
A업무를 하던 중 급하게 B 업무를 먼저 끝내야 할 때 마무리 되지 않은 A업무의 코드를 커밋할 경우 문제가 발생합니다.
하지만 이렇게 자신만의 기능 브랜치에서 커밋할 경우 문제가 되지 않고, 부드럽게 업무 전환을 할 수 있습니다.
또한, 다른 성격의 업무들이 섞여서 커밋되는 것을 방지할 수도 있습니다.
기능 개발 완료 후 개발 브랜치로 병합하게 됩니다.
릴리즈 브랜치 접두어 :  release/
위의 윈도우와 비슷하게 릴리즈 버전별로 관리할 수 있습니다.
핫픽스 브랜치 접두어 : hotfix/

보통 제품 브랜치에서 파생되는 브랜치로 개발 브랜치에 적용되지 않고 긴급하게 제품브랜치에서 바로 기능 수정될 때 이용 됩니다.


반응형
반응형

요즘쓰는 에디터가 서브라임 텍스트 입니다. 울트라 에디터, 에디트 플러스, 아크로 에디터 등등 여러가지가 있지만 서브라임 텍스트가 뭔가 있어보이고 개발자 스러운 점들이 많이 있어서 배워가며 쓰고 있는 중 입니다.


그 중에서 단연 돋보이는 기능 중 하나가 바로 플러그인 입니다.


아주 많은 플러그인을 제공하고 있고 또 검색해서 바로바로 설치할 수 있는 편의성도 갖추고 있습니다.


그중에서 처음으로 필요해의해 사용하게 된 플러그인이 Transcrypt(https://github.com/eddiejessup/Transcrypt플러그인 입니다.


작성한 내용을 암호화해서 저장하고 다시 복호화해서 볼수 있게 해주는 플러그인 입니다. 


중요한 여러 정보들(계정 및 암호, 계좌번호 등등)을 저장해 놓고 사용하는 경우가 있는데 그냥 저장해놓기에는 뭔가 찝찝할 때 이 플러그인을 이용해 암호화 시켜서 저장해 두곤 합니다.


그럼, 설치방법을 살펴 보겠습니다.


1. 서브라임 텍스트를 다운로드 및 설치한다.

 - URL : https://www.sublimetext.com/


2. 실행한다.


3. Ctrl + Shift + P 를 누른다.


4. install package 라고 친다.


5. Package Control : Install Package 를 선택한다.


6. Transcrypt 라고 친다.


7. 플러그인을 설치한다.


8. 내용을 작성하고 Ctrl + k + e 를 누른다.


9. 비밀번호를 넣는다. -> 암호화 됩니다.


10. 저장하고 닫는다.


11. 다시 그 파일을 열어 Ctrl + k + d 를 누른다.


12. 비밀번호를 넣는다. -> 복호화 됩니다.


13. 내용을 정삭적으로 볼 수 있다.

반응형
반응형

개발을 하다 보면 완전한 삽질에 의한 전혀 쓸모 없는 코드가 나올 때가 종종 있습니다.

이런 경우 싹 날려버리고 싶습니다. 소스.


이럴 때 소스트리를 이용해 Git을 사용하고 있다면, 아래와 같은 방법으로 마지막으로 커밋된 버전으로 소스를 원복할 수 있습니다.

svn의 revert 같은 기능입니다.



스테이지에 올라가지 않은 파일을 선택 후

마우스 오른쪽 버튼을 누르면 메뉴가 나탑니다.

메뉴에서 “폐기(Discard)” 를 클릭하면 작업하던 내용이 커밋된 가장 최신 이력으로 변경 됩니다.



반응형
반응형

Git을 이용해 여러사람과 같이 작업을 하다보면 Commit 하는 순간 오류가 발생하는 경우가 종종 있습니다.

오류의 종류는 여러가지가 있겠지만, 다른 사람이 동일한 소스를 이미 수정해서 Commit 해버린 경우에 충돌이 발생해서 오류가 발생하게 됩니다.


이럴 때는 수동 혹은 좋은 툴을 이용해 자동으로 병합(merge) 후 다시 Commit 과 Push를 해야 합니다.


그 과정을 한번 살펴 보도록 하겠습니다.




1. 하나의 원본 소스를 'GONI' 사용자와 '정현우' 사용자가 각각 내려 받습니다.

2. '정현우' 사용자가 먼저 소스를 수정 후 커밋과 푸시를 합니다.



3. 이제 GONI 사용자가 커밋과 푸시를 하려고 합니다.




정현우 사용자가 이미 커밋 한 파일을 뒤늦게 GONI 사용자가 커밋 하려고 한 경우 충돌 발생.




충돌 후 경고 창 닫은 후 화면입니다.


1. Local Repository 커밋은 성공 했지만, 원격 Repository 푸시는 실패 했으니 푸시를 다시 시도해 보라는 내용 입니다.

 2. master 브랜치에 “풀” 할 커밋이력 1개, “푸시” 할 커밋이력 1개 있다는 뜻 입니다.

- “풀” 할 커밋이력은 정현우 사용자가 커밋한 이력.

- “푸시” 할 커밋이력은 GONI 사용자가 커밋한 이력.

 3. 정현우 사용자가 이미 커밋한 이력 입니다.

- 충돌이 발생해서 원격 repository 브랜치(붉은색 그래프)가 분기 된 상태로 보입니다.(origin/master)

 4. 현재 사용자인 GONI 사용자가 커밋한 이력 입니다. 원격 repository의 master 브랜치에는 합류하지 못하고 현재 Local repository 의 master 브랜치에만(푸른색 그래프) 있는 상태 입니다. 






























반응형
반응형

리눅스 이용시 다른 계정으로 명령어를 실행해야하는 경우가 빈번하게 있습니다.

 

이런겨우 su, ssh, sudo 등의 방법이 있는데 저는 sudo를 선호합니다. 이유는 비밀번호를 별도로 사용하지 않을 수 있도록 설정이 가능하기 때문입니다.

 

sudo에 여러가지 기능이 있지만, 일단 user1이 user2 의 권한으로 /abc/def 의 rus.sh 명령어를 실행하는 방법을 알아 보도록 하겠습니다.

 

 

1. root 계정으로 visudo 명령어를 실행하면 sudo 관련 설정이 나옵니다. 여기서 아래 구문을 추가하면 원하는 결과를 얻을 수 있습니다.

 

1
user1    ALL=(user2) NOPASSWD: /abc/def/run.sh

 

 

2. visudo에서 :wq 로 저장하고 닫습니다.

 

3. user1 계정으로 로그인 후 아래 명령어를 실행하면 user2 의 권한으로 /abc/def 의 run.sh 명령어를 실행하게 됩니다.

 

1
sudo -u user2 /abc/def/run.sh

 

------ 아래는 sudo 설정에 관한 참고자료 입니다.

 

 

접근권한 제어

 

1
<user_alias>     <host_alias> = (<runas_alias><cmnd_alias>

 

 

User Alias

 

1
2
3
User_Alias    <name> =  < %LDAP GROUP> and/or < %SYSTEM GROUP > and/or < USER >
#예시
User_Alias     ADMIN =  %admin, %root, andrina
 

 

Host Alias

 

1
2
3
Host_Alias    <name> = < MACHINE or *Pattern*>
#예시
Host_Alias SERVERS = 192.168.1.1, server*

 

 

Runas Alias

 

1
2
3
Runas_Alias    <name> = < %GROUP>
#예시
MAILERS = %mailman, %postfix, cyrus

 

Cmnd Alias

 

1
2
3
4
5
Cmnd_Alias     <name> = <full path to command/script>
#
Cmnd_Alias MAIL = /usr/bin/cyrus/tools/amsmailtool, /usr/bin/cyrus/tools/mkimap, \
            /usr/sbin/postfix-watch, /usr/sbin/postfix, \
            /usr/bin/cyrus/bin/ctl_cyrusdb
 

 

** sudo 이용시 환경변수가 달라서 문제가 발생하는 경우에 아래 내용을 참고하세요.

 

1
2
3
4
#PATH 환경변수 유지
Defaults env_keep=PATH
#PATH 특적사용자 환경변수 유지
Defaults:사용자 env_keep=PATH

 

반응형
반응형

java 배열이나 목록을 랜덤하게 섞고 싶을 때 Collections.shuffle 함수를 이용하시면 됩니다.


1
Collections.shuffle(List);



반응형
반응형

리눅스에서 사용자가 속한 그룹을 확인하려면 다음과 같은 명령어를 이용합니다.


groups : 현재 사용자가 속한 그룹 확인.


groups [사용자 아이디] : [사용자 아이디]가 속한 그룹 확인.


반응형
반응형

스프링부트 기본으로 logback.xml 사용시에 /tmp/spring.log가 쌓이게 됩니다.


아래 설정에 포함되어 있을 것으로 추측을 합니다.


1
<include resource="org/springframework/boot/logging/logback/base.xml" />




그런데 리눅스 서버에 배포를 하면 /tmp가 권한이 막혀있거나 혹은 기본 설정된 프로젝트가 2개가 배포된다면 /tmp/spring.log를 접근하지 못하는 상황이 발생 됩니다.


그래서 spring.log 가 쌓이는 위치를 바꾸려면 LOG_TEMP 프라퍼티를 지정해 주면 됩니다.


아래와 같이 사용하면 됩니다.


1
2
<property name="LOG_TEMP" value="내맘대로" />
<include resource="org/springframework/boot/logging/logback/base.xml" />



반응형
반응형

SQL Developer 새 접속하려는데 IO오류 17002가 발생하는 경우 오라클 리스너를 확인해 봅니다.


Oracle Error 17002 "Io Exception: The Network Adapter could not establish the connection"


1. 아래 명령어를 통해 리스너 상태를 확인해 봅니다.


1
lsnrctl status



리스너가 죽어있는 경우 아래 처럼 메시지가 나옵니다.


1
2
3
4
5
6
7
8
9
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 21-AUG-2017 14:10:08
 
Copyright (c) 19912013, Oracle.  All rights reserved.
 
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused




2. 확인 사살 겸 한번 리스너를 정지합니다.


1
lsnrctl stop



3. 리스너를 다시 시작합니다.


1
lsnrctl start



반응형

+ Recent posts