공부 57

map()과 flatMap()을 알고 쓰자

자바로 개발하면서 map과 flatMap을 종종 사용하였는고 map과 flatMap에 대해 이렇게 생각하고 있었다. map은 컬렉션의 반복을 위해 사용하는 것이고 flatMap은 2차원을 1차원으로 만드는 것이지 그러나 이것은 대단히 잘못 알고 있었던 것이었다. 결론부터 말하자면 Optional 클래스의 map과 flatMap 메서드는 다음과 같은 역할을 한다. // map을 이용하여 Optional -> Optional로 변경 Optional stringOne = Optional.of("1"); Optional integerOne = stringOne.map(s -> Integer.parseInt(s)); // flatMap을 이용하여 Optional -> Optional로 변경 Optional str..

JPA data.sql로 초기화 시 에러 해결방법 Error creating bean with name 'dataSourceScriptDatabaseInitializer'

spring에서 jpa를 사용 시 @Entity 어노테이션을 사용하면 ddl이 자동으로 생성되고(모드 설정 가능) 초기 데이터 생성을 위해 resource 디렉토리 아래 data.sql 파일을 insert 문을 넣어 사용하곤 한다. 이렇게 줄곧 사용해 왔으나 최근에 갑자기 에러를 마주하게 되었고 간신히 해결하게 되어 그 해결 방법을 기록하기로 했다. 스프링 버전이 올라가면서 생긴 문제로 2.4 버전에선 잘 되던 것이 같은 방법으로는 2.5에는 에러가 났다. 먼저 스프링 부트 2.4 버전을 보면 아래와 같다. Member클래스에 @Entity 어노테이션을 사용하여 members 테이블을 자동 생성하게 하였다. 그리고 초기 데이터를 넣기 위해 data.sql에 다음과 같이 insert문을 작성하였다. 실행을..

공부/Spring 2021.08.29

jackson으로 응답 값 직렬화할 때 속성값의 첫 단어가 한 글자인 경우

json형식의 응답으로 dDay라는 키를 반환하다가 문제가 생겨서 이 글을 작성하게 되었다. (아래 코드는 Github에서 확인이 가능하다.) 먼저 반환하려는 객체는 다음과 같다. public class FooDto { private int dDays; public int getDDays() { return dDays; } } 기대하는 응답 값은 다음과 같다. { "dDays": 0 } 하지만 실제로 응답된 값은 이러하다. { "ddays": 0 } 이를 기반으로 테스트 코드를 작성해 보았다. @WebMvcTest public class FooControllerTest { @Autowired private MockMvc mvc; @Test public void jsonSerializeTest() thro..

공부/Spring 2021.06.28

Netlify에 가비아에서 구매한 도메인 연결하기

netlify에서 호스팅을 하고 가비아에서 구매한 도메인을 연결하는 과정을 공유하려고 합니다. 먼저 netlify는 무료로 호스팅이 가능한 사이트입니다. 호스팅 하게 되면 도메인은 {사용자 지정 도메인}. netlify.app으로 됩니다. 그리고 가비아에서는 도메인을 저렴하게 팔고 있습니다 (다만 첫 해만 할인되고 그 뒤로는 할인되지 않음.) 이러한 작업이 필요한 이유는 우리가 웹사이트에 접속하기 위해 url을 입력하지만 실제로는 해당 url에 해당하는 ip를 찾아 이동하는 것입니다. 이러한 도메인을 ip로 변경해 주는 것이 네임 서버입니다. [네임서버 - 생활코딩] 실제 호스팅 되어있는 곳은 netlify이고 외부에서 접속하려는 도메인은 가비아에서 구매한 도메인임으로 기본 적용된 가비아 네임서버에서는 ..

공부/etc 2021.04.19

[번역] 이제 GitHub에서 새로 생성되는 저장소의 기본 브랜치는 main 입니다

이제 새로운 저장소의 기본 브랜치는 main입니다. 기본값을 다르게 설정하는 방법 : 사용자의 경우, https://github.com/settings/repositories 페이지 기관의 주인인 경우, https://github.com/organizations/YOUR-ORGANIZATION/settings/repository-defaults 페이지 기업의 관리자인 경우, https://github.com/enterprises/YOUR-ENTERPRISE/settings/member_privileges 페이지 이전에 저장소 생성시 기본 브랜치를 사용한 경우에는 이 변경에 영향을 받지 않습니다. 저장소가 존재하는 경우 이 변경에 영향을 받지 않습니다. 올해 말, 사용자,조직,기업 계정으로 기존 저장소의 ..

공부/Git 2021.03.01

Spring @Order 로 Bean 순서 정의하기

스프링의 @Order 어노테이션은 컴포넌트나 빈의 로드 순서를 정의할 수 있다. 같은 타입의 빈이 Autowired 될 때 그 순서를 @Order를 이용하여 정의하는 것이다. 예시 코드는 아래와 같다. 오른쪽 테스트 코드를 보면 List 타입을 Autowired 할 때 @Order에 정의된 순서대로 불러오게 된다. @Order를 자세히 보게 되면 값에는 정수형이 들어가고 기본 값은 Ordered.LOWEST_PRECEDENCE이다. Ordered.LOWEST_PRECEDENCE를 보게 되면 아래와 같고 정수의 최댓값을 나타내며 가장 낮은 우선순위를 뜻한다. 가장 우선순위를 높게 하기 위해선 정수형의 최댓값인 Ordered.HIGHEST_PRECEDENCE를 이용하면 된다. @Order의 값이 중복될 경우..

공부/Spring 2021.02.15

Spring @Profile 로 환경에 따라 다르게 설정하기 (+ @ActiveProfiles 로 테스트 하기)

@Profile 환경에 따라 다르게 동작해야 하는 경우가 있다. 이 때 @Profile이라는 어노테이션을 활용하면 간편하게 적용이 가능하다. 먼저 product, development, test 환경이 있고 각각의 환경에서 발송 기능 사용시 다르게 동작해야 한다고 하자. 먼저 발송하는 곳 소스이다. 발송하는 곳에서 환경에 따라 분기가 되는 것은 적합하지 않다고 생각한다. 그래서 저 Sender 객체를 생성하는 곳에서 분기가 되어야 한다. 그 과정에서 @Profile을 사용한다. 위 코드만 봐도 @Profile이 어떻게 사용되는지 대충 알 수 있다. 복수도 지원하고 산술연산자도 지원한다. 어플리케이션 실행 시 각각의 profile에 따라 다른 값이 빈이 동작하는 것을 확인 할 수 있다. @ActivePro..

공부/Spring 2021.01.08

Spring boot test 경로가 다른 패키지 테스트 시 오류

어느 날 마주한 에러 문구 Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test 아래 그림과 같이 패키지를 여러 개 두는 경우가 있다. 어플리케이션 실행 시는 component scan 어노테이션을 이용하여 다른 패키지도 빈 생성이 가능하다. 하지만..

공부/Spring 2021.01.07

[백준] 2225번 합분해

문제 0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오. 덧셈의 순서가 바뀐 경우는 다른 경우로 센다(1+2와 2+1은 서로 다른 경우). 또한 한 개의 수를 여러 번 쓸 수도 있다. 입력 첫째 줄에 두 정수 N(1 ≤ N ≤ 200), K(1 ≤ K ≤ 200)가 주어진다. 출력 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. 풀이 다이나믹 프로그래밍으로 풀이가 가능하며 점화식은 아래와 같이 도출 할 수 있다. dp[n][k] : n개의 정수 k개를 합하여 그 합이 n이 되는 경우의 수 n\k 1 2 3 4 5 6 j 1 1 2 3 4 5 6 j 2 1 3 6 10 3 1 4 10 4 1 5 5 1 6 6 1 7 I 1 dp[i-1][..

공부/알고리즘 2021.01.02

[백준] 2293번 동전 1

문제 n가지 종류의 동전이 있다. 각각의 동전이 나타내는 가치는 다르다. 이 동전을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그 경우의 수를 구하시오. 각각의 동전은 몇 개라도 사용할 수 있다. 사용한 동전의 구성이 같은데, 순서만 다른 것은 같은 경우이다. 입력 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 출력 첫째 줄에 경우의 수를 출력한다. 경우의 수는 1의 23제곱 보다 작다. 풀이 다이나믹 프로그래밍으로 풀 수 있다. 점화식은 dp[구해야하는 금액] += dp[구해야하는 금액 - 동전 가치] 이다. 그리고 dp[0] = 1 이다..

공부/알고리즘 2021.01.01
728x90
반응형