목록전체 글 (78)
Illie
PDF를 터미널로 한방에 인쇄하기까지의 삽질기시작여러 폴더에 나뉘어진 PDF 들을 한꺼번에 인쇄해야 할 일이 생 겼다.폴더만 7개, 파일은 총 59개.하나씩 열어서 인쇄하기엔 너무 귀찮았고, 터미널로 한방에 해결하기로 했다 .1단계: 파일 파악먼저 어떤 파일들이 있는지 확인했다.find . -type f | sortPDF와 HWP 파일이 섞여 있었다.HWP는 왜 터미널로 인쇄가 안 되나?HWP는 한글과컴퓨터의 독자적인 포맷이다.macOS 터미널에서 파일을 프린터로 보내는 lp 명령어는 PDF, 텍스트, 이미지 같은 표준 포맷만 처리할 수 있다.HWP를 인쇄하려면 파일 내용을 해석할 수 있는 앱이 반드시 필요한데, 한컴오피스는 GUI 앱으로만 동작하고 CLI 인쇄 기능을 제공하지 않는다. LibreOffi..
서론라이브러리를 사용하다 보면 이벤트 기반 구조 때문에 코드 흐름이 끊기는 상황을 자주 마주한다.특정 기능을 호출하면 결과가 바로 반환되는 것이 아니라 다른 콜백 함수로 전달되는 구조다. ex) 파일 업로드 시 파일 업로드 결과가 콜백으로 떨어짐이 경우 로직이 자연스럽게 이어지지 않는다.어떤 동작을 호출하는 코드와 실제 결과를 처리하는 코드가 서로 다른 함수에 분리되기 때문이다. 그냥 좋은게 좋은거지라 생각하며 사용하다보니 코드가 한 눈에 보이지 않게 되었고아...진작에 잘만들걸...하는 후회가 밀려왔다.이 글에서는 이런 상황에서 Promise를 이용해 이벤트 기반 흐름을 하나의 선으로 연결하는 방법을 정리한다.본론1. 문제 상황 사용 중인 라이브러리는 어떤 동작을 호출하면 결과를 이벤트 콜백으로 전달하..
서론자바에서 외부 자원(파일 읽기, 쓰기 등)을 사용하게 되는 경우가 있는데,사용한 후에는 무조건 close() 메서드를 호출해주어야 한다 왜냐하면,첫번째로, 외부 자원에 대한 부분은 가비지 컬렉터가 처리해주지 않고두번째로, 다른 코드에서 같은 resource에 접근하려 하다가 꼬일 수 있기 때문이다 하지만, close() 할 때에도 Exception이 날 수 있어서close에도 try - catch를 적용해야 한다 꽤나 코드가 복잡해지는데, 이를 해결해주는 게 try-with-resources이다 본론간단하다try 블록이 끝나게 된다면, 괄호안에 있던 자원들이 자동으로 반납된다그리고 괄호 내에서 자원을 여러 개를 등록할 수 있다 try (BufferedWriter bw = new BufferedWrit..
서론Executor는 스레드를 효율적으로 사용할 수 있도록 도와준다 기본적으로 설정해놓은 스레드 수 만큼을 활성화해놓고 있다가, 활성화되어있는 스레드가 모두 사용중이라면 1. Queue에 넣어 대기 시키고 차례를 기다리던가2. 스레드를 초과해서 생성해서 작업을 진행하던가3. Rejection을 하던가선택할 수 있다. 서비스의 목적에 맞게 맞는 전략을 세우면 되는데, 대표적으로 어떤 전략이 있는지 알아보고자 한다 본론1단일 스레드 풀 전략스레드 풀에 기본 스레드 1개만 사용한다즉, 추가적으로 들어오는 요청은 모두 대기 상태가 된다new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue()) 고정 풀 전략단일 스레드 풀 전..
https://school.programmers.co.kr/learn/courses/30/lessons/42883#qna 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr나의 풀이처음에는 slice를 통해 다음과 같이 접근하였다. 인접한 두 수의 크기를 비교하여앞의 수가 뒤의 수보다 작으면 앞의 수를 제거하기그렇게 다 제거 했는데에도 k개의 수를 제거하지 못했을 경우뒤에서부터 남은 수 자르기 코드는 다음과 같다function solution(number, k) { let answer = number; let pointer = 0; whi..
서론연결리스트를 C언어로 구현하고자 한다왜냐면 자료구조 수업을 듣고있기 때문이다...본론구조체 정의// 단순 연결리스트의 노드 구조 정의typedef struct ListNode { int data; struct ListNode* link; } listNode;// 리스트의 헤드 노드 구조 정의typedef struct { listNode* head;} linkedList_h; 연결리스트 생성linkedList_h* createLinkedList_h(void) { linkedList_h* H; H = (linkedList_h*)malloc(sizeof(linkedList_h)); H -> head = NULL; return H;} 노드 삽입void addNode(linkedList_h..
서론클래스 인스턴스가 딱 하나만 생성되는 것을 보장하는 디자인 패턴 요청이 올 때마다 객체를 생성하게 된다면, 메모리 낭비가 매우 클 것이기 때문에이를 방지하기 위해 객체를 미리 생성해두고 이를 참조한다 본론싱글톤 패턴을 적용한 코드는 다음과 같다.public class SingletonService { // static 영역에 객체를 딱 하나만 생성 private static final SingletonService instance = new SingletonService(); // 객체 인스턴스가 필요하다면 static 메서드를 통해서만 조회하도록 허용 public static SingletonService getInstance() { return instan..
서론수업에 사용하는 리눅스는 Rocky Linux 윈도우 기준으로 수업이 진행되어맥북유저들을 위한 Rocky 리눅스 설치 과정을 나누고자 글을 쓰게 되었다 리눅스 환경 세팅 때문에 공부에 방해되지 않았으면 하고 시간을 아꼈으면 한다! 본론처음 배우는 입장이고 아직 잘 모르니까 최대한 간편하고 리스크가 적은 방향으로 설치를 진행하였다 (파티션 나누는 방식이 아닌, 가상머신을 설치하는 방법으로 진행 예정)1. 프로그램 설치우선 설치해야 할 프로그렘이 두 개 있다. 1. 가상머신 소프트웨어 - UTMhttps://mac.getutm.app/ 인터넷에서 바로 설치한다면 무료, 앱스토어에서 설치하게 되면 유료이다왼쪽버튼을 클릭해주자 2. 로키 리눅스 - DVD ISO 설치https://rockylinux.org/..