@Scheduled(cron = " \* \* \* \* \* \* ")문자열0 : 초(0-59)문자열1 : 분(0-59)문자열2 : 시간(0-23)문자열3 : 일(1-31)문자열4 : 월(1-12)문자열5 : 요일(0-7)0,7 : 일요일, 1 : 월, 6 : 토"
지금까지는 DTO객체 - 여러 계층을 넘나들며 데이터를 전달하는 객체VO객체 - DB에서 값을 받는 객체, DB와 데이터 엑세스 계층을 넘나드는 객체 (DB에서 뽑아온 값을 넣는 객체) 라고 이해하고 사용해오다 이번 회사에서의 첫 프로젝트인 사내 프로젝트를 진행하며
BigDecimal은 임의 정밀도 십진 산술을 제공하는 Java 프로그래밍 언어의 클래스이다.이는 고정 비트 수와 제한된 정밀도를 갖는 int 또는 double과 같은 Java의 다른 숫자 데이터 유형과 달리 모든 크기 및 정밀도의 십진수를 처리할 수 있다.다른 숫자
Java에서 enum은 상수를 나타내는 특별한 클래스라고 하고, 일반적으로 한정된 상수 집합을 나타내는 데 사용한다.Java에서 enum(열거형)은 특정 유형의 상수 값을 정의할 수 있는 데이터 형식이다.이러한 상수 값은 컴파일러가 강력하게 검사하기 때문에 안정적인 코
프로그램 실행 시 발생할 수 있는 예외에 대비하는 것으로 프로그램 비정상 종료를 막고 실행상태를 유지하는 것프로그램을 돌렸을 때 오작동이나 비정상적으로 종료되는 원인을 오류나 에러라고 합니다. 이 에러는 '컴파일 에러'와 '런타임 에러'로 나눌 수 있는데, 글 자 그대
대소문자가 구분되며 길이에 제한이 없다.예약어를 사용해서는 안 된다.숫자로 시작해서는 안 된다.특수문자는 '\_' 와 '$'만을 허용한다.파스칼 표기법 (PascalCase)과 카멜 표기법(camelCase)를 사용한다.PascalCase : 모든 단어에서 첫 번째 문
Nohup은 프로세스를 시작한 사용자가 로그아웃한 후에도 프로세스를 계속 실행할 수 있도록 하는 Unix 명령이다. 이름에서 볼 수 있듯 nohup은 No Hang Ups의 약자로 백그라운드로 지속적으로 실행하는 프로세스를 의미한다. Nohup의 주요 목
구조와 의미를 결정하기 위해 일련의 규칙에 따라 일련의 기호나 텍스트를 분석하는 프로세스 = 구문분석즉, 문서의 내용을 Token(토큰) 으로 분석하고, 문법적 의미와 구조를 반영한 Parse Tree(트리) 를 생성하는 과정Token(토큰) Token : pub
많은 예제에 나오는 인코딩 방식인 Base64에 대한 개념을 잡기위한 글입니다.Base64는 이진 데이터를 ASCII 문자로 변환하는 인코딩 방식 중 하나이다.이진 데이터를 인코딩하여 전송하거나 저장할 때 사용한다.3바이트씩 이진 데이터를 묶습니다.각각의 3바이트(24
생성자 주입을 하며 final 키워드를 빼먹은 채 하루를 날린 나 자신...반성하며 이 포스트를 작성합니다.스프링에서는 객체의 생성과 소멸 등에 대한 제어를 컨테이너가 관리하고 필요할 때 주입을 받아 사용한다.본 포스트는 스프링 부트 기준으로 작성되었습니다. 스프링 과
이용기관에게 서비스하고있는 카카오페이 서비스들을 카카오인증 서비스로 이관 작업하던 중 연동테스트를 위해 파라미터들을 암호화해 넘겨주어야 했었다.암호화에 대해 알아보자암호화 : 평문을 암호화로...복호화 : 암호화를 평문으로...단방향 암호화 : 평문을 암호화 했을때,
JWT는 "JSON Web Token"의 약자로 인터넷을 통해 보안 인증 토큰을 생성하고 전송하기 위한 표준입니다.JWT는 웹 애플리케이션 및 API에서 사용자 인증 및 권한 부여에 널리 사용됩니다.즉, JSON으로 전자서명을 하여 URL-safe^1 문자열로 표현한
compileOnly 컴파일 시점에만 의존성을 사용하고, 런타임 시점에는 사용하지 않습니다. implementation 컴파일과 런타임 시점 모두에 의존성을 사용합니다. 이 옵션으로 추가한 의존성만 빌드된 jar 파일에 포함됩니다. runtimeOnly 런타임
외부속성(.yml, .properties)의 속성들에 접근하기 위해 아래의 어노테이션을 많이 사용한다.두 어노테이션의 차이점을 알아보자외부 구성 속성을 Java 개체에 바인딩하는 안전한 방법입니다.일반적으로 관련 속성 그룹을 단일 개체에 바인딩하는 데 사용됩니다.전용
MediaType이 제공하는 위 두 상수의 차이점을 알아보자두 가지 접근 방식 모두 동일한 미디어 유형 값을 제공합니다.하지만 MediaType.APPLICATION_JSON을 사용하면 미디어 유형 비교, 문자열에서 미디어 유형 구문 분석 등 MediaType 클래스가
"데메테르의 법칙" 또는 "최소 지식의 원칙"으로도 알려진 데메테르의 법칙은 객체 지향 프로그래밍에서 캡슐화, 느슨한 결합 및 정보 은닉을 촉진하는 소프트웨어 설계 원칙입니다.Demeter 라는 프로젝트를 진행하던 개발자들은 어떤 객체가 다른 객체에 지나치게 많이 알다
블로그 프로젝트를 하던 와중 타임리프로 이루어진 회원가입페이지에서의 POST(회원가입) 폼 요청을 컨트롤러에서 @RequestBoby 가 붙은 객체에 바인딩 되지 않는 문제가 발생했다.무엇때문에 발생했고, 어떻게 해결했는지 기록해보자FrontEnd 부분BackEnd 부
프로그래밍을 공부하다 보면 데이터 타입이 맞지 않아도 서호 호환? 이되고 값을 서로 주고받는 모습을 자주 보게된다.물론 형변환을 알고 있어 그리 낯선 모습은 아니지만 조금 더 알아보고자 기록하려한다.작은 데이터 타입을 큰 데이터 타입으로 변환하여 값이 정말도를 잃거나
공식 문서 중 발췌예약할 메서드를 표시하는 주석입니다.주석이 있는 메서드에는 인수가 없어야 합니다.일반적으로 void 반환 유형을 갖습니다. 그렇지 않으면 스케줄러를 통해 호출될 때 반환된 값이 무시됩니다.@Scheduled 주석 처리는 ScheduledAnnotati
지금까지는 DTO객체에는 @Data, VO객체에는 @Value 를 사용 @Getter 와 @Setter를 사용해왔다.사실 그냥 그렇게 쓰고있고, 쓰라니깐 클래스를 만들면 무지성 으로 어노테이션을 붙였던게 아닌가 하는 생각에 공부 및 정리겸 이 포스트를 작성합니다.@Ge
두 어노테이션 모두 Spring Framework 애플리케이션에서 속성의(.yml, .properties)의 구성 및 바인딩을 위해 사용되는 어노테이션 입니다. 두 어노테이션의 차이에 대해 알아보려고 합니다.개별 속성 값을 특정 필드 또는 생성자 매개 변수에 주입하는
기본 데이터 타입(int, float, boolean, ...) 또는 불변 객체(String, 래퍼클래스)를 메서드의 파라미터로 전달하면 파라미터의 값이 복사되어 메서드로 전달메서드 내부에서의 매개변수의 변경 사항은 메서드 외부의 매개변수 값에 영향을 미치지 않는다.메
무심코 사용하고 대강 이해하고 있던 인코딩, 해싱, 암호화에 대한 개념을 포스트를 통해 좀 더 정확히 이해하고자 합니다.아래의 그림을 통해 큰 그림을 그리고 가보자Data Encoding은 Scheme를 이용하여 데이터를 새로운 포맷으로 변경하는 것(Base64, AS
컴퓨터 프로그래밍에서 보일러플레이트 코드란 여러곳에서 재사용되며, 반복적으로 비슷한 형태를 띄는 코드1 를 말한다.1 : 대표적으로 Getter, Setter가 있다.개발자로서 여러곳에서 재사용되며, 반복적으로 비슷한 형태의 코드를 줄여야함이 마땅하지 않은가?보일러플레
Immutable(불변) 데이터 객체를 쉽게 생성할 수 있도록 하는 새로운 유형의 클래스입니다.JDK14에서 preview로 등장하여 JDK16에서 정식 스펙으로 포함되었습니다.record(레코드) 란 "데이터 클래스이며" 순수하게 데이터를 보유하기 위한 특수한 종류의
Spring 프레임워크에서 컨테이너는 컨텍스트라고도 합니다. 컨테이너는 Spring 애플리케이션에서 개체의 구성 및 수명 주기를 관리하기 위한 컨텍스트를 제공합니다.즉, Spring 컨텍스트는 Spring 애플리케이션의 모든 객체(또는 빈)를 보유하고 관리하는 컨테이너
필자와 같은 개발직종에 근무하고 계시다면 CLI(Command-Line Interface) 를 많이 접하고 사용하고 있을텐데요.여러 CLI 환경에 대해 짚고 넘어가고 싶어 이 포스트를 작성합니다ㅎㅎ윈도우 95 및 98에서 시작MS-DOS 라고도 한다.DOS 명령을 디렉
근무하고있는 회사의 자사 솔루션 서비스들을 이용기관 서버에 배포를 하며 문득 왜 여기는 war로 말아서 배포하고 왜 여기는 jar로 말아서 배포할까?라는 단순한 물음에서 시작된 궁금증이 이 포스트를 작성하게 된 이유입니다.막연하게 톰캣쓰면 war 로 말아서 배포하고
배열을 사용하며 미처 생각하지 못한 부분을 정리하려합니다.코딩중 배열 선언 후 참조타입 이외의 타입들은 초기값이 채워진다는 점을 모르고 사용해왔는데요.부끄럽습니다.ㅠ (배웠겠지만 까먹은듯...)각설하고 내용정리 들어가 보겠습니다!배열을 생성 할 때 따로 값을 지정해주지
알고리즘을 공부하다 약간 헷갈리는 개념을 접해 정리해보고자 합니다.저번에 포스트로 정리 했던 https://velog.io/@dainel/Call-By-Value-Call-By-Reference 랑 연관이 있다고생각해 지난 포스트를 살펴보았는데약간 설명이 빈약
스프링 빈 클래스는 공유가 될 수 있는 전역 변수를 사용하면 안된다.스프링 컨테이너는 스프링 빈을 생성할 때 디폴트로 싱글톤 패턴을 사용해 생성합니다. ? singleton(싱글톤) 이란 메모리에 하나의 인스턴스만 존재하도록 생성하는 패턴따라서 빈을 사용하는 여러 클
많은 예제에 나오는 인코딩 방식인 Base64에 대한 개념을 잡기위한 글입니다.Base64는 이진 데이터를 ASCII 문자로 변환하는 인코딩 방식 중 하나이다.이진 데이터를 인코딩하여 전송하거나 저장할 때 사용한다.3바이트씩 이진 데이터를 묶습니다.각각의 3바이트(24
필자가 맡고있는 서비스에서 사용자 정보로 pdf 파일(계약서)을 생성해 이용기관 ftp 서버에 저장을 시켜줘야하는 기능을 추가로 개발해야하는 상황이였습니다.우선 필자는 서버에 들어온 사용자 정보를 이용해 서버에서 pdf 파일을 생성 후 바로 이용기관의 ftp 서버로 보
전에 iTextPDF와 Commons-Net으로 PDF 생성 및 FTP 서버 업로드 기능 구현하기 포스트를 통해 서버로 들어 온 사용자 정보를 이용해 pdf 파일을 생성 후 외부 FTP 서버로 업로드 시키는 기능을 구현해보았습니다.요구사항의 변화로 많은 부분 수정이 있
요즈음 사내, 사이드 프로젝트에서 환경 분리를 위해 profiles 를 많이 사용하고 있습니다.겉핥기 정도로 알고있었던 profiles 에 대해 정리하고 넘어가려합니다.Spring Profiles 은 애플리케이션 구성의 일부를 분리하여 특정 환경에서만 사용할 수 있도록
iTextPDF와 Commons-Net으로 PDF 생성 및 FTP 서버 업로드 기능 구현하기iTextPDF 버전변경 및 확장된 기능(JPEG 변환, 압축, 다운로드)위 2개의 포스트를 통해 서버에 들어온 요청 데이터를 이용해 pdf 파일을 만들어 FTP 서버에 저장한
코딩을 하다보면 요청객체를 HttpSevletRequest 또는 WebRequest 로 받아 활용하고 있는데과연 위 두 객체의 차이점 및 특징은 뭔지 알아보려 합니다.이 포스트에서는 HttpSevletRequest 와 WebRequest 에 대한 설명 및 차이점에 대해
알고리즘 풀던 도중 2차원 배열을 정렬해야하는 로직을 작성 중무의식 적으로 Array.sort(A) 메서드에 바로 집어 넣었더니 java.lang.ClassCastException: I cannot be cast to java.lang.Comparable 오류가 발생했
Spring 환경에서는 개발자가 코드를 검증하는 데 도움이 되는 다양한 테스트 프레임워크와 도구가 있습니다.JUnit 과 같은 단위 테스트 프레임워크, Mockito 와 같은 모의 프레임워크, Spring TestContext Framework 와 같은 통합 테스트 도
백엔드 컨트롤러를 작성할때, 인수인계 받은 백엔드 코드를 보다보면 사용자의 요청정보에 접근할 수 있도록 HttpServletRequest 또는 WebRequest 를 사용하는 케이스를 많이 볼 수 있습니다.차이점은 무엇일까?이 포스트를 통해 정리해보려 합니다.HttpS
소프트웨어 설계에서 명령(Command)과 조회(Query)의 역할을 분리하는 것은 유지보수성과 가독성을 높이는 데 중요한 원칙입니다. CQS(Command Query Separation)는 이와 같은 설계 원칙을 정의하고 있으며, 이 포스트에서는 CQS의 개념, 예시
단위 테스트, 통합 테스트 란 말을 많이 들어보셨을꺼라 생각됩니다.그냥 메서드 하나 테스트 하면 단위 테스트 많아지거나 프로그램 전체를 테스트하면 통합 테스트 아니야? 라고도 생각하시는 분들도 계시겠네요 ㅎㅎㅎ이 포스트에서 정리해보려 합니다.단위 테스트(Unit Tes
log4j, log4j2, slf4j, logback 다 로깅과 관련된 단어다.국비충 백엔드 웹 개발자로 일하며 로깅에 대해서는 log. 찍으면 되는거아니야? 라고 생각했는데 이번 프로젝트에서 제대로 사용해보며 정리하고 넘어가야겠다 싶어 이 포스트를 작성합니다.초창기
이번에 개발한 프로젝트에 logback 을 적용해 각 환경별 (local, test, real) .xml 의 설정을 구성해 로그를 관리해보았다.경험하고 학습한 내용을 정리해 보려한다.필자가 이번에 개발한 프로젝트는 SpringBoot 3.3.2 버전으로 설정이 되어있다
스프링 부트 환경에서 기본적으로 포함되는 로깅 라이브러리인 logback 에 대한 내용들을 정리해보려 합니다.logback 은 log4j 1.x 버전에서 제공하는 기능을 보완하고 성능적으로도 향상시킨 로깅 시스템입니다.logback 은 3가지 모듈을 통해 다양한 기능을
조금 더 빠른 에러 대응을 위해 운영중인 시스템의 ERROR 로그 를 사내에서 사용하는 슬랙으로 받고 싶었다.해당 기능을 구현하며 경험하고 배운 내용들을 정리해보려한다.열심히 구글링을 하니 다행이 내가 구현하고 싶은 기능들을 먼저 구현한 사람들이 많았다.먼저 단계를 설
사내 시스템들의 SSL 인증서 갱신 주기가 돌아왔다.여러 시스템들의 SSL 인증서를 갱신하다보면 어떤 시스템은 톰캣에, 또 어떤 시스템은 로드밸런서에 여러 방식으로 SSL 인증서를 갱신한다.왜 각각 다른 방식으로 SSL 인증서를 갱신하는지, 여러 인증서 적용 및 갱신
사내 시스템들의 인증서를 모두 갱신 후 사내 시스템 A 에서 B 시스템에 요청을 할 경우 호출이 되지 않고 아래와 같은 에러가 발생했다.이에 관련해서 조치한 내용을 정리하려 한다.위와 같은 오류가 발생하는 이유는 여러가지가 있다.서버에서 사용하는 인증서가 클라이언트의