분류 전체보기
-
server throttling을 알아보자network, security 2022. 5. 1. 23:01
최근에 guava 라이브러리의 RateLimiter을 알게 되어서, 이 기회에 server throttling에 대해서 간단하게 적어보고자 한다. server throttling이란 server throttling이란 너무 많은 요청을 서버의 리소스가 감당하지 못하는 상황을 방지하기 위하여, 서버가 처리할 요청량을 제한하는 것을 가리킨다. 비슷한 용어로는 bandwidth throttling, congestion control, traffic shaping, rate limiting 등이 있다. Java로 된 웹 개발 환경에서 쓸 수 있는 대표적인 라이브러리로는 RateLimiter과 Bucket4j가 있다. 트래픽을 제어하는 방식에는 크게 두 가지의 방식이 있다. leaky bucket leaky bu..
-
쿼리 튜닝하기database 2022. 4. 18. 00:00
요즘 일하면서 SQL을 작성할 일이 많았다. 덕분에 쿼리를 작성하는 것이 좀 더 능숙해졌고, 내가 작성한 쿼리가 실행될 때 테이블에 어떻게 접근하게 될지 등 성능에 대한 고민을 많이 해보게 되었다. 실제로 성능이 걱정되어서 조언을 받아서 튜닝을 진행한 건이 몇 개 있어서, 그 내용을 간략하게 정리해보고자 한다. 인덱스 타게 하기 사실 쿼리 튜닝의 대부분은 인덱스를 활용하도록 쿼리를 수정하거나, 필요한 인덱스를 추가하는 것이 아닐까 한다. 내가 원래 작성했던 쿼리는 다음과 같다. SELECT * FROM ( SELECT tmp.*, ROWNUM R_NUM FROM ( SELECT * FROM A a WHERE a.number = ? ORDER BY a.name, a.age, a.height ) tmp WH..
-
[Clean Architecture] Chapter 7. The Single Responsibility Principle책 2022. 4. 3. 23:24
[이 글은 Clean Architecture의 chapter 7을 읽고 정리한 글이다. 문장의 간결함을 위해서 인용체를 생략하였고, 내 생각을 조금 덧붙였다.] SRP(The Single Responsibility Principle)는 이름과 달리 하나의 모듈이 하나의 책임만을 가져야 한다는 뜻은 아니다. 반드시 하나의 행동만 해야 하는 건 함수이다. SRP는 다음의 문장으로 설명할 수 있다. (여기서 reason을 user, stakeholder, actor 등의 단어로 바꾸어 이해하면 된다.) "A module should have one, and only one, reason to change." 흔히 low coupling, high cohesion을 좋은 코드라고 하는데, 이것이 바로 SRP가 ..
-
자바에서 날짜와 시간 다루기Java, JVM 2022. 3. 20. 22:30
오늘은 개발을 하면서 피할 수 없는 날짜와 시간 다루기에 대해서 써볼까 한다. 엄청난 레거시 속에서 일하는 나는 두 가지의 질문을 항상 가지고 있었다. java.util.Date를 권장하지 않는다고 하던데, 그러면 도대체 뭘 써야 할까? 시간은 어떻게 테스트해야 할까? 이번 글은 첫번째 질문에 대한 간단한 대답이 될 것 같다. 테스트하는 방법에 대해서는 현 시점까지 시도해본 방법에 대해서 짤막하게 설명하고 언젠가 쓸 글의 주제로 하려고 한다. java.util.Date를 쓰지 말라는 이유 Date를 사용하지 말고 다른 라이브러리를 사용하라는 이야기를 많이 들어봤을 것이다. Date는 흔히 잘못 설계된 라이브러리의 대표적인 사례로 언급된다. 실제로 라이브러리 코드를 찾아보면 @Deprecated가 엄청 많..
-
MyBatis 관련 삽질 모음database 2022. 2. 28. 06:47
mybatis을 사용하면서 겪은 에러나 알게 된 내용들을 여기에 정리해두고자 한다. 앞으로 새로운 내용이 생길 때마다 여기에 업데이트하게 될 것 같다. ORA-00928: 누락된 SELECT 키워드 이 에러는 정말 다양한 상황에서 발생할 수 있는 것 같다. 이 에러로 검색해보면 원인이 참 다양하다. 다양한 상황에서 발생할 수 있는만큼, 살짝은 불친절한 메시지가 아닌가 한다. 이 에러가 떴다면 실제로 실행된 쿼리에서 실수를 샅샅이 찾아야 한다. 사실 간단한 SQL을 작성해서 바로 실행해본다면 실수를 금방 깨달을 수 있지만, 길고 복잡한 SQL 구문이나 mybatis mapper에 작성한 코드라면 에러를 바로 눈치채기 쉽지 않다. SQL 문법 실수를 한 것이 아닌지 가장 먼저 의심해보고, 동적 쿼리인 경우 ..
-
Spring Batch를 사용하며 겪은 이슈들Spring 2022. 2. 20. 14:50
최근에 spring batch를 사용하여 작업을 할 일이 있었다. spring batch에 대해서는 대략적으로 알고 있었지만, 실제로 사용해본 것은 처음이었기에 여러 함정에 빠졌었다. 이미 유명한 내용들이지만, 나의 경험을 추가하여 정리해보고자 한다. Spring Batch란? 우선 spring batch가 무엇인지 간단하게 알아보자. spring batch는 spring 생태계에서 제공하는 batch framework이다. batch라는 단어에서 알 수 있듯이 한 번에 대규모로 뭔가를 하는 거다. 애플리케이션을 개발할 때 보통 실시간으로 들어오는 요청을 처리하는 코드를 작성하지만, 종종 이따금 한 번씩 수행되어야 하는 코드도 존재한다. 보통 이런 경우에는 대규모로 데이터를 읽어서 처리해야 한다. 조건에..
-
SameSite 설정에 대해서 알아보자network, security 2022. 1. 24. 02:51
브라우저 정책 변경의 습격을 받다 대략 2020년 초 크롬이 Set-Cookie 헤더의 속성 중 하나인 SameSite의 디폴트 값을 변경하였다. 정확히는 SameSite=Lax로 변경하였는데(이 값의 의미는 아래에서 알아보도록 하자), 이 변경으로 인해 이전에는 쿠키가 잘 전송되던 기능에서 쿠키가 전송되지 않게 되었다. 이 이슈를 해결하려면 후술하겠지만 간단한 옵션 수정이 필요하다. 추측하건대 파이어폭스는 크롬보다는 SameSite 정책 변경이 늦었던 것 같다. 내가 담당하는 어드민 기능이 하나 있는데, 예전부터 크롬으로는 아예 페이지 접근이 안 돼서 "왜 크롬으로는 안 될까?^^"라고 대수롭지 않게 생각하며 파이어폭스를 사용하고 있었다. 그런데 분명히 2022년 1월 초까지만 해도 파이어폭스에서 잘 ..
-
많이 들어본 DB 기술 정리database 2022. 1. 16. 14:25
내가 속한 조직은 Spring을 사용하고 있고, DB 기술로는 mybatis와 JPA를 사용하고 있다. 아직까지는 내가 맡은 일에서 mybatis를 더 많이 사용하고 있고, JPA는 간단한 업무나 해봐서 기초적인 코드만 이해하는 수준이다. 어찌저찌 일은 해나가고 있지만, DB 기술에 대한 이해가 너무 얕아서 늘 약간의 불안함을 가지고 있었다. 이 글로써 앞으로 DB 기술을 공부하겠다는 계획에 운을 띄워보려고 한다. 그동안 많이 들어봤던 용어들의 의미를 간단하게 정리하는 것이 목적이다. (얕게나마 개념을 정리하다 보니 머릿속에 떠오르는 키워드는 추상화였다. 컴퓨터과학/공학에서 기술이 발전해가는 과정을 보다보면 추상화의 아름다움을 느낄 수 있다.) JDBC JDBC는 Java Database Connecti..