본문 바로가기

반응형

분류 전체보기

(41)
[Spring] @Valid 와 @Validated 차이 기존에 스프링은 유효성 검증을 위해 @Valid 어노테이션을 제공했음. 그런데 같은 객체 내의 파라미터들을 그룹핑하여 특정 상황에 맞게 유효성 검증을 하기 위해 @Validated 가 추가되었다. ex) 회원관리를 위한 user 객체가 있다. 회원가입 시 user 객체에서의 필수값은 사용자 이름, 사용자 아이디, 사용자 비밀번호, 사용자 정보 등등이 있을것이고 회원정보 수정 시 user 객체에서의 필수값은 변경되는 정보 등등 상황마다 다르다. 그래서 같은 user 객체를 이용하지만, 특정 상황에 맞게 유효성검증을 하기위해 추가되었음! User 객체 사용 필수값(예시) 회원가입 사용자 아이디, 사용자 이름, 사용자 비밀번호, 기타 정보 등등 회원정보 수정 사용자 아이디, 사용자 비밀번호 즉, 둘 다 유효성..
[JPA] @Query 어노테이션을 이용하여 nativeQeury 작성(jpa 에서 group by 사용하기) - 나의 상황 select crl from ra_crl where (elector_group_id, crl_version) in ( select elector_group_id, max(crl_version) as crl_version from ra_crl group by elector_group_id ) 이런 쿼리를 jpa로 작성해야했음. 근데 jpa 는 group by 를 지원하지않음. - 해결 Repository 에서 @Query 어노테이션을 이용하여 직접 쿼리를 작성하며, nativeQuery = true 를 추가해줘야함. 주의사항으로는 컬럼명을 entity에 정의한대로 쓰지 못하고 실제 db의 컬럼명을 사용해야하며 return 결과도 entity로 바로 받지 못한다. 예를들어 조회해오는 항목이 둘..
[기타] Linux 서버에서 "java.lang.NoClassDefFoundError: sun/awt/X11GraphicsEnvironment" 에러 - 나의 상황 : 리눅스 서버에서 톰캣에 웹관리도구 프로젝트를 올리고 엑셀 다운로드 기능을 실행했더니 해당 오류 발생. 같은 프로젝트 윈도우에서는 잘 돌아감. - 해결 : 톰캣의 catalina.sh 파일 제일 위에 아래 설정 추가 CATALINA_OPTS="-Djava.awt.headless=true" 'ps -eaf | grep java' 로 확인해보면 ' -Djava.awt.headless=true' 가 추가되어 있다.
[기타] window 에서 port 검색 및 포트 죽이기 - 나의 상황 : 톰캣을 비정상으로 종료한 후, 프로젝트 재기동 시 포트 충돌로 서버가 올라오지 않는 상황. - 해결법 : 톰캣 비정상 종료로 죽지 않은 포트를 죽이고 실행하면 된다. 1. cmd를 켠다. 2. netstat -a -o 입력 3. 해당 포트의 pid 확인 4. taskkill /f /pid pid번호
[log4j 보안 취약점 관련] spring boot 에서 log4j2 관련 version upgrade. - 상황 : 얼마전 log4j 보안 취약점 발견으로 현재 개발중인 프로젝트의 log4j 라이브러리를 버전을 2.15 -> 2.17.1 이상으로 업그레이드 해야했다. spring boot 의 최신버전(2.6.1) 로 업데이트를 해도 여기 포함된 log4j 는 2.14.x 버전으로 아직 보안 취약점이 해결되지 않은 버전이었다. 우리 프로젝트는 spring boot 를 사용중이었고 spring-boot-starter-web 에 포함된 log4j 를 사용중이었다. -> 다른 많은 라이브러리에서도 가져오고 있고 가장 먼저 선언된거에서 가져오는거였다. 그리고 여러개가 선언되어있어도 가장 높은 버전 하나만 사용되고 있었음! (그래서 하나하나 exclude 하지않아도 되고 해도 소용없었던 것) - 해결 gradle 사..
[IntelliJ] "Plugin 'org.springframework.boot:spring-boot-maven-plugin:' not found" 오류 -나의 상황 : spring boot 버전을 2.4.2 -> 2.6.1 로 업데이트한 뒤 프로젝트를 새로 켰을 때, pom.xml 에서 발생한 오류. 저 라이브러리를 못 가져온다는 거 같은데 maven 을 새로 고침하면 해당 오류가 사라짐. build도 잘 되고 프로젝트도 쌩쌩 잘 돌아감. 그러나 프로젝트를 다시 켜면 또 빨간 밑줄이 그여있어 여간 신경쓰이는게 아님. - 해결을 위해 시도한 방법들 1. IntelliJ 의 File -> Invalidate Caches -> INVALIDATE AND RESTART 버튼 클릭 하기. (이걸로 해결되는 사람도 있었음...) 2. Settigs -> Build, Exeution, Deployment -> Build Tools -> Maven > Use plug..
[JPA] @Query 로 직접 쿼리 작성하기 JPA 로 개발을 할때는 대부분은 Repository 에서 키워드만 잘 조합하면 모든 쿼리를 자동으로 만들어줘서 아주아주 편리하다. 그러나 조금만 복잡해져도 쿼리 메소드가 아주아주 길어진다. 그럴땐 그냥 @Query 쿼리 어노테이션을 이용하여 조금 더 자세한 조건을 줄 수 있다. @Query 어노테이션을 사용하면 직접 쿼리문을 작성할 수 있다. @Query("select a.* from entity a where a.status = 1") List findAllByStatus(); 만약 변수를 받아 쿼리를 조회하고 싶다면 ':' 를 사용하면 된다. @Query("select a.* from table a where a.status = :stats") List findAllByStatus(int statu..
[DB] group by 한 후 가장 큰 값의 데이터만 가져오기 (postgresql 를 사용하지만, 나중에 어느 database 로 변경될 지 모르기때문에.. 최대한 기본적인 쿼리를 사용해야함.) 아래와 같은 테이블에서 electorGroupId 별로 ccf_version 이 높은 데이터의 ccf 값을 뽑아와야한다. (x 가 아닌 데이터가 나와야함..) 처음에는 아래처럼 작성했는데.. group by 는 집계함수라 ccf 도 group by에 포함되어야 한다는 오류가 나왔다.. mysql 에서는 조회가 되긴 했는데..아무튼 틀린 쿼리다.. select max(ccf_version), elector_group_id, ccf from ra_ccf group by elector_group_id; SQL Error [42803]: 오류: column "ra_ccf.ccf"..

반응형