들어가며Java/Spring 을 사용하던 중 항상 직면하는 문제인 Null 처리(NPE) 에 관한 이야기를 해보려고 합니다. 여러분들은 Java 에서 Null 처리를 어떻게 하고 계시나요? 코틀린을 사용하시는 분들은 정확히는 잘 모르지만 Null 처리를 자동으로 해주기 때문에 딱히 신경을 쓰지 않아도 된다고 합니다.(부럽습니다..) 하지만 Java 를 사용하시는 분들은 보통 직접 Null 처리를 해야합니다 보통 어떠한 Parameter 를 통하여 값을 전달받을 때 NPE 방지를 위해서 Null 처리를 하고는 합니다.저는 위 Parameter 값에서 null 을 체크하기 위해 보통 아래와 같은 코드를 작성하고는 했습니다if(id==null) { throw new RuntimeException("Null ..
업무상 기억하고 있어야 하는 'QR 코드 결제' 관련 도메인 용어를 정리해두고 보기 위한 글 1. MPM'Merchant Presented Mode' 이미 생성된 QR 을 소비자가 읽어가서 결제를 하는 것. 예를 들어 스타벅스에 가서 결제를 하기 위해 포스기 쪽으로 갔을 때 가끔 '카카오페이 가맹점' 이라는 표지판 같은 것과 함께QR 코드가 부착되어 있는 것을 본적이 있나? 필자는 여러 가맹점에서 본적이 있다. 그 표지는 카카오페이 를 통한 QR 결제가 가능하다는 뜻이였고카메라로 'QR코드' 를 인식한 후 페이사 어플로 연결되고 내가 금액을 입력 후 결제수단 지정 후 결제가 완료되는 플로우를 가진다. 약간 구시대적인 방법이라고 볼 수 있고, '큐싱' 에 취약할 수도?? 있을 것 같은 단점이 있다. 2..
로컬에서 테이블 데이터를 비우기 위해서 truncate 를 계속 사용하고 있다가 테스트 DB 에서 테스트를 한 후'truncate' 로 테이블 데이터를 지우는 것을 사수님이 보고 깜짝 놀라셨다 잠깐 당황했지만, 이유를 여쭤보았다 위 명령어는 최대한 지양 하라고 하고, 이유는 꼭 찾아보라고 말씀하셔서 제대로 공부를 해본 내용을 정리해보겠다RDBMS 는 MySQL8.0 을 기준으로 작성하였습니다 DDL (데이터 정의어)보통 DBA 나 DB 를 관리하는 사람들이 자주 사용을 한다 작업단위는 '테이블(=객체)' 단위로 변화가 일어난다 exO schema, table, view, index 1) CREATE (테이블 생성, 스키마 생성)CREATE TABLE users ( id INT AUTO_INCREM..
문제 : https://www.acmicpc.net/problem/11866 요세푸스 문제를 풀기 위해서는 기본적인 '요세푸스 순열' 의 개념에 대해 알고 있어야 한다. n과 k가 자연수이고, k 출처 : https://ko.wikipedia.org/wiki/%EC%9A%94%EC%84%B8%ED%91%B8%EC%8A%A4_%EB%AC%B8%EC%A0%9C 위 개념적인 설명 후에 '(7,3) 요세푸스 순열은 {3,6,2,7,5,1,4}이며 4번째 위치한 사람이 마지막으로 제외되게 된다.'라는 예시가 나와있다. 위 예시는 백준 문제와 같다. 나는 위 예시부터 이해가 되지 않았다. 7개의 수가 있고 3번째 사람부터 제거를 한다는 것 알겠지만그건 별개로 저 순열은 왜 3,6,2,7,5,1,4 순서가..
들어가며나는 개인 공부를 위해 인터넷 강의 및 책을 자주 이용하고는 한다. 그 중에서 인터넷 강의 플랫폼 중에는 퀄리티가 제일 좋고 사용자 편의성이 좋았던 인프런을 이용하는 편이다. Udemy 에서 인도 형들 강의를 딱 1번 들어봤지만, 형들 실력이고 뭐고 나한테 크게 전달이 되지 않아 사용하지 않았고인프런은 김영한님 강의를 통해 입문을 하였고, 강의 퀄리티 및 웹 사이트 UI 가 마음에 들어 꾸준히 사용하게 되었다. 인프런 강의를 보려고 들어가던 중 인프런에서 백엔드 개발자를 대상으로 스터디를 연다는 공지가 있었다.솔직히 맨처음에는 강의 사게하려는 상술이겠거니 생각했다. 그래도 궁금한 마음에 여러 스터디 커리큘럼을 보는대, 그 중 마음에 들었던 스터디가 2개가 있었다클린 코드 및 테스트 관련CS 관련..
들어가며나는 jsch 라이브러리를 사용하여 파일을 SFTP 를 통하여 다른 서버로 전송을 해야했다.ex) prod-server -> file-server 필자는 gradle 을 사용하여 아래 의존성을 추가하여 라이브러리를 사용하였다.implementation group: 'com.jcraft', name: 'jsch', version: '0.1.55' 간단하게 내 상황에 대하여 설명을 해보자면프론트에서 User 가 파일 업로드를 여러개 하였고 그 파일들을 서버로 전송 받아서위 파일들을 SFTP 세션을 생성해 파일 서버로 보내는 작업을 하고 있었다. 위 상황에서 추가적인 요구사항이 들어왔다.User 가 파일업로드 후 서버로 파일들을 전송할 때, User 가 업로드 한 파일이 아닌다른 서버에 존재하는 파일..
여러 footer 고정 시키는 로직을 구글링을 통해 찾아봤지만, 뭔가 이상하였다..특히 display: flex,absolute 위 2개를 사용한 방법 또한 보였다... 위 방법 추천한 사람은 진짜....후 본인 프로젝트에도 꼭 이것만 사용하길 바란다.. 또 다른 방법으로는 BootStrap, Bottom:0 주는 방법등 여러가지가 있었지만, 뭔가 내 프로젝트에는 맞지 않았다ㅠㅠ 그래서 내가 알아 보던 중 다행히 나한테 딱 맞는 방법이 있었고 그 방법은 아래와 같다. [Html] Header Body footer [CSS] [결과] 혹시라도 뭔가 높낮이가 맞지 않으면 CSS 에서 body 부분을 min-height 안에 calc() 함수 안에 수치를 조절하거나footer 에서 heigh..
들어가며평소 통합 테스트 위주로 작성을하였고, 복잡한 비즈니스를 매번 엔드포인트 단위로 테스트를 하는것에 지쳐단위 테스트를 연습하여 점점 확장되는 복잡한 비즈니스에도 사소한 에러를 발생시키지 않게 하기 위해 공부를 해보았다. [UnitTest]단위 테스트는 개발 초기 단계에서 버그를 발견하고 수정하는데 도움을 준다.단위 테스트는 코드의 리팩토링 과정에서 중요하다.기존의 테스트 케이스를 통해 리팩토링 후 기능이 올바르게 동작하는지 체크할 수 있기 때문이다. 단위 테스트는 Repository -> Service -> Controller 순으로 테스트를 할 것이다 말 그대로 단위 테스트는 단위(=Unit) 별로 테스트를 하는 것이다.즉 1개의 메소드를 작성하면 그 메소드가 올바르게 동작하는지 확인하는 테..