목록Java (46)
마이의 개발 블로그
배경최근 맞춤법 검사기 라이브러리 WebSpeller의 사용을 주 기능으로 하는 SpringBoot 서버를 Docker 기반 서비스로 배포하는 과정에서, 서버 어플리케이션이 멀티코어 CPU를 제대로 활용하지 못하는 문제가 발생했습니다. 호스트 PC에서 직접 구동하는 경우 CPU 활용률과 처리 속도에 문제가 없었으나, 도커 이미지 빌드 후 컨테이너에서 동작시킬 경우 같은 CPU 활용률이더라도 처리속도가 떨어지는 현상이 관찰된 것입니다. 오늘은 문제를 해결하나가며 얻게된지식들을 정리해보려고 합니다.문제 해결 과정기존 검증 내용 체크초기에는 클라우드 서버의 CPU 단일 코어 성능이 로컬 PC보다 낮아서 성능이 제한된 것이라고 단순히 생각했습니다. 그러나 다양한 각도에서 문제를 분석하며 아래와 같은 내용들을 확..

배경 이미 암호화된 문자열로 발급된 키값을 환경변수 등에서 가져와 프로그램에서 사용하는 경우 문자열을 기준으로 작업할 수 있도록 코드의 변경이 필요합니다. 또한 시크릿 키의 경우에도 암호화 되지 않은 문자열을 기준으로 한 번 더 암호화하는 과정을 거쳐야 하는데 보통 제시되는 예시들은 시크릿 키를 별도로 암호화하여 발급한 후에 그 암호문을 그대로 사용하는 형태로 동작하는 것이 대부분이었습니다. 그래서 약간의 수정을 거쳐 현재 프로젝트에 맞는 형태로 input과 output을 가공하여 사용하는 클래스를 작성했습니다. 이 예제는 AES 암호화 알고리즘을 사용하여 1) 암호화(encrypt), 2) 복호화(decrypt) 동작을 수행하는 코드입니다. 두 동작 모두 인수로 암호화되지 않은 String 타입 시크릿..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 접근 방식 노드끼리 연결된 네트워크가 등장한다면 대체로 BFS와 DFS를 떠올리면 된다. 최단거리를 구해야 한다면 BFS를, 완전 탐색이 필요하다면 DFS를 사용해야하는데 이 문제에서는 모든 연결점을 탐색하여 네트워크의 개수를 파악해야하므로 DFS가 필요했다. 노드의 방문여부를 체크하고 종료조건을 삽입하기 위해 isVisited 배열을 활용했다. 로직 설명 solution 메서드 - 종료조건을 기록할 int[] isVisited 배열 선언 - computers배열에서 모든 노드의 연결정보를 순차적으로 탐색하며..
구름LEVEL 난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다. level.goorm.io 접근 방식 먼저 주어진 전체 수열을 set으로 저장하고, 그 다음에 주어지는 M개의 수들의 포함여부를 set에서 체크하여 포함할 경우 1을, 아닐 경우 0을 출력하면 되는 문제이다. 로직 설명 생략 작성 코드 import java.io.*; import java.util.*; class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLin..
구름LEVEL 난이도별 다양한 문제를 해결함으로써 SW 역량을 향상시킬 수 있습니다. level.goorm.io 접근 방식 투포인터를 사용하여 순차적으로 탐색하며 해결할 수 있는 문제이다. 지름(D) 이하에서 제거할 개미의 수를 최소로 만든다는 건 바꿔말하면 조건에 맞는 개미 숫자를 최대한으로 보존해야함을 의미한다. 즉, 개미들의 위치가 정렬되어 저장된 배열을 포인터 두 개로 완전탐색하여 모든 경우의 수에 대해 최대 개미수를 갱신하면 되는 것이다. 포인터 begin이 고정된 상태에서 포인터 end는 조건(D 이하) 내에서 최대한 진행하여 maxAnts를 갱신한다. 조건을 벗어나면 begin을 증가시키고 다시 거기서부터 end가 탐색을 시작한다. begin과 end는 같은 곳에서 시작해 끝까지 탐색하며 b..