반응형

* 윈도우에서 우분투로 원격접속

  • xrdp 설치
    • sudo apt update
    • sudo apt install --no-install-recommends xrdp (--no-install-recommends 옵션써야지 필수만 설치함 안그러면 너무 많이 설치)
  • xrdp 실행확인, 시작, 중지
    • systemctl status xrdp -> Active(running)이라고 나오면 돌아가는 것
    • sudo service xrdp restart
    • sudo service xrdp start
    • sudo service xrdp stop
  • xrdp port변경, 기본은 3389
    • sudo vi /etc/xrdp/xrdp.ini ->여기서 port찾아서 변경
  • 그외에 xrdp관련 에러해결법
    • startwm.sh 수정: 정확히 이게 무슨용도로 뭐하는건진 모르겠지만 에러시 해결방법이라고 나옴, 이건 안해도 사내 윈도우에서 사내우분투로 접속시 문제가 없었음, 자세한 내용은 https://lapina.tistory.com/147 https://ko.linux-console.net/?p=393
      • sudo sed -i.bak '/fi/a #xrdp multiple users configuration \n mate-session \n' /etc/xrdp/startwm.sh
    • 접속은 됬는데 반응이 없음
      • xorgxrdp설치 혹은 기존 우분투 세션 로그아웃되어 있는지 확인, 기존 로그인이 되어 있으면 반응이 없
    • 접속자체가 안됨
      • 클라우드PC에서는 접속자체가 안되었는데 3389포트를 3388로 변경하니까 됨, 포트가 막혀있었나봄
    • 속도가 느리다면 
      • cmd>mstsc>원격접속 실행창에서 해상도, 색농도 조절가능한데 낮춰주면 좀더 빨라질지도
  • xorgxrdp: xrdp환경에서 xorg(또는 X11) GUI를 사용할 수 있도록 해준다고 하는데... 설치안하면 원격연결해서 로그인해도 화면출력이 안될거라고 함, 처음에 진짜 접속이 잘 안됐는데 이거 설치후 하니까 사내 윈도우에서 사내우분투로 연결이 되었음
    • sudo apt install xorgxrdp
    • sudo apt install xorgxrdp-hwe-18.04 (우분투18.4의 경우)
  • xfce: 우분투 서버인 경우 GUI설치안되어 있으므로 GUI를 사용안하도록 되어 있다면 설치해야 한다고함, ubuntu-desktop과 xfce4를 많이 추천하는데 xfce4가 가볍다고 함
    • sudo apt install xfce4
    • echo xfce4-session >~/.xsession (xrdp를 xfce4의 GUI로 연결하기 위해 수행해야함)
  • xserver-xorg-input-all: 이거 없으면 키보드와 마우스 입력이 안된다고 하는데, 사내 윈도우에서 사내리눅스로 접속시 설치안해도 문제없었음
    • sudo apt install xserver-xorg-input-all
  • 방화벽 설정
    • 방화벽 허용
      • sudo ufw allow (xrdp사용하는 포트, 기본은 3389)/tcp (예: sudo ufw allow 3389/tcp)
    • 특정 ip로 방화벽 허용
      • sudo ufw allow from 192.168.2.0/24 to any port 3389
    • sudo ufw status 방화벽 상태확인, 방화벽안쓰고 있었다면 구지 설정안해도 됨
    • sudo ufw reload 방화벽 재기동

 

 

반응형

'etc > linux' 카테고리의 다른 글

ls -al 결과의 의미  (0) 2022.04.18
linux 사양확인  (0) 2022.04.18
linux java process 찾기, java 실행  (0) 2020.01.31
리눅스 PC에 백업  (0) 2019.07.26
Ubuntu 단축키  (0) 2019.04.26
반응형
  • bin: contains the binaries; and startup script (startup.bat for Windows and startup.sh for Unixes and Mac OS), shutdown script (shutdown.bat for Windows and shutdown.sh for Unix and Mac OS), and other binaries and scripts.

    -   catalina.sh - 여기에 변수 추가는 안해야함 (하지말라고 나와있음 Do not set the variables...)
    -   setenv.sh, setenv.bat 여기에다 java option, classpath 추가할 것
  • conf: contains the system-wide configuration files, such as server.xml, web.xml, and context.xml.

    • server.xml

      • main 설정파일, startup 초기 설정 담당
      • port, document root path (localhost:80 고양이 그림)
        <Server port="${port.shutdown}" shutdown="SHUTDOWN">
        <Connector port="${port.http}" protocol="HTTP/1.1"
           maxParameterCount="-1" maxPostSize="-1" maxThreads="512" connectionTimeout="90000"
           redirectPort="${port.https}" URIEncoding="UTF-8"/>
        <Connector executor="tomcatThreadPool"
           port="8080" protocol="HTTP/1.1"
           connectionTimeout="90000"
           redirectPort="8443" />
        <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                     type="RSA" />
        </SSLHostConfig>
        </Connector>
        <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
           maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
            <SSLHostConfig>
                <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                     certificateFile="conf/localhost-rsa-cert.pem"
                     certificateChainFile="conf/localhost-rsa-chain.pem"
                     type="RSA" />
            </SSLHostConfig>
        </Connector>
        <Connector port="${port.ajp}" protocol="AJP/1.3" redirectPort="${port.https}"
            maxParameterCount="-1" maxPostSize="-1" maxThreads="512" connectionTimeout="90000" URIEncoding="UTF-8"/>
        
        --> -Dport.http=8180 -Dport.https=8543 -Dport.ajp=8109 -Dport.shutdown=8105
            nc -z 10.150.33.35 8180으로 확인결과 8180 8109 8080-open, 8543,8443-close
            browser에서는 8180만 응답됨, 8080은 Whitelabel Error Page(권한없는 화면접속시 발생)
        --> port="${port.http}" connectionTimeout="90000" 20000으로 고쳐도 1분후 응답받음 why?
  • web.xml

    • 톰캣의 실행환경에 대한 정보를 담당하는 '환경설정' 파일 이다.
    • 각종 servlet의 설정과 servlet 매핑, 필터, 인코딩 등을 담당한다.
    • web.xml은 톰캣에 있는 모든 web application의 기본설정을 정의한다.
    • web.xml은 각 application이 deploy될 때 각 application의 'WEB-INF/web.xml' deployment descripter에 따라서 처리가 된다.
    • 각 application 마다 설정시, web.xml은 파일을 복사해서 필요한 것만 적으면 그게 기본 것을 override해서 적용된다.
    • 30: 분단위, 30분이라는 의미, default sesseion timeout 30분
    • 역시 되도록 수정하지 말고, 각 application별로 필요한 것은 따로 지정해서 사용하자
  • context.xml

    • 원래 server.xml에 있었으나 자주 변경되는 를 context.xml로 따로 빼서 사용함 (tomcat ver5.5.12부터)
  • webapps: contains the webapps to be deployed. You can also place the WAR (Webapp Archive) file for deployment here.

  • lib: contains the Tomcat's system-wide JAR files, accessible by all webapps. You could also place external JAR file (such as MySQL JDBC Driver) here.

  • work: Tomcat's working directory used by JSP, for JSP-to-Servlet conversion

  • logs: contains Tomcat's log files. You may need to check for error messages here

  •  
    설정위치
  • manager.yyyy-mm-dd.log
  • host-manager.yyyy-mm-dd.log
특정 managing을 담당하는 application에 의해 남는 로그 (in conf/logging.properties)
  • localhost_access_log.yyyy-mm-dd.txt 
어떤 접근에 대한 log

(in conf/server.xml) prefix="localhost_access.log." suffix=".txt"

  • localhost.yyyy-mm-dd.log
내부적으로 관리하는 host에 대한 내용 (in conf/logging.properties)
  • catalina.out

전반적인 console 로그

(각 application에서 발생하는 system out console)

(in bin/catalina.sh) CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out → 경로 바꾸고 싶으면 setenv.sh, setenv.bat에 CATALINA_OUT 변수와 값을 추가하자!

  • catalina.yyyy-mm-dd.log
catalina engine에 대한 내용 (in conf/logging.properties)
반응형

'java, spring' 카테고리의 다른 글

java stream  (0) 2022.04.28
Quartz  (0) 2022.04.19
Java Web Application  (0) 2021.03.02
tomcat  (0) 2021.03.02
spring-boot profile별 실행  (0) 2020.03.25
반응형

Java Web Application

           

  1. Web Server and Client
  2. HTML and HTTP
  3. Understanding URL
  4. Why we need Servlet and JSPs?
    Web servers are good for static contents HTML pages but they don’t know how to generate dynamic content or how to save data into databases
    Servlet/JSP: server side technologies to extend the capability of web servers
    ASP, PHP, CGI...

  5. Web Container
    1. Communication Support – provides easy way of communication between web server and the servlets and JSPs. We don’t need to build a server socket to listen for any request from web server, parse the request and generate response.
    2. Lifecycle and Resource Management – takes care of managing the life cycle of servlet. (loading the servlets into memory, initializing servlets, invoking servlet methods and destroying them)
    3. Multithreading Support – creates new thread for every request to the servlet and when it’s processed the thread dies. So servlets are not initialized for each request and saves time and memory.
    4. JSP Support – Every JSP is compiled by container and converted to Servlet.
    5. Miscellaneous Task – manages the resource pool, does memory optimizations, run garbage collector, provides security configurations, support for multiple applications, hot deployment and several other tasks.
  6. Web Application Directory Structure (Java Servlet API requirements)

    WEB-INF  is a private directory, but  accessible to the resource loader of Web-Application.
    META-INF is related to .jar files, contains the manifest (main class, security policy, component info, sealing info...) of a jar and is created when you write a jar file. 
  7. Deployment Descriptor web.xml file 
    mapping for servlets-URL (prior to 3.0), welcome/error pages, security configurations, listener, filter, session timeout settings etc.

 

Servlet (https://www.journaldev.com/1877/servlet-tutorial-java)

JEE server driven technology (javax.servlet, javax.servlet.http)

  • better performance-multithreading
  • platform independent
  • robust because container takes care of life cycle of servlet and we don’t need to worry about memory leaks, security, garbage collection etc.
  • maintainable and learning curve is small

 

  • ① 사용자가 URL을 클릭하면 HTTP Request를 Servlet Container에 보낸다.
  • ② Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성한다.
  • ③ 사용자가 요청한 URL을 분석하여 어느 서블릿에 대한 요청인지 찾는다. (DD를 참조하여 분석)
  • ④ 컨테이너는 서블릿 service() 메소드를 호출하며, POST, GET여부에 따라 doGet() 또는 doPost()가 호출된다.
  • ⑤ doGet() or doPost() 메소드는 동적인 페이지를 생성한 후 HttpServletResponse객체에 응답을 보낸다.
  • ⑥ 응답이 완료되면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다.

 

    • Servlet Interface
    • ServletConfig Interface
    •  

ServletContext interface

    •  

    •  

ServletRequest interface

    •  

    •  

ServletResponse interface

    •  

    •  

RequestDispatcher interface

    •  

    •  

GenericServlet class

    •  

    •  

HTTPServlet class

  •  

inter-servlet communication

  • RequestDispatcher.forward: request를 다른 servlet으로 보내는데 container에서 내부적으로 처리됨
    • The path must begin with a / and is interpreted as relative to the current context root. (/로 시작해야하는 제약....이런건 왜......)
  • Response.sendRedirect: 302 redirect address를 보내고 다시 browser가 그 주소로 요청


RequestDispatcher.forwardResponse.sendRedirect

brower가 redirection을 알 수 없다 알 수 있다
other context로 보낼수 없다 있다
extra network call 발생안함 발생함
  • RequestDispatcher.forward: request를 다른 servlet으로 보냄
  • RequestDispatcher.include: response가 다른 servlet에 포함되도록 보냄

Servlet attributes (!=init parameters defined in web.xml)

  • request scope: ServletRequest provide methods to get/set/remove attributes
  • session scope: HttpSession 
  • application scope: ServletContext 
반응형

'java, spring' 카테고리의 다른 글

Quartz  (0) 2022.04.19
Tomcat's directories  (0) 2021.03.03
tomcat  (0) 2021.03.02
spring-boot profile별 실행  (0) 2020.03.25
java time - Instant, LocalDate  (0) 2020.03.16
반응형

Install

 Component

  • Catalina

    • servlet container

    • Manages the lifecycle of servlets, mapping a URL to a particular servlet and ensuring that the URL requester has the correct access-rights

  • Coyote

    • Connector component for Tomcat that supports the HTTP 1.1 protocol as a web server

    • Listens for incoming connections to the server on a specific TCP port and forwards the request to the Tomcat Engine to process the request and send back a response to the requesting client

  • Jasper

    • JSP engine
    • Parsed JSP files to compile then info JAVA code as servlets
    • Detects changes to JSP files and recompiles them

 Application deploy 방법 3가지

  1. Appication Manager
    • conf/tomcat-users.xml에서 name/password 설정한 후, 
      • <role rolename="manager-gui"/><user username="설정" password="설정" roles="manager-gui"/>
    • tomcat default 화면 GUI에서 다음 사항들을 설정함으로 deploy 가능
      • context path - application의 상위 공통 path
      • XML configuration file URL
      • WAR or Directory URL
  2. Application directory를 통한 deploy
    • conf/server.xml에서 application deploy되는 경로 세팅가능 - 기본경로는 webapps
      • <Host name="localhost" appBase="webapps" unpackWARs="true" audoDeploy="true">
  3. context.xml을 통한 deploy
    • conf/context.xml
    • conf/[engine name]/[host name]/context.xml.default → conf/catalina/localhost/[contextName].xml
    • <Context path="" docBase="deployed application 소스가 있는 경로".../> path="sample"가 context path로 연결되는 듯(ip:8080/sample) 했으나 또 아니라고 함;;;;모지;;;[contextName].xml명에서 [contextName]이 연결된다고...
    • webapps밑에 deployed application가 있지 않고 지정한 docBase에 있는 걸 사용함

 JDBC 연동

    • context.xml <Resource ...>에 설정정보를 추가함

          default value
      maxActive 최대 connection 값 100
      maxIdle 최대 idle connection 허용치 maxActive
      minIdle 최소 idle connection 허용치 initialSize
      initialSize connection pool 최초 생성 갯수 10
      maxWait connection얻기위한 최대 대기시간 30000(ms) 30sec?
      removeAbandoned 특정시간동안 사용하지 않는 connection 반환 false
      removeAbandonedTimeout ??위의 특정 시간이 아닌지?? 60sec
      logAbandoned connection remove될 때 log 기록 여부 false
      testOnBorrow getConnection()수행할때 유효성 테스트할지 여부 false
      validationQuery 테스트할 쿼리, select 1 null

      JDBC driver

      • setenv CLASSPATH=/app/lib/jdbc.jar로 경로 추가해도 되고
      • CATALINA_HOME/lib/jdbc.jar로 직접 lib에 jar파일 추가해도 됨

 Virtual host 

  • apache에서 지원하는 기능인데 tomcat에서도 지원함

  • 여러 domain이 하나의 tomcat에서 작동하도록 해줌 

  • 설정방법

    • Tomcat GUI Manager>Host Manager 클릭

      • <role>에 admin-gui 추가해야함 
        localhost는 기본적으로 떠있어야 하지만
        그외에 host는 내렸다 올렸다 할 수 있음

    • host 구성

      • server.xml

      • <Engine name="Catalina" defaultHost="localhost"> -> 기본적으로 localhost의 내용이 전달됨

 Web server 연동

  • 연동목적
    • 동적요청 분산
    • 정적/동적 처리 -  소스분산
  •  mod_jk
    • AJP 프로토콜을 사용하여 톰캣과 연동하기 위해 만들어진 모듈
    • AJP(Apache Jserv Protocol)는 웹 서버 뒤에있는 웹 애플리케이션 서버(Web Application Server, WAS)으로 들어오는 요청을 웹 서버로 위임할 수 있는 바이너리 프로토콜이다. Apache HTTP Server(이하 Apache)는 80포트로 들어오는 요청 중, 서블릿을 필요로 하는 요청은 Apache Tomcat(이하 Tomcat)에 접속하여 처리한다. (https://joont.tistory.com/55)
    • mod_proxy, mod_proxy_balancer도 사용가능하지만 대표적으로 mod_jk를 많이 사용
    • 설정방법
      • mod_jk 모듈 다운로드 & 설정
        • 압축풀고 컴파일하면 mod_jk.so 생성
        • (window) 컴파일 하려면 visual studio있어야 함, 윈도우 버젼이 몇개 안되다 보니 컴파일된 binary dll이 공유됨
        • (linux) tar.gz 압축파일 받은 후 다음 과정 거치면 됨

          $ tar xvfz tomcat-connectors-1.2.40-src.tar.gz

          $ cd ~/Downloads/tomcat-connectors-1.2.40-src/native

          $ ./configure -with-apxs=APACHE_HOME_DIR/bin/apxs (apxs 옵션은 아파치 설치 디렉토리/bin/apxs를 지정)

          $ make

          $ make install -> 이렇게 하면 Apache_home_dir/modules/mod_jk.so가 생성됨

        • 생성된 mod_jk.so를 아파치에 로딩

          • httpd.conf에 <IfModule jk_module>...와 설정값들 추가

            <IfModule jk_module>

            JkWorkersFile   conf/workers.properties  //꼭 workers.properties 파일명이 아니어도 되지만 일반적 이름쓰자!

            JkLogFile       logs/mod_jk.log

            JkLogLevel      info

            JkMountFile     conf/uri.properties

      • worker를 정의 (workers.properties)
        • worker.[worker_name].[type_option]=[정의]

          worker.list=loadbalancer

          worker.worker1.type=ajp13

          worker.worker1.host=192.168.0.10

          worker.worker1.port=8009

          worker.worker1.lbfactor=1

           

          worker.worker2.type=ajp13

          worker.worker2.host=192.168.0.11

          worker.worker2.port=8010

          worker.worker2.lbfactor=1 //로드밸런스의 가중치 work1,2 둘다 1이므로 1:1

           

          worker.loadbalancer.type=lb

          worker.loadbalancer.balance_workers=worker1, worker2

      • 톰캣이 처리할 요청을 정의
        • httpd.conf에 직접 추가하거나 uri.properties같은 별도 파일로 분리할 수도

          /*.do=worker1

          /*.jsp=worker2

          /servlet/*=loadbalander

           

  • 클러스터
    • 장애 극복: 장애가 난 쪽에는 요청은 전달하지 않도록 Failover 기능 제공
    • WAS 장애나면 Http session도 끊어져 버림
    • 그것을 방지하기 위해 클러스터 사용함
    • Http session을 각 WAS마다 주기적으로 복사함
    • cluster 설정방법
      • server.xml <Cluster className=org.apache.catalina.ha.tcp.SimpleTcpCluster/> 주석 해제만 해주면 됨
        • 나머지 값들은 기본값으로 적용됨
        • 자세한 옵션은 /docs/cluster-howto.html을 참고하라고 하지만 복잡;;;
        • tomcat 5.5 <Cluster> 디스트립터를 참고하면 쉽게 상세 옵션을 알 수 있음!
        • 옵션중에서 mulicast, receiver내용 알아두면 좋음
          • 누가 내 cluster인지 알려면 multicast IP,port가 동일해야 함
          • 한 서버에서 여러 톰캣을 사용할 때 nio receiver의 IP는 겹치면 안되므로 다르게 설정해야 함
      • WEB_INF/web.xml <distributable/> 디스트립터 추가해야 tomcat cluster의 대상으로 인지됨

 

 Thread

  • Thread는 기본적으로 Connector마다 지정하도록 되어 있음
    • <Connector port=8080 protocol=HTTP/1.1...
    • <Connector port=8009 protocol=AJP/1.3...
    • Default Max Thread Value=200, 즉 지정안하면 200
  • connector마다 지정하면 비효율적이므로 shared executor를 사용하여 전체 connector가 공통의 thread pool을 사용할 수 있음
    • <Executor name=tomcatThreadPool ...
    • <Connector executor=tomcatThreadPool...로
  • Thread Dump
    • 서비스에 대한 지연이 생길경우 Thread 상황 분석할 수 있도록 정보남기는 것
    • trace형태(아래에서 위)로 확인 가능
    • 실행 방법 
      • command를 통해서
        1. <pid>확인
          • (unix/linux) ps-ef |grep java |grep tomcat
          • (window) ???
        2. Thread Dump 발생시키기
          • (unix/linux) kill -3 <pid>
          • (window) JAVA_HOME/bin/jstack <pid>
        3. 확인: catalina.out에 로그남음
      • jvisualVM tool이용

 Monitoring

  • Tomcat default Manager
    • GUI manager
    • admin: tomcat 5.5에서만 지원
  • Probe
    • 람다-probe였는데 google에서 지원하면서 psi-probe로 이름변경
    • probe.war를 배포하고 manager user를 활성화해야 함
    • 배포하면 http://ip:port/probe 활성화됨
    • default manager보다 많은 정보 제공
    • 데이터를 수치로 표현, 쓰레드 강제종료 기능 있음
    • cluster 모니터링기능 5.5에만, 8.0지원안함, 201303이후 업데이트 없음
  • jkstatus
    • 아파치와 톰캣 연동하면 아파치에서 보내는 요청에 대해 분석해줌
    • mod_jk에 들어있음
    • worker.properties, uri.properties에 추가
    • 설정하면 http://ip:port/jkstatus 활성화됨
  • JDK tools
    • visualVM
      • jvm에 대한 것 전반적으로 모니터링 가능
      • jdk1.6.0_18부터 지원
      • 장점 - 많은 plugin 지원, mbean 같은 plugin 설치하면 dataSource도 분석가능
      • remote - 원격지에 있는 서버 모니터링 가능
        • JMX 
          • setenv에 CATALINA_OPTS="-Dcom.sun.management.jmxremote...." 추가해야 함
          • JAVA_OPTS로 추가하면 jvm 기동될 때와 shutdown될 때 모두 읽어들임 shutdown될때에도 Dcom.sun.management.jmxremote.port=18080 이런 속성을 읽어들이면 tcp port가 겹쳐서 shutdown이 안될 수도 있으므로 JAVA_OPTS를 사용하지 말자 
          • CATALINA_OPTS는 tomcat기동될 때만 읽히므로 CATALINA_OPTS를 이용하자
          • 간혹 tomcat이 JMX connection 거부할 때가 있는데 그럴때는 다음과 같이 설정하면 됨
            • CATALINA_OPTS="-Dcom.sun.management.jmxremote...."..2줄만 추가
            • in server.xml 
              • <Server port=8005 shutdown=SHUTDOWN>
              • <Listener className=org.apache.catalina.mbeans.JmsRemoteLifecycleListener...
            • CATALINA_HOME/lib/catalina-jmx-remote.jar추가
            • service:jmx:rmi://192.168.56.101:10002/jndi/rmi://192.168.56.101:10001/jmxrmi 로 연결해보자
        • jstatd: java status daemon을 띄워서 사용하는 방법
    • JMC: Java Mission Control
      • jdk1.7.0부터
      • jdk에 포함되지 않고 java...무슨 kit에 포함되었다가 oracle에 합병되면서 추가되었다고 함
        • GC policy에 따라 보여주는 방식 달라짐 CMS방식을 썼을 때 필요한 모니터링 방식이 바뀜
      • G1GC도 가능
  • APM: Application Performance Manager
    • ex) Jennifer,
    • RHQ - JBoss 모니터링하기에 좋음, 무료
      위의 모니터링 툴과 APM과의 차이는 모니터링 데이터를 저장할 수 있다는 점(DB와의 연동을 제공해서 장기적으로 관리가능), 장기적으로 보관해서 비교분석 가능
      but RHQ는 jBoss plugin은 잘 지원하지만 tomcat과 연동해서 사용하기는 부족한듯함

 Tip

  • directory
    • 한 서버에 여러 tomcat 기동할 때 catalina_home 경로를 {catalina_home}/app/Tomcat_01,02,03처럼 여러개 만드는게 좋음
  • setenv
    • 기본 스크립트(catalina.sh, start.sh,shutdown.sh...)수정은 비추  migration한다던게 하면 불편해짐, setenv적극 활용하자
  • 실행유저
    • ROOT는 막자! ROOT로 기동하다가 다른 user로 변경하면 권한 등 문제가 생김
    • server.xml
      • <Server port=8005 shutdown=SHUTDOWN
      • <Listener className=org.apache.catalina.security.SecurityListener checkedOsUsers=root >
      • 이렇게 하면 root로 기동못함
  • Connector
  • option설명
    acceptCount=10 request Queue의 길이를 정의 idle thread가 없으면 queue에서 idle thread가 생길때까지 요청을 대기하는 queue의 길이 default값은 매우 큼, 이걸 작게 잡아두면 기다리지 않고 빨리 에러를 보내게 됨 (요청을 처리할 수 없는 상황이면 빨리 에러 코드를 보내고 싶을 때
    enableLookups=false 기본값은 true Servlet/JSP 코드 중에서 들어오는 http request에 대한 ip를 조회하는 명령등이 있을 경우 DNS 이름을 IP주소로 바꾸기 위해서 DNS 서버에 look up 요청을 보냄 false로 하면 서버간의 round trip발생 방지 가능
    compression=off HTTP message body를 gzip 현태로 압축해서 리턴하지 않음 과거에는 대역폭이 낮아서 압축해서 많이 보냈지만 요즘은 압축하고 푸는 리소스가 더 많음
    maxConnection=8192 하나의 tomcat 인스턴스가 유지할 수 있는 connection의 수 현재 연결되어 있는 실제 connection의 수가 아니라 현재 사용중인 socket fd(file descriptor)의 수 socket과 file이 열리는 갯수
    maxKeepAliveRequest=1 HTTP 1.1 Keep Alive Connection을 사용할 때 최대 유지할 connection수를 결정 Keep Alive를 사용할 환경이 아닌 경우에 1로 두면 됨 톰캣만 사용하거나 다양한 유저가 있을 때에는 1로 하는게 좋음 항상 같은 유저가 들어온다는 보장이 없을 때는 keep alive하지 않고 매번 새로 들어올 수 있게 하는 게 좋음
    tcpNoDelay=true TCP 프로토콜은 기본적으로 패킷을 보낼 때 바로 보내지 않음 버퍼사이즈에 데이터가 모두 담길 때까지 패킷 전송을 보류함으로 대기 시간이 발생하는 것을 방지 트래픽이 증가하지만 현재 망 속도를 고려하였을 때 문제가 크지 않음

 

 

반응형

'java, spring' 카테고리의 다른 글

Tomcat's directories  (0) 2021.03.03
Java Web Application  (0) 2021.03.02
spring-boot profile별 실행  (0) 2020.03.25
java time - Instant, LocalDate  (0) 2020.03.16
Lombok  (0) 2020.02.14
반응형

504 Gateway Timeout 서버 에러 응답 코드는 서버가
게이트웨이(gateway) 혹은 프록시(proxy)의 역할을 하는 동안 시간 안에 업스트림 서버(upstream server)로부터 요청을 마치기 위해 필요한 응답를 받지 못 했음
https://blog.lael.be/post/9251 - 설정좋음

Access to fetch at 'http://qt2-kic.channel.lgtvcommon.com/api/region/Global/status/S/update' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
https://stackoverflow.com/questions/22665232/what-can-cause-chrome-to-give-an-neterr-failed-on-cached-content-against-a-ser
https://developer.mozilla.org/ko/docs/Web/HTTP/CORS

2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> POST /api/region/Global/status/S/update
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> host: dev.channel.lgtvcommon.com
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> accept: /
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> accept-encoding: gzip, deflate, br
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> accept-language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwiaWF0IjoxNjEwNDk4NjA5LCJleHAiOjE2MTExMDM0MDl9.qqaJFk0-hysF8bMA1VxiWDB_f8d6rF_3N_lWHnJ3N8Z0D6ha7og994FoMf4r8N6bv4wGX-gKjPNlmfMAxpqiEQ
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> content-type: application/json
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> origin: https://dev.channel.lgtvcommon.com
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> referer: https://dev.channel.lgtvcommon.com/HOME-APP/tab
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> sec-fetch-dest: empty
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> sec-fetch-mode: cors
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> sec-fetch-site: same-origin
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> x-forwarded-for: 27.122.242.72
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> x-forwarded-port: 443
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> x-forwarded-proto: https
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> content-length: 0
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|> connection: keep-alive
2021-01-13 01:05:20.507 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|>
2021-01-13 01:05:20.512 [http-nio-8180-exec-10] INFO c.l.c.c.a.HomeAppAdminController - #updateAllByRegionAndStatus|currentUser=com.lge.cdp.security.UserPrincipal@20
2021-01-13 01:05:20.512 [http-nio-8180-exec-10] INFO c.l.c.c.a.HomeAppAdminController - #updateAllByRegionAndStatus|currentUser=com.lge.cdp.security.UserPrincipal@20
2021-01-13 01:07:07.461 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|< 200 OK
2021-01-13 01:07:07.461 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|< Vary: Origin
2021-01-13 01:07:07.461 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|< Vary: Access-Control-Request-Method
2021-01-13 01:07:07.461 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|< Vary: Access-Control-Request-Headers
2021-01-13 01:07:07.461 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|< Vary: Origin
2021-01-13 01:07:07.461 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|< Vary: Access-Control-Request-Method
2021-01-13 01:07:07.461 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|< Vary: Access-Control-Request-Headers
2021-01-13 01:07:07.461 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|< Vary: Origin
2021-01-13 01:07:07.461 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|< Vary: Access-Control-Request-Method
2021-01-13 01:07:07.461 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|< Vary: Access-Control-Request-Headers
2021-01-13 01:07:07.461 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|< Access-Control-Allow-Origin: *
2021-01-13 01:07:07.461 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|<
2021-01-13 01:07:07.461 [http-nio-8180-exec-10] INFO c.l.c.f.LoggingFilter - 10.150.35.221|< {"result":"ok"}

2021-01-12 07:40:02.502 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|> POST /api/region/Global/status/S/update
2021-01-12 07:40:02.502 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|> host: qt2-kic.channel.lgtvcommon.com
2021-01-12 07:40:02.502 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|> accept: /
2021-01-12 07:40:02.502 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|> accept-encoding: gzip, deflate
2021-01-12 07:40:02.503 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|> accept-language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
2021-01-12 07:40:02.503 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|> authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxIiwiaWF0IjoxNjEwNDM2OTg3LCJleHAiOjE2MTEwNDE3ODd9.LCAurM4nLxlHQI0dqtPFlh2H-r8cRSuxN1ytpFsntr9CwInUfHqjCXW-J15GFwHpfaXJyr0F0O8ECHzMdSEnRw
2021-01-12 07:40:02.503 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|> content-type: application/json
2021-01-12 07:40:02.503 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|> origin: http://localhost:3000
2021-01-12 07:40:02.503 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|> referer: http://localhost:3000/
2021-01-12 07:40:02.503 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|> user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
2021-01-12 07:40:02.503 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|> x-forwarded-for: 27.122.242.72
2021-01-12 07:40:02.503 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|> x-forwarded-port: 80
2021-01-12 07:40:02.503 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|> x-forwarded-proto: http
2021-01-12 07:40:02.503 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|> content-length: 0
2021-01-12 07:40:02.503 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|> connection: keep-alive
2021-01-12 07:40:02.503 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|>
2021-01-12 07:40:02.507 [http-nio-8180-exec-9] INFO c.l.c.c.a.HomeAppAdminController - #updateAllByRegionAndStatus|currentUser=com.lge.cdp.security.UserPrincipal@20
2021-01-12 07:41:48.838 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|< 200 OK
2021-01-12 07:41:48.839 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|< Vary: Origin
2021-01-12 07:41:48.839 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|< Vary: Access-Control-Request-Method
2021-01-12 07:41:48.839 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|< Vary: Access-Control-Request-Headers
2021-01-12 07:41:48.839 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|< Vary: Origin
2021-01-12 07:41:48.839 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|< Vary: Access-Control-Request-Method
2021-01-12 07:41:48.839 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|< Vary: Access-Control-Request-Headers
2021-01-12 07:41:48.839 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|< Vary: Origin
2021-01-12 07:41:48.839 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|< Vary: Access-Control-Request-Method
2021-01-12 07:41:48.839 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|< Vary: Access-Control-Request-Headers
2021-01-12 07:41:48.839 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|< Access-Control-Allow-Origin: *
2021-01-12 07:41:48.839 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|<
2021-01-12 07:41:48.839 [http-nio-8180-exec-9] INFO c.l.c.f.LoggingFilter - 10.150.32.229|< {"result":"ok"}

반응형
반응형

frontend server build 확인방법

  • npm run build (빌드결과물 생성됨)
  • npm install -g serve (serve 설치)
  • serve -s build (bash에서 실행해야함, 윈도우 터미널에서는 동작안함, 완료되면 localhost:5000에서 확인가능)

빌드완료되면 다음위치에 다음과 같은 결과물이 떨어짐
File sizes after gzip: 485.41 KB
build\static\js\2.f302d4b6.chunk.js 62.8 KB (-50 B)
build\static\js\main.42c20a87.chunk.js 53.73 KB
build\static\js\3.60c20971.chunk.js 39.12 KB
build\static\js\5.3a36e225.chunk.js 6.39 KB
build\static\js\4.f1151a7d.chunk.js 1.16 KB
build\static\js\runtime~main.39277503.js 283 B
build\static\css\main.3655cd5e.chunk.css

jss1 - max-whith:520px고정문제로 인해 로그인 첫화면 사이즈 작아짐, 원인은?

"@babel/runtime-corejs3": {
    "version": "7.9.6",
    "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.9.6.tgz",
    "integrity": "sha512-6toWAfaALQjt3KMZQc6fABqZwUDDuWzz+cAfPhqyEnzxvdWOAkjwPNxgF8xlmo7OWLsSjaKjsskpKHRLaMArOA==",
    "dev": true, --->  이게원인인듯 
    "requires": {
        "core-js-pure": "^3.0.0",
        "regenerator-runtime": "^0.13.4"
    },
    "dependencies": {
        "regenerator-runtime": {
            "version": "0.13.5",
            "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
            "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
            "dev": true --->  이게원인인듯 
        }
    }
},
반응형
반응형

mySQL Numeric Type 

최신 버젼 mysql에서는 bigint(20)으로 안나오고 bigint로 나온다

타입에 따라 자릿수는 정해지기 때문에 ()숫자는 의미가 없다고 한다

TINYINT(?)

SMALLINT(6)

MEDIUMINT(?)

INT(11)

BIGINT(20?)

 

반응형
반응형

 

content<padding<border<margin<position

box-sizing

  • content-box
  • border-box

height, maxHeight, lineHeight

display

  • block
  • inline
  • inline-block
  • none

position

  • static
  • relative
  • absolute
  • fixed

z-index

  •  

!important - overriding 하더라도 이 속성이 적용되도록, 중요하니까

----------------------------------------
level3 menu 들여쓰기 적용 
#snb .MuiList-root > li > ul > li > a {
  padding-left: 25->50px;
----------------------------------------
gnb statistics 메뉴 6개로 늘어날시 잘리는 문제
#header.is_active:after {
  height: 200->235px;

.sub_menu {
  height: 200->235px;
----------------------------------------
level2 level3 menu 사이 간격좁히기
#snb .MuiList-root>li>ul { #snb .MuiList-root>li>ul {
  padding: 15px 0->5px 0 15px 0;
}
----------------------------------------
material table 위 add버튼 right으로 이동하기
.btn_set_wrap.tbl_top1, .btn_set_wrap.tbl_top2{
left:0px; -> right:0px;
다음 2줄 추가 
.tbl_wrap > .tbl_top1 + .MuiPaper-root > .MuiToolbar-root .MuiTextField-root + div{width:120px;}
.tbl_wrap > .tbl_top2 + .MuiPaper-root > .MuiToolbar-root .MuiTextField-root + div{width:230px;} 
----------------------------------------
materialTable row backgroundColor 흰색고정
#root .MuiTable-root tbody td,
.pop_wrap .MuiTable-root tbody td {
  background: #ffffff;
----------------------------------------
??? material Table 내외부 버튼길이 문제 
.MuiButton-root.btn_size_tbl {
  width: 95px; -> 테이블 row별 버튼 %로 고치면 block으로 보여짐...

.btn_set_wrap_tbl {
  width: 100%;
  display: flex;
}
----------------------------------------
<TextField label="Select File" -> <TextField placeholder="Select File"


STATISTICS > Summary 등 메뉴에서 테이블 버튼위치 틀어지는 부분은 수정했습니다. 버튼눌렀을때 나오는 부분은 확인결과 정상적으로 나와서 따로 작업하지 않았습니다.

테이블 컬럼 고정의 경우 제가 설명드렸던 부분을 다 이해하지 못하신거 같습니다.

고정시켜주는 부분의 width값은 처음 테이블 생성시에 정해지는데 필터에서 선택하여 값을 변경시켜줄때 처음생성됐던 width값이 변경되어지지 않고 있습니다. 예를 들어 처음 생성된 width값이 1400이고 고정시킬 width값이 200이라면 1400에서부터 200만큼 들어간 위치를 고정시키게 됩니다. 근데 처음생성된 width값이 1400인데 변경된 테이블 안에 생성된 내용의 width값이 1600이라면 1400부터 1600까지의 영역은 안보이게 됩니다. 그리고 고정된영역도 1600에서 200만큼의 영역이 아닌 1400에서 200만큼의 영역이 보여지게 됩니다. 이부분은 수정이 어려운것으로 보여지기때문에 테이블 전체를 다시 그려달라고 요청드렸습니다.

반응형
반응형

alter table cdp.tb_rc_service_base modify biz_area varchar(500) NOT NULL;

실행시 Error Code: 1138. Invalid use of NULL value 발생.

not null column에 이미 null이 들어가있어 문제됨, null이 되지 않도록 update하거나

alter table cdp.tb_rc_service_base modify biz_area varchar(500) NOT NULL default ''; 수행하면됨 

반응형

'db' 카테고리의 다른 글

mysql remote 접속허용  (0) 2022.04.14
mysql numeric type  (0) 2020.11.05
mysql workbench timeout 설정 (Lost connection to MySQL server during query)  (0) 2020.05.25
mysql lock  (0) 2020.05.25
mysql data migration  (0) 2020.05.21
반응형

Edit → Preferences → SQL Editor → DBMS connection read time out (in seconds): 600으로 늘임

반응형

'db' 카테고리의 다른 글

mysql numeric type  (0) 2020.11.05
mysql error - Invalid use of NULL value (이미 null들어간 column not null로 만들때 에러)  (0) 2020.05.25
mysql lock  (0) 2020.05.25
mysql data migration  (0) 2020.05.21
oracle VS mysql  (0) 2020.02.26
반응형

Error Code: 1205. Lock wait timeout exceeded 에러발생시

구글링해보니 보통 다음 2가지 해결책 제시됨

    1. lock timeout 시간을 늘려주라

workbench 기본 read time-out은 30초였는데 늘여도 소용없었음

 

    1. LOCK 테이블에 lock이 존재하는지 확인해보라

use information_schema;
select * from information_schema.INNODB_LOCKS;
select * from information_schema.INNODB_LOCK_WAITS;
select * from information_schema.INNODB_TRX; -- 오랜 시간 동안 Commit 되지 않은 transaction
show full processlist; -- 로 어떤 IP에서 접속했는지 등 정보확인
kill 423911;-- 의심(?)되는 것을 킬

 

참고) https://www.popit.kr/mysql-lock-%EC%83%81%ED%99%A9-%EB%AC%B8%EC%A0%9C-%ED%95%B4%EA%B2%B0/

반응형
반응형

? shell로 접근하려면 10060port사용해야 하는지?

Can't connect to MySQL server on 'rds-an2-richcdp-qa2-mysql.cjbyfjmv7vdu.ap-northeast-2.rds.amazonaws.com' (10060) when trying to connect


EXPORT

$mysqldump -uroot -p wordpess > dump160724.sql

(workbench통해 실행할 때 명령어) mysqldump.exe --defaults-file="c:\users\user\appdata\local\temp\tmpr46kpq.cnf" --user=cdp_mgr --host=rds-an2-richcdp-qa2-mysql.cjbyfjmv7vdu.ap-northeast-2.rds.amazonaws.com --protocol=tcp --port=3310 --default-character-set=utf8 --skip-triggers --skip-column-statistics "richcdp_kic_qa2" "tb_rc_user"

 

IMPORT

$mysqladmin -uroot -p create wordpress

$mysql -uroot -p wordpress < dump160724.sql

반응형

'db' 카테고리의 다른 글

mysql workbench timeout 설정 (Lost connection to MySQL server during query)  (0) 2020.05.25
mysql lock  (0) 2020.05.25
oracle VS mysql  (0) 2020.02.26
mysql query tip  (0) 2020.01.31
H2 DB 사용방법  (0) 2019.10.30
반응형

mainpage = <Redirect to="/dashboard" />;

mainpage=<meta http-equiv="refresh" content="0; url=/signin"/>;

window.location.href = '/signin';

mainpage = <Route path="/" component={Signin} />; re-render OK, not refresh

history.push('/PROGRAM/programlist');re-render ?, not refresh

 

import { Route, Redirect } from 'react-router-dom';

반응형

'js' 카테고리의 다른 글

CORS(Cross-Origin Resource Sharing)  (0) 2022.06.10
react-scripts build  (0) 2020.12.17
ES6(2015) - import/export  (0) 2020.03.24
eslint, prettier  (0) 2020.03.18
javascript timezone  (0) 2020.03.15
반응형

WAS

  • mvn spring-boot:run -Dspring-boot.run.profiles=local -> bash shell(git bash in Windows)에서만 작동하는듯
  • ./mvnw spring-boot:run -Dspring.profiles.active=local
  • SPRING_PROFILES_ACTIVE=local ./mvnw
  • 이게 안되면 mvn spring-boot:run으로 빌드후 배너만 나오고 이후 반응없음 

Jar

  • java -jar -Dspring.profiles.active=local xxx.jar(jar file path)
반응형

'java, spring' 카테고리의 다른 글

Java Web Application  (0) 2021.03.02
tomcat  (0) 2021.03.02
java time - Instant, LocalDate  (0) 2020.03.16
Lombok  (0) 2020.02.14
Log4j  (0) 2020.02.13
반응형
  • export
    • default
      • function, class만 가능, 아니면 Parsing error: Only expressions, functions or classes are allowed as the `default` export.에러남
      • import시   import 그냥  from  이렇게 사용
    • named
      • import시 import {일케}  from이렇게 해야함
      • export A를 import {B}로 바꿔서 사용가능
      • import {A as B} 이렇게도 변경가능
      • import * as lib from 이렇게 해서  전체를 lib로 받고 lib.a로 사용가능

 

 

반응형

'js' 카테고리의 다른 글

react-scripts build  (0) 2020.12.17
page redirect 방법들  (0) 2020.04.12
eslint, prettier  (0) 2020.03.18
javascript timezone  (0) 2020.03.15
frontend setting in Windows  (0) 2020.01.13
반응형

vsCode에서 사용방법

  • prettier 규칙적용: F1 > Format Document
  • 저장시 자동적용: settings.json에 추가 - "editor.formatOnSave"true,
  • eslint: F1 > ESLint fix all auto-fixable Problems
  "singleQuote": true, //문자열 입력 시 쌍따옴표(") 대신 따옴표(') 사용
  "semi": true, //코드 끝에 항상 세미콜론 추가
  "useTabs": false,
  "tabWidth": 2,
  "trailingComma": "all", //객체, 배열 등의 마지막 항목에 콤마(,) 추가
  "printWidth": 500,
  "bracketSpacing": true //괄호 안에 데이터가 있을 때 공백 삽입
{
  "arrowParens": "always",
  "bracketSpacing": true,
  "endOfLine": "lf",
  "htmlWhitespaceSensitivity": "css",
  "insertPragma": false,
  "singleAttributePerLine": false,
  "bracketSameLine": false,
  "jsxBracketSameLine": false,
  "jsxSingleQuote": false,
  "printWidth": 500,
  "proseWrap": "preserve",
  "quoteProps": "as-needed",
  "requirePragma": false,
  "semi": true,
  "singleQuote": false,
  "tabWidth": 2,
  "trailingComma": "es5",
  "useTabs": false,
  "embeddedLanguageFormatting": "auto",
  "vueIndentScriptAndStyle": false,
  "filepath": "c:\\workspace\\csportalfront\\src\\views\\Setting&Management\\EvaluationSetting.js",
  "parser": "babel"
}

https://prettier.io/docs/en/options.html

 

Prettier · Opinionated Code Formatter

Opinionated Code Formatter

prettier.io

 

prettier eslint
  "singleQuote": true,  //문자열은 '로만사용    
  "semi": true, //코드는 ;로 끝남 semi: ['warn', 'always']  
  "useTabs": false, //탭 사용여부 indent: ['warn', 'tab'] ???  
  "tabWidth": 2, //탭 크기    
  "trailingComma": "all", // 객체 끝 부분에도 Comma 추가 'comma-dangle': ['warn', 'never']과 대치됨  
  "printWidth": 100  // 줄 당 max length    
    'space-before-function-paren': ['warn', 'always']  get( x, get ( o
    'react/jsx-indent': ['warn', 'tab'],  
    'linebreak-style': ['warn', 'unix']  
    'react/sort-prop-types': [
      'warn',
      {
        ignoreCase: true,
        requiredFirst: true,
      },
    ],
 
 알파벳순 정렬안되면 에러
       
       
       
반응형

'js' 카테고리의 다른 글

page redirect 방법들  (0) 2020.04.12
ES6(2015) - import/export  (0) 2020.03.24
javascript timezone  (0) 2020.03.15
frontend setting in Windows  (0) 2020.01.13
Promise, async, await...  (0) 2020.01.02
반응형

@RequestParam(value = "date", required = false) @DateTimeFormat(pattern = "yyyyMMdd") LocalDate date) 동작

@RequestParam(value = "date", required = false) @DateTimeFormat(pattern = "yyyyMMdd") Instant date) 에러

Instant로는 yyyymmdd로 받을 수가 없는 듯

 

how to check available timezone

Set<String> zoneIdSet = ZoneId.getAvailableZoneIds();

for(String zoneId:zoneIdSet) System.out.println(zoneId);

 

하루 더하기

[LocalDate] date.plusDays(1)

[Instant] time.plus(1, ChronoUnit.DAYS), time.plus(Duration.ofDays(1))

 

LocalDate -> Instant 변환

ZoneId timezone = ZoneId.of("UTC");// ZoneId.systemDefault()->KST+9

date.atStartOfDay(timezone).toInstant();

반응형

'java, spring' 카테고리의 다른 글

tomcat  (0) 2021.03.02
spring-boot profile별 실행  (0) 2020.03.25
Lombok  (0) 2020.02.14
Log4j  (0) 2020.02.13
ChannelGenre enum관련 에러 (patch시 No validator could be found for constraint)  (0) 2020.01.14
반응형
반응형

'js' 카테고리의 다른 글

page redirect 방법들  (0) 2020.04.12
ES6(2015) - import/export  (0) 2020.03.24
eslint, prettier  (0) 2020.03.18
frontend setting in Windows  (0) 2020.01.13
Promise, async, await...  (0) 2020.01.02
반응형

이러한 CSS의 태생적 한계를 보완하기 위해 Sass는 다음과 같은 추가 기능과 유용한 도구들을 제공한다.

  • 변수의 사용
  • 조건문과 반복문
  • Import
  • Nesting
  • Mixin
  • Extend/Inheritance

CSS와 비교하여 Sass는 아래와 같은 장점이 있다.

  • CSS보다 심플한 표기법으로 CSS를 구조화하여 표현할 수 있다.
  • 스킬 레벨이 다른 팀원들과의 작업 시 발생할 수 있는 구문의 수준 차이를 평준화할 수 있다.
  • CSS에는 존재하지 않는 Mixin 등의 강력한 기능을 활용하여 CSS 유지보수 편의성을 큰 폭으로 향상시킬 수 있다.
  •  

https://poiemaweb.com/sass-basics

반응형
반응형

 

  oracle mysql  
  NVL(EPSD_NO,'0')   select IFNULL(null,'if it is null');
CASE WHEN EPSD_NO IS NULL OR EPSD_NO = ''
THEN '0' ELSE EPSD_NO END
오라클은 ''을 null로 삽입하지만, mySQL은 ''은 그대로 ''로 삽입함
이것때문에 문제소지 없는지 확인필요함
  decode( 1,1,'true','false') IF(조건, '참','거짓'))

case when 조건 then 결과
else 결과 end
SELECT IF (5<10, '크다','작다')
select case when 1=1 then 'true' else 'false' end;
 
  WHERE ROWNUM <= 30   LIMIT 30 정렬후 limit할 경우, 오라클은 limit이 where절에 들어가고(WHERE ROWNUM<x)
정렬보다 먼저 적용되므로 정렬후 inner view로 싸고 limit해야 하나 mySQL은
limit이 정렬후에 적용되어 inner view로 감쌀 필요가 없음 이건 mySQL이 더편함












string
관련
 

select LENGTHB('가나다') from dual;
select LENGTH('가나다') from dual;
LENGTH(str)
CHAR_LENGTH(str)
select LENGTH('가나다'); /*byte legnth*/
select CHAR_LENGTH('가나다');
9
3
 'A'||'B'||'C CONCAT(str1,str2,...)
CONCAT_WS(separator,str1,str2,...)
select CONCAT( 'A', 'B', 'C');
select CONCAT_WS(',','1','2','3');
ABC
1,2,3
 SUBSTR(str, pos)  SUBSTRING(str, pos)
= SUBSTRING(str FROM pos)
SUBSTRING(str, pos, len)
= SUBSTRING(str FROMpos FOR len)

 
SELECT SUBSTRING('123456',3); /* index는 모두 1부터 시작*/
SELECT SUBSTRING('123456',3,2);
SELECT SUBSTRING('123456', -3); /* 음수일때는 끝에서부터 셈*/
SELECT SUBSTRING('123456', -5, 4);
3456
34
456
2345



SUBSTRING_INDEX(str,delim,count) SELECT SUBSTRING_INDEX('AB*CD*EF*G', '*', 1);
SELECT SUBSTRING_INDEX('AB*CD*EF*G', '*', 2);
SELECT SUBSTRING_INDEX('AB*CD*EF*G', '*', 5);
SELECT SUBSTRING_INDEX('AB*CD*EF*G', '*', -2);
SELECT SUBSTRING_INDEX('AB*CD*EF*G', '*', 0);
AB
AB*CD
AB*CD*EF*G
EF*G
''
INSTR
 
SELECT INSTR('AB*CD*EF*G', '*', 4, 2 ) FROM dual
4th 문자부터 시작하여 2nd *의 위치 반환
없으면 0 반환
     














date
관련
sysdate
trunc(sysdate)
?
NOW()
CURDATE()
CURTIME()
select NOW(); /*GMT 기준시로 나옴*/
select CURDATE(); /*GMT 기준시로 나옴*/
select CURTIME(); /*GMT 기준시로 나옴*/
2015-07-16 05:05:54
2015-07-16
05:05:54
TO_DATE( time ,'yyyymmddhh24miss') STR_TO_DATE( str ,'format') select STR_TO_DATE(now(),'%Y-%m-%d'); 2nd 인자가 string의 format에 맞아야 함
  DATE(date)
TIMESTAMP(date)
UNIX_TIMESTAMP(date)
select DATE(now())
select TIMESTAMP(now())
select UNIX_TIMESTAMP(now())
date에서 time자르고 day까지 반환
time까지 반환
sec단위로 반환?
  EXTRACT(unit FROM date) select EXTRACT(year FROM now())  
TO_CHAR( TIME,'yyyymmddhh24mi') DATE_FORMAT(date,format) select DATE_FORMAT(now(),'%b %d %Y %h:%i %p');
select DATE_FORMAT(now(),'%d %b %y %k:%i');
select DATE_FORMAT(now(),'%d %b %Y %T:%f');
Jul 16 2015 06: 18 AM
16 Jul 15 6: 23
16 Jul 2015 06:19:33:000000
sysdate + hour/24 DATE_ADD(date,INTERVAL expr type) select DATE_ADD(now(),  INTERVAL 12 HOUR)  
sysdate - day DATE_SUB(date,INTERVAL expr type) select DATE_SUB(now(),INTERVAL 5 DAY)  
오늘 14:10   select DATE_ADD(DATE_ADD(current_date, interval 14 hour), interval 10 minute)
select current_date + interval 14 hour + interval 10 minute
 
어제 14:10   select DATE_ADD(DATE_ADD(current_date, interval -10 hour), interval 10 minute)
select current_date - interval 10 hour + interval 10 minute
 
ROUND((COMPLT_DATE - GEN_DATE) * 24 * 60, 0) min DATEDIFF(date1,date2) select TIMEDIFF(COMPLT_DATE, GEN_DATE) from TB_IC_DMON_SCHD_HIST  
ROUND((END_TIME - STRT_TIME) * 24 * 60 * 60, 0) sec   ROUND(UNIX_TIMESTAMP(IBS.END_TIME) - UNIX_TIMESTAMP(IBS.STRT_TIME), 0)  총 걸린 second
    select CONVERT_TZ(now(),'+00:00','+09:00'); timezone변경: GMT를 KST로
  SELECT TO_CHAR( 11 ) FROM DUAL;
SELECT TO_NUMBER( '-11' ) FROM DUAL;
  select CAST( 11 AS CHAR );
select CAST( '-11' AS SIGNED );
 
  select * from A, B where 조건   select * from A, B where 조건;
select * from A join B on 조건;
select * from A inner join B on 조건;
select * from A natural join B; (A, B에 같은 이름의 컬럼이 있을 때만 동작)
inner join
  select * from A, B where 조건( + )   select * from A left outer join B on 조건;
select * from A left outer join B on 조건 left outer join C on 조건;
select * from A right outer join B on 조건;
mySQL은 full outer join 지원안함
outer join
      select * from A cross join B; cross join
         

 

 

  • meta lock: online DDL지원하면서 도입된 개념(mySQL 5.X대 버젼부터 추가된듯), transaction 잡고 select 하면 DDL에 hang걸림, DML은 괜찮음 
    (즉, autocommit=false 설정하고 작업후 commit 안하고 그냥 끝내면 안됨, select만 해도 autocommit=true설정하거나 작업 후 반드시 commit해야함)
    svc package에는 view재생성 등 DDL이 많으므로 특히 주의해야함
  • mySQL에는 배열, synonym이 없음 - sdp-ibs에서는 배열로 임시테이블 만드는 대신 string으로 임시테이블 만드는 방법 사용함 
  • mySQL에는 sequence 없음 - 대신 auto increment라는 함수??사용가능 (default key 만들어주는 용도??) or sequence대신 테이블과 function을 사용할 수도 있음
    (sdp에서는 기존 sequence를 거의 테이블로 대체했음, hesdp_seq에 sequence로 사용하기 위한 테이블들 모여있음)
  • mySQL은 oraclel과 hint 사용법이 다르며 oracle hint /*+ ...*/은 mySQL에서 주석으로 무시된다
  • package 내 function들을 모두 procedure로 변경한 이유 - mySQL의 function은 out parameter를 사용할 수 없어서
  • batch job - event job으로 등록가능 (hesdp_com.pbf_batch_history 테이블에 이력남김, 등록은 DBA통해서)
  • HESDP_COM.FN_BLANKTONULL('$(GEN_USR_NO)') 사용하는 이유: 오라클은 ''을 null로 바꾸주는데 mySQL은 안바꿔줘서 function 만들어 사용함
  • mySQL은 oracle과 달리 object 변경이 있을 시, 관련 procedure나 fucnciton 재컴파일 안해줘도 됨
  • oracle은 select시 from절이 필수인 반면 mySQL은 필수아님 (from dual 안써도 됨)
  • 시간관련 함수들은 상당히 다름 (위 표 참고)
  • mySQL은 oracle과 달리 대소문자를 구분하는 경우가 많다. (e.g. 접속 user, 시간포맷 오라클은 YYYYMMDD=yyyymmdd이지만 mySQL은 %Y!=%y)
  • mySQL은 oracle과 달리 inner view를 사용할 때 꼭 table alias를 명시해줘야 함, 안그러면 에러남
  • SDP 운영 KIC, AIC, EIC, Q1 KIC mySQL DB만 master와 slave로 이중화 되어 있고 나머지는 하나임
    이중화된 DB의 경우, select는 slave에서 하고 update, delete, 혹은 update, delete와 select가 함께 일어나는 operation의 경우 master에서 작업한다.
    (성능때문에 이중화한건데, 그렇게 안하고 master만 계속 이용하면 이중화한 의미가 없음)
    master에서 변경된 data는 slave로 1초 이내에 복사된다.
반응형

'db' 카테고리의 다른 글

mysql lock  (0) 2020.05.25
mysql data migration  (0) 2020.05.21
mysql query tip  (0) 2020.01.31
H2 DB 사용방법  (0) 2019.10.30
mysql.*, information_schema.*  (0) 2019.09.06
반응형
반응형

'react' 카테고리의 다른 글

react-intl (international, 다국어 관련)  (0) 2022.08.02
react component: class vs function  (0) 2022.05.26
react hook: 16.8부터 추가  (0) 2020.01.02
react에서 (re)hydration(수화,수분보충)의 의미  (0) 2019.12.18
Redux Study  (0) 2019.09.27
반응형
반응형
반응형
반응형
반응형

log4j.properties 위치설정


- 절대경로에 의한 설정방법
    import org.apache.log4j.PropertyConfigurator;
    PropertyConfigurator.configure("C:\\log4j.properties");
    Log.debug("Log4j는 로그 찍기에 좋아요.");

- classpath의 최상위에 두는 방법


- web.xml에서 설정하는 방법
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.properties</param-value>
</context-param>

참고) http://egloos.zum.com/skywork/v/1138674

반응형

'java, spring' 카테고리의 다른 글

java time - Instant, LocalDate  (0) 2020.03.16
Lombok  (0) 2020.02.14
ChannelGenre enum관련 에러 (patch시 No validator could be found for constraint)  (0) 2020.01.14
Jwt Token Expire 주기 설정  (0) 2019.11.27
Spring pageation  (0) 2019.11.25
반응형

[mySQL 스케쥴러동작시 커맨드]
ps -ef | grep java | grep "com.lge.ibis.manager.scheduler.mgmt.SchdManager"
ps -ef | grep java | grep nSvcBasDaemon
ps -ef | grep java | grep "com.lge.ibis.manager.scheduler.mgmt.TestManager"
java -cp /:/home/sdpbat/ibs/let-it-go/lib/*:/home/sdpbat/ibs/let-it-go/crawler-manager-1.0.0.jar com.lge.ibis.manager.scheduler.mgmt.TestManager $input
nohup java -Xms512m -Xmx1024m -XX:MaxPermSize=512m -XX:+UseParallelGC -cp /:/home/sdpbat/ibs/let-it-go/lib/*:/home/sdpbat/ibs/let-it-go/crawler-manager-1.0.0.jar com.lge.ibis.manager.scheduler.mgmt.SchdManager

반응형

'etc > linux' 카테고리의 다른 글

linux 사양확인  (0) 2022.04.18
linux 원격접속  (0) 2022.04.07
리눅스 PC에 백업  (0) 2019.07.26
Ubuntu 단축키  (0) 2019.04.26
시스템 관련  (0) 2019.04.23
반응형

동일한 테이블의 다른 컬럼 참조하여 업데이트하고싶을 때

  • update tb_ic_mso_prdt_itm_bas set prdt_ver = (select prdt_ver from tb_ic_mso_prdt_itm_bas where..) 이렇게 하면 다음 에러발생
    • Error Code: 1093. You can't specify target table 'tb_ic_mso_prdt_itm_bas' for update in FROM clause
  • 그럴경우 아래와 같이 T로 한번 더 감싸주면 됨
    • update tb_ic_mso_prdt_itm_bas set prdt_ver = (select T.* from (select prdt_ver from tb_ic_mso_prdt_itm_bas where..) T)
  • 여기서 T를 가상/임시 테이블이라 하던가? 암튼 oracle에서는 아래와 같이 with T로 사용가능
    • with T as(select sysdate from dual) select * from T
  • example
    • 에러
      update tb_ic_contents_cntry_code_map A
      set major_logo_url = ( select major_logo_url from tb_ic_contents_cntry_code_map where ic_contents_set_id='com.lge.crawler.xml.tms.TmsEpgCrawler' and cntry_code='US') 
      where ic_contents_set_id='com.lge.crawler.xml.gn.epg.GnEpgCrawlerMX' and cntry_code='MX'
    • 정상
      update tb_ic_contents_cntry_code_map A
      set major_logo_url = ( select * from
                      ( select major_logo_url from tb_ic_contents_cntry_code_map where ic_contents_set_id='com.lge.crawler.xml.tms.TmsEpgCrawler' and cntry_code='US') temp
                    )
      where ic_contents_set_id='com.lge.crawler.xml.gn.epg.GnEpgCrawlerMX' and cntry_code='MX'

 

이런식으로 order by 할 때 순서를 각각 정할 수도 있다

SELECT * FROM tb_ic_contents_set_job_gr
ORDER BY CASE ic_contents_set_id
WHEN 'com.lge.meta.crawler.newepg.NewEpgCrawler' THEN 1
WHEN 'com.lge.meta.TVMao.TVMaoCrawler' THEN 2 
ELSE 3 END

 

배열대신 string으로 임시테이블 생성하는 방법

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.col, '*', temp.n(index역할)), '*', -1) CHAN_CODE
FROM (select '12345*23451*12345' as col) t CROSS JOIN 
(SELECT a.N + b.N * 10 + 1 as n FROM 
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b ORDER BY n
) temp WHERE temp.n <= 1 + (LENGTH(t.col) - LENGTH(REPLACE(t.col, '*', '')));

 

배열대신 string사용하여 index로 접근하는 방법

select SUBSTRING_INDEX(SUBSTRING_INDEX(t.col, ',', 1(index, 1부터시작)), ',', -1) CHAN_CODE
FROM (select '12345,23451,12345' as col) t;

How can I simulate an array variable in MySQL?

UPDATE HESDP_IBS.TB_IC_CHAN_BAS A
SET LG_CHAN_GENRE = (
                                            SELECT REPLACE(LG_GENRE_CODE, ';', '')
                                            FROM (
                                                             SELECT chan_code
                                                                           , LG_GENRE_CODE
                                                                           , IF(@PART = AA.CHAN_CODE, @RNUM := @RNUM + 1, @RNUM := 1) AS score
                                                                                , @PART := AA.CHAN_CODE AS PART
                                                                             FROM (
                                                                                           SELECT SVC.CHAN_CODE
, SVC.CHAN_STD_NAME
, SVC.LG_GENRE_CODE
, COUNT(*) AS GENRE_COUNT
FROM HESDP_IBS.TB_IC_N_SVC_BAS SVC
WHERE 1=1
AND SVC.IC_CONTENTS_SET_ID = '$(contentsSetId)'
GROUP BY SVC.CHAN_STD_NAME, SVC.CHAN_CODE, SVC.LG_GENRE_CODE
ORDER BY CHAN_CODE, GENRE_COUNT
) AA,
(SELECT @PART := '', @RNUM := 0) CC
ORDER BY AA.CHAN_CODE, AA.GENRE_COUNT DESC
) T
WHERE T.score=1
AND A.chan_code=T.chan_code
AND A.IC_CONTENTS_SET_ID = '$(contentsSetId)'
)
WHERE A.IC_CONTENTS_SET_ID = '$(contentsSetId)'
AND (A.LG_CHAN_GENRE = '999' OR A.LG_CHAN_GENRE IS NULL)



DECLARE CONTINUE HANDLER FOR NOT FOUND SET end_of_rows(미리생성한변수) =TRUE ;

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err =TRUE ;

DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN
GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE, @sqlerrno = MYSQL_ERRNO, @sqlerrmsg = MESSAGE_TEXT;
SET O_error_message = (CONCAT('PACKAGE_ERROR',' ',
Ifnull(L_function, '') ,' ',
IFNULL(@sqlstate, '') ,' ',
IFNULL(@sqlerrno, ''), ' ',
IFNULL(@sqlerrmsg, '')));
ROLLBACK;
반응형

'db' 카테고리의 다른 글

mysql data migration  (0) 2020.05.21
oracle VS mysql  (0) 2020.02.26
H2 DB 사용방법  (0) 2019.10.30
mysql.*, information_schema.*  (0) 2019.09.06
daily check query (mysql & oracle)  (0) 2019.07.17
반응형

네트워크 설정> IP주소 설정메뉴 > 고급 > 메트릭을 낮게 설정할 수록 우선순위 높아짐

우선순위 확인: cmd > route print

  • 2020/Jan 새 노트북 세팅 후 메트릭 설정했는데도 우선순위가 작동하지 않음
  • 유선인터넷을 우선순위 높였는데 계속 무선이 잡힘
  • 무선을 자동IP 사용하지 않고 수동IP사용하도록 바꾸니까 그 때서야 작동함

 

반응형

'tips' 카테고리의 다른 글

[webStorm] 단축키  (0) 2022.07.14
[vsCode] java실행시 vmArgs 옵션추가방법 - launch.json에 추가  (0) 2022.06.16
PlantUML  (0) 2019.11.08
Special Characters  (0) 2019.11.01
[vs code] shortcut, tips...  (0) 2019.07.31
반응형

@Size(max = 5) 없애니까 patch시 No validator could be found for constraint

'javax.validation.constraints.Size' validating type..에러안남

반응형

'java, spring' 카테고리의 다른 글

Lombok  (0) 2020.02.14
Log4j  (0) 2020.02.13
Jwt Token Expire 주기 설정  (0) 2019.11.27
Spring pageation  (0) 2019.11.25
JPA ddl설정, queryDSL  (0) 2019.11.21
반응형

color="primary" LG붉은색, 주요컬러를 어디서 정할수 있는듯

color="secondary" 1차컬러, 2차컬러 이렇게 정할 수 있는듯, 이건 회색으로 나옴

color="inherit" 커스터마이징한 컬러가 아니라 material-ui에서 제공하는 기본 디폴트컬러인가??

반응형
반응형

yarn start error방지

    "scripts": {
        "start": "PORT=8000 react-scripts start", //PORT=8000 삭제해야 yarn start error안남
        "build": "react-scripts build",
        "test": "react-scripts test --env=jsdom",
        "test:debug": "react-scripts test --env=jsdom --verbose false",
        "lint": "eslint src",
        "eject": "react-scripts eject"
    },

 

Redux사용을 위한 변경 (Window에서 개발하기 위해서 추가했던 것 같음)

before

import { createStore, applyMiddleware } from 'redux';
import thunkMiddleware from 'redux-thunk';
import cdp from '../reducers';
export default function configureStore (initialState) {
    const store = createStore(
        cdp,
        initialState,
        applyMiddleware(thunkMiddleware)
    );
    return store;
}

after

import { createStore, applyMiddleware, compose(얘도추가함) } from 'redux';
import thunkMiddleware from 'redux-thunk';
import cdp from '../reducers';
export default function configureStore (initialState) {

    const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;//이부분 추가

    const store = createStore(
        cdp,
        initialState,
        composeEnhancers(applyMiddleware(thunkMiddleware))//이부분 추가
    );
    return store;
}
반응형

'js' 카테고리의 다른 글

page redirect 방법들  (0) 2020.04.12
ES6(2015) - import/export  (0) 2020.03.24
eslint, prettier  (0) 2020.03.18
javascript timezone  (0) 2020.03.15
Promise, async, await...  (0) 2020.01.02

+ Recent posts