본문 바로가기
반응형

Develop/CS38

[DB] update set에서 주의할 점 최근 update 쿼리를 짜면서 겪었던 실수를 공유해보려고 한다. 일단 간단한 테스트 데이터를 준비해보았다. insert into test_menu (name, price, deleted) values (' 커피 ', 5000, 0); 여기서 name의 앞뒤에 공백이 들어간 데이터들에 대해 update 작업을 실행하려고 한다. 아래는 name은 trim 처리하고, price를 1000으로 변경하는 쿼리이다. update test_menu set name = trim(name) and price = 1000 where name like ' %' or name like '% '; 하지만 실제 결과를 보면 뭔가 이상하다. name에는 0이라는 값이 들어갔고, price는 변경되지 않았다. 당연한 이야기다. 왜.. 2023. 11. 19.
[DB] 'is not NULL'과 '!= NULL'은 다르다? 팀원분이 비슷해 보이는 두 쿼리문를 보내시며 둘의 결과가 서로 다르다고 보내주셨다. 두 쿼리의 차이점은 오직 NULL 체크를 is not NULL로 하냐, != NULL로 하냐의 차이였다. 쉬운 이해를 위해 사용자를 조회하는 쿼리가 있다고 가정해보겠다. -- 1: is not NULL 사용 (10 Results) select * from member where age is not NULL limit 1; -- 2: != NULL 사용 (0 Results) select * from member where age != NULL limit 1; is not NULL에서는 조회 결과가 있지만, != NULL에서는 조회 결과가 없었다. 왜 그럴까? SQL에서는 NULL 값을 =, 같은 비교 연산자를 이용해 비교할.. 2023. 6. 7.
[HTTP] Accept-Charset은 왜 deprecated 되었나 1. Accept Charset 설정 HTTP 헤더의 Accept에 "application/json;charset=UTF-8"값을 넣기 위해 아래와 같은 코드를 작성했다. 여기서 Accept는 클라이언트가 처리할 수 있는 미디어 타입을 알리기 위해 사용한다. IntelliJ가 노란 줄로 표기해 주면서 deprecated 된 코드임을 알려주었다. HttpHeaders headers = new HttpHeaders(); headers.setAccept(List.of(MediaType.APPLICATION_JSON_UTF8)); deprecated 된 사유에 대해 친절하게도 Spring이 주석을 달아두었다. 아래와 같은 내용이 적혀있었다. Deprecated as of 5.2 in favor of APPLIC.. 2023. 5. 2.
OpenSSL 취약점 발견되다? 😄 서론 OpenSSL에서 'CRITICAL'한 취약점이 발견되었다는 소식을 들었다. OpenSSL이 등장한 이래 두 번째 CRITICAL 취약점이라고 한다. (첫 번째 취약점은 2016년) 나에게도 영향이 미칠지에 대해 궁금해서 찾아보게 되었다. 😏 OpenSSL이란? 컴퓨터 네트워크를 통한 통신을 보호하거나 상대방을 식별해야 하는 응용 프로그램용 소프트웨어 라이브러리이다. 대부분의 HTTPS 웹사이트를 포함해 인터넷에서 널리 사용되고 있다. SSL, TLS 프로토콜의 구현이 포함된 오픈 소스로써 기본적인 암호화 기능이나 다양한 유틸리티 기능을 제공하고 있다. 😮 무엇이 문제인가? OpenSSL의 개발자인 Mark Cox가 아래와 같은 트윗을 남겼다. OpenSSL 공식 사이트가 분류한 CRITICAL.. 2022. 10. 30.
무중단 배포 (feat: Jenkins & Shell) 목차 서론 종류 Rolling Update Blue Green 어떤 것을 선택했는가? 무중단 배포 예제 (feat: Jenkins, Shell Script) 1. 서론 💥 지난 번에 우테코 레벨 3 인터뷰를 진행했을 때 받은 질문이 있습니다. '24시간 돌아가는 서비스에서 어떻게 새로운 변경 사항을 적용할 수 있을까요?'. 당시에는 무중단 배포에 대한 경험도 키워드도 몰랐기 때문에 서비스를 잠시 중단하고 배포한 뒤 다시 시작하는 경우밖에 생각이 나지 않는다고 대답했다. 기존 데이터에 영향을 주지 않으면서 무중단으로 서비스를 제공하는 방법에 대해 알아보면 좋을 것 같다는 조언을 듣고 이번 기회에 줍줍에 무중단 배포를 시도하기로 했다. 2. 종류 🔮 💜 Rolling Update 이전 버전에서 새 버전으로 .. 2022. 10. 19.
동시성 (Concurrency) vs 병렬성 (Parallelism) 😎 서론 이전 포스팅에서 동시성과 병렬성 차이에 대해서 아래처럼 간략하게 서술했었다. 동시성: 하나의 코어에서 여러 스레드가 번갈아가며 실행 병렬성: 멀티 코어에서 여러 스레드를 동시에 실행 책의 내용을 단어만 좀 바꿔서 인용해온 것이기도 하고 어떤 상황인지 상상이 갔기 때문에 납득하고 넘어갔었다. 근데 트위터에서 디클님이 아래와 같은 내용을 알려주셨다. 내가 서술한 내용이 틀린 것은 아니지만 그 외의 상황에서 더 자주 발생한다고 설명해주셨고 그 상황들에 대해서 궁금해졌다. 그래서 동시성과 병렬성에 대해서 좀 더 구체적으로 공부해보려 한다. ✨ 동시성; Concurrency 동시성은 여러 작업이 겹치는 기간에 실행될 수 있음을 의미한다. 동시에 실행하는 것이 아니라 CPU가 작업마다 시간을 분할해 적절하.. 2022. 9. 10.
ssh 명령어 편하게 쓰기 🤗 서론 나는 ssh 명령어 치는게 너무 귀찮다! 현재 진행하는 프로젝트에서는 백엔드 개발서버, 백엔드 운영서버, Jenkins 서버, SonarQube 서버 등등등 여러 인스턴스를 접속할 일이 많다. `ssh -i 키.pem ubuntu@IP주소`에서 key 경로를 입력하는 것도 인스턴스마다 IP 주소가 뭐였는지 찾는 것도 너무너무 귀찮았다. 우테코 크루인 봄이 편하게 쓰는 방법을 알려줬다. 🥰 😎 설정 이 방법은 Windows / Mac 상관 없이 사용 가능합니다. 1. ~/.ssh/config 파일 생성 vi 명령어 실행 직후 i를 눌러 편집 모드로 변경 하단의 Host ~~~ 내용 입력 후 esc를 눌러 편집 모드 종료 :wq 를 이용해 파일 저장 후 나가기 이전에 설정한 적이 없다면 파일이 존재.. 2022. 8. 17.
[nginx/Let's Encrypt] 도메인 연동부터 SSL 적용까지 목차 0. 서론 1. 프로젝트 구조 소개 2. nginx 설치 3. 도메인 연동 (feat: 가비아) 4. SSL 적용 (feat: Let's Encrypt) 0. 서론 현재 진행하는 팀 프로젝트인 `줍줍`에서 외부 라이브러리를 이용하기 위해 반드시 https를 적용해야하는 상황이 왔다. 우테코에서 주어진 `Web Server와 WAS를 연결을 통해 443 포트로 데모하기` 미션을 겸사겸사 같이 수행하기로 했다. 이 미션의 목표는 대략 두 가지로 나눌 수 있다. Web Server와 WAS를 연동하고 인프라 아키텍처를 구상하기 SSL을 적용해 http를 https로 변환하여 443 포트로 배포하기 우리가 고민했던 포인트를 정리해보자면 아래와 같다. 도메인을 어디서 구매해야할까? 👉 많은 사람들이 이용하고.. 2022. 7. 31.
[DB] group function 에러 ORA-00934: 그룹 함수는 허가되지 않았습니다 ORA-00934: group function is not allowed here MySQL Error 1111: Invalid use of group function ❓ 원인 그룹 함수가 허용되지 않는 위치에서 그룹 함수 사용 그룹 함수란? 👉 컬럼 값들을 특정 기준에 따라 그룹화하고 그룹별로 결과를 반환하는 함수 ex: COUNT, SUM, MAX, MIN, AVG, .... 예제 WHERE, GROUP BY 등에서 그룹 함수 사용하면 에러 발생 SELECT i.* FROM items i, buy b WHERE i.quantity > COUNT(b.id); 💡 해결 그룹 함수를 사용 가능한 위치에서 사용하도록 쿼리 개선 (서브 쿼리 이용) SELEC.. 2022. 7. 3.
반응형