Tag Archives: Java

스파크 – 새로운 자바 웹 프레임워크

http://sparkjava.com/

스프링의 어노테이션 범벅 구조에 좀 질려있는 상황에서

간단히 메서드 체인 형태로 구성할 수 있는 프레임워크가 나와서 조금 반갑다.

그레일즈와 비슷한 구조?

다른건 제대로 써본게 없어서 정확히 비교를 못 하겠다.

아직은 초기라서 많은 기능지원이 없을 것 같다. 직접구현해도 나쁠것은 없지만….

회사일을 하다보면 그게 쉽지 않으니

추가적인 것은 나중에 확인.

Error: SpringBoot Template 경로 오류

에러 메시지

 

원인

Spring Boot문제인지 리눅스 문제인지

/tempalte/layout.html 경로를 인식하지못한다.

 

처리

template/layout.html 처럼 앞의 /를 제외해준다

Error: Keycloak 관련 오류 – java.lang.RuntimeException: Must set ‘realm’ in config

에러 메시지

 

원인

https://github.com/keycloak/keycloak

뭔가 좋을 것 같아서 나중에 쓰려고 gradle.build 플러그인 추가하니까 뜨는 오류

인증관련 라이브러리인데 자세히 보지는 못했다.

 

 

처리

아직

Java Coding Style Guide(Coding Convention,NamingRule)

대소문자와 밑줄 사용

camelCase

변수명, 메서드명에 사용

약자인 경우에는 대문자를 연속해서 쓰는 경우가 있는데 글자수에 따른 변동이 있음

2글자 VO, 그냥 두개 대문자로 쓰는게 일반적인 룰이지만.. 사람에 따라

3글자 Dto, Api, 3글자 이상부터는 뒤에는 소문자로 쓰는게 룰이라고 하지만… userDTO, smsAPI와 같이 3글자 다 대문자로 쓰는경우도 많다. 대문자로 쓰자그냥

4글자 이상. 몰라

 

자주쓰이는 약자들만 프로젝트 단위별로 정해놓고 쓰면 되겠다.

이것들은 그냥 대문자로 쓰자

DTO, VO, API

 

snake_case

json, xml에만 사용 소스코드에는 사용하지 않음

_number

타 언어에서 전역변수에 사용하는데 자바에서는 (잘)사용하지않음

C하던사람들이 자바하면 이런거 많이씀

__number

타 언어에서 접근금지 변수에 사용하는데 자바에서는 사용하지 않음

 

data class suffic

Entity : JPA(ORM)

Dto : API 호출

VO : Mybatis 접근

Model

Data

Wrapper : Dto 의 묶음. 대부분 고정된 형태 외부 프레임

 

json을 읽어들일때: ~JsonModel

SpringBoot –

spring command line – 커맨드라인에서 실행되지 않는 자바언어에 커맨드라인툴은 별쓸모없다

되게쉽고 편하다고 그러는데.. 애초에 자바기술이 그렇게 편하고 쉽게 만들어지지 않았다.
그렇게 편하고 쉬운걸 찾으려면 루비를 하는게 낫다.

복잡한 스프링 생태계를 쑤셔담아놓은 스프링프레임워 풀세트프레임워크로 포함된 기술을 다 이해하고 사용해야한다.
이걸 커스터마이징 해서 쓸 수 있는정도면 이미 스프링 애플리케이션을 혼자 구성할 수 있는 실력일거다.
결코 쉽지는 않다.

초보자가 튜토리얼 보면서 아 이렇게 되는구나 하면서 따라하기는 쉽겠지만
뭔가를 변경하는것 예를들어, 타임리프말고 다른 뷰템플릿을 적용을 하기는 오히려 더 어려울거다.

프로젝트 초기화 방법

spring command line interface
spring initializer (http://start.spring.io)

설정

@Enable 실행할거 선택 EnableRabbit. 이라던가
@Grab 의존성 가져오기. gradle에서 하지
@EnableAutoConfiguration(exclude= 특정모듈 .exclude 가능.

네이밍을 느슨하게 인식
message.module.name
message.module-name
message-module-name
MESSAGE_MODULE_NAME
같음.

스캔순서1

스캔순서2 ???맞나?
application.yaml
application.yml
application.properties

profile
application.yaml
application-dev.yaml
application-prd.yaml
application-local.yaml

amqp, jms

redis

webstocet
* sockJS
* STOMP

SpringBootActuator

spring-boot-starter-actuator
HATEOS – org.springframework.hateoas:spring-hateoas

endpoints

/actuator
/autoconfig
/beans
/configprops
/docs – org.springframework.boot:spring-boot-actuator-docs
/dump –
/env
/flyway
/info
/liquibase
/logfile
/metrics
/mappings
/shutdown
/trace
/health

docker 연동. gradle, maven plugin

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

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

Java Template 엔진 – Layout

JSP include

엔진이라고 할건없지만…

구성 잘 잡아놓고 쓰면 tiles나 sitemesh 못지않다.

 

Sitemesh

레이아웃을 잡고 콘텐츠만 바꿔먹을 때 써먹기 좋다.

그런데… 프로젝트 할 때 마다 이것저것 써보자 써보자 하는것도 아니고…

우선순위에서 밀리다 보니 안쓰게 된다.

 

Tiles

주로 사용하긴하는데…

좋은지는 잘 모르겠다.

다른 쓸게 없어서 쓴다는 정도 느낌

ignore=true 옵션을 켜놔도 스텍트레이스가 계속 올라오는건 짜증이 난다.

이 부분을 소스코드 안쪽에 박아놔가지고 고작 이거하나고치자고 jar새로 만들기도 귀찮고 해서 그냥 쓰긴하는데

이것 말고도 캐싱할 파일이랑 아닌부분이랑 구분도 좀 되면 좋겠고 한데

별로 더 발전시킬 생각은 없는 듯 하다.

너무 복잡해지면 쓰기도 힘들어질테니

 

 

Jrebel, JAVA 웹개발자에게 정말 필수!!

Java 웹개발할 때 WAS를 재시작하지 않고도 코드가 적용된다니~
우와 굉장한 기술이다!!

근데…
이걸 왜 써야하나?

다른 주류 웹 언어들은 코드 변경하면 다 바로바로 적용된다.

많이 사용하는 다음의 언어들은 말할것도 없고
PHP, node-js, Ruby(on Rails), Python(on Django?)

JVM 계열인 Scala(SBT)도.. 소스변경 컴파일 하면 변경사항이 바로 적용된다고 하는데…

JAVA만… 300달러 정도 하다가 475달러로 가격을 인상한… JRebel같은 툴을 써야만 HotSwap이 가능하다.

그냥 웹개발을 자바로 안하면 될 것 아닌가?
그래서 안하려고 한다.
(SI업무라면은 할 수 없겠지만.. )
자바가 C,C++에 비해서는 생산성이 높은 언어였지만, Scala, Clojure, Python 등등에 비하면 아니기도 하니까

 

web.xml 버전별로 정리

를 하려고 했지만…. 최근것만

4.0

은 언제 나오나

 

3.1

 

3.0

 

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