본문 바로가기

전체 글

(383)
백준(BOJ) 12849: 본대 산책 https://www.acmicpc.net/problem/12849 매우 상징성이 강한 문제다. 내가 그동안 왜 안나오나... 하고 생각했던 그런문제다. 문제가 조건을 명확하게 주지 않은 면이 있는데, 출발점도 정보관이고 도착점도 정보관으로 놓고 푸는 문제다. 문제에서 묻는것은 출발점에서 시작해 D분이 지났을때 다시 출발점으로 돌아올수 있는 경로의 수이다. 이렇게 총 경로의 수를 구할때 Dynamic programming으로 해결할 수 있음을 유의하자! 정석은 2차원배열을 이용하는 것이지만 배열을 하나더 추가로 두는 조건으로 1차원 배열 2개로도 해결이 가능하다. 두 풀이 모두 소개한다. import java.io.BufferedReader; import java.io.InputStreamReader; ..
DIP, IOC에 대하여. 참고: https://vagabond95.me/posts/about-ioc-dip-di/ 위 페이지에 나와있는 것처럼 할리우드는 IOC를 설명하는 원리임. 그리고 다음의 교수의 말대로 할리우드는 DIP를 구현하는 두 가지 방법중 하나. 따라서 IOC(Inversion Of Control)은 DIP(Dependency Inversion Principle)의 일부임. 할리우드 원리는 DIP를 구현하는 두가지 방법중 상속을 이용한 원리임. 즉, 할리우드 원리는 DIP의 일부를 설명하는 원리임. (복습. DIP를 구현하는 방법은 두가지임. 1. 포함관계로 느슨한 관계를 가지면서 관계주입을 받는 방법. 2. 추상클래스를 상속하여 무엇을 할지는 구체적인 자식클래스가 결정하고 언제할지는 부모가 결정하는 방법. 다른 ..
오류.. 대체 어떻게 그 해결에 시간을 단축할 것인가? 오류는 한번에 엄청난 양이쏟아 진다. 따라서 어떤것이 정말 문제해결과 관련된 것인지 판단하는게 가장 우선이다. 내가 원하는 방향으로 고쳐도 그 오류는 계속나온다. 그게 정상이다. 따라서 내가 정말 파악해야하는것은 내가 원하는 결과를 내주지 않는 그 원인을 수많은 오류 중에서 찾아내야 한다. 그게 가장 중요하다. 어떻게 찐 원인을 찾을 수 있나? 1.음... 우선은 하얀 글씨, 보통체의 글씨체로 써져 있는 문구는 무시한다. 2. 왠만해서는 뒤에 나오는 오류내용은 문제의 진짜 원인이 아닐 가능성이 높다. 어떤 문제가 있으면 그 문제에 관한 오류내용은 반드시 앞이난 그 자체에 해당한다. 정말 내가 겪고 있는 문제에 관련된 오류 메시지를 정확하게 파악하는게 시간을 대폭 줄여줄 수 있다. 아래는 내가 이전에 겪은..
org.hibernate.orm.jdbc.bind 문제, hibernate 버전업에 따른 명령어 변경문제 해결 관련링크: https://sundries-in-myidea.tistory.com/151 #버전업 문제해결 # binding문제 해결 yml파일에서 위와 같이 설정해두고 강의에서와는 다르게 내가 하면 계속해서 아래 그림과 같이 DB에서 받아오는 id는 가져와 지지가 않았다. 대체 뭐가 문제인 것일까? 말그대로 아무것도 모르는 상태라 무식하게 고민을 했었다. 어디부터 손을 대야 하는지 감도 오지 않아 더 시간을 낭비했다. 문제는 시간이 흐름에 따라 변화하는 프로그램의 업데이트에서 기인한 것이었다. 예전에는 단순히 와 같이 yml에 log에 관해서 이렇게만 해 주면 id는 물론 각각의 변수의 binding이 물려서 hibernate로 출력이 되었다고 한다. 하지만 시간의 흐름에 따라 버전이 변하고 버전의 변화..
Building project with Gradle 인용: https://spring.io/guides/gs/gradle/ 이래서 Gradle 빌드툴안에 maven이라는 단어가 들어간거다. 즉, dependencies안에 있는 라이브러리들은 컴파일시에도 필요하고 빌드시에도 필요한 dependencies인 것이다. 하지만 실질적으로 이 라이브러리가 사용되는 시점은 runtime혹은 test코드 실행시점이다. Implementation이 붙으면 runtime때 실질적으로 사용되는 것이고 testImplementImplementation이 붙으면 test코드 실행시에 사용됨. 출처: https://www.youtube.com/watch?v=ntOH2bWLWQs ==>> 모두다 컴파일 언급되는 의존성이다. 하지만 실제 사용되는 것은 컴파일시점 혹은 런타임시점으로..
Gradle Wrapper정리 인용: https://wonyong-jang.github.io/devops/2022/07/17/DevOps-gradle.html 복습. build.libs ==>> .\gradlew clean build, 즉, 빌드된 결과물이 담기는 폴더이다. plain은 말그대로 어플리케이션 실행에 필요한 모든 의존성을 포함하지 않고, 순수하게 작성된 소스코드의 클래스 파일과 리소스 파일만 포함한다. 반면 plain 키워드가 없는 jar파일을 executable archive 라고 하며, 어플리케이션 실행에 필요한 모든 의존성을 함께 빌드한다. Gradle Wrapper가 쓰이는 가장 강력한 장점이자 이유는 Java 프로젝트를 CI(Continuous Integration) 환경에서 빌드할 때 CI 환경을 프로젝트 빌..
CI(Continuous Integration), CD(Continuous Deploymenet)에 대하여 출처: https://artist-developer.tistory.com/24 출처 : Amazon Web Services CI/CD ?! 개발자로 밥먹고 사시는 분들이시라면, 혹은 IT서비스 업계에 종사하시는 분들이라면, 한 번 쯤은 들어봤을 법한 용어인데요. 흔히, DevOps 엔지니어의 핵심 업무라고들 하죠. 그런데 혹시 정확히 무슨 뜻인지 모르시면서 고개를 끄덕거리고 넘어간 경험....있으신가요? 우리 서로가 무슨 일을 하고 있는지는 알아야 하잖아요.... 그래서 오늘은 제가, 이 CI/CD 가 무엇이고 이 쪽 분야가 왜 중요한지! 에 대해 설명해드릴게요. CI (Continuous Integration) 먼저 CI부터 살펴볼까요? CI는 Continuous Integration 즉, 지속적인 통..
Execution failed for task ':test'. > There were failing tests. 아.. 해결했다ㅠㅜ 아... 드디어 해결했다. 나는 빌드하는 과정에서 몇십번을 Execution failed for task ':test'. > There were failing tests. 와 같은 에러가 나서 DB에서 데이터를 가져오는데 어떠한 문제가 있다는 것으로 생각하였다. 동시에 테스트 케이스만 하면 잘 돌아가고 또 앱이 정상적으로 실행되고 그런와중에 모두를 빌드하면 또 안되니까 너무 햇갈렸다. 그 어디에서도 상위폴더의 이름이 한글로 되있다는것이 문제의 원인이라는 것은 알려주지 않았다. 또 그런 와중에 DB로 부터 가져오는 정보가 강의에서 보는 것과는 다르게 아래와 같이 이름정보는 가져오는데 PK정보는 가져오지 못해서뭔가 앱과 DB사이에 문제가 있는것이구나.. 라고 생각했었다. (아직까지왜DB에서 그렇게불안전한 정..