본문 바로가기

분류 전체보기

(39)
[GIT] Git merge 충돌 발생 시 해결 GIT 을 사용하다보면 merge 를 해야하는 경우가 종종 발생합니다. 예를 들어, develop branch 에서 작업 후 production 에 반영하기 위해 merge 를 하는 경우가 대표적입니다. 이러한 경우 예상치 못한 상황으로 인하여 conflict 가 나는 경우가 있습니다. 최신화가 되지 않았거나, 중간에 hotfix 로 인하여 일부분이 급하게 수정되는 경우가 존재합니다. 이처럼 상황에 맞게 강제로 한쪽 branch 의 형태로 다른 branch 가 merge 되어야 합니다. 만약 develop branch 에 있는 소스를 master 로 강제로 merge 한다고 가정했을 때 여기서 merge 가 되어야 하기 때문에 history 를 조작하는 branch 를 B(master), merge 가 ..
[Spring Boot] @NotNull, @NotEmpty, @NotBlank 의 차이점 및 사용법 개발하시는 API 의 request parameter 의 null 체크를 어떻게 하고 계신가요? 대부분 별도의 null 체크 util 을 사용하거나, Controller 에서 조건문을 사용하여 null 을 체크하기도 합니다. 이러한 조건문과 메서드 들은 변수별 특징과 조건에 관련하여 공통화하기가 쉽지 않습니다. 또한 별도의 API 에 따라서 같은 값이여도 필수인 경우가 있고, 아닌 경우가 있을 수 있습니다. 따라서, 해당 API 의 parameter 에 따라 별도의 오류 메시지와 조건 이 필요합니다. 이런 경우 쉽게 사용할 수 있는 것이 @NotNull & @NotEmpty & @NotBlank 입니다. 이 3가지 Annotiation 은 Bean Validation (Hibernate Validatio..
[Javascript] javascript 로 엑셀 다운로드 기능 추가하기 사용자에게 내역을 전달해주는 것은 대부분 엑셀을 사용합니다. 엑셀을 업로드 하거나 다운로드 기능을 제공해주는 라이브러리가 있는데, 바로SheetJS js-xlsx 입니다. Github : https://github.com/sheetjs/sheetjs js-xlsx 사용하기 설치 $ npm install xlsx $ bower install js-xlsx browser CDN 엑셀 파일 생성하기 const workSheetData = [['hello', 'test']]; const workSheet = XLSX.utils.aoa_to_sheet(workSheetData); workSheet['!autofilter'] = {ref : "A1:R11"}; const workBook = XLSX.utils.bo..
[Spring] Maven Wrapper 설명 및 실행방법 spring 이나 spring boot 로 개발을 진행하신다면 Maven 과 Gradle 과 같은 build tool 을 사용해보신 적이 있으실 겁니다. Maven 이나 Gradle 이 무엇인지는 잘 알고 있지만, Wrapper 는 무엇인지 잘 모르는 경우가 많습니다. 사실 저 같은 경우도 IDE 가 아닌 별도의 서버에서 CLI 로 빌드를 하여 MAVEN 을 띄우려 했을 때 mvnw 가 어떠한 동작을 하는지 몰랐었습니다. 단순 maven 을 이용하여 빌드하고 배포할 수 있지만, 좋은 환경을 구성하기 위해 wrapper 는 필수적입니다. Maven Warpper 란 무엇인가 ? Maven wrapper 란 개발자들이 Maven 을 별도의 환경에서 개발할 때 local machine 에 따로 설치를 원하지 ..
2019년 회고 간단한 소감 2019년은 나에게 사회를 시작을 알리는 해였다. 취업하면서 꼭 해야겠다고 생각한 것이 있었다. 적어도 출근할 때와 퇴근할 때, 출근 30분전에와서 책을 읽자! 라는 목표를 작년에 계획했었는데 비교적 많은 책을 읽진 못했지만, 특정한 일이 있지 않은 이상 항상 책을 읽어왔다. 그 결과 10권정도 읽은 것 같다. (Clean code, Refactoring, 정보보안기사, TDD, 1만시간의 재발견, 객체지향의 사실과 오해, HTTP 완벽 가이드 등) 책을 읽을때면 내 일에 대한 자신감도 생기고, 한권 한권 쌓일 떄마다 스스로에게 뿌듯함과 열심히 살고 있구나 라는 생각을 들게 해준다. 살아가는데 사소한 행복을 찾는 것을 매우 중요하다고 생각하는데, 예를들어 씻을 때 따뜻한 물을 맞고 있으면 나..
[HTTP] CORS(Cross-Origin Resource Sharing) 이란 Cross-Origin Resource Sharing 은 추가 HTTP 헤더를 사용하여 브라우저가 한 출처에서 실행중인 웹 애플리케이션에 선택된 액세스 권한을 부여하도록하는 메커니즘입니다. CORS 를 알기전에 same-origin policy 에 대해 알아야합니다. Same-Origin Policy same-origin policy 는 우리나라말로 동일 출처 정책으로, 어떤 출처에서 불러온 문서나 스크립트가 다른 출처에서 가져온 리소스와 상호작용하는 것을 제한하는 중요한 보안 방식입니다. same-origin policy 는 malware 나 위협적인 접근에 대한 문서를 분리해, 공격받을 수 있는 경로를 줄입니다. same-origin 의 정의로는 두 URL 의 프로토콜, 포트(명시한 경우), 호스트가..
[JAVA] Reflection 을 이용하여 Method 호출하기 2개의 DB Connection Pool 을 사용하는 서비스를 개발하던 중 분리된 DB 의 Mapper 를 구분해서 호출해야 하는 이슈가 있었습니다. 문제는 2개의 Mapper 형태가 거의 유사하다는 점이었습니다. 매 서비스가 호출될 때 마다 if 문으로 서비스문을 분기하여 Mapper 를 호출해야될 정도 였습니다. 하지만, 그렇게 되면 중복코드의 양이 너무 많아지기 때문에 차선책이 필요했습니다. 그래서 생각한 것이 java 에서 제공하는 API 인 Reflection 이었습니다. Reflection 을 검색하면 다음과 같은 정의가 나옵니다. 리플렉션은 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API 이 말은 처음 본 사람에겐 의아할 수 있..
[Spring boot] java 파일을 특정 패키지로 이동 시 발생하는 ConflictingBeanDefinitionException 문제 해결 ControllerAdvice 를 이용하여 예외처리를 작업하던 중 패키지 이름에 대한 수정사항이 생겨 2개의 파일을 새로 만든 패키지로 이동시켰습니다. IntelliJ 에서는 워낙 Refactoring 기능을 다양하게 재공하기 때문에 파일을 옮기는데는 큰 문제는 발생하지 않았습니다. 하지만, Gradle 을 빌드하면서 다음과 같은 오류가 발생하였습니다. 10:05:20.310 [restartedMain] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - (AbstractApplicationContext.java:557) Exception encountered during context initialization - cancelli..