목록Study (22)
DevYGwan
회사에서 프로젝트를 진행하면서, 프로젝트 초기에 DB 관련 DDL 관리가 힘들다는 것을 느꼈습니다. 프로젝트 초기다보니 DDL 수정이 자주 발생하고, 환경 별로 DB 서버를 다르게 하다보니 DB의 변경사항이 발생했을 때, DB 동기화 작업을 매번 하는 것이 번거로워 개발 생산성 저하로 이어지는 문제가 발생했습니다. 그러다보니 자체적으로 초기에는 DB 환경을 하나로 만들어 개발하는 전략으로 진행했습니다... 하지만 이는 환경 별로 종속성이 생겨 협업에 취약하고 서비스 배포 이후에 큰 문제를 야기할 수 있습니다. 따라서 이러한 문제를 해결하기 위해 방법을 찾아보던 중 Flyway라는 DB 형상관리 툴을 알게 되었습니다. 따라서 이를 적용하려고 겪은 시행착오 경험과 결론적으로 Flyway 공식 레포에 기여를 ..
회사에서 flyway을 도입하려 했는데 저희가 사용하는 DB가 flyway를 지원하지 않는 문제를 발견했습니다. 해당 공식 Repository에서 지원하는 DB 목록을 볼 수 있습니다. (https://github.com/flyway/flyway) 따라서 이 문제를 해결하기 위해 flyway 지원 코드를 작성했고 테스트를 완료했습니다. 이에 대한 설명은 다음 장에서 설명드리도록 하겠습니다. 그렇게 해서 flyway 지원을 성공적으로 했고, 공식 레포에 문의하여 PR을 통해 지원할 수 있게끔 요청을 남겼습니다. 하지만 문제가 PR이 언제 될지 모르고, 응답도 빨리 오지 않아 당장 사용하기가 힘들었습니다. 그래서 이 문제를 해결하기 위해 "우리가 작성한 코드를 라이브러리로 배포해보자" 라는 생각이 들었습니..
기본적으로 스프링에서 비동기 처리를 할때, 기본적으로 비동기 처리에 필요한 Executor를 등록하고 @Async 어노테이션과 @EnableAsync을 사용해서 비동기 처리를 진행합니다. 이때 이에 대한 원리를 제대로 알지 못해 제가 등록한 Executor와 @Async 어노테이션에서 사용하는 Executor가 다른 문제를 확인했고 이를 공유하려고 합니다. 간단하게 위에서 말한 개념들을 설명하자면,Executor : Java 표준 라이브러리에서 제공하는 인터페이스로, 비동기 작업을 실행하는 데 사용됩니다.구현체로 ThreadPoolExecutor, ForkJoinPool이 있습니다.쓰레드풀을 관리하고 작업을 실행하는 역할을 합니다.@Async : 메서드를 비동기적으로 실행하도록 만들어줍니다. 이를 통해 ..
이번 주제는 github actions로 CICD를 적용하는 과정에서 발생한 문제를 공유하려고 합니다. 저는 서버를 배포하기 위해 AWS EC2 인스턴스를 사용해서 배포를 진행했습니다. CICD를 적용하는 방식에는 여러가지 방식이 있는데, 저는 SSH 방식으로 서버 내에서 빌드 & 배포를 진행하는 방식을 사용했습니다. 간단하게 SSH란, SSH는 Secure Shell의 줄임말로, 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜입니다. 배포를 진행하면서 배포에는 필요하지만 외부에 공개되면 안되는 값들은 변수로 설정해 다른사람에게는 공개가 안될 수 있도록 처리해야 합니다. 제가 생각하기에 이러한 값들은 크게 2가지로 나눌 수 있다고 생각합니다.github actions가 CICD 동작 시에 기본적으로..
Test 코드를 작성하면서, Controller로직 테스트 시 Mocking처리를 한 경험은 자주 있을 것입니다. Mocking을 처리하면서, 특정 메서드가 호출될 때 원하는 동작을 지정할 수 있게 하기 위해 when() 메서드를 사용할때 발생한 문제에 대해서 공유하고 이를 해결하기 위한 여러가지 방법에 대해서 설명드리려고 합니다. 간단하게 제가 겪은 문제는 인스턴스 간의 "동등성" 문제로 인해, when()에서 사용한 메서드의 파라미터로 들어온 dto 클래스를 같은 클래스라고 인식하지 못해 when()이 제대로 동작하지 않아 생기는 문제입니다. 좀 더 문제가 된 상황을 자세히 설명드리겠습니다. 문제 상황 저는 회원가입에 관한 controller로직 테스트를 진행하려고 했습니다. 테스트 코드는 다음과 같..