Category Archives: 노하우

노하우랄것도 없지만… 검색했던 결과들

CRUD 네이밍 결정. 고민.

https://ko.wikipedia.org/wiki/CRUD

ABCD: add(추가), browse(보기), change(변경), delete(삭제)
ACID: add(추가), change(변경), inquire(질의), delete(삭제)[1]
BREAD: browse(보기), read(읽기), edit(편집), add(추가), delete(삭제)
VADE(R): view(참조), add(추가), delete(삭제), edit(편집), 트랜잭션 처리에서는 restore(복원) 추가

게시판의 경우
write, read, modify, delete

파일
change

데이터인 경우
add, remove,

근데 나눠쓰면 헷갈린다.

Java -> Kotlin 전환시 발생하는 문제들 + 안좋은점

JPA모델설계시

Java에서는 @OneToOne Many등 표시안하고 그냥써도 됐는데.. Kotlin에서는 오류가 난다.

kotlin data class constructor

생성자 만드는게 몹시 짜증이난다다
써보니 이름이 왜 꼬출린인지 알겠다

자동완성이 구리다

자바개발에서 귀찮은 getter, setter, slf4j은 lombok으로 처리해서 귀찮은 자바의 단점이었던 난잡한 코드 문제가 많이 해결됐는데

변수 선언에서 자동완성이 좀 안된다.

 

java는 클래스명을 쓰면 변수명이 자동으로 나올 수 있는데
Kotlin은 … 그게안된다.

커뮤니티에 엉터리가 많다

아직 초보자들이 많은지 잘못된 정보가 간혹 있다.
JPA Entity설계할 때 dataclass를 사용하라고 한다던가 하는…
해보니까 그냥 class로 선언하는게 편하다.
아닌가?? 더 익숙해지면 data class가 더 나을까?

QueryDSL 미지원

QueryDSL에서는 Gradle을 공식적으로 지원하지 않는건가?
github에 가보니 maven만 있고 Gradle은 안 보인다.
third party를 이용해서 하긴했는데…
Kotlin은 변환이 안된다. (이것은 아직 지원안되는 것 같다)
결국 Entity는 Java로 다시 변환했다.

Java와 혼용시 문제

Java와 Kotlin을 같은 프로젝트에 섞어서 쓰면 kotlin에서 lombok의 getter, setter이 인식되지 않는다. (컴파일 타임의 문제니까 노력하지말자 – lombokforkotlin을 만들게 아니라면)
멀티모듈로 하면 상위 코드의 core를 조회 가능
groovy가 더 잘 섞이는 것 같다. 테스트코드 짤 때 써볼라고하니까

결론

꽤 안정화됐지만 그래도 아직 갈길이 멀었다.
아직 한창 개발중인 언어로, 언어 자체의 문제로 인한 버그가 간혹 존재한다.
그리고 현재의 문법체계가 언제까지 유지될거라고 보기도 힘들다.
IDE, 프레임워크, 라이브러리 지원도 아직은 Java를 대체할 수준은 아니다.

가장 오류없이 무난한 개발을 하려면 Maven-Java

좀 고생을 하더라도 다른거 써보고 싶으면 다른거 쓰면 될 것 같다.

워드프레스 데이터베이스스키마명 변경하고싶을때

스키마를 하나 새로 만들고
하나하나옮겨줘야한다.

mysqldump를 사용하는방법도 있고 이게 간편한것같다.
디렉토리명을 변경할수도 있을 것 같은데.. 메타데이터를 찾아서 바꿔주면… 위치를 정확히 몰라서 노가다로 처리했다.

플러그인 설치한게 더 있다면 테이블이 더 많을수도있고….
여기서도 이름이상한 몇개는 플러그인에서 생성한 테이블인것같다

RENAME TABLE {original_schema}.wp_commentmeta TO {new_schema}.wp_commentmeta;
RENAME TABLE {original_schema}.wp_comments TO {new_schema}.wp_comments;
RENAME TABLE {original_schema}.wp_cpd_counter TO {new_schema}.wp_cpd_counter;
RENAME TABLE {original_schema}.wp_icl_string_translations TO {new_schema}.wp_icl_string_translations;
RENAME TABLE {original_schema}.wp_icl_strings TO {new_schema}.wp_icl_strings;
RENAME TABLE {original_schema}.wp_links TO {new_schema}.wp_links;
RENAME TABLE {original_schema}.wp_multilingual_linked TO {new_schema}.wp_multilingual_linked;
RENAME TABLE {original_schema}.wp_options TO {new_schema}.wp_options;
RENAME TABLE {original_schema}.wp_postmeta TO {new_schema}.wp_postmeta;
RENAME TABLE {original_schema}.wp_posts TO {new_schema}.wp_posts;

RENAME TABLE {original_schema}.wp_term_relationships TO {new_schema}.wp_term_relationships;
RENAME TABLE {original_schema}.wp_term_taxonomy TO {new_schema}.wp_term_taxonomy;
RENAME TABLE {original_schema}.wp_termmeta TO {new_schema}.wp_termmeta;
RENAME TABLE {original_schema}.wp_terms TO {new_schema}.wp_terms;
RENAME TABLE {original_schema}.wp_usermeta TO {new_schema}.wp_usermeta;
RENAME TABLE {original_schema}.wp_users TO {new_schema}.wp_users;

Tomcat 사용시 주의점 – Java 웹개발시 초기설정

Tomcat 압축을 풀어보면

webapps 디렉토리에 기본 디렉토리가 존재한다.

이 상태로 톰색을 실행시키면 이 디렉토리 경로로 접속이 되는데….

이것때문에 충돌이 발생하는 상황이 있다.

딱 봐도 개발하다보면 종종 사용될만한 주소 패턴이다.

문제는, ide에서 / 경로에 웹을 띄웠을 때

/docs
/manager
/examples

로 접속하면 톰캣 기본디렉토리가 우선 접속된다.

 

webapps 디렉토리는 꼭 비워주고 쓰자.

저번에 당했었는데.. 오랜만에 또 당해서..

 

 

Log4j – WebAppRootKey 문제 발생시 처리

개발서버 설정하기 귀찮아서 Tomcat 하나에 VirtualHost설정 후 App을 때려넣다가 발생

 

한개의 컨테이너에 두개의 Webapp을 올릴 경우 나는 오류로

Log4j에서 라는 System.property(“webapp.root”)를 사용해서 발생하는 문제다.

하나의 인스턴스내에서 System.property는 공유되니까.. 한마디로 전역변수 문제라고 할 수 있다.

해결방법은

web.xml에서 앱마다 저 키값을 고유하게 지정 해 주는 것이다.

말 그대로 log4j에서 webapp의 root 디렉토리를 가져올 때 사용하는 값이다.

{tomcat_home}/webpaps/{app war파일명?}

 

 

 

Spring 5.0에서 바뀌는 점 + Java9에서 바뀌는 점

Java9 대응

따라서, Java9에서의 변화가 Spring5 에서의 변화겠지

JDK7에선 붜가 변했는지 잘 모르고 넘어갔고 <>??
JDK8에선 stream, lambda(람바다?람드아?)가 나왔는데 크게 사용률이 높지 않았다
JDK9에서는 좀 많은 변화가 있는 것 같다

‘ http://blog.takipi.com/5-features-in-java-9-that-will-change-how-you-develop-software-and-2-that-wont/

추가되는 기능

  • repl – jshell (커맨드라인 명령 지원 )
    • 다른 언어에서 지원되는거 보고 부러워하던 기능 아닌가 ㅎ
  • Microbenchmarks(JMH)
    • 벤치마크 기술이라고 하는데…
  • GC 개선
    • G1엔진을 쓴다고 하는데.. 빨라진다고?
  • http2.0
    • 2.0 스펙도 봐야한다.
  • OS컨트롤 능력 강화
    • 예를 들자면 PID 가져오는 기능이라던가

사라지는 기능

그런게 있었나 싶은 기능들 : Json API, Money currency

 

Spring5 추가기능

Mono 되는거 뭐 추가되는 것 같았는데…

DispatcherHandler라는 클래스 중심으로 flow가 추가되는 것 같고…

아직 제대로 안봐서 모르겠다.

 

Spring5 지원중지

Portlet, JDO, JSF 등 공부할 생각도 못했던 몇몇 기술들 지원중단
Hibernate3, 등 구버전 중단.
좀 더 과감해졌으면 좋겠지만…

최근에 Spring재단이 거의 Jaav 표준을 주도하고 있는 것 같아서
조심스러운가보다.

https://spring.io/blog/2015/06/10/feedback-welcome-spring-5-system-requirements

어설프게 몇 줄 읽어봤는데 역시나 댓글에 반발이 조금 있는 것 같다.

Portlet3.0(JSR362)스펙은 2017.Jan에 새로 발표된 것 같은데.. 지원 중단이군 ㅎ
공부할거 하나 줄었다.
왜 필요한가 의문이 좀 있었다. servlet 페이지에 삽입되어서 사용자의 상태를 기억하기도 하고 페이지 일부분의 동적인 변경을 담당하는 기술.. 정도로만 알고 있었는데
오늘 갑자기 protlet 관련 검색하다가 springframework 5.0소스에 portlet 패키지가 없는걸 보고 알게됏다.
DispatcherPortlet
https://en.wikipedia.org/wiki/Java_Portlet_Specification
http://stackoverflow.com/questions/1480528/what-is-the-difference-between-a-portlet-and-a-servlet
몇가지 찾아보니 portlet 기술은 jsp 페이지에 jstl방식으로 fragment를 삽입하는 기술의 일종인 것 같은데
최근에 ajax widget이나 template engine등이 이를 완전히 대체하고 있어서… 굳이 필요한가 싶은 생각이 든다.
그런의도에서 portlet 지원을 중단한게 아닌가….? 싶다.

If it ain’t broke, don’t fix it. 고장나지 않았으면 고치지 말아라!

In the immortal words of Henry Ford, ‘If it ain’t broke, don’t fix it.’ (출처:옥스포드)
헨리 포드가 남긴 불후의 명언으로 말하자면, “고장나지 않았으면 고치지 마라.”

 

명언 별로 안좋아하는데

정말 기억에 남는 말이라서 기록 해 놓는다.

헨리 포드의 말이었구나… 어디선가 영국 명언이라고 봤었는데

Gradle을 왜 써야하나

그래들.. Ant/Maven/Ivy 등 자바의 다양한 빌드 툴중 하나 정도…

Java를 주로 쓰고 Groovy를 보조로 그리고 요즘 Scala를 살짝 보려고 하고 있는데… 순수 Java개발이라면 상관없지만 복합적인 프로젝트를 만들려면 Gradle이 필수적이다.
(Maven으로 해도 되긴 하는데..  예전에 시도했을 때는 groovy의 특정 버전이 안먹힌다던가 하는 문제가 있었다)

scala는 또 따로 sbt가 있긴하던데… 비슷한 기술들을 이것저것 익힐 필요는 없을 것 같고 조금 더 많이 사용하는 Gradle을 쓰는게 낫지 않을까 호환성 측면에서도
gradle vs sbt 참고자료 : http://stackoverflow.com/questions/11061938/comparing-sbt-and-gradle
요약하면 sbt는 ivy기반이고 snapshot 라이브러리(버전을 중복해서 막 배포하는 라이브러리)에 대응하지 못한다는 것.(인것같다)

개인적으로는 네이티브 자바 라이브러리 개발 및 배포 상황에서 메이븐 셋팅을 다 갖춰놓았기 때문에 이 부분까지 Gradle로 대체할 생각은 없고 java groovy scala를 복합적으로 적용해야 하는 상황에만 사용할 예정이다.

 

Gradle관련 공부하면서 본 책

[도서]엔터프라이즈 자동화를 위한 그래들
여태껏 Gradle 셋팅을 튜토리얼만 찾아보면서 배워가지고
좀 더 구석구석 공부하려고 책을 봤는데
튜토리얼이 다인 것 같다.
한글로 읽어서 편하고 빠르게 이해할 수 있다는 점에서 만오천원 정도 쓸 가치는 있다.
번역서도 아니고 저자가 직접 저술한 책이라 어설픈 번역투도 없어서 이해도 더 잘된다.

 

Gradle을 왜 써야하나

Gradle이 대세이고 지금 기능도 제일 좋은 것 같다.
다른걸 잘 써 왔고 사용하려는 기능이 다 제공된다면 굳이 바꿔야할 필요가 없지만, 배워놓을 필요는 있는 것 같다.
처음 배운다면 Java/Scala/Groovy 뭘 하던 Gradle.

Gradle 참고자료

Gradle 공식 소스코드
https://github.com/gradle/gradle
Gradle 공식홈페이지

Gradle l Modern Open-Source Enterprise Build Automation


groovy 테스트 라이브러리
https://github.com/spockframework/spock-example

[ERROR] DB 커넥션이 알 수 없는 이유로 닫히는 경우

 

단순한 실수로 발생할 확률이 높고 의외로 해결에 시간이 오래 걸린다.

내 코드가 잘못됐다고 생각하지 않고 보통 다른데서 문제를 찾다보니 한참 걸린다.

 

이건 보통 transaction이나 connection close를 적절한 곳에서 해 주지 않아서 발생한다.

아마도…. 다른 이유였다면 검색하면서 시간 버리지 않고 금방 해결했을거다.

 

여태까지 여러 삽질을 해왔는데…
라이브러리의 문제로 오류가 발생했던 경험이 두어번정도 있었고 나머지는 다 내 코드 문제였다.

avro 자바-파이썬 에서 숫자자료형길이 호환안되는 문제 : 파이썬은 숫자자료형길이가 무제한

닷넷에서 뭐였는데… 스텍오버플로우에서 그거 닷넷버그라고 회피해서 사용하는법을 알려줬던 것 같다.

아 그리고… 오라클은 좀 많았던것같다.  아예 먹통은 아니고 의존성 문제였지만(문제있는 라이브러리는 패치를 하던가 삭제를 하던가.. 다운받게 공개를 해놔가지고)

 

몇년이나 일하면서 서너번이면 많지는 않으니