본문 바로가기

Dev

(65)
[Spring Batch] 5.0 버전에서 달라진 점과 기본 예제 진행하던 프로젝트에서 공용충전기의 대한 정보 업데이트를 위해 주기적으로 공용충전기의 대한 정보를 다시 받아와야하는 작업을 진행하기 위해 스프링배치를 공부하게 되었다.Spring Batch스프링 배치는 로깅, 추적, 트랜젝션 관리, 작업처리 통계, 반복 작업 자동화 등 많은 기능을 제공하는 스프링 기능을 제공한다.스프링배치는 Job과 Step을 관리하는 기능을 제공하며 실제로 실행하는 것은 스케줄러이다.Srping Batch 5.0 에서 달라진 것들Spring Batch 5.0 Migration Guide많은 초보 개발자들이 ChatGPT와 블로그 예제를 보면서 코드를 작성할 것이다.현재 많은 스프링배치 포스팅들은 이전 버전을 사용하고 있어서 지금은 사용하지 못하는 것이 많다.@EnableBatchProc..
드라이빙 테이블, Merge 문이란? 드라이빙 테이블은 조인시 가장 먼저 읽히는 테이블을 뜻한다. ANSI JOIN의 경우는 순서 상관없이 옵티마이저가 자동으로 최적화해서 가장 좋은 전략을 짜준다. 하지만 오라클조인을 사용할 땐 순서가 중요해지는데 대학에서 배운대로 더 적은 테이블을 먼저 읽는 것이 성능에 좋다. 즉, 드라이빙 순서대로 테이블을 기술한다는 것은 "먼저 읽혀야 하는 테이블을 FROM 절에서 먼저 배치한다"는 의미이다. MERGE INTO 대상_테이블 TUSING (서브쿼리 또는 소스 테이블) SON (조인 조건)WHEN MATCHED THEN UPDATE SET 컬럼1 = 값1, 컬럼2 = 값2 ...WHEN NOT MATCHED THEN INSERT (컬럼1, 컬럼2, ...) VALUES (값1, 값2, ...
ANSI JOIN, ORACLE JOIN 차이점 단순하게 안시조인은 JOIN, ON 을 사용하는 것이고 오라클조인은 WHERE 절로 테이블을 엮는 것이다. 그래서 오라클조인을 사용하면 아우터조인을 할 수 없다는 것이다. 하지만! 할 수 있다. 이런식으로 + 기호를 적어주면 아우터조인처럼 나타낼 수 있다. +를 적지 않은 쪽이 메인테이블이 된다. 뭔가 오라클조인이 불편해보이지만 장점도 있다. 안시조인은 두 테이블에 반드시 값이 존재해야 한다. 하지만 오라클조인은 WHERE 절이기 때문에 원하는 값을 = 'VALUE' 이렇게 해주면 얻을 수 있다.  성능차이도 ANSI조인이 더 옵티마이저 전략, 대용량 데이터에서 유리하다. 출처: https://gent.tistory.com/469
MySQL / ORACLE 의 GROUP BY 동작 차이 원래 MySQL만 사용했는데 취업을 해보니 많은 회사들이 ORACLE을 사용하고 있다는 것을 알게되었다. 그리고 개발자는 프로그래밍보다 중요한 것이 SQL 작성 능력임도 알게되었다. 그래서 요즘 SQL 문제를 열심히 풀고 있는데 그룹화 문제에서 다음과 같은 에러를 만났다. GROUP BY 절 이후 컬럼  https://school.programmers.co.kr/learn/courses/30/lessons/144856 이 문제의 정답 쿼리로 예를 들겠다.SELECT a.author_id, a.AUTHOR_NAME, b.CATEGORY, sum(price * SALES) as TOTAL_SALESFROM BOOK b, AUTHOR a, BOOK_SALES bsWHERE ..
[ORACLE] 오라클의 NULL 처리 IS NULL, IS NOT NULLSELECT * FROM TABLE_NAMEWHERE COL_NAME IS NULL NULL인지 아닌지 처리NVL, NVL2SELECT NVL(1, 2), NVL(COL_NAME, 'a')FROM TABLE_NAME; COL_NAME이 NULL이면 a가 나온다.SELECT NVL2('A', 'B', 'C') // C , NVL2(NULL, 'B', 'C') // 2 , NVL2(1, 2, 3) // 3FROM TABLE_NAME; 첫번째 파라미터가 NULL이면 3번째 파라미터가, 아니면 2번째 파라미터가 나온다.NULLIFSELECT NULLIF('A', 'B') // A , NULLIF('A', 'A') // NULL ..
[SpringBoot] Github Action을 사용한 BlueGreen배포 1. Github Action에서 클라우드의 shellscript 실행하기 이전까지 jar파일을 클라우드 서버에 전송하는 것 까지 진행시켰다. 이제 서버에 전송 후 이전에 쓰던 것을 끄고 새로운 것을 켜주는 쉘스크립트를 작성해야한다. 다만 그 전에 쉘스크립트 파일을 실행하는 로직을 github action에 추가해주어야한다. folder_path="/home/shellScript/newFolder"mkdir $folder_path 쉘스크립트는 위와 같이 매우 간단하게 새로운 폴더를 하나 만드는 것으로 하였다. # 쉘스크립트 파일 실행- name: Execute shell script on remote server env: SSH_PASSWORD: ${{ secrets.SSHPASSWORD }} ..
[SpringBoot] Github Action을 사용한 jar빌드 후 전송 github action은 push, merge, pull request 등의 동작이 행해졌을 경우 원하는 동작을 자동으로 동작하도록 스케줄링 해둘 수 있는 서비스이다. 이것을 사용하면 CICD 배포를 구현할 수 있다. 여기서는 모두 github action의 대한 기본적인 사용법은 알고 있다고 생각하겠다. 나는 푸쉬한 파일을 jar로 빌드하여 내 클라우드 서버에 scp로 보내는 동작을 수행할 것이다. 플로우는 아래와 같다.  1. Action  action 할 레포지토리의 action에서 java with gradle 을 가져오자. 이것을 수정해서 위 플로우를 완성할 것이다.  여기서 설정파일을 수정해도되지만, 커밋하고 편집기에서 편집하도록 하자. 파일이름은 마음대로 해도된다. 난 Create Jar ..
[Spring Security] 수동 로그인 구현하기 스프링 시큐리티를 사용해 프로젝트를 진행하던 중 카카오로 로그인 요청을 했을 때 회원가입이 안되어있으면 회원 가입을 하고 아니면 바로 로그인이 되는 기능을 구현하였다. @GetMapping("/auth/kakao/callback") public String kakaoCallBack(String code, HttpServletRequest request) throws ParseException { String username = loginService.requestKakaoToken(code); loginService.forcedLogin(username, request); return "redirect:/"; } 먼저 카카오 콜백 메소드이다. 유저네임 = 이메일을 카카..