반응형 전체 글344 [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. [Spring] 스프링 캐시 간단하게 사용해보기 목차 1. 스프링의 캐싱 방법 2. 사전 준비 3. 예제 코드 1. 스프링의 캐싱 방법 캐싱 자주 사용하는 데이터를 어딘가 임시로 저장하고, 빠르게 꺼내 쓰기 위해 사용할 수 있게 하는 프로세스 서버의 부담을 줄여 성능을 높이기 위해 사용하기도 함 ex: DB에서 조회하는게 굉장히 오래 걸리는 데이터를 캐싱해두면, 다음에 조회할 때 DB의 조회 결과를 기다리지 않고 캐싱 영역에서 빠르게 가져다 쓸 수 있음 스프링의 캐싱 @Cacheable, @CacheEvict 같은 어노테이션을 통해 AOP 기반으로 동작 이를 위해서는 @EnableCaching 설정이 필수 2. 사전 준비 이 글에서는 Redis를 이용해 예제 코드를 작성하기 때문에 사전 준비가 필요하다. 별도의 Redis를 사용하지 않는 경우에는 생략.. 2023. 5. 31. [Backspace 후기] 글또 반상회를 다녀오고 5월 19일, 글또에서 'Backspace'라는 이름으로 반상회가 열렸다. 작년에도 이와 비슷하게 글또콘이라는 행사가 열렸었는데 (글또콘 후기 바로가기) 올해는 인원이 더 많아져서 그런가 분야별로 나눠서 '반상회'의 형태로 행사가 열렸다. 이번 반상회에서는 백엔드/인프라 분야 분들이 모였다. 😎 참가 사유 나의 참가 이유는 단순했다. 사람들이랑 이야기 좀 하고 싶어서. 😂 낯을 많이 가리고 내성적인 나이지만... 항상 재택을 하다보니 사람들이랑 대화할 시간이 많이 부족하다고 느꼈다. 회의가 있을 때 말을 하긴 하지만 모니터에 대고 말하는 거랑 사람이랑 직접 마주 보고 말하는 건 느낌이 많이 다른 것 같다. 그래서 목표를 달성했느냐 여쭤보신다면, 달성했다! 취준생 시절 때 함께 팀프로젝트를 진행했던 친구.. 2023. 5. 20. [Spring] '/', 문자열인가 경로인가 그것이 문제로다 🤔 문제의 시작 API를 호출하면 json이 아닌 html 코드로 응답이 오고 있다는 이슈를 제보받았습니다. 해당 html 코드를 열어보니 아래와 같이 HTTP 상태 코드 400을 보여주고 있었습니다. 상태 코드 400은 Bad Request라는 의미로, 클라이언트의 요청이 잘못되어 서버가 요청을 처리할 수 없거나 처리하지 않을 것임을 나타내는 코드입니다. 🧐 원인 분석 문제가 발생하는 정확한 케이스를 파악하기 위해 현상 재현을 시도하였습니다. API를 호출해봤더니 애플리케이션에 요청이 들어오지도 않는 것처럼 보였습니다. 400이라는 응답값만 생각해보면 어디선가 예외가 발생했을 것 같은데, 예외가 발생했다는 에러 로그가 남지 않았거든요. 어떤 API인지 설명하기 위해 가상의 예제 API를 만들어보았습니.. 2023. 5. 12. [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. [책 후기] 개발자의 글쓰기 저자: 김철수 출판사: 위키북스 책 링크: http://www.yes24.com/Product/Goods/79378905 🙂 읽게 된 계기 회사에서 개발자들끼리 소소한 책읽기 모임을 가졌다. 첫 모임이니만큼 가벼운 책으로 시작하고자 '개발자의 글쓰기'가 선택되었다. 진행 방식은 주에 한시간 정도 시간을 갖고, 그 자리에서 책을 읽은 뒤 곧바로 의견을 나누는 식이었다. 미리 준비할 게 없어서 부담없이 참여할 수 있었다. 😄 읽고 나서 책을 읽다보면 당연하게 여겼던 것들, 공감되는 것들도 많았지만 나는 이거보단 저게 더 깔끔해보이는데? 저게 더 낫지 않나? 같은 생각이 드는 경우도 많았다. 이 글에서는 몇 가지 공감갔던 내용과 유용하겠다 싶었던 소소한 팁들 등을 소개해보고자 한다. 변수 이름 짓기 이름 짓기.. 2023. 4. 22. 문제를 대하는 태도 되돌아보기 목차 0. 서론 1. 문제의 발생 2. 해결 과정 3. 내 행동 되돌아보기 0. 서론 최근에 며칠간 끙끙대던 문제를 여러 도움을 통해 해결할 수 있었다. 해결하고 보니 정말 정말 간단한!!!! 문제였고 조금만 더 꼼꼼했다면, 조금만 더 다르게 생각했다면 충분히 나 혼자 해결할 수 있던 문제였다. 문제를 대하는 나의 부끄러웠던 행동을 정리하며 반성하고, 나중에 같은 실수를 하지 않겠다고 다짐하기 위해 포스팅을 남긴다. 1. 문제의 발생 요즘 나는 우리 서비스의 전체적인 흐름을 파악하고 싶어서 개발 어드민에서 이것저것을 눌러보고 있다. 이 화면에서는 어떤 API를 어떤 순서대로 호출할까, 등을 살펴보기 위해 크롬 개발자 도구를 켜놓고 있었다. 그런데 한 화면에서 이상한 현상을 발견했다. 정상적으로 API가 .. 2023. 3. 31. 신입 개발자, 김영한 님을 만나다. 1. 만나게 된 계기 🥹 우아한형제들의 기술이사이신 김영한님의 강의가 20만 수강생을 돌파했다고 한다. 그 기념으로 인프런에서 영한님께 궁금한 것을 묻고 답할 수 있는 유튜브 라이브가 진행되었다. 평소 영한님을 많이 존경하고 있기도 했고 요즘 큰 고민이 있었어서 사연을 남겼는데 라이브 영상에 나오는 영광을 누릴 수 있었다. 영상 속의 답변을 요약해보자면 우리 팀에서 사용하는 기술을 집중적으로 공부하라는 말씀이셨다. 한 세 달 정도는 취준 때로 돌아간다 생각하고 기술을 집중적으로 공부하는 것을 추천해주셨고 그래야 팀에 더 빨리 적응할 수 있다는 조언을 주셨다. 그래서 잃었던 목표의 방향성을 가다듬고 공부를 다시 시작하려 하고 있었다. 그런데 여기서 추가로, (정말 감사하게도) 멘토링을 받을 수 있는 기회까.. 2023. 3. 16. [Kotest] 오버로딩한 메서드 테스트하기 (feat: slot) 현재 우리 팀에서는 모종의 이유로 애플리케이션 코드는 Java, 테스트 코드는 Kotest로 작성하고 있다. 오늘은 테스트 코드를 작성하다 겪은 일에 대해 작성할 예정이다. (예제 코드는 문제 상황과 유사하게 만든 코드일 뿐, 실무 코드와는 관련이 없습니다.) 자바에서는 한 클래스 내에서 이름이 같은 메서드를 중복으로 정의할 수 없다. 하지만 '메서드 오버로딩'을 통해 매개변수의 개수나 타입 등을 다르게 하면 같은 이름의 메서드를 작성하는 것이 가능하다. 메소드 내부 구현은 상황에 따라 달라지겠지만 오늘은 아래와 같은 코드에 대한 테스트 코드를 작성하려고 한다. public class Order { public void order(OrderRequest orderRequest) { order(orderR.. 2023. 3. 5. 이전 1 ··· 3 4 5 6 7 8 9 ··· 39 다음 반응형