ljs14741의 등록된 링크

 ljs14741로 등록된 네이버 블로그 포스트 수는 53건입니다.

죽음 예측 테스트 - GodofDeath [내부링크]

이번에는 ChatGPT API를 활용하여 '죽음 예측 테스트 - GodofDeath'를 만들었다. Node.js, AWS lambda 등을 사용했다. 심심할 때 하기 좋은 죽음예측테스트! https://godofdeath.pages.dev/ 죽음 예측 테스트 - God of Death 죽음 예측 테스트입니다. - God of Death ChatGPT가 당신의 죽음을 예측하여 언제 어떻게 죽는지를 알려줍니다. godofdeath.pages.dev 아래 조코딩 유튜버의 책을 구입해서 읽고 만들었다. 책을 따라하면 누구나 만들 수 있지만 코딩입문자에게는 많이 어렵다는 생각이든다. 내가 생각하기에 괜찮은 결과물이 탄생했기 때문에 책을 구입한 비용이 아깝지는 않았다. 다만 ChatGPT API를 사용하는 만큼 돈을 지불해야하기 때문에 수익이 나야한다..는 단점이 있다. 죽음예측테스트-GodofDeath 내가 만든 '죽음 예측 테스트'는 죽음을 예측하는 죽음의신(GodofDeath)의 역할을

깍두기의 로또 추첨기 [내부링크]

깍두기의 로또 추첨기 깍두기만의 방식으로 만든 로또 추첨기, 추첨 방식은 영업 비밀이며 5만원이 잘 걸린다. 4년전에 React로 만든 로또 추첨기다. 이번에 '죽음 예측 테스트 - God of Death' 라고 ChatGPT API를 활용하여 내가 언제 어떻게 죽는지 테스트하는 웹사이트를 제작중이다. ChatGPT API를 사용하면 비용이 들기 때문에 그 비용을 충당하기 위해 카카오톡 광고를 넣었다. 그러면서 4년전에 만들었던 로또 프로그램에 UI도 개선하고 카카오톡 광고를 넣었다. 전에 내가 만든 프로그램으로 친구랑 같이 로또를 구매한 적이 있는데 둘 다 5만원에 당첨됐다 . ㅋ_ㅋ 전에도 5만원 당첨되고 5만원이 비교적 잘 당첨된다. 추첨방식은 영업비밀이다. 한번씩 들어가셔서 로또 번호 추첨받고 로또 구매해 보시길~ 깍두기는 예전에 카카오톡 이모티콘에 도전했었던 캐릭터인데 심사에서 떨어진 상품이다. https://kimchilotto.netlify.app/ 깍두기의 로또 추첨기

afce2130b75c47738d955c7a9beb9614 [내부링크]

afce2130b75c47738d955c7a9beb9614

AWS로 자바 프로그램 실행하기(4) [내부링크]

아래 사진은 java -jar Autotrading-0.0.1-SNAPSHOT.jar를 실행하고 에러없이 잘 기동되는 모습이다. 서버가 기동됐으니 접속하면 되지만 그전에 보안그룹을 설정해야 한다. 보안그룹을 설정하기 위해 EC2 목록에서 보안그룹을 누른다. 보안그룹에서 실행한 인스턴스에 해당하는 보안그룹ID를 선택한다. 기존 인바운드규칙에 SSH 22포트가 기본 설정되어 있을 것이다. 인바운드 규칙을 추가하여 80포트와 8080포트 2가지만 추가하면 될 것이다. 나는 안되어서 아래의 IPV6버전도 다 추가해보았다. 다 추가해도 오류가 발생하여 인스턴스 성능을 향상시켰더니 갑자기 되었다. 인스턴스 성능 향상시키는 법은 다음 포스팅에 작성하겠다. 이후 AWS 인스턴스화면에서 실행한 인스턴스를 클릭하면 하단에 상세정보가 나온다. 퍼블릭 IPv4 DNS의 주소를 복사한다. http://[복사한 퍼블릭IPv4 DNS]:8080 으로 접속한다. 포트번호는 본인의 프로젝트에 세팅한 포트번호를 넣

엑셀 행추가 매크로 사용하여 자동화하기 [내부링크]

회사에서 업무하다 보면 엑셀을 굉장히 많이 만지게 된다. 엑셀에서 이미 만들어진 매크로 기능을 써본 적이 있지만 실제로 만들어본 건 이번이 처음이다. 최근에 어디서 주워들은 이야기인데 "동일한 작업이 2번이상 반복되면 자동화하면 된다." 라는 말을 들었다. 듣고나서 '미쳤다'라는 생각밖에 안들었다. 엑셀 작업하다가 200개 행의 데이터가 있는데 각 1개의 행마다 3개의 행을 추가해야하는 일이 생겼다. 3개의 행 추가하는 작업을 200번 해야한다는 이야기다. 바로 매크로를 써야겠다 라는 생각이 들었고, 할 줄 몰라 구글 검색했다. 사용법이 간단했고 정리를 해보겠다. 1.엑셀에서 매크로를 만든다. 2. 매크로를 편집한다. 편집을 누르면 코드 작성하는 화면이 나온다. 아래 사진처럼 작성 후[ X]버튼으로 닫고 엑셀로 돌아간다. 필요하면 아래 복사 붙여넣기 하시면 된다. Sub 행추가매크로() ' ' 행추가매크로 매크로 ' 행추가 할 갯수를 입력하면 갯수만큼 행이 추가됩니다. ' ' Dim

엑셀 문자열 비교하기 (EXACT) [내부링크]

엑셀에서 유용하게 쓰는 EXACT 함수를 정리해보려 한다. EXACT 함수는 엑셀에서 두개의 문자열을 비교해준다. A열과 B열을 비교하여 같으면 TRUE 다르면 FASLE 대소문자도 구분하여 ABC와 abc는 FASLE 이다. 사용방법이 매우 간단하다. =EXACT(첫번째 데이터, 두번째 데이터) =EXACT(A1,B1) ※ TIP 맨처음 D열 맨위에 작성한 이후에 D열 오른쪽 밑 구석에서 마우스 왼쪽 클릭하여 밑으로 드래그 하여 필요한 만큼 사용하면 된다. 드래그하면 9행까지 자동 완성이다. before after

AWS EC2 렉걸릴 때 해결법 [내부링크]

앞선 포스팅에서 AWS로 서버 배포하는 과정을 다루었다. 나는 AWS를 처음 가입하면 750시간 무료인 프리티어를 이용하였다. 사용중하다보니 jar르 파일을 실행하고 서버를 올리고 나면 렉이 엄청 심하게 걸렸다. 키보드로 타자치면 15초 정도 이후에 쳐지는 현상이 발생했다. 그럴 때 마다 EC2 인스턴스를 지웠다가 새로 생성하곤 했다. 반복하다 보니 스트레스 였고 유료버전을 사용하든 다른 방법이 필요했다. 구글검색을 해봤더니 나와 같은 증상을 겪는 사람들이 있었고 해결방법도 존재했다. 그 방법을 정리해보겠다. 우선 프리티어로 사용하는 인스턴스는 1G의 메모리를 가진다. 렉이 걸리는 현상을 해결하기 위해 스왑파일을 이용하여 성능을 올려줄 계획이다. 아래사진의 before, after를 보면 Swap 파일의 차이를 볼 수 있다. Swap 생성하는 방법은 위의 사진처럼 명령어를 입력하면 되고 필요하면 아래에서 복사하면 된다. ubuntu 공식 문서에 의하면 메모리가 1기가 이하일 경우 스

[프로그래머스] 짝수와 홀수 (Java) [내부링크]

문제설명 정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요. 제한조건 num은 int 범위의 정수입니다. 입출력 예 답변 class Solution { public String solution(int num) { String answer = ""; if(num%2 == 0) { answer = "Even"; } else { answer = "Odd"; } return answer; } } 풀이과정 NUM값을 2로 나누었을 때 나머지가 0이면 짝수, 1이면 홀수 위처럼 생각했기 때문에 % 연산자를 활용했다. %연산자는 나머지값을 구해준다.

[프로그래머스] 문자열을 정수로 바꾸기 (Java) [내부링크]

문제 설명 문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요. 제한 조건 s의 길이는 1 이상 5이하입니다. s의 맨앞에는 부호(+, -)가 올 수 있습니다. s는 부호와 숫자로만 이루어져있습니다. s는 "0"으로 시작하지 않습니다. 입출력 예 예를들어 str이 "1234"이면 1234를 반환하고, "-1234"이면 -1234를 반환하면 됩니다. str은 부호(+,-)와 숫자로만 구성되어 있고, 잘못된 값이 입력되는 경우는 없습니다. 답변 class Solution { public int solution(String s) { int answer = 0; answer = Integer.parseInt(s); System.out.println("answer: " + answer); return answer; } } 풀이과정 문자열을 정수로 바꾸면 된다. 위처럼 생각했기 때문에 문자열을 정수로 바꿔주는 Integer.ParseInt를 활용했다.

[프로그래머스] 약수의 합 (Java) [내부링크]

문제 설명 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 제한 조건 n은 0 이상 3000이하인 정수입니다. 입출력 예 입출력 예 #1 12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다. 입출력 예 #2 5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다. 답변 class Solution { public int solution(int n) { if(n == 0 || n ==1) { return n; } int answer = 1; answer = answer + n; for(int i=2; i<n; i++) { if(i > (n/i)) { return answer; } if(n%i == 0) { answer = answer + i; if(i != (n/i)) { answer = answer + (n/i); } } } return answer; } } 풀이과정 약수 : 어떤 다항식이 2개 이상의 다항

[프로그래머스] 평균구하기 (JavaScript) [내부링크]

문제 설명 정수를 담고 있는 배열 arr의 평균값을 return하는 함수, solution을 완성해보세요. 제한 조건 arr은 길이 1 이상, 100 이하인 배열입니다. arr의 원소는 -10,000 이상 10,000 이하인 정수입니다. 입출력 예 답변 function solution(arr) { var answer = 0; for(i=0; i<arr.length; i++) { answer = answer + arr[i] } answer = answer/arr.length return answer; } 풀이과정 배열의 값을 꺼내기 위해 for문 사용

[프로그래머스] 나머지가 1이 되는 수 찾기 [Java] [내부링크]

문제 설명 자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다. 제한 조건 3 ≤ n ≤ 1,000,000 입출력 예 답변 class Solution { public int solution(int n) { int answer = 0; int tmp = 0; if(n%2 != 0) { answer = 2; } else { tmp = n-1; for(int i=3; i<tmp; i++) { if(tmp%i == 0) { answer = i; return answer; } } answer = n-1; } return answer; } } 풀이과정 홀수는 2로 나누었을 때 무조건 나머지가 1이다. 자연수 n을 가장작은 3부터 for문으로 나눈뒤, 나누어 떨어진 수에 -1을 하면 된다.

[프로그래머스] x만큼 간격이 있는 n개의 숫자 [Java] [내부링크]

문제 설명 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요. 제한 조건 x는 -10000000 이상, 10000000 이하인 정수입니다. n은 1000 이하인 자연수입니다. 입출력 예 답변 class Solution { public long[] solution(int x, int n) { long mul = 2; long[] answer = new long[n]; answer[0] = x; for(int i=1; i<n; i++) { answer[i] = x * mul; mul = mul+1; } return answer; } } 풀이과정 x에 곱하기 2를 n만큼 반복하면 된다. answer를 Long타입으로 반환한다면, 계산하는 연산자들도 모두 Long타입이여야 한다.

[프로그래머스] 자릿수 더하기 (Java) [내부링크]

문제 설명 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요. 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다. 제한 조건 N의 범위 : 100,000,000 이하의 자연수 입출력 예 입출력 예 #1 문제의 예시와 같습니다. 입출력 예 #2 9 + 8 + 7 = 24이므로 24를 return 하면 됩니다. 답변 import java.util.*; public class Solution { public int solution(int n) { int answer = 0; String x = Integer.toString(n); char y; for(int i=0; i<x.length(); i++) { y = x.charAt(i); int z = Character.getNumericValue(y); answer = answer + z; } return answer; } } 풀이과정 int형을 Stri

CMD로 텍스트 파일 자동으로 만들기 [내부링크]

회사에서 업무를 진행하다가 아래와 같이 텍스트파일을 100개정도 만들어야하는 상황이 생겼다. 최근에 어디서 주워들은 이야기인데 "동일한 작업이 2번이상 반복되면 자동화하면 된다." 라는 말을 들었다. 듣고나서 '미쳤다'라는 생각밖에 안들었다. 지금 작업도 100번할 일을 자동화하면 1번만 하면 된다고 생각했다. 예전 회사에서 이러한 작업을 cmd에서 sh파일로 실행하는 것이 생각났다. 구글검색해서 알아보았는데 사용법을 정리해보겠다. 아래 15개 텍스트 파일을 한번에 만들수 있다. 1. 폴더를 생성한다. 명칭은 상관없다. 2. 텍스트파일을 생성한다. 명칭은 상관없다. 텍스트파일의 이름과 확장자명을 변경한다. 이름은 아무거나 상관없고 확장자명은 sh로 변경한다. 변경하시겠습니까? 알림창은 [예]를 누른다. ex) test.sh 2. test.sh파일을 수정한다. test.sh 파일에 우측버튼 클릭한 후 메모장으로 연다. 빈 텍스트 파일 만드는형식 echo > 파일명칭.txt 텍스트파일

could not autowired no beans of... [내부링크]

에러 @Autowired -> 빨간색 밑줄 및 에러 내용 could not autowired no beans of... import com.bitcoin.autotrading.common.ModelMapperUtil; public class MapperService { @Autowired private ObjectMapper objectMapper; @Autowired /* 에러발생 */ private ModelMapper modelMapper; public <D> D map(Object source, Class<D> destinationType) { return modelMapper.map(source, destinationType); } 해결 ModelMapperUtil 클래스를 만들고, ModelMapper를 @Bean으로 등록 @Configuration public class ModelMapperUtil { @Bean public ModelMapper modelMapper()

스프링 컨테이너(Spring Container)와 스프링 빈(Spring Bean) [내부링크]

일반적으로 자바 프로그램에서는 각 객체를 직접 생성하고 조작하는 작업(객체를 직접 생성하여 메소드 호출)을 한다. 즉, 모든 작업을 사용자가 제어하는 구조 하지만 스프링에서는 객체를 사용자가 다루는 것이 아니라, 스프링에게 관리를 맡긴다. 사용자의 제어권을 다른 주체에게 넘기는 것을 IOC(제어의 역전) 라고 한다. 스프링이 객체들을 미리 생성해 관리하는 공간을 스프링 컨테이너 이렇게 스프링에 의하여 생성되고 관리되는 자바 객체를 빈(Bean)

어노테이션(Annotation) [내부링크]

어노테이션 Annotation(@)은 사전적 의미로는 주석이라는 뜻 자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술 즉, 프로그램에게 추가적인 정보를 제공해주는 메타데이터 @Controller public class PorIDSearchController { } 어노테이션 종류 @Component 개발자가 생성한 Class를 Spring의 Bean으로 등록할 때 사용 Spring은 해당 Annotation을 보고 Spring의 Bean으로 등록 @Controller Spring에게 해당 Class가 Controller의 역할을 한다고 명시하기 위해 사용 MVC에서 Controller클래스에 사용 @Service @RequestMapping @Bean @Getter @Setter 스프링에는 굉장히 많은 어노테이션이 존재 결론은 골뱅이인 @를 어노테이션이라고 부른다. @Controller -> 컨트롤러 어노테이션

JPA(Java Persistence API) [내부링크]

JPA 자바 진영에서 ORM 기술 표준으로 사용되는 인터페이스의 모음 JPA를 구현한 대표적인 오픈소스는 Hibernate 출처 - 구글 검색 ORM Object-Relational Mapping 자바의 객체와 관계형 DB를 매핑 SQL문이 아닌 Method를 통해 DB를 조작 JPA 예제 @APPLICATION.YML jpa: open-in-view: false hibernate: ddl-auto: create-drop properties: hibernate: show_sql: true format_sql: true use_sql_comments: true dialect: org.hibernate.dialect.H2Dialect @SERVICE public List<CoinPrice> coinPriceAllSelect() { return coinPriceRepository.findAll(); } @ENTITY public class CoinPrice { @Id @GeneratedV

JPA NativeQuery 사용법 [내부링크]

JPA NativeQuery SQL을 직접 정의하여 사용하는 방식 원하는 조회값이 findBy 등의 함수로 불가능한 경우에 사용 @REPOSITORY public interface CandleRepository extends JpaRepository<Candle, String> { @Query(value = "select id" + ", high_price as highPrice" + ", low_price as lowPrice" + ", next_high_price as nextHighPrice" + ", next_low_price as nextLowPrice" + ", range as range" + ", target as target" + ", case when high_price > target then trade_price/target else '0' end as earnings" + "FROM (SELECT id" + ", high_price" + ", low_price"

AWS(Amazon Web Services) [내부링크]

AWS(Amazon Web Services) 아마존에서 제공하는 클라우드 컴퓨팅 플랫폼을 구성하는 원격 컴퓨팅 서비스 내가 초중학생 때 즐겨 하던 메이플 시절에서 상점으로 물건을 판매하려면 집에 있는 컴퓨터로 메이플을 계속 실행해야한다. 엄마한테 혼나지 않고 컴퓨터를 24시간 켜놓고 물건을 판매하려면 메이플을 실행한 채로 모니터를 꺼야한다. 여기서 AWS를 이용하면 우리집에 컴퓨터를 실행하지 않더라도 AWS가 빌려주는 컴퓨터로 메이플을 실행할 수 있다고 보면 된다. 그럼 엄마한테 혼날일이 없다. 비유가 찰떡은 아니지만 대충 이렇게 생각하면 쉽다. AWS 회원가입 AWS를 이용하려면 아래 AWS 홈페이지에서 회원가입하면 된다. 회원가입하면 유료도 존재하지만 1년동안 Free Tier를 무료로 이용할 수 있다. https://aws.amazon.com/ko/free/?gclid=CjwKCAiA9ourBhAVEiwA3L5RFqUpp5_ByKUhEU4T3SHo1mf8ag6vDnpuJ0jwm

AWS로 자바 프로그램 실행하기(1) [내부링크]

AWS로 자바 프로그램 실행하기(1) 1. EC2 인스턴트 생성 아마존 홈페이지 검색창에 EC2를 검색하고 클릭한다. 우측 상단에 인스턴트 시작 버튼을 클릭한다. 맨 처음에는 아래목록에 아무것도 안나옴. 저는 이미 하나 해서 "실행중"인게 존재 인스턴스 이름을 정한다. 아무거나 해도된다. 저는 test 아래 OS도 원하는것을 넣으면 됩니다. 저는 Ubuntu 제일 중요한 것은 아래 "프리티어 사용가능" 으로 해야 무료 서비스입니다. 그 아래 인스턴스 유형도 마찬가지로 "프리티어 사용가능"으로 해야 무료서비스입니다. 다음 키 페어 생성 해야합니다. 새 키 페어 생성 클릭 키 페어 이름에 아무거나 입력. 저는 test 키 페어이름 RSA // RSA는 공개키 암호화방식 pem은 OpenSSh로 이용하나봄 // putty쓸거면 ppk이겠죠? 잘모름 저는 pem 키 페어 생성 버튼 누르면 test.pem 다운로드됨 네트워크 설정 및 스토리지 구성은 모르니 그냥 기본으로 놔두고 "인스턴스 시

AWS로 자바 프로그램 실행하기(2) [내부링크]

SSH 연결하기 이전 포스팅에서는 인스턴스를 생성을 완료했었다. 이번엔 SSH로 연결을 진행한다. 인스턴스 목록에서 인스턴스ID를 클릭한다. 클릭하면 상세정보가 나오며 여기서는 퍼블릭IPv4주소가 필요하다. cmd를 실행한다. cmd 말고도 git이나 powershell 등 가능하다. SSH로 접속하기 위해서는 이전 포스팅에서 다운로드 받았던 키페어가 필요하다. cmd에서 실행할 원하는 위치에 넣으면 된다. // C:Users\7666 ssh로 접속하기 위한 명령어를 날린다. ssh -i ./test.pem [email protected] ssh -i ./"키페어파일명칭.pem" ubuntu@본인 퍼블릭IPv4주소 ubuntu@ 저렇게 나오면 서버로 접속된거다. 아래는 접속에 성공하기 전에 Permission denied 라는 에러가 나면서 실패했다. 검색해서 하라는대로 아무리해봐도 넘어가질 않았다. 그래서 이전 포스팅에서 했던 인스턴스와 키페어를 새로 생성하였더니 된다. 3시간

AWS로 자바 프로그램 실행하기(3) [내부링크]

이전 포스팅에 이어서 가보겠다. git으로 서버에 접속하면된다. sudo apt update 명령어를 날려서 패키지 매니저가 관리하는 패키지의 정보를 최신 상태로 업데이트한다. java -version 명령어를 날려서 본인이 필요한 자바 버전을 설치하면 된다. sudo apt install openjdk-17-jre-headless continue 나오면 Y 이후 java -version을 입력하면 설치된 자바 버전이 나오면 잘 된거다. git clone을 하기 위해 깃허브에 등록되어있는 주소를 복사한다. git clone "복사한 주소" ls 명령어 치면 git에 있는 프로젝트폴더가 생성됨 cd "폴더이름" ./gradlew build 명령어로 빌드를 진행한다. 아래와 같은 에러가 발생한다. Permission denied sudo chmod +x gradlew 명령어를 날린다. 권한 설정 다시 ./gradlew build 명령어로 빌드를 진행한다. 빌드시 에러가 발생했다. 오류를

Swagger-ui 사용법 [내부링크]

Swagger-ui 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크 옆에 프리 아저씨분이 요즘은 실무에서 Swagger-ui를 많이 쓴다고 하셨다. 문서화의 장점과 프론트엔드와의 협업을 위해 필요하다고 한다. 그래서 진행중인 프로젝트에 사용해보았다. 실제로 적용해보니 Controller의 .do 트랜잭션에 대한 파라미터와 리스폰스를 볼 수 있다. DTO에 대한 정보도 나와 컬럼의 정보를 볼 수 있다. Springfox , Springdocs Swagger를 사용하기 위한 라이브러리로 Springfox와 Springdocs가 있다. 검색해보니 Springfox는 20년 7월을 마지막으로 업데이트가 안되고 있다고 한다. 그래서 현 시점에서도 업데이트가 되는 Springdocs를 선택했다. Springdocs 사용법 1. build.gradle에 아래 소스를 추가한다. implementation

Intellij git 커밋 원복하는 방법 [내부링크]

현재 songchangyu와 함께 토이 프로젝트를 진행하는데 songchangyu가 커밋한 이후로 404에러가 나는게 있었다. songchangyu가 커밋하기 이전버전으로 돌리기 위하여 아래방법을 사용했다. 히스토리에서 잘못올린 버전에 우클릭을 하면 Revert Commit 이라는게 있다. Revert Commit을 누르면 커밋하기 이전으로 원복되며 히스토리에 Revert가 내역이 추가된다.

JPA Querydsl 사용법 [내부링크]

JPA Querydsl은 조인을 하거나 복잡한 쿼리문을 다룰때 사용한다고 한다. JPA Querydsl을 사용하는 방법은 또 3가지가 있다고 한다. 처음 사용하는 입장에서 다른 블로그 뒤지면서 하는데 죄다 오류만 나고 어려웠다. 결국 어떻게 성공하긴 했는데 내가 한 방법을 정리해보겠다. 1.build.gradle buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' } dependencies { implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" implementation "com.querydsl:querydsl-apt:${queryDslVersion}" } def querydslDir = "$buildDir/generated/querydsl" querydsl { jpa =

프로시저 log 사용법 [내부링크]

프로시저 log 사용법 DBMS_OUTPUT_PUT_LINE 을 사용한다. 예제 CREATE OR REPLACE PROCEDURE RPOC_TEST ( result OUT NUMBER ) IS BEGIN DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE('시작일시 : ' || TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')); DBMS_OUTPUT.PUT_LINE(''); SELECT ga , na FROM select_table WHERE 1=1 EXCEPTION WHEN OTHERS THEN BEGIN result := 1; END; END RPOC_TEST;

프로시저 미리 정의된 예외 (Predefined Exceptions) [내부링크]

오라클은 다양한 상황에서 발생할 수 있는 다양한 종류의 예외(Exception)를 제공한다. 1. NO_DATA_FOUND SELECT 문에서 데이터가 없는 경우 2. TOO_MANY_ROWS SELECT 문에서 여러개의 값이 나온 경우 // 1개의 값을 뽑아야하는데 2개 이상 나온 경우 3. DUP_VAL_ON_INDEX 중복된 값이 유니크 인덱스에 있을 때 새로운 값을 INSERT 하는 경우 4. INVALID_CURSOR 잘못된 커서를 참조하는 경우 5. ZERO_DIVIDE 0으로 나누려는 경우 예제 EXCEPTION WHEN DUP_VAL_ON_INDEX THEN BEGIN OUT_RESULT_STR := '키가 중복됩니다. END ; WHEN OTHERS THEN BEGIN OUT_RESULT_STR := '프로시저 오류 발생'

정규표현식 [내부링크]

정규표현식 yn이 "Y"이면 0~9의 숫자가 아닌지 판단 yn이 "N"이면 정수나 실수인지 판단 public static boolean patternCheck(String str, String yn) { String patternString; if(yn == "Y") { patternString = "[^0-9]"; // [^]는 ! (0부터 9까지 아닌것) } else { patternString = "^[+-]?\\d*(\\.?\\d*)$"; // 정수,실수인지 } Pattern pattern = Pattern.compile(patternString); boolean schk = Pattern.matches(patternString, str); if(schk == true) { return true; } else { return false; } } String str = if(patternCheck(resrchOneGrd, "Y")) { System.out.println("숫자

REGEXP_INSTR [내부링크]

REGEXP_INSTR Oracle 에서 제공하는 함수이며 정규표현식 패턴에 해당하는 문자열을 검색하여 위치를 반환하는 함수 REGEXP_INSTR(source_string, pattern, start_position, occurrence, match_option, subexpression) source_string: 검색 대상이 되는 문자열 pattern: 정규표현식 패턴 start_position (선택): 검색을 시작할 위치를 지정 // 기본값은 1 occurrence (선택): 검색하려는 패턴이 몇 번째로 나타나는지를 지정 // 기본값은 1 match_option (선택): 패턴 매치 옵션을 지정 // 기본값은 'c'로 대소문자를 구분하지 않는 매치를 수행 subexpression (선택): 매치된 패턴 중 특정 하위 표현식의 인덱스를 지정 간단 예제 SELECT REGEXP_INSTR('Hi Bainary? binary haha', 'binary', 1, 1, 0, 'i')

자바 list 목록 순서 뒤집기 [내부링크]

Collections.reverse(); List<Map<String, Object>> list = GetRsiByMinutes.getListMapFromJsonArray(jsonArray); Collections.reverse(list); log.info("list : " + list); 기존 list 값 [1,2,3,4,5] Collections.reverse(list) 값 [5,4,3,2,1]

8080 포트 죽이기 [내부링크]

1. cmd 창을 연다. 2. 8080 포트 찾기 netstat -ano | findstr 8080 3. 8080 포트 죽이기 taskkill /f /pid (포트번호)

JMeter [내부링크]

JMeter란? Apache JMeter는 서버가 제공하는 성능 및 부하를 측정할 수 있는 테스트 도구 JMeter는 순수 Java 애플리케이션 오픈소스이며 서버나 네트워크 또는 개체에 대해 과부하를 시뮬레이션하여 강도를 테스트하거나 다양한 부하 유형에서 전체 성능을 분석하는 데 사용할 수 있다. JMeter 주요 개념 Thread Group: 몇 개의 쓰레드가 동시에 요청을 보내는 지 Sampler: 어떤 유저가 해야 하는 액션 Listener: 응답을 받았을 때 어떤 동작을 취하는 지 (검증, 리포트, 그래프 그리기 등) Configuration: Sampler 또는 Listener가 사용할 설정 값 (쿠키, JDBC 커넥션 등) Assertion: 응답 결과의 성공 여부를 판단하는 조건 (응답 코드, 본문 내용 등) JMeter 사용법 1. 실행 1. Thread Group 생성 1-1. Thread Properties 설정 Number of Threads: 몇 개의 쓰레드(유

css 파일 분리하는법 [내부링크]

기존 test.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>타이틀</title> <style> .test { margin: 0; background: #eaedf1; font-family: 'Lato', sans-serif; } </style> </head> <body> <h2>Main Test </h2> <div> <button class="test" type="button">나의 계좌 정보</button> </div> </body> </html> 파일 분리 후 폴더 구조 style.css 파일을 생성한다. 파일 분리 후 test.jsp 파일 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core

java -&gt; jsp 데이터 전송하는법 [내부링크]

java -> jsp 데이터 전송하는법은 여러가지가 있다. 여기서는 Model 방식을 설명하겠다. testController.java 파일 @RequestMapping("/") public String index(Model model) throws IOException, JSONException{ double number = 100 model.addAttribute("number",number ); return "index"; } model.addAttribute("넘길 변수명", 넘길 변수); index.jsp 파일 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <h2>테스트</h2> <tr style="height: 21px;"> <td>넘버값</td> <td>number: ${number}</td> </tr> </t

문자열과 Date 타입 간의 변환 방법 [내부링크]

문자열과 Date 타입 간의 변환 방법 this.srt_dttm = "2023-09-04 09:00:00"; SimpleDateFormat sdfYMDHms = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //String을 날짜 연산을 위해 Date 객체로 변경 Date date = sdfYMDHms.parse(this.srt_dttm); //날짜 연산을 위한 Calendar객체 생성 후 date 대입 Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.DATE, -1); // 1일 빼기 this.srt_dttm = sdfYMDHms.format(cal.getTime()); 결과값 -> srt_dttm = "2023-09-03 09:00:00" cal.add(Calendar.MINUTE, 10); //10분 더하기 cal.add(Calendar.MINUTE, -10)

REGEXP_REPLACE [내부링크]

REGEXP_REPLACE 정규표현식을 사용하여 문자열에서 패턴을 찾아 다른 문자열로 대체하는 SQL 함수 REGEXP_REPLACE(input_string, pattern, replacement) input_string: 대상 문자열 pattern: 찾을 정규표현식 패턴 replacement: 찾은 패턴을 대체할 문자열 또는 패턴 간단 예제 SELECT REGEXP_REPLACE('Hello, binary!', 'binary', '이진수'); 위 예제는 'Hello, binary!' 문자열에서 'binary'를 찾아 '이진수'로 대체 결과값: 'Hello, 이진수!' 정규표현식 예제 SELECT REGEXP_REPLACE('A1234567890A', '[^0-9]', '가나다라마바사') FROM DUAL 위 예제는 'A1234567890A' 문자열에서 '0부터 9까지 아닌것'을 찾아 '가나다라마바사'로 대체 결과값: '가나다라마바사1234567890가나다라마바사'

정규표현식2 [내부링크]

정규표현식 예제 REGEXP_REPLACE('ABCD1234', '<[^>]*>|\&([^;])*;', '') 결론 -> HTML 또는 XML 태그와 HTML 엔티티를 찾아라. 1. <[^>]*> <[^>]*> → HTML 또는 XML 태그 찾기 [^>]* → '>'를 제외한 문자가 0번이상 * → 0번이상 결론 → '<' 로 시작해서 '>'로 끝나는 것 ex) <table>, <td> 이런거 2. \&([^;])*; \&([^;])*; → HTML 엔티티 찾기 \& -> 엔티티가 '&'로 시작하는거 ([^;])* → ';'을 제외한 문자가 0번이상 ; → 엔티티가 ';'으로 끝나는거 결론 → '&'로 시작해서 ';'로 끝나는 것 // ex) &lt; ※엔티티: HTML에서 '<' 부등호 쓸때 &lt; 이렇게 적는거

Ajax [내부링크]

Ajax Asynchronous JavaScript and XML 빠르게 동작하는 동적인 웹 페이지를 만들기 위한 개발 기법의 하나 웹 페이지 전체를 다시 로딩하지 않고 백그라운드 영역에서 서버와 통신하여, 웹 페이지의 일부분만을 갱신 ex) 화면을 새로고침 하지 않은 상태에서 '저장' 버튼 클릭하여, 서버단에 저장을 처리하는 로직인 함수 호출 JSP에서 Ajax 사용한 예제 function save() { var requestParam = "123" $.ajax({ type: "POST", url: "/saveController.save.do", /* 서버 함수 호출 */ data: {"requestParam": requestParam}, /* 서버로 넘길 데이터 */ contentType: "application/x-www-form-urlencoded; charset=utf-8", error: onError, /* 에러 발생 시 처리 */ success: onSuccess /*

Cron 표현식 [내부링크]

Cron 표현식: 주기적인 작업을 정의하는 데 사용되는 문자열 표현식 7자리로 구성되며, 연도는 생략가능 * * * * * * * 초 분 시 일 월 요일 (년) Cron 예제 * * * * * ? /* 매분 실행 */ 0 0 * * * ? /* 매시간 정각에 실행 */ 0 0 3 * * ? /* 매일 오전 3시에 실행 */ 0 0 3 ? * 2 /* 매주 월요일 오전 3시에 실행 */ 0 0 3 1 * ? /* 매월 1일 오전 3시에 실행 */ 0 0 10 * 1,6-12 ? /* 6월~12월마다 매 1일 오전 10시에 실행 */ 0 0 8 * 6-9 ? /* 6월~9월 매 오전 8시에 실행 */ 보통 스케줄러 안에 설정 특수문자 * : 모든 값 ? : 특정한 값이 없음 - : 범위 지정 , : 여러 값을 지정 / : 증가하는 값을 지정 (초기값/증가값) L : 마지막 값 지정 W : 가장 가까운 평일 # : 몇 번째 무슨 요일인지 지정

ERD [내부링크]

ERD Entity-Relationship Diagram 데이터 모델을 시각적으로 표현하는 데 사용되는 다이어그램 데이터베이스 설계에서 엔터티(개체), 속성, 관계 등을 나타냄 ERD 구성요소 엔터티(Entity): 현실 세계에서 식별 가능한 개체 또는 사물 속성(Attribute): 엔터티가 가지고 있는 특성이나 데이터 관계(Relationship): 엔터티 간의 연관성 기본 키(Primary Key): 각 엔터티의 기본 식별자로 사용되는 속성 외래 키(Foreign Key): 다른 테이블의 기본 키를 참조하는 열 ERD 관계 1) 1:1 관계 한명의 학생은 여러개의 과목을 수강할 수 있다. 하나의 수강과목은 한명의 학생을 가진다. 2) 1:N 관계 한명의 학생은 여러개의 과목을 수강할 수 있다. 3) M:N 관계 한명의 학생은 여러개의 과목을 수강할 수 있다. 하나의 수강과목은 여러명의 학생을 가질 수 있다. ERD 관계 표기법

역행자 [내부링크]

역행자.. 결론부터 얘기하면 이 책은 별로 추천하고 싶지 않다. 재미없다. 이 책은 제목과 작가 소개를 해야겠다. 제목은 "역행자"다. 책에서 얘기하길 95퍼센트의 인간은 타고난 운명 그대로 평범하게 살아간다. 이들을 '순리자'라고 한다. 나머지 5퍼센트의 인간은 정해진 운명을 거스르는 사람이다. 이들을 '역행자'라고 부른다고 한다. 작가 이름은 자청이다. 예전에 나는 경제적 자유와 비슷한 주제로 유튜브를 본 적이 있다. 꽤 유명한 신사임당이라는 유튜버다. 신사임당 유튜브를 한 번 봤는데 알고리즘에 계속 나왔다. 하지만 재미없어서 한번 보고 안 봤다. 이때 알고리즘으로 비슷한 자청이라는 유튜버 이름을 처음 봤다. 자청은 흙수저 출신으로 33살에 경제적 자유에 이른 사람이다. 대단한 사람이라고 볼 수 있다. 나는 2023년 2월부터 꿈이 생겼다. 그 꿈은 많은 사람들이 이야기하는 것처럼 나도 경제적 자유를 누리고 싶다. 일을 하지 않아도 돈이 벌리는 그런 나만의 시스템을 구축하고 싶다

batch 프로세스 [내부링크]

스케줄러를 통해 원하는 시간대에 원하는 작업을 실행시키는 자동화 프로세스

Quartz Scheduler [내부링크]

Quartz란? Java Scheduling 라이브러리 일련의 작업들을 단발성, 주기성으로 실행할 수 있다. Quartz 구성요소 Job : 실제 작업을 수행하는 객체, 여러개의 JobDetail을 가질수 있다. JobDetail : job을 어떻게 실행할지 속성과 JobDataMap을 이용하여 정의하는 방식 Trigger : 스케줄러를 어떤 방식으로, 어떤 주기로 작동할 지 결정한다. SimpleTrigger : 특정시간 및 횟수 CronTrigger : 주기적으로 반복 Scheduler : 생성된 JOB과 Trigger를 입력하여 스케줄러를 실행한다. Quartz 스케줄러 사용법 1. 라이브러리추가 2. 반복 실행할 함수 생성 (Job) 3. 실행 주기 설정 (Trigger) 4. 실행 (scheduler) ※ Job과 Trigger를 만들어 Scheduler에게 보내면 Scheduler가 실행한다. 예제1) 폴더구조 QuartzController.java package com.

JSP와 Servlet 개념 [내부링크]

Jsp JavaServer Pages HTML 코드에 JAVA 코드 서버에서 웹페이지를 동적으로 생성하거나 데이터 처리를 수행하는 기술 화면 인터페이스 구현에 너무 많은 코드를 필요로 하는 비효율성 테스트할 때 빌드를 항상 다시해야 한다는 한계가 있음 Servlet Java 코드 안에 HTML 코드 서버에서 웹페이지를 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램 HTML 표준에 따라 작성되므로 서블릿과 달리 웹페이지 작성이 편리 WAS에서 자동으로 빌드하고 클라이언트 화면에 동적으로 보여줌 Jsp와 Servlet 1. Servlet과 JSP 모두 동적 웹페이지(Dynamic Web Page)를 만들거나 데이터 처리를 수행하기 위해 사용되는 웹 어플리케이션 프로그래밍 기술 2. 많은 코드를 작성해야하는 Servlet의 비효율적인 부분을 보완한 것이 Jsp Jsp와 Servlet 코드예제 jsp <%@ page language="java" contentType

JSP 기본 문법 [내부링크]

JSP는 HTML 코드에 JAVA 코드를 사용하는 것이다. HTML 코드에 JAVA 코드를 사용하기 위해서는 몇가지 문법이 필요하다. 1. 지시자 (page, taglib, include) <%@ 지시자 속성="값 ... %> <%@page contentType="text/html;charset=utf-8" %> <%@include file = "./include/session_check.jsp"%> 2. 스크립트릿 <% 자바코드 %> jsp에 자바코드를 사용할때 사용 <% String id = detectXSSEx(request.getParameter("m_id")); String passwd = detectXSSEx(encrypt("SHA1", request.getParameter("passwd"))); String webPageKind = detectXSSEx(request.getParameter("webPageKind")); String result_sc = ""; Strin

프로시저 [내부링크]

프로시저 특정한 로직을 처리하기만 하고 결과 값을 반환하지 않는 서브 프로그램 테이블에서 데이터를 추출해 조작하고 그 결과를 다른 테이블에 다시 저장하거나 갱신하는 일련의 처리를 할 때 주로 프로시저를 사용 사용방법 CREATE OR REPLACE PROCEDURE 프로시저명 (parameter1 [IN, OUT, IN OUT] datatype , parameter2 [IN, OUT, IN OUT] datatype, ...) IS 변수 상수 선언 BEGIN -- 프로시저 내용 -- SQL 문장들과 제어문(조건문, 반복문 등)을 사용하여 작업 수행 EXCEPTION -- 예외처리 END 프로시저명; 예제 CREATE OR REPLACE PROCEDURE proc_test( -- IN은 입력, OUT은 출력 user_id IN VARCHAR , user_name IN VARCHAR , OUT_RESULT_STR OUT VARCHAR) IS -- 변수선언 EXCEPTION_TEST EXC

프로시저와 함수(function)의 차이 [내부링크]

프로시저 반환값을 가질 수도 있고 가지지 않을 수도 있다. 함수 반환값을 반드시 가져야 한다. 프로시저 예제 CREATE PROCEDURE calculate_sum( IN a INT , IN b INT , OUT sum INT) BEGIN SET sum = a + b; END; 함수 예제 CREATE FUNCTION calculate_sum(a INT, b INT) RETURNS INT BEGIN DECLARE result INT; SET result = a + b; RETURN result; END;

프로지서 커서(Cursor) [내부링크]

커서(Cursor) 커서는 결과 집합을 처리하고 탐색하기 위해 사용되는 데이터 구조 커서를 사용하면 결과 집합의 레코드를 한 번에 하나씩 처리하거나 수정가능 주로 SELECT 문으로 조회한 결과를 순회하거나 업데이트할 때 사용 CREATE PROCEDURE example_cursor() BEGIN -- 커서 선언 DECLARE cursor_name CURSOR FOR SELECT column1, column2 FROM table_name WHERE condition; -- 커서 열기 OPEN cursor_name; -- 커서 탐색 DECLARE variable1 datatype; DECLARE variable2 datatype; -- 반복문을 사용하여 커서의 결과를 탐색 my_loop: LOOP FETCH cursor_name INTO variable1, variable2; IF done THEN LEAVE my_loop; END IF; -- 각 레코드에 대한 작업 수행 -- 예시:

불편한편의점 [내부링크]

1년간 책 1권도 읽지 않던 나는 2023년 2월부(붕어빵 장사가 끝난 이후)로 열심히 살기로 다짐했다. 열심히 살기 위해서 나는 매일 두 가지를 꼭 하기로 했다. 첫째는 운동이다. 집에서 팔굽혀펴기, 턱걸이, 스쿼트, 플랭크, 버피테스트를 할 것이다. 둘째는 독서다. 군대에서 소설책을 읽을 시간이 꽤 있었기 때문에 그때 책을 좋아하게 되었다. 하지만 군대 이후로는 다시 독서와는 거리가 멀어졌다. 최근에 붕어빵 장사를 하면서 알게 된 카페 사장님이 같이 책 읽자고 독서모임에 들어오라고 했다. 아침 6시 30분에 한다고 해서 깔끔하게 포기했다. 하지만 내가 생각하기에 카페 사장님은 굉장히 멋있어 보였다. 책을 많이 읽어서 그런지 지적인 면이 얼굴에 드러났으며 책을 읽어야겠다는 결심을 내렸다. 무작정 네이버에 베스트셀러를 검색했다. 자기 계발 관련 책이 많았고 소설책은 "불편한편의점" 하나밖에 눈에 띄지 않았다. 사실 열심히 살기 위해 독서를 선택한 것이기 때문에 자기 계발 관련 책을

unity를 이용한 게임 만들기 [내부링크]

나는 이 블로그에 쓰는 글은 나의 일기장이라고 생각하고 글을 쓴다. 나는 28살 백수다. 대학교를 IT 관련 학과를 나와서 자연스럽게 IT 쪽으로 취직을 했다. K-에듀파인이라는 시스템을 유지 보수하는 일을 했다. 3년 동안 직장을 다니다가 좋은 곳에 이직을 하기 위하여 퇴사했다. 2022년 12월 31일 자로 퇴사하고 1월은 붕어빵 장사를 했다. 원래는 6개월 정도 놀면서 이직을 하려고 했지만 지금은 이직할 마음이 zero다. 붕어빵 장사를 접고 2월은 게임 앱을 만들고 있다. unity는 대학교 때 2주짜리 특강을 들어본 적이 있다. 다 까먹었다. 엄청 어려웠었던 기억밖에 없다. 그렇지만 '조코딩'이라는 유튜버가 unity를 이용한 게임 만들기 영상을 올렸었다. 그걸 보고 따라 했다. 22년 4월에 코로나에 걸렸었는 데 코로나 걸린 동안 unity를 이용하여 게임을 만들었었다. 지금 다시 보니까 하나도 모르겠다. 그래서 유튜브를 다시 보면서 복습했다. 그리고 캐릭터와 음향을 고쳤