이상하게 DDD 동아리 프로젝트 서버가 종종 죽는 상황이 발견되었다. 꽤 오래전부터 식별되었던 문제였는데, 초반에는 그냥 죽을 때마다 재부팅하는 식으로 해결하다가 원천 해결을 해야겠다고 생각해서 조사를 하기 시작했다. # 문제 최초 식별 (22년 11월 후순) CI/CD 배포 실패 및 EC2 상태검사 실패 원인 : CI/CD 배포 과정에서 기존 프로세스를 죽이지 않고 새로운 프로세스를 실행해서 서버 자원 부족으로 인한 다운 해결 : 기존 프로세스를 확실하게 죽이도록 설정 일단 중복 프로세스로 인한 다운은 해결 됐으나, 다른 문제로 계속 다운 발생 # 지속적 문제 발생, 모니터링 강화 (22년 12월 중순) 다른 문제로 다운이 계속 발생하자 원인을 찾기 위해 로깅 강화 (application.log 파일로..
AOP로 기능을 구현하다 보면 다소 복잡한 기능을 추가적으로 구현해야 하는 경우가 있다. 기존까지 AOP기능은 통합 테스트를 진행했었는데, 이러면 테스트가 너무 무거워져서 단위 테스트 방법을 찾아봤다. 전적으로 다음 블로그를 많이 참조했다. https://junhyunny.github.io/spring-boot/test-driven-development/improve-feign-client-aop-test/ FeignClient AOP 단위 테스트 개선하기 junhyunny.github.io # 배경 사용자가 방탈출에 관련한 인증 글을 작성했을 때, 10개 이상이 되면 탈출중독 이라는 뱃지를 추가하는 로직을 AOP로 작성했다. # CheckBadgeAspect @Aspect @Component class..
# 프로젝트 소개 제목 : TalkMoa 분류 : 팀 프로젝트1 - 주제1 팀원 : 4명 기간 : 반 학기 (22.09~22.10 중순) 간략소개 : 카카오톡 대화 내역을 분석하여 어떤 단어를 얼만큼 사용했는지 통계를 내주고, 시각적으로 제공해주는 간단 웹서비스 기획의도 : 메신저 대화 분석 웹 서비스가 없는 것을 보고 기획하게 됨 주요기능 : 대화 내용 분석 후 워드클라우드로 시각화 # 사용 기술 # 배운점/성과 [DB 데이터 Batch 작업 및 성능에 관한 인사이트] 3만개의 단어를 모두 RDBMS에 저장하니 시간이 오래걸렸음. 성능 최적화를 위해 Batch 옵션도 고려해봤지만, 드라마틱한 성능 향상을 이뤄내지 못 했다. NoSQL을 학습해서 도입하기에는 프로젝트 기한이 제한적이라 결국 DB 저장을 ..
https://school.programmers.co.kr/learn/courses/30/lessons/64061?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr # 힌트 스택. 해답 보기 더보기 public static int solution(int[][] board, int[] moves) { List mat = new ArrayList(); for (int j = 0; j =..
https://school.programmers.co.kr/learn/courses/30/lessons/12987 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr # 힌트 우선순위 큐. 참고로 DFS로 접근하면 입력 크기가 10만이기 때문에 안 된다. 해답 보기 더보기 문제 풀이의 핵심 아이디어는 B는 A보다 크고 B가 가지고 있는 수 중 제일 작은 수로 이겨야 한다는 점이다. 즉, A = 3 이고 B = 4,5이면 B는 4로 이겨야 한다. 각 배열를 역순으로 정렬한다. A = [7,5,3,1] B = [8,6,2,2] 7, 8 비교 7 < 8 이므로 wi..
알고리즘을 풀다 보면 간혹 조합을 직접 만들어서 사용해야 할 때가 있었는데 그럴 때마다 새로 만들기 귀찮아서 범용 객체를 이번 기회에 만들어봤다. 제네릭을 사용해서 문자열, 숫자(Integer, Double)등 모두 포괄할 수 있도록 설계했다. 조합은 getCombination, 중복조합은 getRepeatableCombination 을 호출하면 되고 파라미터 arr은 후보군들을 제네릭 리스트로, r은 그중 몇 개를 뽑을지를 전달한다. 결괏값으로는 후보군 중 r개를 뽑아서 만들어진 리스트들을 리스트로 (2중 리스트)로 리턴한다. public class Combination { public static List getCombination(List arr, int r) { boolean[] visited =..
https://school.programmers.co.kr/learn/courses/30/lessons/17686 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr # 힌트 단순 구현 + 정렬 문제다. head, number, tail 파싱만 잘하는게 핵심이다. (subString) 파싱한 파일의 정보를 담기 위한 커스텀 객체 생성을 추천한다. 런타임 오류 힌트 : F-15 처럼 tale이 빈 문자열인 경우를 잘 처리했는지 확인 해답 보기 더보기 static class File { int originalIndex; String originalName; Str..