본문 바로가기
  • 개발하는 곰돌이

2023/0126

[Spring Boot] 다중 Profile을 이용하여 환경에 따라 다른 설정 적용하기 목차 개요 프로젝트를 진행하다 보면 로컬 개발 환경, 테스트 서버, 운영 서버에 따라 DB나 서버 포트 등과 같이 환경에 따라 설정을 다르게 적용해야 할 때가 있다. 이 때, Spring Boot의 다중 Profile을 이용하면 번거롭게 매번 설정을 수정할 일 없이 손쉽게 환경에 맞는 설정을 적용할 수 있다. 이번 포스트에서는 이러한 다중 Profile을 사용하는 방법과 Profile을 활성화 시켜 실행하는 방법에 대해 다룬다. 스프링부트 설정 spring.profiles.group은 하위의 key가 value에 해당하는 프로파일들을 포함한다. 즉, 하나의 프로파일을 활성화 하는 것으로 여러 개의 프로파일을 활성화하고 싶을 때 사용할 수 있다. 아래 예제들의 경우엔 dev는 profile1만 포함하게 되.. 2023. 1. 30.
[Kotlin] 백준 25306 : 연속 XOR 문제 링크 25306번: 연속 XOR 3에서 5까지의 자연수는 3, 4, 5로, 세 개 존재한다. 세 수를 XOR한 값은 (3 XOR 4) XOR 5 = 7 XOR 5 = 2 이다. www.acmicpc.net 문제 해설 \(A\)와 \(B\)가 최대 \(10^{18}\)이기 때문에 하나씩 차근차근 XOR 연산을 하면 시간 초과가 발생한다. 이 문제를 시간 내에 해결하기 위해선 누적 XOR의 성질을 알 필요가 있다. \(1\leq N\leq 100\)인 \(N\)에 대하여 각 구간별로 누적 XOR을 구해보면 다음과 같은 결과를 얻을 수 있다. 결과를 잘 보면 \(N\)을 4로 나눈 나머지의 값에 따라 규칙적으로 결과가 변한다는 것을 알 수 있다. 1 → 1 2 → \(N+1\) 3 → 0 0 → \(N\.. 2023. 1. 29.
[Oracle Cloud] 오라클 클라우드 VM 인스턴스에 MySQL을 설치하고 원격으로 접속하기 목차 시작하기에 앞서 이전 포스트에서 오라클 클라우드에 VM 인스턴스를 생성하여 원격 접속까지 진행해 보았다. 이번 포스트에서는 이 VM 인스턴스에 MySQL을 설치하고, IntelliJ 또는 DataGrip을 통해 오라클 클라우드 VM 인스턴스에 설치된 MySQL로 연결하는 과정을 다룬다. 오라클 클라우드 VM 인스턴스 방화벽 설정 VM 인스턴스에 DB를 설치하고 외부에서 접속하기 위해선 추가적인 보안 설정을 통해 DB가 사용하는 포트에 접속하는 것을 허용해야 한다. MySQL을 오라클 클라우드에 접속하여 컴퓨트 → 인스턴스에서 MySQL을 설치할 인스턴스를 선택하여 인스턴스 세부정보 페이지로 이동한다. 이후 인스턴스 정보에서 기본 VNIC 아래에 있는 서브넷 설정을 클릭하여 서브넷 세부정보 페이지로 .. 2023. 1. 28.
[Spring/Spring Boot] Service와 ServiceImpl 구조에 대하여 목차 문제 인식 Spring 또는 Spring Boot 예제들을 보면 거의 모든 예제가 위와 같이 Service 인터페이스와 각 서비스 인터페이스에 대한 구현체 클래스로 구성되어 있다. 이러한 구조 자체는 다형성적인 측면에서 보면 절대 잘못된 것이 아니지만, 온라인 상의 거의 모든 예제들, 나아가 회사에서 진행하는 프로젝트에서도 이러한 구조를 무분별하게 사용하는 모습을 보면서 한가지 의문이 생겼다. 어차피 인터페이스와 구현체 클래스를 1:1로 구성할거면 인터페이스 없이 서비스 클래스를 바로 작성하면 되지 않나? 이러한 의문으로 인해 서비스 인터페이스 - 구현체 클래스의 구조가 탄생한 계기에 대해 찾아보게 되었다. Service 인터페이스와 ServiceImpl 구현체 클래스를 나누는 이유 기본적으로 Se.. 2023. 1. 26.
[Kotlin] 백준 23300 : 웹 브라우저 2 문제 링크 23300번: 웹 브라우저 2 첫째 줄에 접속할 수 있는 웹페이지의 종류의 수 N, 사용자가 수행하는 작업의 개수 Q 가 각각 주어진다.(1 ≤ N, Q ≤ 2,000) 둘째 줄부터는 Q개의 작업이 주어지며, 각 작업이 의미하는 바는 다음 www.acmicpc.net 문제 해설 뒤로가기 목록을 저장할 스택과 앞으로가기 목록을 저장할 큐를 각각 만들면 손쉽게 해결할 수 있다. 본 코드에서는 덱을 사용했지만 크게 상관은 없다고 생각한다. 압축 기능은 뒤로가기 목록의 2번째 페이지부터 마지막 페이지까지 이동하면서 이전 페이지와 같으면 제거하는 식으로 구현했다. Code import java.util.StringTokenizer fun main() = with(System.`in`.bufferedRe.. 2023. 1. 26.
[Kotlin] 백준 26597 : 이 사람 왜 이렇게 1122를 좋아함? 문제 링크 26597번: 이 사람 왜 이렇게 1122를 좋아함? 질의응답에 모순이 없고 준성이의 최애 숫자가 무엇인지 정확히 알 수 있으므로 첫째 줄에 I got it!을 출력한다. $3$번째 질의응답을 통해 준성이의 최애 숫자가 무엇인지 정확히 알 수 있으므로 www.acmicpc.net 문제 해설 문제 자체는 평범한 Up&Down 방식의 문제다. 최초 시작값과 끝값을 각각 \(-10^{18}\)과 \(10^{18}\)으로 설정한다. 이후 질의응답에 따라 시작값과 끝값을 변경하는데, 질의 응답에서 주어지는 \(x\)가 기존 시작값보다 작거나 기존 끝값보다 클 수도 있다. 따라서 질의 응답이 \(x\) ^인 경우에는 시작값을 기존 시작값과 \(x+1\) 중 더 큰 값으로 변경하고, \(x\) v인 경우에.. 2023. 1. 25.
[Kotlin] 백준 11444 : 피보나치 수 6 문제 링크 11444번: 피보나치 수 6 첫째 줄에 n이 주어진다. n은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다. www.acmicpc.net 문제 해설 피보나치 수를 구하는 문제지만 입력이 굉장히 큰 경우다. 이 경우 피보나치 수를 구하는 일반적인 식인 \(F_n=F_{n-1}+F_{n-2}\)을 사용하게 되면 최대 \(10^{18}\)번의 연산을 수행해야 하기 때문에 이 방법은 사용할 수 없다. 문제를 해결하기 위해서는 더 효율적인 방법을 찾아야 하는데, 피보나치 수를 구하는 방법 중에는 도가뉴 항등식(d'Ocagne's identity)이라는 것이 있다. 도가뉴 항등식의 형태는 다음과 같다. $$F_{m+n}=F_{m-1}F_n+F_mF_{n+1}$$ 여기서 \(m.. 2023. 1. 24.
[Kotlin] 코틀린으로 알고리즘 문제를 풀 때 출력 방식별 속도에 대하여 [Kotlin] 백준 23309 : 철도 공사 문제 링크 23309번: 철도 공사 첫 번째 줄에 공사를 시작하기 이전에 있는 역의 개수를 나타내는 양의 정수 $N$과 공사 횟수를 나타내는 양의 정수 $M$이 주어진다. ($1 \le N \le 500\,000$, $1 \le M \le 1\,500 colabear754.tistory.com 위 링크의 문제풀이에서 BufferedWriter를 사용한 풀이는 시간 초과로 통과에 실패했는데 StringBuilder로 문자열을 하나로 만들어 출력한 풀이는 통과에 성공했다고 얘기한 적이 있다. 기본적으로 코틀린은 자바의 함수와 클래스를 사용하여 출력하기 때문에 백준님이 측정한 출력 방식별 속도 측정을 기반으로 문제를 풀고 있었다. 그래서 BufferedWriter.. 2023. 1. 20.