분류 전체보기
-
[MySQL] COUNT 쿼리와 숫자 타입에 대한 주의 사항카테고리 없음 2021. 7. 26. 15:30
MySQL COUNT() 함수 정리 COUNT 함수는 모두가 알고 있듯이 결과 레코드의 건수를 반환하는 함수입니다. COUNT() 함수는 컬럼이나 표현식을 인자로 받고, COUNT(*)와 같이도 사용할 수 있습니다. 여기서 *는 SELECT 절에 사용될 때처럼 모든 컬럼을 가져오라는 의미가 아니라 그냥 레코드 자체를 의미하는 것입니다. 실제로 COUNT()이라고 해서 레코드의 모든 컬럼을 읽는 형태로 처리하지는 않습니다. 그래서 굳이 COUNT(id), COUNT(1) 같이 사용하지 않아도 됩니다. COUNT()와 비슷한 속도로 처리된다고 합니다. (오.. 뭔가 차이가 있을 줄 알았지만 차이가 없다니~!!) MyISAM 스토리지 엔진을 사용하는 테이블은 항상 테이블의 메타 정보에 전체 레코드 건수를 관리..
-
[MySQL] Upsert 쿼리란 무엇일까?Book/Real MySQL 2021. 7. 22. 16:21
MySQL Upsert 사용법 이번 글에서는 MySQL에서 Upsert 쿼리를 사용하는 법에 대해서 정리해보겠습니다. Upsert는 이름에서 어느정도 유추할 수 있듯이 Update + Insert를 합친 말입니다. 즉, Upsert는 중복되는 값이 있다면 Update를 하고 중복되는 값이 없다면 Insert를 하는 쿼리입니다. 좀 더 정확히 말하면 Unique Key의 값이 중복된다면 Update를 하고, Unique 컬럼의 값이 존재하지 않는다면 INSERT를 하는 것입니다. 실제로 프로젝트를 하다 보니 이러한 쿼리를 사용해야 할 상황이 와서 이렇게 정리를 하게 되었습니다. Upsert 쿼리를 보면 아래와 같습니다. INSERT INTO user_refresh_token (user_id, refresh..
-
[MyBatis] MyBatis Reflection 에러 정리Server/MyBatis 2021. 7. 19. 00:58
MyBatis ResultMap 에러 정리 이번 글에서는 프로젝트를 하면서 만났던 MyBatis 에러에 대해서 간단하게 정리를 해보려 합니다. 현재 UserLeaderScore 모델과 User 모델을 ResultMap을 사용해서 JOIN 해서 데이터를 가져오려는 상황입니다. DB 테이블은 위와 같습니다. 이 테이블과 매칭이 되는 자바 클래스 모델은 아래와 같습니다. User Model @NoArgsConstructor @Getter public class User { private Long id; private String nickname; private String gender; private int birth; private String socialType; private String signupCo..
-
[Intellij] 인텔리제이에서 환경변수 설정하는 방법Tool/Intellij 2021. 7. 13. 13:51
들어가기 전에 이번 글에서는 Intellij에서 env 설정을 하고 이것을 application.yml에서 참조하는 법에 대해서 알아보겠습니다. 이렇게 하고자 하는 이유는 지금까지는 jwt secret key 라던지, DB url, DB id, DB pw 같은 것들을 yml 파일에 적은 후에 gitignore에 등록하고 Github에 올리지 않는 방법을 선택했습니다. 하지만 이것도 하나의 방법일 순 있겠지만, 자꾸 실수로 Github에 yml을 올리는 실수를 할 수도 있다는 것 때문에.. 이번에는 Intellij에서 환경변수를 등록하고 yml에서 해당 환경변수를 참조해서 사용하도록 바꿔보겠습니다. Intellij에서 env 설정 후 yml 파일에서 참조하는 법 인텔리제이 오른쪽 위를 보면 위와 같이 Ed..
-
[AWS] Spring + Github Actions + CodeDeploy로 CI/CD 하기 2편Cloud/AWS 2021. 7. 12. 17:23
Github Action, CodeDeploy로 CI/CD 하기 - 2편 저번 글 에서 Github Actions로 프로젝트 빌드를 수행한 후에 jar 파일을 S3로 업로드 하는 것까지 알아보았습니다. 이번 글에서는 S3에 업로드 된 zip 파일을 CodeDeploy-Agent를 통해서 EC2에 자동으로 배포를 하는 CD를 하는 법에 대해서 알아보겠습니다. CodeDeploy 배포 과정 개발하고 있는 프로젝트 최상단 경로에 appspec.yml 이라는 파일을 작성합니다. (이 파일에서 각 배포 단계에서 어떤 스크립트 파일을 실행할 것인지 명시할 수 있습니다.) Agent는 S3에서 zip 파일을 내려 바고, appspec.yml 파일을 읽어 해당 파일에 적힌 배포 단계에 맞게 스크립트 파일을 실행시키면서..
-
[AWS] Spring + Github Actions + CodeDeploy로 CI/CD 하는 법Cloud/AWS 2021. 7. 12. 15:35
Github Action, CodeDeploy로 CI/CD 하는 법 - 1편 CI 도구로 Github Action, CD 도구로는 CodeDeploy를 사용해서 자동화 배포를 진행해보겠습니다.(EC2, S3, CodeDeploy 생성에 대해서는 다루지 않겠습니다.) 이번 글에서는 Github Actions로 CI를 수행한 후에 zip 파일을 S3로 업로드 하는 거 까지 알아보겠습니다. 진행하고자 하는 아키텍쳐는 아래와 같습니다. Github에 push를 하면 Github Action이 자동으로 실행됩니다.(즉, 프로젝트를 빌드 해서 jar 파일을 생성합니다.) 이어서 jar와 Shell Script 파일을 압축해서 S3에 업로드 합니다. EC2에 설치 되어 있는 CodeDeploy Agent가 S3에 업..
-
[MySQL] Distinct 사용할 때 알아두어야 할 것Book/Real MySQL 2021. 7. 10. 00:56
DISTINCT 정리하기 특정 컬럼의 유니크한 값을 조회하려면 SELECT 쿼리에 DISTINCT를 사용합니다. DISTINCT는 MIN(), MAX(), COUNT()와 같은 집합 함수와 함께 사용하는 경우와, 집합 함수가 없이 사용하는 경우 두 가지로 구분해서 알아보겠습니다. SELECT DISTINCT 중복된 값을 없애기 위해서 DISTINCT를 사용합니다. GROUP BY를 사용했을 때와 거의 동일한 방식으로 처리됩니다. 다만 DISTINCT는 정렬이 되지 않는다는 차이 정도가 있습니다. SELECT DISTINCT emp_no FROM salaries; SELECT emp_no FROM salaries GROUP BY emp_no; 그리고 DISTINCT를 사용하면서 많은 사람들이 헷갈리는 부분..
-
[Spring] Filter와 Inteceptor 란 무엇일까?Server/Spring 2021. 6. 30. 14:15
들어가기 전에 클라이언트가 Request를 보내면 Controller로 오기 전에 만나는 여러 관문들이 존재합니다. DispatcherServlet 에 대해서는 저번 글에서 정리했었습니다. 그리고 Interceptor, AOP가 존재하는데요... AOP는.. 어떤 것이었죠? Spring 삼각형 중에 하나였습니다. 아주 중요한 내용 중에 하나이지만 이번 글에서는 Filter와 Interceptor에 대해서 알아볼 것입니다. Spring Filter란 무엇일까? Filter는 말 그대로 어떤 것을 걸러내는 역할을 하는데요. 그림에서 보면 DisPatcherServlet 앞에 Filter가 존재하는 것을 볼 수 있습니다. 즉, 클라이언트의 요청에 대해서 사전에 걸러내는 역할을 합니다. (ex: CORS, XS..