본문 바로가기

Spring ClassPathResource 스프링에서 ClassPathResource 클래스를 통해 resources 디렉토리에 있는 파일을 읽을 수 있습니다. ClassPathResource 클래스는 자바 어플리케이션에서 classpath에 있는 리소스를 읽고 로드하는 역할을 맡고 있습니다. 예제 테스트 코드는 resources 디렉토리에 있는 "test.txt" 파일을 1줄씩 읽어서 출력하고 있습니다. try-with-resources를 통해 메모리 반환을 자동으로 처리하고 있습니다. AutoClose 인터페이스를 구현한 객체는 try-with-resources에서 자동으로 메모리를 반환합니다. 예제 테스트 코드를 실행하면 정상적으로 파일 내용이 출력되는 것을 확인할 수 있습니다. application.yml 외에 다른 파일을 읽어서 로드해야..
Spring Controller ResponseEntity Spring에서 개발할 때 컨트롤러 return 타입으로 주로 String, Map, List 등을 사용합니다. 간단하게 사용할 수 있어서 편리한 장점이 있지만 복잡한 HTTP 응답이 필요한 경우 ResponseEntity를 사용하면 됩니다. 위의 코드를 보면 Map을 통해 응답하는 것을 확인할 수 있습니다. 이전 코드와 비교하면 HTTP 상태 코드가 추가된 것을 확인할 수 있습니다. setString 메소드는 201 코드를 리턴하고(37라인), getString 메소드는 200 코드를 리턴합니다(50라인). 각 메소드의 리턴 타입인 ResponseEntity의 제너릭 타입은 HTTP 본문 타입에 대한 것입니다. Void는 본문이 없는 것이고, String은 본문이 문자열 타입인 것을 가리킵니다. 기존에..
석유 시추 프로그래머스에서 석유시추 문제를 풀었습니다. https://school.programmers.co.kr/learn/courses/30/lessons/250136 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제에 대한 설명은 위의 링크에서 확인하시면 됩니다. 이 문제를 풀 때 Stack을 사용해서 DFS로 풀었습니다. 각 석유 시추관의 위치에서 추출할 수 있는 석유량을 저장하는 배열 oilArr을 생성합니다.(43라인) 석유 탐색하는 방향을 저장하는 di배열, dj배열을 생성합니다.(46 ~ 47라인) 석유 탐색이 가능한 석유 시추관 조회합니다.(49 ..
110 옮기기 프로그래머스에서 110 옮기기 문제를 풀었습니다. https://school.programmers.co.kr/learn/courses/30/lessons/77886 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제에 대한 설명은 위의 링크에서 확인하시면 됩니다. 문자열을 문자 단위로 스택에 저장합니다.(35 ~ 50라인) Stack 사이즈가 2개 이상인 경우 Stack의 마지막 2개의 문자와 현재 문자를 110인지 비교합니다. 110인 경우 StringBuilder 클래스 stdSb 객체에 저장하고, 아닌 경우 Stack에 문자들을 저장합니다.(36 ~..
숫자 변환하기 프로그래머스에서 숫자 변환하기 문제를 풀었습니다. https://school.programmers.co.kr/learn/courses/30/lessons/154538 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제에 대한 설명은 위의 링크에서 확인하시면 됩니다. 최소 연산 횟수를 구하기 위해 BFS로 풀었습니다. 숫자와 연산 횟수를 저장하는 배열을 큐에 저장합니다.(32 ~ 33라인) 0번째 인덱스는 현재까지 연산한 숫자이고, 1번째 인덱스 현재까지 연산한 횟수입니다. 연산한 숫자 여부를 저장하는 set을 생성합니다.(35 ~ 36라인) set은 BF..
Spring RestControllerAdvice 스프링 컨트롤러에서 예외 처리를 try-catch가 아닌 다른 방법으로 처리하는 방법이 있습니다. @RestControllerAdvice를 사용하는 방법인데 try-catch를 일일이 사용하는 것이 아니라 한 군데에서 처리할 수 있습니다.  위의 @RestControllerAdvice 적용 전 컨트롤러 코드를 보게 되면 try-catch를 사용해 예외를 처리하고 있습니다. 이렇게 하면 중복되는 코드가 많아지고 가독성도 떨어져서 좋은 방법이 아닙니다.   @RestControllerAdvice를 사용하면 예외를 전역적으로 처리할 수 있습니다.  @ExceptionHandler는 특정 예외가 발생했을 때 해당 예외를 처리하는 어노테이션입니다. Exception 예외 처리는 17~28라인 handleExcep..
Spring Boot Redis 연계 스프링 부트에서 Redis에 데이터를 저장하고 조회하는 방법입니다. Redis에서 지원하는 데이터 구조 String, List, Hash를 사용할 것입니다. 스프링 부트와 Redis를 연계하기 위해 spring-boot-starter-data-redis 라이브러리를 추가합니다. RedisConfig 클래스는 Redis와의 연결과 데이터 직렬화를 설정하는 역할을 맡고 있습니다. application.yml에 있는 Redis host와 port를 속성으로 받습니다.(16 ~ 20라인) RedisStandaloneConfiguration 클래스를 통해 Redis 연결 설정을 구성하고 LettuceConnectionFactory 클래스를 통해 실제 Redis에 연결하는 빈을 등록합니다.(22 ~ 29라인) Re..
docker log rolling json 도커 컨테이너 로그에 rolling을 설정할 수 있습니다. rolling을 설정하지 않으면 로그 파일이 무한정 커지는 단점이 발생합니다. 이렇게 되면 로그를 확인하는 데 불편함이 있기 때문에 로그 rolling을 적용해야 합니다. 위의 화면은 nginx에 로그 rolling을 적용하고 있고 옵션은 다음과 같습니다. --log-driver=json-file: 로깅 드라이버를 json-file로 설정하고 있습니다. --log-opt max-size=1m: 로그 파일의 최대 크기를 1MB로 지정하고 있습니다. --log-opt max-file=3: 로그 파일의 최대 파일 수를 3개로 지정하고 있습니다. 3개를 넘어가게 되면 오래된 로그파일을 삭제합니다. nginx 컨테이너의 로그파일을 조회하면 앞에서 설정한 ..