본문 바로가기

전체 글

(39)
[Junit] Spring boot 에서 @ControllerAdvice 를 테스트하는 방법 새로 작업한 매니저 사이트에 예외처리를 구성하던 중 ControllerAdvice 를 사용하게 되었습니다. ControllerAdvice 를 테스트하기 어려운 어려운 이유는 단순히 Junit 에서 제공하는 excpeted 를 사용하여 테스트할 수 없기 때문입니다. Junit 에서 제공하는 @Test 의 expected 는 테스트하고자하는 서비스가 예외를 던졌을 때 던져진 예외가 어떤 Class 인지를 확인하기 위한 용도로 사용됩니다. 예를 들어, 아래와 같은 Login 시 조회된 결과가 존재하지 않을 때 NotExistUserException 을 던지는 Service 가 존재한다고 가정합니다. public List login(LoginVO.Login params){ List users = loginMap..
[Mybatis] Spring boot 에서 mybatis 로 2개의 DB connection 하기 새로운 매니저 사이트를 작업하면서 한 서비스에 다른 여러개의 DB 를 접속시켜야되는 이슈가 발생하였습니다. 예를 들어, DB 접속정보가 따로 관리되는 채소과게와 과일가게의 매출 통계를 구하는 화면이 동일한 화면에 공존할 수 있어야 하는겁니다. 물론, 별도의 서버를 가지고 채소과게 서버와 과일가게 서버를 연달아 호출하는 방법도 있지만 기능이 동일하고 단순 DB 만 다른 경우라면 관리적인 측면에서는 같은 서버에 DB 를 2개 관리하는 것이 훨씬 유리합니다. 한 Spring boot 서버에서 2개의 Mysql DB Connection 을 가지도록 설정해보도록 하겠습니다. 1. application.yml 의존성 주입 설정 spring FruitShop: datasource: jdbc-url: connectio..
[JUnit]같은 타입인 여러개의 Mock 객체를 @InjectMock 으로 주입 시 파라미터를 제대로 인식하지 못하는 문제 해결 Reflection 을 이용하여 2개의 Mapper 을 동적으로 호출하기 위한 Util 을 만들기 위해 다음과 같이 Object 타입의 클래스를 2개 주입받아 초기화되는 로직을 작성하였습니다. private Object firstMapper; private Object secondMapper; public ReflectionUtils(Object firstMapper, Object secondMapper) { this.firstMapper = firstMapper; this.secondMapper = secondMapper; } 이를 테스트 하기 위해 다음과 같이 Mapper 를 @Mock 으로 생성하여 @InjectMock 으로 주입하고자 했습니다. @RunWith(MockitoJUnitRunner.c..
[JUnit] Test code 작성시 DI(Dependencies Inject) 를 적용하는 방법 Spring boot 에서 테스트 코드를 작성할 때, 고민되는 것 중 하나가 의존성 문제 해결입니다. 한 Service 가 다른 Service 를 의존하여 실행되거나, Controller 가 Service 를 의존하거나, Mybatis 를 사용하는 경우 Service 에서 Mapper 를 의존하는 경우가 대부분입니다. 이럴 때, 어떤 의존성을 가지냐와 서로가 어떻게 실행될 것인지에 대해서 의존성을 달리 주입할 필요가 있습니다. DI 와 IOC 에 관해서 궁금하신분은 아래 velog를 참고 부탁드립니다. 직관적으로 설명이 잘되어있습니다. IoC? DIP? IoC Container? DI? DI Framework? 도대체 그게 뭔데? Mapper Spring boot 에서 RDBS 를 사용하여 MVC 구조에..
[MYSQL] TEMPORARY TABLE 이란 최근 특정 업체와 결제 서비스에 관련해 연동작업을 진행하면서 대량 발송을 위해 배치작업이 요구되는 사항이 발생하였습니다. 대량 발송 시 요구되었던 작업이 발송을 하기 위해 건수 및 발송에 대한 정보를 읽고 임시테이블에 저장한 후 그것을 발송시켜야 하는 것이었습니다. 여기서 만약 3만 건을 요청한다고 한다면, 3만건에 대한 배치작업을 하기위해 3만건의 데이터가 생길 것이고 단지 1회 조회용을 위한 데이터라면 불필요한 테이블과 데이터가 생성될 수 있습니다. 이러한 데이터 생성을 방지하기 위한 것이 Temporary table 입니다. MYSQL Temporary table 은 다음과 같은 특징을 가지고 있습니다. temporary table 은 CREATE TEMPORARY TABLE 구문을 사용해서 만들어..
[Angular] main.js 에서 hmr 설정 시 module undefined 오류 해결 AngularJS 를 이용하여 개발환경 셋팅 중 hmr을 셋팅하던 중 module 을 찾을 수 없다는 오류가 발생하였습니다. 여기서 hmr 이란 Hot Module Replacement 의 약자로 모듈의 변경사항을 실시간으로 어플리케이션에 반영할 수 있도록 환경을 구성하는 것입니다. ng build 를 실행 시 다음과 같은 오류가 발생하였습니다. 내용과 같이 module 을 찾을 수 없다는 내용인데, 이는 node_modle 에서 @types 에 전역으로 선언되어 있는 변수를 찾지 못하는 내용이었습니다. 우선 typings 가 설치되어 있지 않다면 npm 으로 설치해줍니다. typings 란 Typescript 를 사용할 때 필수적으로 사용되는 툴입니다. 만약 typings 가 존재하지 않았다면, jqu..
[Javascript] IE11 에서 SCRIPT10002 와 SCRIPT10009 콘솔 오류 발생하는 문제 해결 최근 Vue 프레임워크로 매니저 사이트를 개발 후 크롬과 사파리에서 테스트 진행 후 IE11 에서 최종 확인을 하였는데, 화면 자체가 뜨지 않는 문제가 발생하였습니다. 요소 검사를 띄워 확인해보니 다음과 같은 'SCRIPT1002' 오류가 발생하였습니다. 문법오류가 있으면 실행이 안되었어야 할텐데 크롬은 정상적으로 동작이 되고 있다는 것을 확인하였기에, 끊임없는 삽질만 반복하고 있었습니다. 그러던 중 babel targets 에 browserlists 에 "ie 11" 를 추가하려는데 babel config 가 없다는 것을 발견하였습니다. package.json 에는 babel 에 대한 library 가 import 되어있었다고 생각해서 고려를 안했는데 babelrc 파일이 존재하지 않아서 발생한 문제였..
[Javascript] Webpack ? Bundle ? Webpack ? bundle ? 프론트 작업을 하게되면 필요한 것 들이 여러가지 있습니다. 컴파일이나 트랜스포터 등 화면을 띄우기 위해서는 수많은 작업이 요구됩니다. 만약 이런것들을 수동으로 작업을 해야했다면, 웹 사이트 시장이 절대 이렇게 커질 수 없었을 것입니다. Angular 는 Typescript 를 지원하는데, 실행하기 위해서는 javascript 로 변환 후, 프로젝트가 의존하는 모듈들을 로드하는 HTML 파일의 script 태그를 작성해야합니다. 또한 분리되어 있는 Javascript 를 하나의 파일로 모아줘야하는데 이러한 작업을 수작업하게 된다면 수많은 실수와 시간과 노력이 발생할 것입니다. 이러한 편리성을 제공해준 대표적인 것이, Webpack 입니다. Angular, Vue 등 대표적..