2022-08-06-TIL TIL 2022-08-06-TIL Today I Learned MySQL 전문검색 MySQL의 전문 검색(Full-Text Search)은 CHAR, VARCHAR, TEXT 컬럼에 FULLTEXT 인덱스를 만들고 MATCH (컬럼들) AGAINST ('검색어' 모드)로 질의하는 기능이다. InnoDB와 MyISAM에서 쓸 수 있다. 검색 모드는 세 가... 2022/08/06 2022-TIL
2022-07-19-TIL TIL 2022-07-19-TIL Today I Learned Datadog with Spring Boot Datadog APM으로 Spring Boot 애플리케이션을 추적하려면 코드 수정 없이 Java 에이전트를 붙인다. dd-java-agent.jar를 내려받아 -javaagent:/path/to/dd-java-agent.jar 옵션을 -jar보다 ... 2022/07/19 2022-TIL
2022-07-18-TIL TIL 2022-07-18-TIL Today I Learned Elasticsearch 검색엔진이란? 네이버, 다음, 구글 뿐만 아니라 쇼핑몰, SNS 등 여러 분야에서 검색기능을 활용 RDB의 LIKE '%키워드%' 검색은 인덱스를 타지 못해 데이터가 늘수록 느려지고, 형태소 분석이나 관련도 순 정렬 같은 기능도 없다. 검색엔진은 문서를 미리 토큰... 2022/07/18 2022-TIL
2022-07-15-TIL TIL Today I Learned 보안에 관하여, 클라이언트 vs 서버 웹 개발에 있어서 보안 요소는 크게 두 가지 부분에서 고려한다. 바로 클라이언트에서의 보안과 서버 측에서의 보안이다. 클라이언트 측에서 보안은 생각보다 쉽게 해제가 되고 얼마든지 탈취 가능하다. 말 그대로 공격자의 입장에서는 자기 집 안방에서의 홈 구장 플레이다. 브라우저, 크롬 ... 2022/07/15 2022-TIL
2022-07-14-TIL TIL 2022-07-14-TIL Today I Learned 여러 필드로 정렬하기 Collections.sort로 여러 필드 기준 정렬을 할 때, 필드 값을 문자열로 이어 붙여 한 번에 비교하면 필드 길이가 다를 때 순서가 틀어진다. Java 8부터는 Comparator.comparing(...).thenComparing(...)으로 1차, 2차 기준... 2022/07/14 2022-TIL
2022-07-13-TIL TIL Today I Learned 파일 확장자 및 용량 검증 파일 업로드를 받을 때는 크기와 종류를 모두 검증해야 한다. 크기 제한이 없으면 큰 파일 하나로 디스크와 메모리를 채울 수 있고, 종류를 확인하지 않으면 서버에서 실행될 수 있는 파일이 올라올 수 있다. 용량은 Spring Boot 설정으로 먼저 막는다. Spring Boot 문서에 따르면 ... 2022/07/13 2022-TIL
2022-07-12-TIL TIL Today I Learned 배포 전략 새 버전을 배포할 때 이전 버전을 언제, 어떻게 내릴지에 따라 배포 전략이 나뉜다. 다운타임, 필요한 서버 자원, 롤백 속도가 서로 맞바뀐다. Recreate: 기존 인스턴스를 모두 내린 뒤 새 버전을 올린다. 쿠버네티스 Deployment 문서는 .spec.strategy.type이 Recreate이... 2022/07/12 2022-TIL
2022-07-08-TIL TIL Today I Learned JPA delete vs deleteById Spring Data JPA의 delete(entity)와 deleteById(id)는 둘 다 엔티티를 지우지만, 대상이 없을 때 동작이 다르다. 구현은 SimpleJpaRepository에 있다. 아래는 2.7.0 태그 기준 소스다. public void deleteByI... 2022/07/08 2022-TIL
2022-07-02-TIL TIL Today I Learned Unit Testing Spring Boot 애플리케이션의 테스트 작성법을 모아 읽었다. Spring 레퍼런스는 IoC를 제대로 쓰면 setter와 생성자로 객체를 직접 조립할 수 있어 단위 테스트와 통합 테스트가 모두 쉬워진다고 설명한다. Spring Boot는 테스트 범위에 따라 어노테이션을 나눠 제공한다. Bae... 2022/07/02 2022-TIL
2022-06-29-TIL TIL 2022-06-29-TIL Today I Learned Filter, Interceptor, AOP 세 가지 모두 요청 처리의 앞뒤에 공통 로직을 끼워 넣는 방법이지만 동작하는 위치가 다르다. flowchart LR C["fa:fa-user 클라이언트"] --> F["Filter (서블릿 컨테이너)"] F --> D["... 2022/06/29 2022-TIL