전체 글

반응형

[Linux] tail 멈춤 현상 일어날 때 해결 방법에 대해서 소개하려고 합니다. 

tail 멈추는 원인은 로그 파일이 커져서 로그 출력하는 파일이 변경되기 때문에 멈추는 경우가 있습니다. 이 경우 다른 명령어로 사용할 수 있습니다. 

tail -F

tail -f 명령어와 비슷하지만 추가 기능이 있습니다. 이는 "follow and retry"를 의미합니다. 이 옵션은 파일이 이름이 변경되거나(예: 로그 로테이션) 파일이 현재 존재하지 않는 경우에도 계속해서 열려고 시도합니다. 파일이 사용 가능해지면 내용을 표시하기 시작합니다.

사용법: tail -F /path/to/file

주요 차이점: 

-f: 파일 디스크립터를 따라갑니다. 파일 이름이 변경되거나 삭제되면 tail이 이를 따라가는 것을 중지합니다. 

-F: 파일 이름을 따라갑니다. 파일 이름이 변경되거나 삭제되더라도 tail이 계속 열려고 시도하며 파일이 다시 사용 가능해지면 내용을 표시하기 시작합니다.

tail이 멈춘다면 tail -F를 사용하세요.

반응형
반응형

[DBeaver] 테이블 DDL 쿼리문에 COMMENT(주석) 추가하는 방법 알려드리겠습니다. 

하단 사진 처럼 테이블 들어가셔서 DDL 메뉴 탭 > 하단 아이콘 Show comments 클릭하시면 주석 보이실겁니다. 

반응형
반응형

 

[Python] pywintypes.error : (5, ‘OpenClipboard’, ‘액세스가 거부되었습니다.’) 해결 방법

안녕하세요. 파이썬 클립보드 기능을 사용하다가 이 오류가 날 때가 있습니다.

pywintypes.error : (5, ‘OpenClipboard’, ‘액세스가 거부되었습니다.’)
pywintypes.error: (5, ‘OpenClipboard’, ‘Access is denied.’)

제가 배포한 exe 파일을 다른 환경(컴퓨터)에서 구동하려 할 때
액세스가 거부된 적이 있었는데 이 오류에 대해서 해결 방법을 알려드리려고 합니다.

해결 방법

보통 이러한 경우는

from pywinauto import clipboard
text = clipboard.GetData()

상단 기재된 패키지의 GetData 함수를 사용하다가 난 오류가 있을 수 있는데 그 때
하단 패키지와 함수로 변경하면 오류는 해결 될 것입니다.

import win32clipboard
text = win32clipboard.GetClipboardData()

반응형
반응형

2022 프로그래머스 컨퍼런스 정리
1] 오프닝 및 키노트 : 개발자의 커리어 성장 - 끊임없는 성장과 성숙
강의자 : 한기용(Grepp USA)

1. 커리어
1-1) 내가 못할거 같은 일, 내가 싫어할 거 같은 일을 해보기 
(어떤 역할이 나에게 맞는지, 좋은지 경험하기)
1-2) 리드 역할, 매니저 역할

2. 일반적인 커리어 상장
2-1) 결과를 내는데 집중 -> 성취하는 경험(자신감 키우기)
2-1-1) 내가 맡은 업무가 큰 그림에서 어떤 그림이고 달성했을때 어떤 그림인지
2-1-2) 의사소통 능력 중요
2-1-3) 질문 많이하고 잘하기
2-1-4) 완벽 주의가 아닌 완료주의(일을 완료)

3. 나의 성장을 저해하는 요소
3-1) 나이, 남과 비교
3-2) 나에 대한 고정관념
3-3) 과거 상처

4. 인격적인 성숙
4-1) 성품을 좋은사람을 기술을 가리켜라(기술을 가르칠 수 있지만 성품은 가르칠 수 없다.)
4-2) 긍정적인 태도, 팀플레이어 기술
4-3) 주기적으로 회고하는 자세
4-4) 실수 인정하고 모르는 것을 모른다고 할 수 있는 여유

5. 시작과 꾸준함의 중요성 - 복리가 있는 일 하기
5-1) 아무 일도 안 하면 아무런 일도 발생하지 않는다.(시작이 반)
5-2) 꾸준히 매일 하다보면 발전하는게 조금 더 오랜 시간을 두고 보임
5-3) 복리가 있는 일들
5-3-1) 운동
5-3-2) 배움/학습 (호기심)
5-3-3) 네트워킹 (사람 만나기)
5-3-4) 책읽기/글쓰기

6. 네트워크의 중요성
6-1) 사람들을 만날 때 호기심 갖기 - 첫 인상에 사로잡히지 말기
6-2) 좋은 사람들과 일하는 환경의 중요성
6-3) 좋은 평판 유지하기 - (팀 플레이어, 공정한 사람, 긍정적인 사람)
6-4) 도움 요청 및 받기

7. 자신의 강점과 약점을 이해하기
7-1) 내 강점을 최대화하는 일 찾기
7-2) 단 내 강점이 약점이 되는 순간을 잘 인지하기
7-2-1) 사람들이 일반적으로 무능해질 때까지 승진
7-3) 인지는 꼭 해야하지만 꼭 변화할 필요가 있는지 판단

8. 사기 증후군 극복하기
8-1) 나보다 주변 사람들이 잘 나 보이는지 비교하는 증후군
8-2) 자신감 갖고 내 자신을 신경쓰고 결과를 내는데 포커스 하기

9. 기본기 확실하기
9-1) 코딩(프로그래밍 언어)
9-2) 테스트 작성
9-3) 기본 툴 잘 쓰기

10. 학습 능력 키우기
10-1) 호기심 기반 학습
10-2) 나만의 새로운 주제 학습 방법 만들기
10-2-1) 필요한 만큼 알기
10-3) 다른 사람 가르쳐보기

11. (우선 순위 고려) 결과 내기 집중
11-1) 컨텍스트 이해하고 성공실패 지표 확인
11-1-1) 매니지먼트 소통 중요
11-1-2) 프로젝트, 태스크 소용 시간 추정 훈련
11-2) 혼자서 잘하지 말고 영향력 갖기( 리드, 매니저)

12. 소통 잘하기
12-1) 팀으로 일하는 모드 발전
12-2) 발표 훈련 - 내가 하고 싶은 이야기 + 청중 듣고 싶은 이야기
12-3) 좋은 의사결정 원칙 만들기

13. 운영을 고려한 코드 작성
13-1) 내가 만든 코드를 남이 운영하는 경우 더 중요
13-1-1) 운영하는 팀과 소통
13-2) 반복되는 일을 자동화하기
13-2-1) 같은 일이 3번째 반복되면 자동화 시작
13-2-2) 부지런한 사람들이 경계하는 것: 노가다하는것

반응형
반응형


운영체제를 요리로 비유하여 다른 운영체제 책보다 운영체제에 대해서 쉽게 설명해준 책이다. 

대학 때 운영체제를 배웠지만 시험 공부를 위해서 공부한 느낌이 있어서 그 때 당시에는 잘 와 닿지 않았지만 순수하게 운영체제를 배우고 싶어서 읽은 책이여서 더욱 이해하기 쉬웠던 책이였다. 

개발을 하는데 있어서 운영체제를 꼭 배워야 될까 생각했지만 이 책을 읽으면서 메모리 관점에서 다시 한번 생각하게 된 것 같아서 한 단계 나아갔다고 생각한다. 


총평 : 운영체제를 요리로 비유해서 쉽게 배우고 싶은 분들에게 추천합니다. 


반응형
반응형

※ 본 게시글의 소스코드는 디자인, UI, UX 에 전혀 신경쓰지 않은 점 참고해주세요.

※ 본 게시글은 서버단으로 데이터를 보내 처리하는 내용은 포함되지 않았습니다.

지난 게시글에선 SunEditor를 소개했는데 이번 게시글에선 간단하게 SunEditor 적용 후 서버로 에디터 적용한 텍스트를 웹에서 보내고 받는것을 해볼려고 한다.

아래 소스코드만 이용해도 위 사진과 같이 간단하게 텍스트 에디터를 만들 수 있다. 먼저 아래 첨부파일을 다운받아 SunEditor에 필요한 css파일과 js 파일을 자신의 프로젝트에 넣고 그에 맞춰서 소스도 수정해준다.

SunEditor css 파일과 js 파일 압축 파일

 

[html] SunEditor 소스 코드 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width", initial-scale="1">
<!-- ********************* 자신의 프로젝트에 맞춰서 경로 수정 필요 ****************************** -->
<!-- SunEdtor css -->
<link rel="stylesheet" href="css/bootstrap.css">
<link rel="stylesheet" href="css/suneditor.min.css">
<!-- SunEdtor js -->
<script type="text/javascript" src="js/suneditor.min.js"></script>
<script type="text/javascript" src="js/jquery-3.0.0.min.js"></script>
<!-- ********************* 자신의 프로젝트에 맞춰서 경로 수정 필요 ****************************** -->
 
<script type="text/javascript">
  $(function(){
    SUNEDITOR.create('content',{
      font : [
          'Arial',
          'tahoma',
          'Courier New,Courier'
      ],
      fontSize : [
          81014182436
      ],
      colorList: [
          ['#ccc''#dedede''OrangeRed''Orange''RoyalBlue''SaddleBrown'],
          ['SlateGray''BurlyWood''DeepPink''FireBrick''Gold''SeaGreen']
      ],
      width: '100%',
      maxWidth: '600px',
      minWidth: 400,
      height : 'auto',
      imageWidth : 150,
      popupDisplay: 'local',
      resizingBar: false,
      buttonList : [
          ['font''fontSize',
          'fontColor''hiliteColor',
          'fullScreen''codeView']
      ],
      callBackSave: function (contents) {
          alert(contents);
      }
    });
  });
  // 글쓰기 버튼
    function saveButton(){
        if(document.getElementById("title").value === "" || 
        document.getElementById("title").value == null ){
        alert("제목을 입력해주세요");
        return false;
    }
 
    // 자신의 프로젝트에 맞춰서 경로 수정 필요
    $.ajax({
      url: "/board/noticeRegist",
      type: "post",
      data: {
          title : document.getElementById("title").value,
          content : $('.sun-editor-editable').html(),
      } ,
      // dataType: "json",
      error : function(request, status, error){
          alert('등록 실패');
          console.dir(request);
          console.dir(status);
          console.dir(error);
      },
      success : function(result){
        alert("등록이 완료되었습니다.");
        // 자신의 프로젝트에 맞춰서 경로 수정 필요
        location.href="/board/noticeList";
      }
    });
    }
</script>
<title>글쓰기</title>
</head>
<body>
    <div>
        <div>
      <table style="text-align: center; border: 1px solid #dddddd">
          <thead>
            <tr>
              <th colspan="5">게시판 글쓰기 양식</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td colspan="5" ><input type="text" id="title" class="form-control" placeholder="글 제목" name="title" maxlength="50"></td>
            </tr>
            <tr>
              <td colspan="5" ><textarea class="form-control" id="content" placeholder="글 내용" name="content" maxlength="2048" style="height:350px;"></textarea></td>
            </tr>
          </tbody>
      </table>
      <button id="saveButton" type="submit" class="btn btn-dark" onclick="saveButton()">글쓰기</button>
      <br>
        </div>
    </div>
</body>
</html>
cs

위 소스 간단하게 설명하면

SUNEDITOR.create('content',{

});

1.  아래 SUNEDITOR.create 함수가 에디터를 적용해주는 핵심 함수이다. textarea id (='content')를 넣어주면 에디터가 적용된다. 

2. 이 함수에서 SunEditor의 다양한 기능들을 넣고 뺄 수 있다. 그 방법에 대해서는 공식 홈페이지 예제를 통해서 자세하게 알 수 있다.

$('.sun-editor-editable').html(),

위 소스 예제에서는 내용을 가져올때 위와 같이 html로 가져오는데 텍스트 에디터 적용된 모습을 개발자 도구로 보면 sun-editor-editable class로 적용된 모습을 볼 수 있어서 html를 가져와 db에 저장한 후 뷰로 불러와 아래 소스코드와 같이 넣어주면 바로 에디터가 적용된 모습을 가져올 수 있다. 

View 소스코드. 본 게시글엔 포함되지 않습니다.

 

View 화면. 본 화면은 위 소스코드와 다른 내용을 포함하고 있습니다.

반응형
반응형

1. 소개 

SunEditorJavaScript로 구현되어 있는 텍스트 에디터 라이브러리이다. 또한 이 라이브러리는 MIT 라이센스로 되어 있어서 수정, 배포가 자유롭고 상업적으로 마음껏 배포해도 되는 라이센스이다. 단, 저작권 표시해주어야 한다. 

MIT 라이센스에 대해서 더 알고 싶으신 분은 > 링크 < 를 클릭해주세요.

또한 6월 24일 기준 현재까지도 Git 꾸준하게 오픈 소스로 업데이트 되고 있다. 

2. 브라우저 지원

윈도우 10 기준으로 IE 11도 지원 종료되어서 사실 상 어느 브라우저에서도 사용 가능한 텍스트 에디터다.

3. 문서 및 공식 사이트

SunEditor 소스 및 공식 Git 

 

GitHub - JiHong88/SunEditor: Pure javascript based WYSIWYG html editor, with no dependencies.

Pure javascript based WYSIWYG html editor, with no dependencies. - GitHub - JiHong88/SunEditor: Pure javascript based WYSIWYG html editor, with no dependencies.

github.com

SunEditor 공식 예제 : > 링크 <

 

반응형
반응형

보통 파일 삭제 및 폴더 삭제를 각각 file.delete() 함수나 cleanDirectroy() 함수로 폴더 비우고 파일 삭제하는 경우가 있는데

deleteQuietly 이 함수는 파일 및 폴더 삭제(하위 파일과 폴더를 모두 삭제하는 강력한 함수이다.

deleteQuietly 함수 내부를 살펴보자면 먼저 file.isDirectory() 함수로 폴더 체크 후

cleanDirectory() 함수로 폴더를 비워주고 delete 함수로 삭제해준다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public static boolean deleteQuietly(final File file) {
        if (file == null) {
            return false;
        }
        try {
            if (file.isDirectory()) {
                cleanDirectory(file);
            }
        } catch (final Exception ignored) {
            // ignore
        }
 
        try {
            return file.delete();
        } catch (final Exception ignored) {
            return false;
        }
    }
 
FileUtils.deleteQuietly(targetFile);
cs

deleteQuietly 사용법

FileUtils 클래스에 속해 있어서 Apache Commons IO 라이브러리 없다면 maven 추가해줘야 된다.

https://mvnrepository.com/artifact/commons-io/commons-io

0. 위 링크로 이동해 최신 버전인 maven 태그를 복사하거나 아래 2.8 버전을 복사해서

pom.xml <dependencies> 태그 내부에 복사해준다.

1
2
3
4
5
6
7
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.8.0</version>
</dependency>
 
cs

1. 저장 후 Project 메뉴 > Update Maven Project 후 maven 추가한 프로젝트를 업데이트 해준다.

2. 아래 메소드처럼 파일경로 String으로 매개변수로 읽어와서 삭제하거나 

 FileUtils.deleteQuietly(targetFile); 

deleteQuietly 함수를 이용하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
    /**
     * 파일 삭제
     * @param String
     */
    public void FileDelete(String filePath) {
        try {
            File targetFile = new File(filePath);
            FileUtils.deleteQuietly(targetFile);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
cs

 

반응형
반응형

* 유의 : 이클립스 다크 모드를 쓰고 있지 않다면 이 글을 닫으셔도 됩니다.

위 사진과 같이 필자가 파일 이동 간 몇초 동안 반응 없음 및 멈춤 현상이 나타나고 동시에 복사 붙여넣기도 심히 느려져서  구글링으로 별의 별 방법을 다했지만 그래도 느려서 이 방법으로 해결했다.

 

Windows -> Preferences -> General -> Appearance 에서 다크모드를 사용중인 상태에서 Classic으로 바꾸면 오류나 멈춤 현상이 전보단 더 나아졌고 복사 붙여넣기도 빠르게 실행이 된다..

원인은 잘 모르겠지만 필자가 이 방법으로 해결해서 기록 남깁니다. 

반응형
반응형

위 사진과 같이 sts 압축 오류 나거나 sts 압축 오류가 났더라도 무시하고 sts 실행해서 Spring Tools 3 Add-On for Spring Tools 4 설치 후 spring legacy project 가 전혀 생성할 수 없는데 이를 모르고 spring legacy project 생성 할 수 없는 오류만 찾다가 근본적인 오류는 파일이 제대로 설치가 안된 오류입니다. 

sts 압축 풀 때 반드시 알집으로 풀지 마시고 반디집이나 다른 압축 프로그램으로 풀어주세요! 그럼 spring legacy project 생성할 수 없는 오류도 해결됩니다. 

반응형

+ Recent posts