반응형

우리는 결혼식이 10월 8일이다. 하지만 몰아서 만나는 것보다 그때 그때 만나는 지인들한테 미리 먼저 청첩장을 주는게 편할 것 같아서 일찍하기로 했다. 

주변에 최근에 결혼준비하는 지인들이 많다보니 물어볼 곳이 많았는데, 다들 보니 '바른손'에서 했더라.

그래서 나도 당연하게 바른손하서 샘플을 받았는데, 디얼디어 에서 두개의 샘플이 왔더라. 근데, 예랑한테 물어보니 디얼디어에서 온게 제일 맘에 들어해서 나도 선택!

하지만 그래도 디얼디어가 있다는걸 알고난 이상 거기서도 샘플을 받아보고 마음에 드는게 있을 수도 있다는 생각에 샘플 주문!!!

받아봣는데,,, 또 갈등이 됫다. 저 신혼집이라고 적혀있는 문모양의 청첩장이 마음에 들었다. 유니크함이 있다고 해야하나? 

하지만 안에 종이가 붙어있는게 아니라 날라다녀서 결국 탈락... 결국 우린 맨 아래에 보이는 나무모양의 가을 테마로 한 청첩장 하기로 결정!!!!!!

봉투랑도 다 함께 와서 좋긴했다. 배송도 빠르고!!! 

다들 바른손만 하는데 그거 말고 디얼디어도 샘플받아서 선택해보길!!!

반응형
반응형

분명 vue-cli는 깔아져있는데, npm run serve 를 실행하면 계속 

'vue-cli-service'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다.

이런 메시지가 떠서 아무리 생각해도 이해가 되지 않았다. 하지만 전에 배울 때, package.json 에는 dependency 들이 모두 버전정보와 함께 들어있는데, 거기에 정의되어있는 dependency 의 버전이 현재 설치되어있는 vue 에 대한 버전들이 다 다르면 이렇게 인식을 못한다고 들었던 기억이 났다.

!! 그래서 git 으로 서로 형상관리를 할 때는 package.json 은 올리지 말라고 했던 기억이 난다.

npm 캐시를 지워주고 다시 npm을 설치해주면, package.json 에 의존하는 모듈을 설치해준다는 것을 찾았다.

 

npm cache clean --force    #npm 캐시 삭제
npm install    #package.json 의존하는 모듈 설치

이렇게 해준 후 npm run serve 해줬더니 서버가 실행됬다!!!!!!

반응형
반응형

git 에서 clone 을 해오는 과정에서 발생한 에러!

error: RPC failed; curl 56 OpenSSL SSL_read: Connection was reset, errno 10054

 

이 에러는 Git에서 사용되는 메모리가 적을 경우 발생한다고 한다.
기본적으로 정해져있는 pull 이나 push 의 용량이 정해져 있는데, 그걸 초과했을 때라고 한다.

 

에러 났을 때 캡쳐를 해두지 않은게 후회된다...... 정확하게 뭐라고 굉장히 많이 적혀있었는데,  시도 한번에 고쳐질줄은 몰라서.... 

아무튼!!!!!

 

해결 방법!!!

git 의 postBuffer 을 용량을 늘려줬다. cmd 창으로 가서

git config --global http.postBuffer 1048576000

 

잘됬는지 확인하기 위해서, 

git config --list

설정한대로 postbuffer가 늘어나있다. 그러고 나서 다시 clone 해오니 받아졌다.

끄읏!

반응형

'웹앱프로젝트 > git' 카테고리의 다른 글

Sourcetree 에서 다중계정의 git 사용하기  (0) 2022.06.13
반응형

에러내용:

31-Mar-2023 12:22:20.414 SEVERE [ajp-nio-0.0.0.0-8009-exec-255] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [appServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error updating database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionException: Could not connect to address=(host=118.67.129.190)(port=3306)(type=master) : Socket fail to connect to host:118.67.129.190, port:3306. connect timed out
### The error may exist in file [/usr/local/tomcat9/webapps/ROOT/WEB-INF/classes/mybatis/AccessHistoryMapper.xml]
### The error may involve com.app.hanbat.accessHistory.AccessHistoryDao.insertAccessHistory
### The error occurred while executing an update
### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionException: Could not connect to address=(host=118.67.129.190)(port=3306)(type=master) : Socket fail to connect to host:118.67.129.190, port:3306. connect timed out] with root cause
        java.net.SocketTimeoutException: connect timed out

 

 

해결>>>>>

commons-dbcp2 라이브러리를 추가하고

mybatis-context 에 validationQuery 를 value="select 1" 로 추가해준다.

기존에는 bean 이

<bean id="dataSource" class="org.springframework.jdbc.datasource.DrivermanagerDataSource"> 로 설정되어있었다. 하지만 spring 에서 제공하는 것이 아닌 apache 에서 제공하는 dbcp2를 이용해서 추가하였다.

build.gradle

compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.13'
implementation group: 'org.apache.commons', name: 'commons-dbcp2', version: '2.9.0'

 

mybatis-context.xml

<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />

    <!-- 특정 시간마다 validationQuery를 실행 셋팅 시작 -->
    <property name="validationQuery" value="select 1"/>
</bean>

 

 

 

반응형
반응형
<if test="payIngYn == 'Y'">
</if>

또는

<if test="payIngYn.equals('Y')">
</if>

한글자를 IF 문에 넣었더니, 항상 에러가 났다.

Cause: java.lang.NumberFormatException: For input string: "Y"

항상 그냥 다른 방식으로 우회해서 가다가, 아무리 생각해도 이건 말이 안되고 뭔가 방법이 있을 것 같아 찾아보았다. (여기서 기억나는건, 전에 한번 MyBatis 에서 select문을 해왔을 때, 그 값이 Y 였을 때,  JAVA에서 찍어보니 숫자 1 로 찍혀있던 기억이 난다. char를 숫자로 인식하나보다 라는 생각을 했던 기억이난다. 그런데 그 이유는 JAVA의 CHAR형태는 실제로 문자의 코드값을 저장하기 때문이라고 한다.)  

이건, MyBatis 의 문제가 아니고, OGNL(Object Graph Navigation Language)의 문제라고 한다.  MyBatis는 XML element 를 줄이고 다양한 조건을 처리하기 위해서 OGNL 표현 방식을 사용한다. (꿀팁! jsp 에서 주로 사용하는 JSTL 표현식이 OGNL 이기 때문에 이에 익숙한 사람은 MyBatis 조건문에 이를 적용하면 된다!)

반응형

싱클쿼테이션(') 으로 어떤 값을 감싼 경우, 이건 property 가 아니라고 명시해주는거지 '문자열'이라고 명시하는게 아니다. 그러면, 이를 자료형이 아니라 문자열 이라고 MyBatis에게 명시해주기 위해서는 더블쿼테이션(")으로 감싸주어 힌트를 주면된다.

그래서 결론! 해결책!

1. 싱클쿼테이션과 더블쿼테이션 위치를 변경
<if test='payIngYn=="Y"'>

2. 더블쿼테이션을 HTML 코드로 변경
<if test="payIngYn == &quot;Y&quot;">

3. toString() 함수를 이용해 String 형으로 변환
<if test="payIngYn == 'Y'.toString()">

1번을 추천한단다. (대신, 1번을 사용할 경우 == 대신에 equals 함수를 추천한다
반응형
반응형

DB정보에 같은 IP주소를 가진 DB서버를 연동하고 war파일을 tomcat서버에 반영했더니, 위와 같은 에러가 발생했다. 접근 권한이 없다는거...

근데 같은  IP인데? 라는 생각에 그냥 접속 할 수 있지 않을까 라고 생각할 수 있지만

나의 경우는, tomcat서버 안에 DB서버가 함께 들어있었다. 같은 DB와 접속서버의 IP주소가 같은데 그 주소를 DB접속 정보에 그대로 넣엇으니, 접속 서버에서 나가서 다시 DB서버로 접속하려고하더라. 그 말은 즉슨, 

같은 서버지만, 외부로 나갔다가 다시 안으로 들어오는 것이기 때문에 결국 보안을 거치는것이엇다. DB서버는 SHOW GRANTS 로 확인해본 결과 내부에서만 접속이 가능하게 지정해뒀다. 그래서 접근 권한 없다고 하는 것이다.

반응형

그래서, war 파일에 있는 DB접속정보를

이렇게 변경해줬다. 즉 localhost 로 인식하도록 바꿔줬더니 연결이 됬다!

반응형
반응형
window.onpageshow = function(event) {
    if ( event.persisted || (window.performance && window.performance.navigation.type == 2)) {
        // Back Forward Cache로 브라우저가 로딩될 경우 혹은 브라우저 뒤로가기 했을 경우
        alert('에러');
    }
}

뒤로가기했을때, 로딩될 화면에 설정해주면된다.

반응형

 

반응형
반응형

마스터 테이블을 A라고 한다면,

SN 과 ROTN 을 PK 로 가지고 있고, 다른 컬럼들이 존재한다고 하자. 이 컬럼들을 서브 테이블이 FK로 가지고 있다.

서브테이블을 B라고 한다면,

B테이블은 A테이블의 SN과 ROTN 컬럼을 참조하고있다. 

하지만, A 테이블에는 있고, B테이블에는 없는 경우가 있다.

내가 원하는 결과는 B에 있으면 있는 row의 카운트를. 없으면 0 이라고 나오는걸 원했다. 

처음에는 inner join 을 이용했는데. 생각해보니 그렇게 한다는건, 가정이 on 에 넣은 컬럼들이 A테이블, B테이블에 일치한 것만 가져오기 때문에. 만약 B 테이블에 없는 값을 조회한다면 count가 0이 아닌, NULL 이 나올 것이다.

오류 쿼리! (INNER JOIN)

SELECT
    if(COUNT(1) >= d.NOPE, 'UNAVAILABLE', 'AVAILABLE') AS availableCheck,
    a.SN,
    a.ROTN
FROM
    info AS a
    INNER join
    dtl AS d
    ON a.SN=d.SN AND a.ROTN=d.ROTN
    GROUP BY a.SN, a.ROTN, d.NOPE

이렇게 했을 때, 두 테이블에 모두 존재하는 애들만 조회가 되었다. 하지만 나는 모든 A에 있는 데이터에 대한 B 테이블 결과를 보고싶은거다!

 

수정한 쿼리!! (RIGHT OUTER JOIN, count(컬럼명))

SELECT
	if(COUNT(a.SN) >= d.NOPE, 'UNAVAILABLE', 'AVAILABLE') AS availableCheck,
	d.SN,
	d.ROTN,
	d.NOPE
FROM
	info AS a
	RIGHT OUTER join
	dtl AS d
	ON a.SN=d.SN AND a.ROTN=d.ROTN
GROUP BY a.SN, a.ROTN, d.NOPE

info (B테이블) 에 없어도 나올 수 있도록, RIGHT OUTER JOIN 을 사용하였고, GROUP BY 는 같다.

여기서 주목할 것은, COUNT 함수에 B테이블에 몇개 있는지를 알고 싶은 것이기때문에, 보통은 count(1) 이렇게 넣어서 항상 생각햇는데, 그건 나의 너무 좁은 생각이었던거다! 왜 컬럼을 넣을 생각을 못했을까.

아무튼, 그래서 COUNT(B테이블컬럼) 을 넣었더니, 원하는 결과가 나왔다!!!!

 

반응형

+ Recent posts