본문 바로가기
  • SDXL 1.0 + 한복 LoRA
  • SDXL 1.0 + 한복 LoRA

Development/JAVA18

[Spring] 작은 사이트 구축 과정에서 발생한 소소한 에러들... 지난 번 잠시 언급한 적이 있지만 현재 Spring 3.1.1 + MyBatis + jQuery + Bootstrap을 이용하여업무에 사용할 작은 사이트를 만들고 있다. 기업체의 내부망에서 작업하는 중이라 소스를 공개하지 못하는 것이 못내 아쉽다. 사실 Spring을 다시 만져보는 것이 거의 7년만이라 약간의 낯설음은 있지만 그 낯설음을 상쇄할만한변화가 있었기에 어렵지 않게 다시 시작해 볼 수 있었다. 그래도 어디 세상 일이 밥 달라면 밥 나오고 물 달라면 물 나오던가?이래 저래 소소한 에러들을 자주 접하게 된다. 그리고 언제나 그렇듯 아무 것도 아닌 문제로반나절을 그냥 날리기도 하고... 어차피 전문적인 내용이야 볼 수 있는 곳이 천지니 나는 내가 겪은 에러나 정리하련다. 1. Mapped Statem.. 2016. 3. 4.
[Spring] 웹 서비스 구현 시 사용한 기술에 대한 느낌들 먼저 이 글은 기술적인 분석이 아닌 학습 과정에서 느낀 개인적인 느낌을 적은 글임을 밝힙니다...^^ 별로 바쁘지도 않은 SM 업무를 하면서도 어찌 그리 시간을 내지 못했는지...거의 2년에 가까운 시간 동안 앱 개발도 못하고 실습을 동반한 학습을 진행하지도 못했다.이러다가 바보 되는 것이 아닌가 싶어 마침 급조된 몇몇 업무용 시스템을 통합하여 조금은 쓸모있게 만들 겸Spring기반으로 재구축하는 작업을 시작하였다. 얼마전 공부하던 Springboot + JPA + AngularJS + Bootstrap으로 진행하려 했으나 대부분의 기업 환경이 그렇듯이최신 기술을 적용할 만한 상태가 아니기에 Spring 3.1.1 + MyBatis + jQuery + Bootstrap으로 진행할 수밖에 없었다. Spri.. 2016. 3. 1.
[디비 파기 | PMD] CheckResultSet CheckResultSet우선순위 : 3Database 사용과 관련하여 ResultSet클래스의 탐색 메소드(next, previous, first, last)를 사용하는 경우반드시 그 리턴 값을 확인하여야 한다. 만일 이 메소드들이 false를 리턴하는 경우 적절한 처리를 해주어야 한다. 샘플 코드11234Statement stat = conn.createStatement();ResultSet rst = stat.executeQuery("SELECT name FROM person");rst.next(); // 나쁜 예. 만일 next()의 결과가 false인 경우에는 어떻게 처리될 것인가?String firstName = rst.getString(1); 샘플 코드212345678Statement sta.. 2016. 2. 28.
[디비 파기 | PMD] BrokenNullCheck BrokenNullCheck우선순위 : 2null 체크가 잘못되어 NullPointerException이 발생하는 경우로 논리 연산자인 &&나 ||를 잘못 사용하여 발생하게 된다. 샘플 코드1234567891011public String bar(String string) { // ||연산자의 특성상 string이 null인경우 string != null은 거짓이 되고 || 연산자는 뒤의 문장도 실행하게 된다. // string이 null이므로 string.equals("")는 NullPointerException을 발생시킨다. if (string!=null || !string.equals("")) return string; // ||연산자의 특성상 string이 null인경우 string == null은.. 2016. 2. 28.
[디비 파기 | PMD] MisplacedNullCheck MisplacedNullCheck우선순위 : 3 다음의 샘플 코드의 if문 내에 있는 null 체크 구문은 모두 잘못된 위치이다. 이 구문들은 만일 a가 null이라면NullPointerException이 발생한다. 샘플코드112345public class Foo { void bar() { if (a.equals(baz) && a != null) {} }} 샘플코드212345public class Foo { void bar() { if (a.equals(baz) || a == null) {} }} 부연 설명논리 연산에서 &&와 ||는 연산자 앞에 있는 조건을 먼저 확인하고 그 결과에 따라 연산자 뒤에 있는 조건을확인할 지 말 지 결정을 하게 된다. 즉 어떤 상황이건 a.equals(baz)를 먼저 수행하.. 2016. 2. 28.
[디비 파기 | PMD] AvoidDecimalLiteralsInBigDecimalConstructor AvoidDecimalLiteralsInBigDecimalConstructor우선순위: 3 사람들은 보통 new BigDecimal(0.1)이 정확히 0.1과 같을 것이라고 생각한다. 하지만 실제로는0.1000000000000000055511151231257827021181583404541015625의 값을 갖는다.이것은 0.1이 정확히 double을 표현하는 수가 아니기 때문이다. 따라서 생성자를 통해 전달되는 숫자형의 값은 기대와는 다르게 0.1과 같지 않게 된다. 반면에 String형을 사용하는 생성자에서는 그 값이 정확하게 일치한다. new BigDecimal(“0.1”)은정확하게 0.1과 같다. 그러므로 일반적으로 문자열을 파라미터로 전달하는 생성자의 사용이 권장되는 것이다. 샘플 코드 1123.. 2016. 2. 28.
[디비 파기 | PMD] ClassCastExceptionWithToArray ClassCastExceptionWithToArray특정 클래스가 담긴 Collection 객체로부터 Array를 얻어올 경우 Collection.toArray() 메소드의 파라미터로특정 클래스의 배열형을 넘겨주어야 한다. 그렇지 않으면 ClassCastException이 발생을 한다. 샘플 코드123456789Collection c = new ArrayList();Integer obj = new Integer(1);c.add(obj); // PMD 룰에 위배되며 이 문장을 실행하는 경우 ClassCastException 발생Integer[] a = (Integer [])c.toArray(); // PMD 룰에 위배되지 않으며 정상 처리된다.Integer[] b = (Integer [])c.toArray.. 2016. 2. 28.
[디비 파기 | PMD] UnconditionalIfStatement, CollapsibleIfStatements UnconditionalIfStatement조건이 없는 if문은 피하라! 샘플코드12345678910111213public class Foo { public void close() { if (true) { // fixed conditional, not recommended // ... } } } 샘플코드와 같이 if문의 조건절에 true나 false를 직접 대입하는 문장을 은근히 자주보게 된다.논리 전개상 true가 들어가면 무조건 실행되는 문장이고 false가 들어가면 무조건 실행되지 않는 문장이니if문이 무슨 의미가 있는가? if문의 조건절에는 상황에 따라 달라질 수 있는 문장만을 사용하자. CollapsibleIfStatementsif문 합치기 샘플코드123456789101112131415// 원래.. 2016. 2. 28.
[디비 파기 | PMD] ReturnFromFinallyBlock외 8건 ReturnFromFinallyBlock Avoid returning from a finally block, this can discard exceptions.finally 블록에서 리턴하는 것을 자제하라. exception 처리가 무시될 수 있다. 샘플 코드123456789101112131415161718192021public class Bar { public String foo() { try { throw new Exception( "My Exception" ); } catch (Exception e) { throw e; } finally { return "A. O. K."; // 이 곳에서 리턴 하는 경우 catch문이 무시되고 정상인 것처럼 리턴 } // 처리된다. } } 다들 아시다시피 fina.. 2016. 2. 28.
반응형