반응형

mysql에서 select 쿼리를 조회했는데 

 

SQL 오류 (1248) : Every derived table must have its own alias

 

에러메시지

 

다음과 같은 에러가 난다면 별칭을 주지 않았기 때문이다.

 

예를 들어 쿼리가 아래와 같다면

 

select * 
from ( select * from test1 );

위와 같이 서브 쿼리를 사용해서 select문을 조회했는데 에러가 났다면 다음과 같이 별칭을 주면 된다. 

 

select * 
from ( select * from test1 ) A;

 

해달 서브쿼리의 조회 결과에 별칭을 주면 에러가 없어질 것이다.

반응형
반응형

UNION

union 은 distinct의 기능이다.

UNION ALL

union all은 distinct 없이 모두 조회하는 기능이다.

 

차이점

위의 차이점이 잘 이해가 가지 않는다면 아래의 설명을 참고하면 된다.

우선 아래와 같은 테이블 2개가 있다고 하자.

 

tb1                                             

id data
1 test1
2 test2

 

tb2

id data
1 test1
2 test2

 

 

select id,data
from tb1
union
select id,data
from tb2;

위와 같은 쿼리로 조회시에 결과는

 

id data
1 test1
2 test2

다음과 같이 나온다.

 

select id,data
from tb1
union all
select id,data
from tb2;

위와 같은 쿼리로 조회시에 결과는

 

id data
1 test1
2 test2
1 test1
2 test2

 

다음과 같이 나온다.

반응형
반응형

다중 테이블 조회

 

여러 테이블에서 조회를 할 때 필요한 기능이다.

UNION ALL과 UNION이 있다.

예제는 UNION ALL로 조회하는 방법으로 사용하였습니다.

예를들어 주문정보가 입력되는 테이블이 하루하루 백업된다고 가정하고,

각 테이블은 ORDER_20190417,ORDER_20190418 이라고 하고 조회를 해본다.

 

select *
FROM ORDER_20190417
UNION ALL 
select * 
FROM ORDER_20190418

 

위와 같이 조회시에 두개의 테이블에서 모두 검색이 가능하다.

단, 조건은 두개의 테이블의 컬럼 갯수와 항목이 동일해야 된다.

 

 

union과 union all 의 차이점은 아래의 링크로 가면 된다.

https://wwwnghks.tistory.com/41

 

[Mysql] UNION과 UNION ALL 차이점

UNION union 은 distinct의 기능이다. UNION ALL union all은 distinct 없이 모두 조회하는 기능이다. 차이점 위의 차이점이 잘 이해가 가지 않는다면 아래의 설명을 참고하면 된다. 우선 아래와 같은 테이블 2개..

wwwnghks.tistory.com

 

반응형
반응형

오라클 날짜 출력 및 표현

오라클 DATE 형식을 select 하게 되면 19/04/18 이런식으로 나오게 된다. 이를 더 자세히 출력하고자 할때 아래와 같이 사용하면 된다.

 

SELECT SYSDATE
     , TO_CHAR(SYSDATE, 'YYYY.MM.DD') as "date1"               -- 년.월.일
     , TO_CHAR(SYSDATE, 'YYYY.MM.DD HH24:MI:SS') as "date2"    -- 년.월.일 시:분:초 (24시)
     , TO_CHAR(SYSDATE, 'YYYY.MM.DD DY HH:MI:SS') as "date3"   -- 년.월.일 요일 시:분:초 (금)
     , TO_CHAR(SYSDATE, 'YYYY.MM.DD DAY HH:MI:SS') as "date4"  -- 년.월.일 요일 시:분:초 (금요일)
FROM DUAL;

 

해당 쿼리로 조회를 하면 아래와 같이 나온다.

 

오라클 날짜 조회

 

반응형
반응형

특정시간대에 느려진다거나 혹은 평소에 트래픽이 폭주하여 사이트가 느려진다면 3가지 사항을 고려해볼 필요가 있다.

(아파치+톰캣환경일 경우)

 

우선 불필요한 코드 혹은 쿼리를 개선할 필요가 있지만 그건 기본적으로 개선되어 있다고 볼때이다.

 

1.DB pool의 maxActive 의 증가.(DB에 동시 접속할 수 있는 숫자)

https://wwwnghks.tistory.com/34

 

[Spring] DataSource(dbcp) 설정,DB 성능 향상

전자정부 프레임워크에서 context-datasource.xml 작성 방법 및 설명

wwwnghks.tistory.com

2.apache의 MaxClients 의 증가.(동시에 접속할 수 있는 Client의 숫자)

https://wwwnghks.tistory.com/36

 

[Apache] 아파치 성능향상, 동접자 증가

웹서버가 트래픽 폭주할때 동접자 수를 증가하는 방법이다. httpd.conf StartServers 5 MinSpareServers 5 MaxSpareServers 5 ServerLimit 2000 MaxClients 2000 MaxRequestsPerChiled 0

wwwnghks.tistory.com

 

3.tomcat의 maxThreads 의 증가.(tomcat이 허용할 수있는 최대 thread 숫자)

https://wwwnghks.tistory.com/35

 

[Tomcat] tomcat 성능 향상,동접자 증가

웹서버 트래픽 폭주로 인해 서버가 느려질때이다. server.xml

wwwnghks.tistory.com

 

 

위의 3가지가 모두 충족되었는데도 느려진다면, 불필요한 코드 개선과 서버의 메모리나 cpu 등을 확인해 볼 필요가 있다.

 

 

반응형
반응형

크롬에선 한글 파라미터가 잘넘어갔는데 IE에서 한글 파라미터가 넘어오지 않고 다음과 같은 에러가 발생했다.

 

Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

 

해당 에러를 해결하기 위해서는 파라미터의 인코딩이 중요하다.

 

예를들어 ajax로 url로 파라미터를 넘겨줄때

url : 'test.do?param1='+str1

으로 넘긴다면 str1="테스트" 일경우 

 

test.do에서 확인결과 제대로 들어오지않고 위와 같은 에러가 나온다면

 

url : 'test.do?param1='+encodeURI(str1)

 다음과 같이 넘겨준다면 해당 에러가 나지 않고 서버로 잘 넘어올 것이다.

반응형
반응형

웹서버가 트래픽 폭주할때 동접자 수를 증가하는 방법이다.

 

 

httpd.conf

<IfModule prefork.c>
	StartServers			5
    MinSpareServers			5
    MaxSpareServers			5
    ServerLimit				2000
    MaxClients				2000
    MaxRequestsPerChiled	0
</IfModule>

 

여기서 MaxClients 를 늘려주면 동접자 수가 2000명으로 증가할 수 있다.

 

아파치와 톰캣을 같이 사용한다면 아파치만 성능향상 시킨다고 동접자가 많아지진 않는다. 아파치가 성능이 따라줘도 톰캣이 따라주지 않을 수도 있기때문이다.

 

maxThreads의 수(톰캣)와 MaxClients의 수(아파치)를 같게 하는 것이 좋을 것 같다.

 

아래의 링크는 톰캣의 동접자수 증가이다.

 

https://wwwnghks.tistory.com/35

반응형
반응형

웹서버 트래픽 폭주로 인해 서버가 느려질때이다.

server.xml

<Connector port="8009"         // 서비스할 포트
    protocol="HTTP/1.1"    
    URIEncoding="UTF-8"        //언어셋 지정
    connectionTimeout="5000"  // 1분을 5초로 타임아웃 변경
    disableUploadTimeout="true"  //업로드시 타임아웃 길게
    maxSpareThreads="75"    // idle로 유지할 기본 50, 최대 75까지는 계속 idle상태
    maxThreads="500"       //동시 접속자수   , 
    minSpareThreads="25"    // 시작시 생성될 thread size
    acceptCount="10"        // 노는 thread가 없을때 대기 하는 큐의 숫자. 기본 100
 
/>

 

리눅스에서는 tomcat설치경로/conf/server.xml 이다.

 

여기서 maxThreads 의 숫자를 높여주면 된다.

나는 아파치+톰캣을 사용해서 포트 8009에 셋팅을 했다. 그냥 톰캣으로 사용할경우 8080 혹은  80포트를 사용해서 셋팅해줘도 된다.

 

아파치+톰캣을 사용한다면 톰캣만 성능향상한다고해서 동접자가 허용수가 무조건 많이지는 것은 아니다.

아파치의 성능향상도 같이해줘야 한다. maxThreads의 수(톰캣)와 MaxClients의 수(아파치)를 같게 하는 것이 좋을 것 같다.

 

 

아래의 링크는 아파치 성능향상하는 방법이다.

 

https://wwwnghks.tistory.com/36

반응형
반응형

전자정부 프레임워크에서 context-datasource.xml 작성 방법 및 설명

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driver}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
    <property name="initialSize" value="100" />
    <property name="maxActive" value="150" />
    <property name="maxWait" value="10000" />
    <property name="maxIdle" value="30" />
    <property name="minIdle" value="20" />
    <property name="testOnBorrow" value="true" />
    <property name="testOnReturn" value="true" />
    <property name="validationQuery" value="select 1 from dual" />
    <property name="testWhileIdle" value="true" />
    <property name="timeBetweenEvictionRunsMillis" value="130000" />
    <property name="minEvictableIdleTimeMillis" value="120000" />
    <property name="numTestsPerEvictionRun" value="20" />
    <property name="removeAbandonedTimeout" value="30" />
    <property name="removeAbandoned" value="true" />
    <property name="logAbandoned" value="false" />
</bean>

driverClassName : 사용하는 db ClassName

url : 사용하는 db 호스트 주소

username : 사용자 이름

password : 비밀번호

initialSize : 풀의 초기 생성되는 사이즈

maxActive : 최대 접속가능 커넥션 수 (사실상 가장 중요하다고 생각한다. DB에 동시에 접속 가능 커넥션이 많아야 성능이 좋아진다고 볼 수 있다.)

maxIdle : Idle상태의 최대 갯수

minIdle : idle상태의 최소 갯수

testOnBorrow : 풀에서 커넥션을 가져올시 커넥션의 유효성 검사

testOnReturn : 풀에 커넥션을 리턴할 때 커넥션의 유효성 검사

validationQuery : validate Query

testWhileIdle : Idle상태에 커넥션의 유효성 검사

timeBetweenEvictionRunsMillis : 설정된 주기를 통해 Evict(유효하지 않는 커넥션/정의된 시간이 만료된 커넥션을 풀에서 제거) 쓰레드를 수행

minEvictableIdleTimeMiilis : Evict 쓰레드를 수행시, 만료여부를 체크할 시간을 정의

numTestsPerEvictionRun : Evict 쓰레드를 수행시 수행할 커넥션의 갯수

removeAbandonedTimeout : 유효하지 안흔 커넥션의 삭제시의 타임아웃

removeAbandoned : 유효하지 않는 커넥션의 제거 여부

logAbandoned : 유효하지 않는 커넥션을 생성한 코드 위치 로그생성 여부

 

 

참조 : https://blog.naver.com/shin7688/120163805709

반응형
반응형

우선 내부 ip와 외부 ip의 차이점을 알아보겠습니다.

 

내부 ip : 내PC가 내부에서 사용하기 위해 할당받은 ip입니다.

외부 ip : 내PC가 외부에서 사용하기 위해 할당받은 ip입니다.

 

내부 ip는 컴퓨터 내부에서 사용할때 사용하고, 외부 ip는 온라인상 즉 네트워크 상에서 사용할때 사용합니다.

즉 통신사 측 인터넷 연결의 위해 모뎀,공유기 등에 할당되서 같은 인터넷을 사용하는 PC 에서는 같은 외부 ip를 사용할 수 밖에 없습니다.

 

내부 ip 조회 방법

간단하게 자주 사용되는 방법입니다.

 

윈도우키 + r 을 누르면 실행 창이 나옵니다.

해당 화면에서 cmd를 입력후 확인 버튼을 누르면

검은 cmd창이 나옵니다. 거기서 ipconfig를 입력하시면 주소가나옵니다.

 

IPv4주소에 나와있는 192.168. ~~~  가 나오는 값이 내부 ip주소입니다.

 

외부 ip 조회 방법

외부 ip를 조회하는 방법은 여러가지로 다양합니다.

간단하게 네이버에 "ip 주소" 라고 검색만해도 저의 외부 ip를 조회가 가능합니다.

 

 

 

이와 같이 빈 공간에는 외부 ip주소입니다. 

이는 211.~~~~로 될 수도 있고 121.~~로 될 수도 있고,등등 다양합니다.

반응형

+ Recent posts