Category Archives: Error

Error: findOne 오류~ Optional Spring Data 1.x대비 2.x대에 크게 변한점

Message : Type mismatch Require Example<(???…)>

이상한 오류같은 메시지… kotlin 버전충돌 때문에 발생한 적이 있어서 그 부분을 찾았는데 이상해서 찾아보니 SpringData 문제였다.

분석

예전에는 이렇게 썼다.

@Repository
public interface SocialRepository extends JpaRepository<SocialEntity, Long> {
}
---
@Autowired
private SocialRepository socialRepository;

socialRepository.findOne(ID)

이렇게 하면 CRUDRepository 내부의 T findOne(ID)가 호출이 됐는데

@NoRepositoryBean
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
  T findOne(ID id);
}

이 부분이 변경됐다.

CRUDRepository에는 Optional(T) findByID(ID)가 들어가 있다.

@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
  Optional<T> findById(ID id);
}

findOne을 호출하면

QueryByExampleExecutor{
  <S extends T> Optional<S> findOne(Example<S> example);
}

이녀석이 호출된다.

에러가 날 수 밖에..

처리

코드는 다 바꿔야 한다.

findById(ID).get()

이전코드를 그냥 써야하는 상황에서 쉽게 바꾸려면 이렇게만 해도 되고..

아니면 Optional을 활용하는 방안을 찾을 필요가 있다.

Null처리 문제 때문에 생긴 것 같다

Error: Vagrant box respository

Message

➜  testva vagrant init ubuntu/xenial64
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
➜  testva vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'ubuntu/xenial64' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
The box 'ubuntu/xenial64' could not be found or
could not be accessed in the remote catalog. If this is a private
box on HashiCorp's Atlas, please verify you're logged in via
`vagrant login`. Also, please double-check the name. The expanded
URL and error message are shown below:

URL: ["https://atlas.hashicorp.com/ubuntu/xenial64"]
Error: Could not resolve host: atlas.hashicorp.com

Ubuntu 17.10 기본 apt install vagrnat 설치할 때 리포지터리 URL문제

설정을 변경해주거나 vagrant 공식 사이트에서 deb를 다운받아 설치하면 해결

vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'ubuntu/xenial64' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'ubuntu/xenial64'
    default: URL: https://vagrantcloud.com/ubuntu/xenial64
==> default: Adding box 'ubuntu/xenial64' (v20180302.0.0) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/ubuntu/boxes/xenial64/versions/20180302.0.0/providers/virtualbox.box
==> default: Successfully added box 'ubuntu/xenial64' (v20180302.0.0) for 'virtualbox'!
==> default: Importing base box 'ubuntu/xenial64'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: docker-ub

주소가 바뀌었다.

https://atlas.hashicorp.com/ubuntu/xenial64

https://vagrantcloud.com/ubuntu/xenial64

Vagrant global 설정 변경

??어뜨케 하나

/home/{USERNAME}/.vagrant.d/data/checkpoint_cache??

아닌것같고… 확인필요

Vagrantfile 변경

https://www.vagrantup.com/docs/vagrantfile/machine_settings.html

config.vm.box_url = "http://files.vagrantup.com/precise64.box"
config.vm.box_url = "https://vagrantcloud.com/ubuntu/xenial64"

공식 사이트에서 deb설치

그냥 새로 깔았다.

찾으려면 설치경로 전체에서 문자열 검색해야할 것 같다.

Error : unary operator expected – 쉘스크립트 타입관련 문법

Message : ./db_migrate.sh: line 3: [: =: unary operator expected

검색해보니 정확히 같은 사례가 나와서 바로 해결

https://stackoverflow.com/questions/13617843/unary-operator-expected

리눅스 환경에 배포하다보면 shell script 사용을 할 일이 상당히 많은데…

쉘스크립트 공부해서 쓰는것도 아니고 그때그때 찾아가며 쓰다보니 자주 맞딱뜨리는 문제

이렇게 비교를 했는데

if [ $db_name = "api" ]; then

바시Bash는 이렇게 알아듣는다고

if [ = "api" ]; then

해결 – 아래의 표기법을 쓴다

따블 대괄호Braket

if [[ $db_name = "api" ]]; then

변수쌍따옴표

if [ "$db_name" = "api" ]; then

 

Error: rbenv 설치 오류

Message

미친 왜 오류나나 보는데 별 오류날 건덕지도 없어 보인다. 의존성 설치하라는거 다 설치했고

rbenv install 2.3.3
Downloading ruby-2.3.3.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.3.tar.bz2
Installing ruby-2.3.3...

BUILD FAILED (Ubuntu 17.10 using ruby-build 20171226-3-g01e7b7b)

Inspect or clean up the working tree at /tmp/ruby-build.20180222140444.23312
Results logged to /tmp/ruby-build.20180222140444.23312.log

Last 10 log lines:
checking for ruby... /usr/bin/ruby
config.guess already exists
config.sub already exists
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking whether the C compiler works... no
configure: error: in `/tmp/ruby-build.20180222140444.23312/ruby-2.3.3':
configure: error: C compiler cannot create executables
See `config.log' for more details
cat /tmp/ruby-build.20180222140444.23312.log
/tmp/ruby-build.20180222140444.23312 ~/.rbenv/plugins/ruby-build
/tmp/ruby-build.20180222140444.23312/ruby-2.3.3 /tmp/ruby-build.20180222140444.23312 ~/.rbenv/plugins/ruby-build
checking for ruby... /usr/bin/ruby
config.guess already exists
config.sub already exists
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking whether the C compiler works... no
configure: error: in `/tmp/ruby-build.20180222140444.23312/ruby-2.3.3':
configure: error: C compiler cannot create executables
See `config.log' for more details

해결

rbenv의 버그라고 봐야할 것 같다.

우분투 최신버전이라 GCC7이 기본으로 설정되어 있는데

이걸로 빌드하면 오류가 나는 것 같다.

gcc-4.8을 강제 지정해서 해결

$ CC=/usr/bin/gcc-4.8 rbenv install 2.3.3

Error : Kotlin 플러그인 버전이 안 맞을 때 생기는 문제

Message

class annotated with @Configuration could implicitly subclassed and must not be final.

kotlin은 기본이 final이라서 @Cofiguration, @Bean 등의 스프링 설정파일을 사용할 때 오류가 발생한다.

plugin: kotliln-spring 을 사용하면 원래 괜찮아야 되는데….

그래들 라이브러리 버전을 몇 개 올려놨더니 문제가 발생한다.

 

여기저기 찾아봤는데 해결책이 잘 안보인다..annotation processing을 풀어놓으라는 말도 있고(안됨)

예전에 했던 프로젝트는 그냥잘 썼는데 갑자기?

변경한 부분이 spring을 5로 올리고 kotlin을 1.12.0에서 1.12.20으로 올렸는데

intellij plugin 버전은 1.12.1인것같아서 플러그인 업데이틀 해봤는데(안댐)

저번에도 어노테이션 쓸 때 arrayOf로 써야되는거랑 이런부분 바뀔 때 마다 오류나더니만…

꼬출린 진짜

해결하는데 시간이 한참 걸릴 것 같다.

실행된다.

플러그인과 의존성의 버전을 맞춰주자…..꼭

buildscript {
	repositories {
		jcenter()
		mavenCentral()
		maven {
			url "https://plugins.gradle.org/m2/"
		}
	}
	dependencies {
		classpath "org.springframework.boot:spring-boot-gradle-plugin:$spring_boot_version"
		classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
		classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
		classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
	}
}


allprojects {
	apply plugin: 'java'
	apply plugin: 'groovy'
	apply plugin: 'kotlin'
	apply plugin: 'kotlin-spring'
	apply plugin: 'kotlin-jpa'


	dependencies{
                //Deprecated 라고함.
		//compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
                //jdk8로 바꿔준다.
		compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
		compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
        }
}

코틀린은 갈길이 멀다. 안정화되려면 2년은 있어야 하지 않을까

 

Error : Mysql Google RDS에서 사용시 function 생성오류

Message : you *might* want to use the less safe log_bin_trust_function_creators variable

메시지를 카피를 제대로 안해놔서…. 어쨌든 권한부족 관련 메세지가 뜬다.

MySQL, Triggers and Amazon RDS

 

웹콘솔에서 DB에 들어가서 – 수정 – 데이터베이스 플래그 추가

log_bin_trust_function_creators = on(1)

저장 후 재시작

 

Error: MySQL 5.7 이상 Group by – this is incompatible with sql_mode=only_full_group_by

MySQL 5.7이상에서 Group By 쿼리 사용시 발생하는 오류

0 12 12:27:17 select tp1.idx, tp1.category, tp1.contents, tp1.view_yn, tp1.status, tp1.recordid, max(tp1.recordtime)
  from TBL_PAGE tp1 group by tp1.RECORDTIME
  LIMIT 0, 1000 Error Code: 1055. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'solarbridge_dev.tp1.IDX' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 0.000 sec	Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0 12 12:27:17 select tp1.idx, tp1.category, tp1.contents, tp1.view_yn, tp1.statu' at line 5	0.000 sec


Error Code: 1140. In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column 'wordpressdb_test.TC.IDX'; this is incompatible with sql_mode=only_full_group_by

 

Solution.1)
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

Solution.2)
https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;

ANY_VALUE라고 싸줌.

Error: Structure needs cleaning – 리눅스 시스템 rsync 쓰다가 오류나면 발생

Structure needs cleaning

rsync는 그냥 복사하는것보다 저수준의 복사법을 쓰는건가
아니면 예외처리가 안되서 그런가

rsync실행중에 중단시켜서 그런건지 오류가 난다.

검색 해 보니까 백업 해 놓고 디스크 날릴 각오하고 고쳐야한다고…

그렇다고 하면 그래야지지

Error: WordPress pre 태그 오류

이 코드를 pre태그에 넣으면 오류발생

link=`expr “$ls” : ‘.*-> \(.*\)$’`

*** Error in `apache2': corrupted double-linked list: 0x0000565022316df0 ***
[Tue Oct 24 06:49:56.116709 2017] [core:notice] [pid 1] AH00051: child pid 180 exit signal Aborted (6), possible coredump in /etc/apache2

*** Error in `apache2': double free or corruption (out): 0x000056502236b360 ***
[Tue Oct 24 06:51:58.240351 2017] [core:notice] [pid 1] AH00051: child pid 201 exit signal Aborted (6), possible coredump in /etc/apache2

*** Error in `apache2': double free or corruption (out): 0x0000556db917a100 ***
172.19.0.2 - - [24/Oct/2017:15:06:17 +0000] "GET /favicon.ico HTTP/1.1" 200 191 "http://memo.polypia.net/archives/2739?preview_id=2739&preview_nonce=0920547848&post_format=standard&_thumbnail_id=-1&preview=true" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
[Tue Oct 24 15:06:17.573774 2017] [core:notice] [pid 1] AH00051: child pid 239 exit signal Aborted (6), possible coredump in /etc/apache2

*** Error in `apache2': free(): invalid pointer: 0x00007fecef58b26e ***
172.19.0.2 - - [24/Oct/2017:15:06:24 +0000] "GET /favicon.ico HTTP/1.1" 200 191 "http://memo.polypia.net/archives/2739?preview_id=2739&preview_nonce=0920547848&post_format=standard&_thumbnail_id=-1&preview=true" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"
[Tue Oct 24 15:06:25.582744 2017] [core:notice] [pid 1] AH00051: child pid 240 exit signal Aborted (6), possible coredump in /etc/apache2

정확히 어느 부분이 오류포인트인지 정확히 모르겠는데 워드프레스에서 일부 코드가 escape되서 문자열을 실행코드로 인식하는게 아닌가 싶다.

퍼블릭 글쓰기 권한이 있는 워드프레스에서 해당코드를 활용하면 서버단의 php를 실행시키는 공격이 가능하지 않을까

Error : No thread-bound request found

 

Caused by: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.Caused by: java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request. at org.springframework.web.context.request.RequestContextHolder.currentRequestAttributes(RequestContextHolder.java:131) ~[spring-web-4.3.11.RELEASE.jar:4.3.11.RELEASE]

DTO나 Static 메서드에서 파라미터로 받아오지 않는

쓰레드세이프하지 않게 만들어놓으면 발생하는 문제

(리퀘스트 홀더나 세션에 리퀘스트 관련 정보가 저장되어 있다거나)

HttpRequest에서 들어오는 파라미터 등은 쓰레드세이프하게 사용.

 

이번 오류는 DTO에 RequestContextHolder.currentRequestAttributes() 가 들어있어서 발생.

public class SiteDTO implements Serializable {
    private final ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
    private final HttpServletRequest req = servletRequestAttributes.getRequest();

~~~~~
}

Mybatis로 DB의 값을 받아올 때 사용하는 DTO인데 RequestContextHolder를 사용한다.

일반적인 상황에서는문제가 없지만 Request가 생성되기 전에 Security 에서 DB를 호출하는 경우 문제가 생길 수 있다.

Filter의 앞단에서 아래같은걸 해주거나…

https://stackoverflow.com/questions/43404300/no-thread-bound-request-found

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.Context;
import javax.ws.rs.ext.Provider;

import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.RequestContextListener;
import org.springframework.web.context.request.ServletRequestAttributes;

@Provider
public class RequestFilter implements ContainerRequestFilter {
    private static final String REQUEST_ATTRIBUTES_ATTRIBUTE =
            RequestFilter.class.getName() + ".REQUEST_ATTRIBUTES";

    @Context private HttpServletRequest httpRequest;

    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException {
        ServletRequestAttributes attributes = new ServletRequestAttributes(httpRequest);
        httpRequest.setAttribute(REQUEST_ATTRIBUTES_ATTRIBUTE, attributes);
        LocaleContextHolder.setLocale(httpRequest.getLocale());
        RequestContextHolder.setRequestAttributes(attributes);
    }

}

근데 뭐가 됐건 DTO에다가 Static 호출을 넣으면 안된다.