전체 글 100

Tomcat > 성능 튜닝 > 기본

테스트 대상 애플리케이션의 정보 TPS: 10 평균 응답 속도: 1초 이하 DB 접속 등 외부 통신 없음 튜닝 가능 설정 값 maxConnections 기본값: 8192 톰캣을 만든 사람들이 기본값을 아무 값이나 정했을리는 없을 것이다. 하나의 톰캣 인스턴스가 요청 8192 건은 충분히 받을수 있다는 말이 아닐까? (받을 수 있다는 거지 처리할 수 있다는 건 아닐 수 있다.) acceptCount 기본값: 100 조대협님의 블로그에는 10 내외의 값을 권하고 있다. maxThreads 기본값: 200 하나의 톰캣 인스턴스가 요청 8192 건은 충분히 처리할 수 있다는 말이 아닐까? (해당 요청의 작업 속도에 따라 다를 것이다.) 튜닝 목적 기본 값 사용 시 얼마나 많은 동시 요청을 처리할 수 있을지에 대..

Tomcat > 성능 튜닝을 위한 사전 학습

행복한 코딩 생활을 방해하는, 잊을만하면 다시 찾아와 괴롭게 만드는 웹 서버 이슈 정말 싫다. 이제 공부 좀 해야겠다. 학습 대상 Embedded Tomcat 9.0.70 (Spring Boot 2.7.7) 톰캣 9의 특징 BIO(Java Blocking Connector)가 삭제되고 기본적으로 NIO(Java Nio Connector)가 사용됨 https://tomcat.apache.org/tomcat-8.0-doc/config/http.html#Connector_Comparison https://tomcat.apache.org/tomcat-9.0-doc/config/http.html#Connector_Comparison BIO와 NIO의 차이점은 추후에 알아보겠다. NIO와 NIO2의 차이점은 추후에..

Gradle > Lombok 설정

Spring Initializr를 통해 프로젝트 생성 시의 기본 설정아래와 같이 설정된다.configurations { compileOnly { extendsFrom annotationProcessor }}dependencies { compileOnly "org.projectlombok:lombok" annotationProcessor "org.projectlombok:lombok"} IntelliJ IDEA의 Preferences > Build, Execution, Deployment > Compiler > Annotation Processors > Enable annotation processing 체크박스가 체크되어 있지 않아도 잘 동작한다.테스트 코드에서 롬복 사..

Java/Build > Gradle 2023.11.21

Redis cache with Spring Boot

학습 환경: 스프링 부트 3.1.50. 이 문서에서 다루는 것글로벌 캐쉬스프링의 캐쉬 추상화주요 객체 소개간단한 예제1. Redis 서버 설치 및 실행애플리케이션에서 Embedded 레디스 서버를 사용할 수도 있지만 실제 데이터가 어떻게 들어가는지 눈으로 보는 것도 중요하다.2023.11.15 - [Redis] - Redis 서버 설치2. Cache Provider > Redishttps://docs.spring.io/spring-boot/docs/current/reference/html/io.html#io.caching.provider.redis3. 레디스 캐쉬를 사용하기 위한 최소한의 준비의존성 추가implementation "org.springframework.boot:spring-boot-star..

Spring/Cache 2023.11.17

Redis > 설치 > 기본

설치 방법 패키징 파일 설치 빠르고 간편하다. 파일이 여러 군데 흩어져 저장되어 관리가 어려울 수 있다. 인터넷 연결이 필요하다. 소스 파일을 다운로드해 직접 빌드 번거롭다. 한 서버에 여러 개의 레디스 인스턴스를 띄우고자 할 때에 편할 수 있다. 소스 파일로 설치 https://redis.io/download/ 다운로드 wget https://github.com/redis/redis/archive/7.2.4.tar.gz 압축 풀기 tar -zxvf 7.2.4.tar.gz 빌드 cd redis-7.2.4 make 빌드를 위해서 gcc 4.6 버전 이상이 필요하다. 기본 디렉터리 내의 bin 디렉터리에 실행 파일 복사하기 위해 make install 수행 make PREFIX=경로 install 지정한 경..

NoSQL/Redis 2023.11.15

Spring Cache Abstraction with Spring Boot

학습 환경: 스프링 부트 3.1.5 0. 이 문서에서 다루는 것 로컬 캐쉬 스프링의 캐쉬 추상화 주요 객체 소개 간단한 예제 1. Cache Providers 스프링은 늘 기술 구현체를 직접 제공하지 않는다. 인터페이스와 서비스 추상화를 제공할 뿐이다. 스프링이 지원하는 캐쉬 제공자: https://docs.spring.io/spring-boot/docs/current/reference/html/io.html#io.caching.provider 여기서는 로컬 캐쉬를 사용하는 몇 가지만 다뤄보겠다. Simple Generic JCache (JSR-107) 1.1 Simple https://docs.spring.io/spring-boot/docs/current/reference/html/io.html#io...

Spring/Cache 2023.11.14

Jackson > Intermediate > TypeIdResolver

한 서비스에서 잭슨을 이용하여 레디스 캐쉬 서버에 JSON을 저장하고 다른 서비스에서 그것을 읽어야 한다면, 다형성을 지원해야 한다면 결론적으로 TypeIdResolver를 사용해야 한다. 저장하는 쪽과 조회하는 쪽의 데이터 모델은 패키지명, 클래스명이 달라질 수 있으니 물리적인 타입 식별자를 사용할 수 없다. (사용 시 예외 발생) 다형성을 지원해야 한다면 데이터에 타입 식별자 메타데이터를 추가해야 한다. 앞서 배운 것들을 활용하면 @JsonTypeInfo와 @JsonSubTypes를 명시하는 것이다. 하지만 이를 매번 작성하는 것은 반복적이고 비생산적이다. TypeIdResolver 위 문제를 해결하기 위해 TypeIdResolver를 이용할 수 있다. 단계적으로 테스트로 생각을 검증해보면서 내용을 ..

JSON/Jackson 2023.11.13

Jackson > Basic

준비 https://github.com/FasterXML/jackson 다양한 기능을 제공하지만 핵심은 JSON을 위한 Data binding이다. Gradle 기준으로 아래 Dependency를 추가하면 핵심 객체인 ObjectMapper를 사용할 수 있다. implementation platform("com.fasterxml.jackson:jackson-bom:2.15.3") implementation "com.fasterxml.jackson.core:jackson-databind" 공식 문서 중 가장 쉬운 튜토리얼은 아래에 있다. https://github.com/FasterXML/jackson-databind#use-it 잭슨은 별도의 공식 레퍼런스 웹사이트가 존재하지 않는 것 같고 깃헙 위키에..

JSON/Jackson 2023.11.10

Jackson > 학습 동기

웹 애플리케이션 개발 시 JSON 직렬화는 꽤나 많이 쓰이게 된다. Spring Framework의 @RequestBody, @ResponseBody Redis에 객체를 저장하거나 조회할 때 .. 스프링은 JSON 직렬화 라이브러리로 FasterXML/Jackson을 사용하고 있다. 스프링을 이용한 개발을 하면서 최소한의 필수 동작방식만 그때 그때 공부해서 개발을 하다보니 Jackson의 동작방식에 대해서 잘 모르고 있어, 본격적으로 공부를 해야겠다는 생각이 들었다. 사실 이번에는 Spring Boot를 사용하여 레디스에 데이터를 JSON으로 직렬화하려고 하는데, 데이터 구조가 조금만 복잡해지더라도 문제가 생겼다. Spring Data Redis 라이브러리는 JSON 직렬화 시 잭슨을 사용하기 때문에 결..

JSON/Jackson 2023.11.10