오류발생 
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에서만 사용하는 것이 아니라 범용성있게 사용가능하므로 변수명을 설정할 때 범용성있게 작성해야한다.

 

포트

  • 호스트 내에는 1~65535번까지 6만개가 넘는 문이 존재한다. 그 문의 상태를 외부에선 알 수 없다.
    • 하지만 잘 알려진(well-known)포트가 존재한다.
    • 21번 포트 : FTP(RFC 114)
    • 22번 포트 : SSH(RFC 4253)
    • 23번 포트 : Telnet(RFC15, RFC854)
    • *RFC(Request For Comments) 인터넷 표준을 다루는 문서
  • 웹 관련 기본 포트는 80과 443이다.
    • 80 포트 : HTTP : http://tomcat.apache.org -> http://tomcat.apache.org:80과 같다.
    • 443 포트 : HTTPS https://tomcat.apache.org -> https://tomcat.apache.org:443과 같다.  

포트와 프로토콜

사용 포트    
HTTP - OSI7계층 중 Layer7(Application)이다.

 
HTTPS HTTP+SSL(보안)
- SSL은 OSI7계층 중 Layer5(session)이다.
 
AJP(Apache JServ Protocal) - Application 서버로부터 오는 요청을 로드 밸런싱 해주는 바이너리 프로토콜이다.  
ShutDown    
mod_jk - AJP 프로토콜을 사용하여 톰캣과 연동하기 위해 만들어진 모듈
- mod_jk는 톰캣의 일부로 배포되지만, 아파치 웹서버에 설치하여아한다.
동작방식
1. 아파치 웹서버의 httpd.conf에 톰캣 연동을 위한 설정을 추가하고, 톰캣에서 처리할 요청을 지정한다.
2. 사용자의 브라우저는 아파치 웹서버(포트80)에 접속을 요청한다.
3. 아파치 웹서버는 사용자의 요청이 톰캣에서 처리하도록 지정된 요청인지 확인 후, 톰캣에서 처리해야 하는 경우 아파치 웹서버는 톰캣의 AJP포트(보통 8009포트)에 접속해 요청을 전달한다.
4. 톰캣은 아파치 웹서버로부터 요청을 받아 처리한 후, 처리 결과를 아파치 웹서버에 되돌려 준다.
5. 아파치 웹서버는 톰캣으로부터 받은 처리 결과를 사용자에게 전송한다.
Apache와 Tomcat을 연동해야 하는 이유
Tomcat은 WAS 서버이지만 Web 서버의 기능도 갖추고 있는 WAS 서버이다.
정적인 페이지는 Apache가 처리하고, 동적인 페이지는 Tomcat이 처리함으로서 부하를 분산시킨다. 
하지만 요새는 Tomcat 내의 Web 서버가 아파치에 절대 뒤쳐지지 않는다. 하지만 아파치에서만 사용할 수 있는 기능이 있다. 그래서 결론은 연동한다.

 

'TMON > CS' 카테고리의 다른 글

DNS 동작 원리  (0) 2021.11.15

목차

    DNS란

    • www.example.com과 같이 사람이 읽을 수 있는 이름을 192.0.2.1과 같은 숫자 IP 주소로 변환하여 컴퓨터가 서로 통신할 수 있도록 한다.
    • 인터넷의 DNS시스템은 이름과 숫자 간의 매핑을 관리하여 마치 전화번호부와 같은 기능
    • DNS 서버는 이름에 대한 요청을 IP주소로 변환하여 최종 사용자가 도메인 이름을 웹 브라우저에 입력할 때 해당 사용자를 어떤 서버에 연결할 것인지를 제어한다. (=쿼리)

    Domain 구조

    • 인터넷상에서 사용되는 도메인은 전 세계적으로 고유하게 존재
    • 인터넷상의 모든 도메인은 ".(dot)' 또는 루트(root)라 불리는 도메인 아래에 그림과 같이 나무를 거꾸로 위치시킨 역트리(Inverted tree) 구조로 계층적으로 구성되어 있음


    DNS 동작 원리

    1. 웹 브라우저에 www.naver.com을 입력 먼저 Local DNS에게 "www.naver.com"이라는 hostname에 대한 IP주소를 질의하여 Local DNS에 없으면 DNS name 서버 정보를 받음(Root DNS 정보 전달 받음)
    2. Root DNS 서버에 "www.naver.com" 질의
    3. Root DNS 서버로 부터 "com 도메인'을 관리하는 TLD(Top-Level Domain) 이름 서버 정보 전달 받음
    4. TLD에 "www.naver.com" 질의
    5. TLD에서 "name.com" 관리하는 DNS 정보 전달
    6. "naver.com" 도메인을 관리하는 DNS서버에 "www.naver.com" 호스트 네임에 대한 IP주소 질의
    7. Local DNS 서버에게 "응!www.naver.com"에 대한 ip주소는 222.122.195.6 응답
    8. Local DNS는 www.naver.com에 대한 IP주소를 캐싱을 하고 IP주소 정보 전달

    CS Hosts 셋팅

    $sodo vi /etc/hosts

    127.0.0.1       callcms-local.tmon.co.kr csadmin-local.tmon.co.kr csapi-local.tmon.co.kr fncms-local.tmon.co.kr chatcms-local.tmon.co.kr ptncms-local.tmon.co.kr  csinavtiveapi-local.tmon.co.kr
    127.0.0.1       spc-cs-local.tmon.co.kr ps-cs-local.tmon.co.kr
    127.0.0.1       help-local.tmon.co.kr m-help-local.tmon.co.kr
    127.0.0.1       cschatnode-local.tmon.co.kr
    127.0.0.1       csserviceapi-local.tmon.co.kr
    127.0.0.1       my.local.tmon.co.kr

     

    'TMON > CS' 카테고리의 다른 글

    [Tomcat] 포트와 Connector  (0) 2021.11.16
    • maven 빌드 하기

    atoz-develop.tistory.com/entry/IntelliJ%EC%97%90%EC%84%9C-Maven-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-Package-Build-%ED%95%98%EA%B8%B0

     

    IntelliJ에서 Maven 프로젝트 Package Build 하기

    IntelliJ에서 Maven 프로젝트 Package Build 하기 Maven 뷰에서 build를 실행하는 방법과 terminal을 열어 maven 명령어를 입력하는 방법이 있다. 1. Maven 뷰에서 Build 실행 우측의 Maven을 클릭하여 mave..

    atoz-develop.tistory.com

     

    maven 환경 변수 설정하기. setting

    allonsyit.tistory.com/12

     

    [Windows10] maven 설치 및 환경변수 설정

    1. maven binary 파일 다운로드 https://maven.apache.org/download.cgi Maven – Download Apache Maven Downloading Apache Maven 3.6.3 Apache Maven 3.6.3 is the latest release and recommended version for..

    allonsyit.tistory.com

     

    + Recent posts