18-더불어 살기

윈도우와 유닉스는 기능적인 차이점 보다는 유사점이 더 많다. 윈도우와 유닉스에는 기능적 차이점 보다는 문화적인 차이점이 존재한다. 유닉스 문화는 다른 프로그래머에게 유용한 코드를 제공하는 것에 가치를 두는 반면, 윈도우 문화는 프로그래머가 아닌 사람에게 유용한 코드를 제공하는 것에 가치를 둔다. 유닉스 프로그래밍 문화는 명령행에서 호출할 수 있고 모든 동작 방향을 제어할 수 있는 인수를 취할 수 있다. 유닉스 프로그래밍 문화는 질서 정연하며 기계가 읽을 수 잇는 일반 텍스트 형식으로 출력을 뽑아낼 수 있는 프로그램을 높게 평가한다....

2024-09-15 · 1 min · 161 words

18-JMX로 스프링 모니터링하기

JMX(Java Management Extensions): 자바 애플리케이션을 모니터링하고 관리하는 표준 방법 JMX는 MBeans(managed beans) 컴포넌트를 노출함으로써 외부의 JMX 클라이언트는 오퍼레이션 호출, 속성 검사, MBeans의 이베트 모니터링을 통해 애플리케이션을 관리할 수 있다. JMX는 스프링 부트 애플리케이션에 기본적으로 자동 활성화된다. 이예 따라 모든 액추에이터 엔드포인트는 MBeans로 노출된다. 또한, 스프링 애플리케이션 컨텍스트의 어떤 다른 빈도 MBeans로 노출할 수 있게 했다. 액추에이터 MBeans 사용하기 스프링 부트는 /heapdump를 제외한 모든 액추에이터 엔드포인트가 HTTP처럼 명시적으로 포함시킬 필요 없이 기본으로 MBeans로 노출되어 있다....

2024-09-15 · 1 min · 183 words

17685

날짜: 2022년 8월 23일 오전 11:21 코드 Algorithm/17685.py at main · Junroot/Algorithm 풀이 단순하게 단어하나씩 입력을 늘려가면서 구하게되면 O(N*L)로 타임아웃이 발생할 것이다. 트라이를 이용해 중복되는 계산 부분을 제거하면 시간복잡도를 O(L)로 줄일 수 있다. 위 사진은 ‘go, gone, guild’를 트라이로 만들었을 때의 그림이다. 오른쪽 상단은 존재할 수 있는 단어 개수, 오른쪽 하단은 해당 글자로 끝나는 단어가 있는지 여부를 나타내는 true, false를 나타낸다. 최종 답을 찾을 때는 오른쪽 상단이 1이거나, 현재 글자로 끝이나는 단어의 depth를 모두 더해주면된다....

2024-09-15 · 1 min · 75 words

17682

날짜: 2022년 7월 12일 오후 7:08 코드 Algorithm/17682.py at main · Junroot/Algorithm 풀이 단순 구현문제다. 파싱을 한뒤 문제조건에 맞게 구현하면된다.

2024-09-15 · 1 min · 20 words

17681

날짜: 2022년 7월 12일 오후 8:01 코드 Algorithm/17681.py at main · Junroot/Algorithm 풀이 간단한 구현문제다.

2024-09-15 · 1 min · 15 words

17679

날짜: 2022년 7월 8일 오후 6:43 코드 Algorithm/17679.py at main · Junroot/Algorithm 풀이 단순 구현 문제다. 더 이상 제거되는 블록이 없을 때까지 반복하면 된다.

2024-09-15 · 1 min · 24 words

17678

날짜: 2022년 7월 6일 오전 10:34 코드 Algorithm/17678.py at main · Junroot/Algorithm 풀이 크루들이 타게되는 버스를 모두 차례대로 계산한 뒤에, 콘이 마지막 버스를 타기위해 언제 나오면 되는지를 계산하면된다. 마지막 버스가 만원인 경우 마지막 버스에 마지막에 타는 크루보다 1분 빨리 도착하면 된다. 마지막 버스가 만원이 아닐 경우 마지막 버스의 도착시간에 맞춰서 도착하면 된다.

2024-09-15 · 1 min · 52 words

17676

날짜: 2022년 3월 8일 오후 3:41 코드 Algorithm/17676.py at main · Junroot/Algorithm 풀이 2가지 문제를 해결해야 됐다. 로그를 기반으로 처리시각의 시작 시각과 끝 시각 구하기 초당 최대 처리량 구하기 처리시각 구하기 ms 단위로 처리해야되기 때문에 2016-09-15에서 몇 ms가 지났는지를 기준으로 처리하기로 했다. 로그의 마지막 부분인 처리시간 T를 ms단위로 변환하는 것에 어려움이 있었는데, 로그에 적혀있는 숫자 개수를 기반으로 처리했다. 숫자의 개수가 0이 될 때까지 뒤에 0을 더 붙이는 형식으로 구현했다. def second_to_ms(second): result = 0 digit_count = 0 for c in second: if "0" <= c <= "9": result = result * 10 + int(c) digit_count += 1 while digit_count < 4: result *= 10 digit_count += 1 return result 초당 최대 처리량 구하기 처음에는 0ms부터 24 * 60 * 60 * 1000ms 까지 모든 경우를 다 구하려고했는데 이 방법은 당연히 시간 초과가 발생했다....

2024-09-15 · 1 min · 199 words

1764

편집 시간: 2022년 2월 12일 오후 9:49 코드 Algorithm/1764.py at main · Junroot/Algorithm 풀이 m과 n이 500,000 이하의 자연수기 때문에 정렬해도 문제가 없다는 것을 알 수 있다. 듣도 못한 사람 명단과 보도 못한 사람 명단을 정렬한 뒤 각각의 인덱스를 i, j로 기억하고 더 작은 이름의 인덱스를 1씩 늘리면서 비교하면된다.

2024-09-15 · 1 min · 49 words

1753

편집 시간: 2022년 5월 3일 오후 5:50 코드 Algorithm/1753.py at main · Junroot/Algorithm 풀이 힙을 이용한 다익스트라 알고리즘을 사용하면 구현이 가능하다.

2024-09-15 · 1 min · 21 words

17-컴퓨터과학 분야에서 떠도는 세가지 미신

검색에서는 충분한 결과를 찾는 기술이 가장 어렵다. 구글의 페이지랭크 알고리즘은 원하는 결과가 최상위 10개 안에 들어가도록 헤아릴 수 없이 수많은 검색 결과를 정렬하는 가장 뛰어난 방법이다. 앤티앨리어스 anti-aliased 문자가 더 보기 좋다. 앤티앨리어스는 컬러 디스플레이의 해상도가 낮을 때, 회색 그림자를 사용해서 해상도 ‘착각’을 불러 일으키는 편이 보기에 좋다는 생각에서 출발했다. 하지만 앤티앨리어스 문자로 구성된 단락을 읽을 때, 흐릿해 보인다는 문제점이 있다. 앤티앨리어스는 전체적인 외형이 지속적인 가독성보다 중요한 표제와 로고, 그리고 그림이라는 두 가지 측면에서 매우 뛰어난 기술이다....

2024-09-15 · 1 min · 142 words

17-스프링 관리하기

스프링 부트 Admin 사용하기 스프링 부트 Admin은 관리용 프론트엔드 웹 애플리케이션이며, 액추에이터 엔드포인트를 사람들이 더 많이 소비할 수 있게 한다. 액추에이터 엔드포인트는 두 개의 주요 구성 요소로 나뉜다. 스프링 부트 Admin 클라이언트 Admin 서버 생성하기 일반적으로 Admin 서버는 독립 실행형 애플리케이션으로 사용된다. 의존성 추가 구성 클래스에 @EnableAdminServer 애노테이션 추가 아래 사진에서는 현재 0개 애플리케이션의 0개의 인스턴스가 등록되어 있는 것이다. Admin 클라이언트 등록하기 두 가지 방법 각 애플리케이션이 자신을 Admin 서버에 등록 Admin 서버가 유레카 서비스 레지스트리를 통해서 서비스를 찾기 각 애플리케이션이 자신을 Admin 서버에 등록 의존성 추가 spring....

2024-09-15 · 3 min · 565 words

1697

편집 시간: 2022년 2월 9일 오후 6:45 코드 Algorithm/1697.py at main · Junroot/Algorithm 풀이 bfs를 이용하여 탐색하다가 처음으로 k에 도달하는 지점의 시간을 출력하면 된다. 이 때 중복된 위치를 탐색하는 것을 방지하기 위해서 visited라는 집합을 만들어 사용했다.

2024-09-15 · 1 min · 36 words

1629

편집 시간: 2022년 2월 24일 오후 2:35 코드 Algorithm/1629.py at main · Junroot/Algorithm 풀이 제곱을 이용해서 분할 정복을 했다.

2024-09-15 · 1 min · 19 words

1620

편집 시간: 2022년 2월 16일 오후 3:46 코드 Algorithm/1620.py at main · Junroot/Algorithm 풀이 해쉬 맵을 이용하면 어려움 없이 해결할 수 있다. 숫자에 해당하는 이름과 이름에 해당하는 숫자를 해쉬 맵으로 따로 저장한뒤 출력하면 된다.

2024-09-15 · 1 min · 34 words

16-장인정신

코드 작성은 설계이다. 설계는 투자 비용보다 값어치가 빨리 늘어나는 불투명한 영역이다. 진정한 장인정신으로 소프트웨어를 만들면, 무언가 예상치 못했던 작업을 할 때, 응용프로그램은 지능적으로 반응한다. 핵심기능이 아니라 자주 쓰지 않는 부가기능을 정확하게 처리하기 위해서는 훨씬 더 많은 노력이 들어간다. 일반 소비자를 위한 상용 소프트웨어를 개뱔하는 방법만이 장인정신에 투자할 수 있는 유일한 길이다.

2024-09-15 · 1 min · 51 words

16-스프링 부트 액추에이터 사용하기

액추에이터: 스프링 부트 애플리케이션의 모니터링이나 메트릭과 같은 기능을 HTTP와 JMX 엔드포인트를 통해 제공한다. 액추에이터 개요 액추에이터가 노출하는 엔드포인트를 사용하면 실행 중인 스프링 부트 애플리케이션의 내부 상태에 관한 것을 알 수 있다. 액추에이터의 기본 경로 구성하기 기본적으로 액추에이터의 모든 엔드포인트 경로에는 /actuator가 앞에 붙는다. 기본 경로를 수정하고 싶으면, management.endpoint.web.base-path 속성을 설정하여 변경할 수 있다. 액추에이터 엔드포인트의 활성화와 비활성화 엔드포인트의 노출 여부를 제어할 때는 management.emdpoints.web.exposure.include와 management.endpoints.web.exposure.exclude 속성을 사용하면 노출을 원하는 엔드포인트를 지정할 수 있다....

2024-09-15 · 5 min · 865 words

15654

편집 시간: 2022년 2월 24일 오후 2:52 코드 Algorithm/15654.py at main · Junroot/Algorithm 풀이 정렬된 수열에 대해서 dfs로 문제를 풀면된다. 현재 어떤 숫자를 썼는지 확인하기 위해 visited 배열을 만들었다.

2024-09-15 · 1 min · 29 words

15650

편집 시간: 2022년 2월 16일 오후 7:35 코드 Algorithm/15650.py at main · Junroot/Algorithm 풀이 재귀 함수를 이용해서 모든 경우의 수를 탐색하면 된다.

2024-09-15 · 1 min · 22 words

15-쏘면서 움직여라

정지한 물체는 계속해서 정지하려고 한다. 하지만 최고 속력으로 굴러가기 시작하면, 속력을 유지하는 데 별다른 힘이 들지 않는다. 페어 프로그래밍은 동료와 페어 프로그래밍 세션 일정을 잡고 나서, 어서 일을 시작하자고 서로 북도아줬기 때문에 생산성을 높일 수 있다. 장기적인 암목을 키워야 하며, 매일 조금씩 앞으로 나아가야 한다.

2024-09-15 · 1 min · 45 words