- Today
- Total
목록전체 글 (318)
개발하는 고라니
specification] framework - spring boot 2.6.3 test - Junit 5 들어가며 이제 애플리케이션을 개발하는데 있어 테스트는 선택이 아닌 필수가 되었으며, 작성을 용이하게 해주는 라이브러리 또한 플랫폼에 따라 많이 나와있다. 그만큼 개발자에게 테스트는 비교적 저렴한 비용으로 나의 코드가 안전함을 보장하는 이점이 있다. 대표적인 서적으로 Unit Test이 있고, 살짝 보았으나 역시 어려워 이해하는데 어려움이 있었다. 어쩃든, 테스트는 크게 단위 테스트와 통합 테스트로 나뉘는데 일반적으로 code review를 요청하기 위해 Github에 PR(Pull Request)을 올리는데, 이때 기존에 작성된 테스트 코드들이 깨지는지, 빌드가 깨지는지 등을 pipeline으로 정..
specification] MySql - 8.0.28 gradle - 7.4 flyway - 8.0.0 서론 개발을 하다보면, Database에 생성해놓은 테이블의 컬럼명이 수정된다던지, 컬럼의 타입이 변경되거나, 컬럼이 추가/삭제되는 일이 빈번하진 않지만 일어난다. 하지만 시간이 지나고, 우리가 이런 수정이 언제? 왜 생겼지?는 왠만해서 알 수 없다. 우리의 코드 또한 이러한 이유를 포함하여 VCS(Version Control System, ex.git) 을 사용하는 것이 아닌가. Database의 변경이력을 파일로써 관리해보도록 하자. 본론 본 글에서는 Flyway라는 '오픈소스 데이터 마이그레이션' 툴을 사용한다. 사용하는 방법은 여러가지가 있지만. build.gradle.kts에 작성해서 사용해보..
specification] spring boot - 2.6.3 서론 API를 만들면 종종 Exception이 발생하기 마련이다. Client에서 요청을 했는데, 예외가 발생했을 때 구체적이고 명시적으로 어떤 에러, 무엇 때문에 발생했는지를 "message"에 담아서 보낸다. fun validateMoney(money: BigDecimal) { if (money < BigDecimal(0)) { throw MinusMoneyException("금액이 음수입니다. money : $money") } } 하지만, 그간 무심코 넘어갔지만 에러 메세지를 확인해보려니 다음과 같이 발생한 적이 있을 것이다. { "timestamp": "2023-02-27T08:43:33.081+00:00", "status": 500,..
들어가며 최근 새로운 프로젝트를 시작하였는데, 이 도메인은 기존 팀에서 진행하던 도메인과 별개의 도메인으로 판단되어, 새 코드 레포지토리가 필요했다. 마침 최범균님의 '도메인 주도 개발 시작하기' 책으로 스터디를 했고, 기존에 MVC 패턴으로만 개발하면서 느낀점들을 경험하고 싶지 않아 다른 아키텍쳐를 도입하고자 하였다. 사실 DDD를 공부하기 전, 'Clean Architecture' 스터디를 먼저 했었다. 정말 어렵다. 초보자가 단숨에 하기에 벅찬 내용이고, 이걸 도입했다가는 아키텍쳐에 매몰되어 개발에 차질이 있을 것 같았다. 그래서 클린 아키텍쳐는 좀 더 성장해서 써보기로 했다. 그래서 고른 것이 DDD 이다. MVC 에서 아키텍쳐를 변경하게된 이유 1. 유지보수가 힘들다. 가장 큰 이유이다. MVC..
문제 링크 : https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net 문제 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여기서 연결되었다는 것은 어떤 집이 좌우, 혹은 아래위로 다른 집이 있는 경우를 말한다. 대각선상에 집이 있는 경우는 연결된 것이 아니다. 는 을 단지별로 번호를 붙인 것이다. 지도를 입력하여 단..
문제 링크 : https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 문제 N×M크기의 배열로 표현되는 미로가 있다. 1 0 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 미로에서 1은 이동할 수 있는 칸을 나타내고, 0은 이동할 수 없는 칸을 나타낸다. 이러한 미로가 주어졌을 때, (1, 1)에서 출발하여 (N, M)의 위치로 이동할 때 지나야 하는 최소의 칸 수를 구하는 프로그램을 작성하시오. 한 칸에서 다른 칸으로 이동할 때, 서로 인접한 칸으로..
문제 링크 : https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 문제 그래프를 DFS로 탐색한 결과와 BFS로 탐색한 결과를 출력하는 프로그램을 작성하시오. 단, 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문하고, 더 이상 방문할 수 있는 점이 없는 경우 종료한다. 정점 번호는 1번부터 N번까지이다. 입력 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1..
JobLauncher Batch Job을 실행시킨다. Job과 JobParameters를 인자로 받는다. Batch를 수행한 후 JobExecution을 반환한다. Spring Batch가 구동되면 JobLauncher 빈이 생성된다. Job 실행 jobLauncher.run(job, jobParameters) Sync taskExecutor를 SyncTaskExecutor로 설정할 경우 (Default) JobExecution을 획득하고 배치 작업 완료 후 JobExecution 반환 Scheduler에 의한 배치 작업에 적합 배치 처리시간이 길어도 상관없을 때 Async taskExecutor가 SimpleAsyncTaskExecutor로 설정할 경우 JobExecution을 획득하고 바로 JobEx..