두 커밋 혹은 브랜치를 비교하여 서로 다른 파일의 목록을 출력

    git diff --name-status <commmit> <commit>
728x90
반응형

'VCS' 카테고리의 다른 글

[GIT]  (0) 2024.04.10
[VCS] 좋은 커밋 메세지 간단 작성법  (0) 2023.07.14
[GIT] remote branch 가져오기  (0) 2022.04.05
[TortoiseSVN] Disconnect 방법  (0) 2021.09.10
[GIT] 윈도우에 Git 설치하기  (0) 2020.01.26

로컬에서 원격의 브랜치를 찾을 수 있도록 갱신

    git remote update

브랜치 확인

    # 원격 저장소 확인
    git branch -r
    # 원격 + 로컬 저장소 확인
    git branch -a

원격 저장소의 브랜치 가져오기

    git checkout -t origin/브랜치명
728x90
반응형

'VCS' 카테고리의 다른 글

[GIT]  (0) 2024.04.10
[VCS] 좋은 커밋 메세지 간단 작성법  (0) 2023.07.14
[GIT] 브랜치, 커밋 간 다른 파일 목록 조회  (0) 2022.04.05
[TortoiseSVN] Disconnect 방법  (0) 2021.09.10
[GIT] 윈도우에 Git 설치하기  (0) 2020.01.26

윈도우 심볼릭 링크 생성

GUI에서 바로가기와 심볼릭 링크는 별 차이 없지만, 심볼릭 링크는 좀 더 실제 폴더처럼 다룰 수 있고, 네트워크 드라이브상의 경로로도 연결 가능하다.
CLI에서 바로가기는 확인 불가능 하지만, 심볼릭 링크는 확인 가능함.
사실 Windows OS 에서 심볼릭 링크를 사용 가능하다는 것도 처음 알았음.

문법

mklink /d 링크이름 실제위치

 

사용 예시

C:\Users\Administrator>mklink /d "C:\tmep" "\\{IP}\BATCH_DOWN"

C:\tmep <<===>> \\{IP}\BATCH_DOWN에 대한 기호화된 링크를 만들었습니다.

C:\Users\Administrator>

 

728x90
반응형

고용량의 텍스트 파일(25기가가 넘는 로그파일)을 보려니 일전에 올렸던 LTF 역시 답답해서 파일 분할, 검색 하기로 했다.

사실 결국 컴퓨터 사양이 좋으면, 로그를 꼭 필요한 것만 출력해서 용량차지가 적도록, 혹은 애초에 로그를 분석할 필요가 없는 코드를 짰다면 이런 일이 발생하지 않는데 아무튼 상황을 이지경으로 만든 사람은 누군지도 이 자리에 있지도 않으니 이런 잡 기술만 늘어가는 중이다.

PowerShell은 Linux 명령어랑은 많이 다르고 뭔가 맘에 안듦...

형식

$i=0; Get-Content 원본파일경로 + 파일명 -ReadCount 분할할_라인_수 | %{ $i++; $_ | Out-File 출력경로_파일명-$i.log; Write-Host $i }

 

$i=0; Get-Content .\WAS-29-20220325.log -ReadCount 1000 | %{ $i++; $_ | Out-File D:\cat_log\WAS-29\20220325-$i.log; Write-Host $i }
728x90
반응형
  sudo apt-get update || sudo apt-get full-upgrade

apt-get update : 현재 사용하는 패키지와 그 버젼에 대해 리스트 업데이트
apt-get full-upgrade : 해당 리스트의 패키지들을 최신 버젼으로 재설치
두 명령어 모두 관리자 권한으로 실행해야 하기 때문에 sudo를 붙여야 함


  sudo rpi-eeprom-update -a

라즈베리 파이의 rpi-eeprom 패키지 의 사용 가능한 업데이트 설치

728x90
반응형

'OS > Linux' 카테고리의 다른 글

[Linux] 라인 수 카운트 하기  (0) 2021.06.23
[Linux] There are stopped jobs  (0) 2021.05.28
[Linux] 인터넷 속도 확인  (0) 2021.05.28
[Linux] top  (0) 2021.05.06
[Linux] 리눅스 서버 60초 안에 상황 파악하기  (0) 2021.05.06
-- 락 걸린 테이블 확인
SELECT
    DO.OBJECT_NAME
  , DO.OWNER
  , DO.OBJECT_TYPE
  , DO.OWNER
  , VO.XIDUSN
  , VO.SESSION_ID
  , VO.LOCKED_MODE
FROM
    V$LOCKED_OBJECT VO
  , DBA_OBJECTS DO
WHERE VO.OBJECT_ID = DO.OBJECT_ID
;


-- 해당 테이블에 락이 걸렸는지 확인
SELECT
  A.SID
  , A.SERIAL#
  , B.TYPE
  , C.OBJECT_NAME
FROM
    V$SESSION A
  , V$LOCK B
  , DBA_OBJECTS C
WHERE A.SID = B.SID
  AND B.ID1 = C.OBJECT_ID
  AND B.TYPE='TM'
  AND C.OBJECT_NAME IN (${위 쿼리에서 가져온 OBJECT_NAME});


-- 락 발생 사용자, SQL, OBJECT 조회
SELECT
  DISTINCT X.SESSION_ID
  , A.SERIAL#
  , D.OBJECT_NAME
  , A.MACHINE
  , A.TERMINAL
  , A.PROGRAM
  , B.ADDRESS
  , B.PIECE
  , B.SQL_TEXT
FROM
    V$LOCKED_OBJECT X
  , V$SESSION A
  , V$SQLTEXT B
  , DBA_OBJECTS D
WHERE X.SESSION_ID = A.SID
  AND X.OBJECT_ID = D.OBJECT_ID
  AND A.SQL_ADDRESS = B.ADDRESS 
ORDER BY B.ADDRESS, B.PIECE;


-- 현재 접속자의 SQL 확인 
SELECT
    DISTINCT A.SID
  , A.SERIAL#
  , A.MACHINE
  , A.TERMINAL
  , A.PROGRAM
  , B.ADDRESS
  , B.PIECE
  , B.SQL_TEXT
FROM
    V$SESSION A
  , V$SQLTEXT B
WHERE A.SQL_ADDRESS = B.ADDRESS
ORDER BY A.SID, A.SERIAL#, B.ADDRESS, B.PIECE;


-- 락 세션 죽이기위한 sid 와 serial
SELECT
    A.SID
  , A.SERIAL#
  , A.SID || ', ' || A.SERIAL#
FROM
    V$SESSION A
  , V$LOCK B
  , DBA_OBJECTS C
WHERE A.SID = B.SID
  AND B.ID1 = C.OBJECT_ID
  AND B.TYPE = 'TM'
-- AND C.OBJECT_NAME IN ('${락 걸린 테이블 명}');


-- 해당 세선 kill
SELECT
    DISTINCT X.SESSION_ID
  , A.SERIAL#
  , D.OBJECT_NAME
  , A.MACHINE
  , A.TERMINAL
  , A.PROGRAM
  , A.LOGON_TIME
  , 'ALTER SYSTEM KILL SESSION '''||A.SID||', '||A.SERIAL#||''';'
FROM
    GV$LOCKED_OBJECT X
  , GV$SESSION A
  , DBA_OBJECTS D
WHERE X.SESSION_ID = A.SID
  AND X.OBJECT_ID = D.OBJECT_ID
ORDER BY LOGON_TIME
;


-- 최근 실행된 쿼리 찾기
SELECT 
    SQL_FULLTEXT
  , SQL_ID
  , PARSING_SCHEMA_NAME
  , SERVICE
  , MODULE
  , FIRST_LOAD_TIME
  , LAST_LOAD_TIME
FROM V$SQL
WHERE 1 = 1
  AND PARSING_SCHEMA_NAME = '${스키마 명}'
  AND SERVICE = '${서비스 명}'
ORDER BY LAST_LOAD_TIME DESC
;


-- 최근 실행된 쿼리에 바인팅 변수 찾기
SELECT
    NAME
  , POSITION
  , DATATYPE_STRING
  , VALUE_STRING 
FROM V$SQL_BIND_CAPTURE
WHERE 1=1
  AND SQL_ID = '${위 쿼리에서 가져온 SQL_ID}'
;

SELECT * FROM V$SQL;

SELECT 
  last_active_time
  ,parsing_schema_name
  ,sql_text 
FROM v$sqlarea
WHERE 
  parsing_schema_name <> 'SYS'
  AND parsing_schema_name <> 'SYSMAN'
  AND parsing_schema_name <> 'DBSNMP'
  AND parsing_schema_name <> 'MDSYS'
  AND parsing_schema_name <> 'EXFSYS'
ORDER BY 
  last_active_time DESC;

 

 

안타깝게도 어떤 쿼리가 락을 걸었는지는 알기 쉽지 않다.

특히나 Oracle DB S/W update를 주기적으로 하지 않는다면 유지보수가 쉽지 않다.

728x90
반응형

문자열이 정해진 날짜 포맷에 맞는지 확인해야하는 로직이 종종 필요하다

문자열이 날짜 형식인지 유효성 검사하기

    /**
     * 입력받은 문자열이 날짜형식으로 변환이 가능한지 확인한다.
     *
     * @param str2cmp    날짜형식 변환 가능여부 확인 대상
     * @param dateFormat 비교할 날짜 형식
     * @return
     */
    public static boolean isDateFormat(String str2cmp, String dateFormat) {
        try {
            //  검증할 날짜 포맷 설정
            SimpleDateFormat dateFormatParser = new SimpleDateFormat(dateFormat);
            //  parse()에 잘못된 값이 들어오면 Exception을 리턴하도록 setLenient(false) 설정
            dateFormatParser.setLenient(false);
            // 대상 인자 검증
            dateFormatParser.parse(str2cmp);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    public static boolean isDateFormat(String str2cmp) {
        return isDateFormat(str2cmp, "yyyyMMdd");
    }

setLenient( false );로 설정하면, 잘못된 형식의 데이터가 들어올 경우 Exception을 리턴하도록 설정함.

728x90
반응형

'Language > Java' 카테고리의 다른 글

[Java] 성능을 고려한 try-catch 문  (0) 2020.12.16
[Java] Map 반복문  (0) 2020.12.08
[JAVA] 구 버젼 설치  (0) 2020.11.02
[Java] ArrayList Sort  (0) 2020.05.22

SVN으로 버젼관리중인 소스를 이러저러한 이유로 git으로 로컬에서 버젼관리를 해야하는 상황이 되었다.

SVN에서 먼저 disconnect 해야 했는데 종종 필요한 작업일 것 같아서 기록한다.

Windows 10, TortoiseSVN 기준이다.

 

1. 파일 탐색기에서 해당 소스 경로로 이동한다.

2. 해당 소스 폴더를 우클릭한다.

3. TortoiseSVN -> Export를 선택한다.

4. Export 할 경로를 해당 소스의 경로와 동일하게 설정한다.

5. 경고창과 함께 Remove from version controll, Cancel 을 선택하게 나오는데 전자를 선택.

6. SVN을 통한 버젼관리가 삭제됨.

 

 

728x90
반응형

'VCS' 카테고리의 다른 글

[GIT]  (0) 2024.04.10
[VCS] 좋은 커밋 메세지 간단 작성법  (0) 2023.07.14
[GIT] 브랜치, 커밋 간 다른 파일 목록 조회  (0) 2022.04.05
[GIT] remote branch 가져오기  (0) 2022.04.05
[GIT] 윈도우에 Git 설치하기  (0) 2020.01.26

윈도우 10 IIS 및 클래식 ASP 설정

IIS 란

IIS는 Internet Information Service의 약자로 MS에서 만든 윈도우 OS 상에서 동작하는 웹서버임.
Windows에서 GUI 기반이라 설정도 편하고 Httpd에 비해서 기능이 많다고는 하는데, 사실 나는 Httpd가 더 편한 것 같음.

IIS 장점

  • Windows OS 상에서 설치가 쉬움,
  • GUI라서 편하다고 함(본인은 동의하지 않음)
  • 플러그인을 쉽게 설치 관리가 가능하다고 함.

IIS 단점

  • Windows OS 상에서만 사용 가능,
  • 구글링 시 정보의 질과 양이 Apache httpd보다 떨어짐.
  • 윈도우 버젼에 따라, IIS 버젼에 따라 디테일하게 다른점이 있어서 검색 결과가 나랑 맞지 않은 경우가 많음.

 


IIS 설치

  1. "Windows 기능 켜기/끄기" 찾아 실행
    • 제어판 > 프로그램 추가 제거 > "Windows 기능 켜기/끄기" 로 실행할 수도 있지만,
    • 키보드 ctrl과 alt 사이에 있는 "win" 단축키를 열어 "Windows 기능 켜기/끄기"를 검색해서 실행할 수 있다
  2. Windows 기능 켜기/끄기에서 "인터넷 정보 서비스"찾기
  3. 다음 선택된 항목들 모두 체크하기
  4. 활성화 완료 후 확인버튼 클릭시 설치가 시작 됨.
  5. "win" 단축키를 열어 "IIS"를 검색하여 실행시킬 수 있다면 설치가 완료된 것 임.
  6. IIS 실행
  7. 브라우져 주소창에 localhost로 접근해서 IIS 정상 작동 확인
  8. IIS에 설정된 사이트의 기본 경로는 C:\inetpub\wwwroot이다. 해당 경로의 폴더에 들어가면 다음과 같은 파일이 있음은 볼 수 있다
  9. 테스트 웹 사이트이므로 포트 변경이 가능하지만 방화벽 설정이 귀찮으므로 나는 80포트를 그대로 사용하기로 함.
    •  
  10. ASP 동작 테스트를 하기 위해 8의 기본 경로 C:\inetpub\wwwroot아래에 ex-01.asp파일을 만듦.
    • <!DOCTYPE html>
      <html lang="ko">
      <head>
        <title>First ASP</title>
      </head>
      <body>
        <%
          response.write("<h1>Hell The World!</h1>")
          response.write("<p>빌어먹을 레거시 ASP!</p>")
        %>
      </body>
      </html>
  11. ASP 동작 테스트로 브라우져에서 http://localhost/ex-01.asp로 접속.
    역시나 한글이 깨지긴 하지만 다행히 ASP가 정상 작동 한다는 것을 알 수 있음.
    •  

 


참고

728x90
반응형

'WEB > ASP' 카테고리의 다른 글

[ASP] AJAX  (0) 2021.08.30
[ASP] global.asa  (0) 2021.08.30
[ASP] #include  (0) 2021.08.27
[ASP] 어플리케이션  (0) 2021.08.27
[ASP] 세션  (0) 2021.08.27

ASP AJAX

AJAX는 전체 페이지를 다시 로드하지 않고 웹 페이지의 일부를 업데이트 하는 것임.

AJAX = Asynchronouse JavaScript ans XML의 약자로 동적인 웹페이지를 만드는 기술임.
AJAX는 인터넷 표준을 기반으로 다음을 조합하여 사용함.

  • XMLHttpRequest 객체 : 서버와 비동기적으로 데이터 교환
  • JavaScript/DOM : 정보 표시 / 상호작용
  • CSS
  • XML : 종종 데이터 전송 형식으로 사용됨.

나머지 기초적인 설명은 패스하도록 함.

 

Example 1

  <% @CODEPAGE="65001" language="vbscript" %>
  <% session.CodePage = "65001" %>
  <% Response.CharSet = "utf-8" %>
  <% Response.buffer=true %>
  <% Response.Expires = 0 %>
  <!DOCTYPE html>
  <html lang="ko">
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
      * { background-color : black; color : white; margin : 1em; }
    </style>
    <title>The XMLHttpRequest Object</title>
  </head>
  <body>
    <head>
      There are <%=application( "visitors" )%> on online now!
    </head>
    <h1>Start typing a name in the input field below</h1>
    <br/><hr/><br/>

    <form action="">
      <label for="txt">INPUT</label>
      <input
        type="text" name="txt" id="txt"
        onkeyup="showHint(this.value)"
      />
    </form>

    <p>Suggestions : <span id="hint"></span></p>

    <script>
      const showHint = ( str ) => {
        let xhttp;

        if( str.length == 0 ) {
          document.getElementById( 'hint' ).innerHTML = '';
          return;
        }

        xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function () {
          if( this.readyState == 4 && this.status == 200 ) {
            document.getElementById( 'hint' ).innerHTML = this.responseText;
          }
        };

        xhttp.open( 'GET', '01-getHint.asp?q=' + str, true);
        xhttp.send();
      }
    </script>

  </body>
  </html>
  <% @CODEPAGE="65001" language="vbscript" %>
  <% Response.buffer = true %>
  <%
    response.expires = -1

    ' array 선언
    dim arr(30)
    arr(1) = "Anna"
    arr(2) = "Brittany"
    arr(3) = "Dianna"
    arr(4) = "Eva"
    arr(5) = "Fiona"
    arr(6) = "Gunda"
    arr(7) = "Hege"
    arr(8) = "Inga"
    arr(9) = "Johanna"
    arr(10) = "Kitty"
    arr(11) = "Linda"
    arr(12) = "Nina"
    arr(13) = "Ophelia"
    arr(14) = "Petunia"
    arr(15) = "Amanda"
    arr(16) = "Raquel"
    arr(17) = "Cindy"
    arr(18) = "Doris"
    arr(19) = "Eve"
    arr(20) = "Evita"
    arr(21) = "Sunniva"
    arr(22) = "Tove"
    arr(23) = "Unni"
    arr(24) = "Violet"
    arr(25) = "Liza"
    arr(26) = "Elizabeth"
    arr(27) = "Ellen"
    arr(28) = "Wenche"
    arr(29) = "Vicky"
    arr(30) = "cinderella"


    ' QueryString에서 q의 값 가져오기
    q = ucase( request.querystring( "q" ) )

    if len( q ) > 0 then
      hint = ""
      for i = 0 to 30
        if q = ucase( mid( arr( i ), 1, len( q ) ) ) then
          if hint = "" then
            hint = arr( i )
          else
            hint = hint & ", " & arr( i )
          end if
        end if
      next
    end if

    ' hint가 없다면 "No Suggestion"
    ' 있다면 hint
    if hint = "" then 
      response.write( "No Suggestion" )
    else
      response.write( hint )
    end if

  %>

 

 

Example 2 : AJAX 데이터 베이스 연결

DB 연결은 당장 여건이 안되므로 스킵 해둔다.

 


728x90
반응형

'WEB > ASP' 카테고리의 다른 글

[ASP IIS] 윈도우 10 IIS 및 클래식 ASP 설정  (0) 2021.09.06
[ASP] global.asa  (0) 2021.08.30
[ASP] #include  (0) 2021.08.27
[ASP] 어플리케이션  (0) 2021.08.27
[ASP] 세션  (0) 2021.08.27

+ Recent posts