목록전체 글 (179)
코딩마을방범대
UUID (Universally Unique Identifiers) 각 개체를 고유하게 식별 가능한 값 (범용 고유 식별자) 사용 방법 UUID.randomUUID().toString() 위 코드를 실행할 때마다 새로운 값들이 출력되며, 이 값을 유니크한 값으로 사용해주면 된다. QR 코드를 만들 때 유니크한 값을 ID로 주어 사용하게 되는데, 이럴 때 사용하면 중복값 체크할 필요 없이 바로 사용이 가능하다. 만약 길이가 길어서 짧게 쓰고 싶다고 substring을 주게 된다면, UUID를 사용하는 목적이 사라진다! 문자열을 잘라서 쓸 경우 중복값이 발생할 수 있고, 이 문자열 그대로가 유니크한 값이기 때문에 수정없이 그대로 사용해야 한다. 난수를 통해 랜덤값을 만들게 될 경우 중복 체크 로직은 따로 구..
QR 이란? 흑백 격자무늬 패턴으로 정보를 나타내는 매트릭스 형식의 이차원 바코드를 의미 QR코드는 주로 한국,일본,중국,영국,미국 등에서 많이 사용되며, 명칭은 덴소 웨이브의 등록 상표 'Quick Response' 에서 유래됨 특징 종래에 많이 쓰이던 바코드의 용량 제한을 극복하고 그 형식과 내용을 확장한 2차원의 바코드로 종횡의 정보를 가져서 숫자 외에 문자의 데이터를 저장할 수 있음 숫자 최대 7089자, 영문자와 숫자 최대 4296자, 이진 8비트 최대 2953바이트, 한자 1817자를 담을 수 있음 QR과 바코드의 차이점 QR 바코드 장점 종횡(2차원)으로 사진, 동영상, 지도, 명함 등 다양한 정보를 편리하게 담아낼 수 있음 인식속도, 인식률이 높음 단방향(1차원)으로 숫자나 문자 정보 저장..
Reflection 클래스의 구조를 분석하여 동적 로딩을 가능하게 하는 기능 힙 영역에 로드된 Class 타입의 객체를 통해 원하는 클래스의 인스턴스를 생성할 수 있도록 지원하고, 인스턴스의 필드와 메소드를 접근 제어자와 상관 없이 사용할 수 있도록 지원하는 API 장점 런타임 시점에서 클래스의 인스턴스를 생성하고, 접근 제어자와 관계 없이 필드와 메소드에 접근하여 필요한 작업을 수행할 수 있는 유연성을 가지고 있다. 단점 캡슐화를 저해한다. 런타임 시점에서 인스턴스를 생성하므로 컴파일 시점에서 해당 타입을 체크할 수 없고, 구체적인 동작 흐름을 파악하기 어렵다. 단순히 필드 및 메소드를 접근할 때보다 리플렉션을 사용하여 접근할 때 성능이 느리다. (모든 상황에서 성능이 느리지는 않음.) 사용하기 Ref..
git에 push한 데이터를 되돌려야 되는 경우 Intellij에서도 간단하게 진행이 가능하다. - 20230725 버전: 에러 발생 - 20230625 버전: 정상 작동 위와 같은 상황이라면 20230625 때의 Commit ID를 알아내면 된다. 먼저 push를 되돌리는 명령어에는 두가지가 존재한다. 명령어 설명 Reset 특정 Commit을 삭제 ( 특정 커밋 이후는 모두 삭제 ) 커밋 히스토리가 깔끔해진다. Revert Commit은 그대로 두고, Commit을 취소하겠다는 추가 Commit을 실행 ( 덮어쓰기 ) 협업 시 충돌 확률을 낮춰준다. Intellij의 git 탭에서 원하는 브랜치를 선택한 후 되돌리고 싶은 Commit을 클릭한 후 Reset Current Branch to Here을 ..
System 환경 변수 가져오기 컴퓨터마다 설정되어있는 환경 변수가 천차만별이다. 개발을 하게 되면서 PC에 따른 환경 변수가 필요할 경우가 있는데, Java에서는 이 시스템 환경 변수를 가져올 수 있다. System.getenv() 모든 시스템 환경변수에 대한 값을 key, value ( Map ) 형태로 반환합니다. System.getenv(String name) name에 해당되는 시스템 환경 변수의 값을 반환합니다. 예제 System.getenv("DriverData"); 컴퓨터의 환경 변수 리스트를 확인할 수 있는 방법 제어판 -> 시스템 -> 고급 시스템 설정 -> 환경 변수 System 명령어 실행 시키기 자바프로그램이 돌아가는 시스템(윈도우즈, 리눅스, 유닉스, 등)의 명령어를 실행시킨 후..
REST API로 구축된 웹서비스의 경우 해당 URL에 맞는 하나의 API를 호출하면 하나의 응답을 제공한다. 따라서 어떠한 이벤트가 발생했는지를 조회하기 위해서는 LOG 등을 통해 개발자가 직접 확인해야 알 수 있는 구조이다. 만약 서버에 예상치 못한 예외가 발생했을 때 개발자가 실시간으로 바로 알 수 있는 방법은 없다. 스케줄러 등을 이용해 주기적으로 확인한다쳐도 이미 이벤트가 발생한 한참 뒤일 수도 있다. 이 단점을 극복하기 위해 웹훅을 사용하며, 이 웹훅에 대해서 알아볼 예정이다. 웹훅이란? 웹페이지 or 웹앱에서 발생하는 특정 행동(이벤트)들을 커스텀 Callback으로 변환해주는 방법 행동 정보를 실시간으로 제공하는데 사용됨 서버에서 특정 이벤트가 발생했을 때, 클라이언트를 호출하는 방식으로써..
Optional에 대하여 Object를 리턴하는데 null일 가능성이 있다면 Optional로 래핑하는 것을 권장 매핑 함수의 적용 결과가 null인 경우 빈 Optional을 반환(메소드를 체이닝했을 때 중간에 null이 있어도 빈 Optional로 계속해서 이어나갈 수 있음) 메소드체이닝이란? 메소드를 줄줄이 엵어서 메소드를 계속해서 사용할 수 있게끔 하는 방법 setter() 메소드에서 void가 아닌 세팅된 객체를 리턴 map과 flatmap A type을 B type으로 바꾼다는 뜻(매핑) Optional의 값이 있는 경우에만 실행 map 결과를 Optional로 감싸서 리턴 flatmap 감싸지 않고 반환 orElse와 orElseGet 의 차이점 구분 설명 orElse() 내부 객체의 상태와..
더블 Shift Shift를 두 번 빠르게 눌러주면 전체 검색을 이용할 수 있다. 코드 또는 플러그인 등의 설정 부분까지도 검색할 수 있기 때문에 유용하다! 만약 컨트롤러의 RequestMapping에 메인 경로가 설정되어있고 그 안에 세부적으로 API가 나눠져있는 경우 컨트롤러의 메인 path를 모를 경우 검색이 번거로울 수 있다. 이럴 때 이 기능을 사용하면 간단하게 검색이 가능하다! Shift 키를 두 번 빠르게 눌러준 뒤 슬래시를 하나 입력해주면 아래 사진처럼 검색할 종류 별로 지정이 가능하다. 만약 메인 path가 /user이고 검색하고 싶은 API 메소드의 경로가 /login 일 경우, 메인 path와 합쳐서 아래처럼 검색하면 된다. 이 외 단축키 기능 단축키 프로젝트 창 on / off Al..