오류발생 
Wed Jan 05 12:07:23 KST 2022 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
SSL(Secure Socket Layer) 서버 인증서 검증
http + s = https 의 s 를 의미한다. 보안 프로토콜을 통해 클라이언트(브라우저)와 서버(웹서버) 보안이 향상된 통신을 하는 것을 말한다.  http + key(SSL) key는 클라이언트와 서버만 알수 있다. 따라서 스니퍼(Sniifer)가 발생하지 않는다. SSL은 80번 포트를 사용하는 http 달리 443번 포트를 사용하는 TCP 기반의 프로토콜이다. TCP(3웨이핸드쉐이크->전송->종료) 
해결
SSL 관련 에러이다.  SSL (서버 인증서 검증) 을 끄자.
MySql이 5.5 버전부터 SSL 접속을 기본 세팅을 해놓았다. 따라서 SSL처리를 안 하면 위와 같은 에러 메시지를 보여준다. 
custsvc.url=jdbc:mysql://csdb.tmonc.net:3306/custsvc?useSSL=false&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useAffectedRows=true

 

'TMON > 개선작업' 카테고리의 다른 글

[CS] DB과부하 방지 Cache처리(캐싱처리)  (0) 2021.12.17
채팅시스템에서 사용하는 용도로 금칙어(욕설)등 데이터를 가져오는 API개발

사전 지식

[Server] Cache

1. Why ? Global 이 아닌 LocalCache 사용했는가?
금칙어(욕설)데이터는 600여건이며 자주 변하지 않고(업데이트가 빈번하지 않음) 빈번하게 조회될 여지가 있다. 따라서 LocalCache를 사용하였다.
2. 캐시의 지속 시간 고려
LocalCache의 로컬 메모리는 크지 않다. 따라서 1시간으로 설정하였다.
//Service단 메서드에 적용
@Cacheable(value = LocalCacheConfig.CACHE_1_HOUR)
public List<String> getForbiddenWords(){
세부로직...
}
//Config 설정
Configuration cacheConfig = new Configuration();
        cacheConfig.setName("__csservice");

        CacheConfiguration config1hour = new CacheConfiguration();
        config1hour.setName(CACHE_1_HOUR);
        config1hour.setMemoryStoreEvictionPolicy("LRU"); //저장방법
        config1hour.setMaxEntriesLocalHeap(1000); //최대 메모리크기
        config1hour.setTimeToIdleSeconds(0);
        config1hour.setTimeToLiveSeconds(60 * 60); //60초 * 60 = 1시간
        cacheConfig.addCache(config1hour);
        return CacheManager.newInstance(cacheConfig);
}
3. 캐시의 저장여부 확인
첫 번째 방법으론 Service단에서 log.info를 찍어보았다. 하지만 확실하지 않았다. cache관련된 함수를 호출하긴 하지만 이게 저장을 하는지 여부를 파악하기 힘들었다. 따라서 Thread를 주고 한 번더 호출한 후 로그를 비교했다. 더 확실하게 하기 위해서 Service단에 현재시간을 구하는 메서드를 만들고 @EnableCaching, @Cacheable, @CacheEvict 세가지를 테스트 해보았다.
4. 효과
캐싱처리가 없었다면 DB에 부하가 지속적으로 발생하곘지만, 캐싱처리를 함으로써 DB부하를 낮춤.
대부분 config처리가 xml로 처리하지만 class로 처리하는 방식을 택한 회사의 방침대로 진행. 또한 config는 해당 api에서만 사용하는 것이 아니라 범용성있게 사용가능하므로 변수명을 설정할 때 범용성있게 작성해야한다.

 

+ Recent posts