Category Archives: NOTE

Kotlin DSL – BeanDefinitionDSL.kt

코틀린 DSL Bean 선언.

이거 공부 좀 하면 커스텀 빈도 만들 수 있지 않나

샘플코드
https://github.com/sdeleuze/spring-kotlin-functional
가이드 페이지
https://spring.io/blog/2017/08/01/spring-framework-5-kotlin-apis-the-functional-way

한글 번역이나 어설프게 소스코드 붙여놓고 설명하면 더 헷갈릴 것 같다.

이해할 것도 없고 간단하니 그냥 소스 리포지터리 보는게 더 쉬움.

Kotlin에서 slf4j 로거 선언


SLF4J loggers in 3 ways from Kotlin


자바에서 lombok을 쓰면서 고민도 하지 않았던 부분인데… 여기서는 왠지 신경쓰이는 부분.


class SimpleClass {
private val log = LoggerFactory.getLogger(SimpleClass::class.java)
}

이렇게 해야되는데.. 이렇게 매번쓰기 귀찮으니

CoreUtil.kotlin

inline fun logger(): Logger {
return LoggerFactory.getLogger(T::class.java)
}
inline fun logger2(): Logger {
return LoggerFactory.getLogger(MethodHandles.lookup().lookupClass())
}

이걸 선언 해 두고 가져다 쓴다.
오브젝트에 선언하면 스태틱처럼 선언도 가능하지만 클래스 밖에 선언해두면 전역전역펑션으로 선언된다
인라인이 아니었다면… 클래스를 파라미터로 전달했겠지만 이렇게 해서 좀 더 간단해진다.

refied는 여기 참고.
https://medium.com/@joongwon/kotlin-kotlin-%ED%82%A4%EC%9B%8C%EB%93%9C-%EB%B0%8F-%EC%97%B0%EC%82%B0%EC%9E%90-%ED%95%B4%EB%B6%80-part-3-59ff3ed736be

logger2는 댓글에 써 있는 방법.. 좀 더 간단해 보이는데 검증은 필요.

h2. 처리방법 1

companion object 길어서 좀 꼴뵈기 싫다

class MemberService {
companion object {
private val log = logger()
}
}

h2. 처리방법 2

위에다 선언… intellij에서 클래스 표시가 꺼진다. 왠지 기분나쁨

private val log = logger()
class MemberService {
}

h3. 처리방법 3

인터페이스, 앱스트랙트 사용

선언이 좀 성가셔 보이는데 코드가 제일 깔끔해보인다.

매번 호출하는건 아니겠지?


interface Logger {
fun logger() = LoggerFactory.getLogger(this.javaClass)
}

class SimpleClass {
companion object : Logger
fun testfun(){
logger().info("aaa")
}
}


abstract class Logger {
val logger: Logger = LoggerFactory.getLogger(this.javaClass)
}

class SimpleClass {
companion object : Logger()
fun testfun(){
logger.info("aaa")
}
}

코틀린Kotlin에서 자바 인터페이스 getter 처리

문제의 getter를 포함한 UserDetails 인터페이스

자바에서의 처리

코틀린Kotlin에서의 처리

1.

2.

3. 이게 제일 깔끔하고 알아보기 편하다.

상황에 따라 1,2번을 써야하는 경우가 있기는 할까

IT 프로그래머 양성소 – 직업전문학교의 세대교체, 부트캠프

IT 교육기관

부트캠프 맥 윈도우 멀티부팅해주는 유틸 이름으로만 생각하고 있었는데.. 요즘은 다른 의미로도 사용되고 있었다.

개발자들을 투입가능한 수준으로 가르치는 캠프?

이름이야 영어식으로 멋지게 지어놨지만…

따지고 보면 그냥 직업교육학교 아닙니까?

옛날에는 비트컴퓨터, 삼성멀티캠퍼스, 쌍용교육센터 정도가 있었고

  • 비트 http://www.bitacademy.com
  • 삼성 http://multicampus.com
  • 쌍용 http://www.sist.co.kr

학원보다는 전문대학 수준의 교육기관이지만, 얼마 못가 없어진 NHN NEXT도 있었다.
사회공헌 활동의 일환으로 시작했다고 생각했는데 폐지됐다니…
NHN 이름걸고 우수한 자원들 쓸어모아 갔었는데 걔네들 그냥 대학 가게 냅뒀으면 좋은대학 가서 잘 살텐데 뭔 물을 먹인건지 모르겠다.

위의 학원과 같은 격으로 보지는 않지만 ‘IT뱅크’도 있다. 커뮤니티에 광고를 너무 징글징글하게 해대던…
(네이버 지식인에 IT뱅크를 검색 해 주세요)

꼭 어느 학원을 지칭하는 것은 아니지만 어떤 막장 국비지원 직업교육학교는 학원생 한명 끌어올 때 마다 영업사원이 100만원씩 커미션 가져간다는 말도 있었는데 ~~

 

위는 과거의 학원들…

그리고 세대교체 된 학원들은

부트캠프

라고 리브랜딩을 해서 기존의 국비지원 직업교육학교와 차별화를 꾀하고 있다.

우수 IT인력을 양성하겠다는 조금의 사명감도 가지고~

  • 코드 스테이츠 https://codestates.com
  • 코드스쿼드 http://codesquad.kr

학원비가 꽤나 비싼데… 정부지원이 없는 것을 감안했을 때 그렇게 무지막지하지는 않다.

(국비지원을 받는 조건이 좀 있어서 이것을 채우기 위해 비용을 쓰느니 그냥 학원교육이나 잘 하자고 생각한 듯?)

성공조건

졸업생(수료생?)의 실력수준만 보증할 수 있다면, 이 종류의 학원들이 초급개발자 레벨증명? 역할을 해 줄 수도 있겠지만…

그러려면 입학/수료시 수준검증이 필요할텐데 영리활동을 하는 학원에서 그게 지속적으로 가능할지는…

Kotlin 한 6개월 사용후기

문법적으로 기존 언어에 비해 많이 이질적이지 않고 받아들일만 했다.

구글에서 안드로이드 공식언어로 지정, 인텔리J의 젯브레인에서 개발, 스프링 진영에서도 지원된다고 하고…

별 문제가 없을 줄 알았는데… 이게 웬걸

  • JPA Entity 설계가 안되는건 아닌데 힘들었다.
    data class로 설계한다고도 하던데…. 기본값을 일일이 지정해줘야하는것도 불편하고… 이건 빠르게 포기하고 domain 모듈은 자바로 변경해서 작업해가지고 뭐가 더 안되는지도 모르겠다.
  • QueryDSL 안된다. 안됐었다. 지금은 모르겠다.
  • Validation. 힘들었지만 하긴했다. 다 되긴되더라
    @Field.NotNull
    val name:String
  • Annotation 넣을때.. 안되는건 아닌데 뭔가 괴상하다.
    이런형태에서 @Annotations(arrayOf(Annotation, Annotation))
    이것도 지원되기 시작 @Annotations([Annotation, Annotation])
  • Gradle kotlin 버전과 intellij plugin 버전이 안맞으면 아예 먹통이 된다.

이래저래 몇번 쓰다보니 익숙해지긴 했다.

위의 과정에서 제대로 된 해결책을 찾기가 힘들다는게 문제..

그리고 자꾸 변한다는것도 문제랄까… 좋아지니까 좋은건가

관심 블로그

개발 관련 블로그는 아니고 그냥 필력 괜찮은 잡글블로그

http://boris-satsol.tistory.com

개발관련

https://oddpoet.net/

블로그는 아니지만

https://wikidocs.net/book/1

CrossPlatformApp 개발 툴 목록

https://en.wikipedia.org/wiki/List_of_platform-independent_GUI_libraries

https://www.qt.io/
http://appjs.com/
https://electron.atom.io/
https://www.wxwidgets.org/
https://wiki.eclipse.org/Rich_Client_Platform

대강 이정도가 있는데

최근 관심을 끄는것은 역시 js진영. electron.
html 기반으로 돌아가서 화면이 깔끔하고 화면만들기가 쉽다.
웹개발하는것처럼 데스크탑 앱을 만들면 된다.
atom 에디터의 엔진을 사용하는 것 같은데… 그냥 그정도 성능으로 돌아간다고 보면 된다.

이전까지는 데스크탑솔루션 하면 이클립스 RCP가 많이 사용됐는데… 요즘은 힘이 좀 빠진 것 같다.
자금이 안 들어오는지…
UI가 크게 예쁠필요가 없다면 그렇게 이것저것 따질필요 없이 자신이 익숙한 언어에서 지원하는걸 사용하면 될 것 같다.
자바 개발자라면 그냥 electron을 쓰는게 나을 것 같고….
이클립스 rcp는 4.x버전을 만들어놓고도 예제는 죄다 3.x버전을 올려놓고 이건 뭐 …. 거의 연구하면서 써야되는 수준이라 포기했다. 자바개발자 대부분 웹개발자고, 웹개발자들 어차피 js는 어느정도 할 줄 알테니 튜토리얼/도큐먼트 잘 나와있는 electron을 추천.
정~RCP를 해야겠다면 예제 참고
http://kosate.tistory.com/187
http://www.vogella.com/tutorials/EclipseRCP/article.html
https://www.nogdoo.com/article/E4.html

Eclipse RCP + Maven 조합 연구

2015년쯤에 갑자기 꽂혀서 찾아보다가…

포기했던 부분.

이클립스 RCP는 멀티플랫폼 애플리케이션 제작용인데

…..

구조 자체가 복잡하고 관련 자료도 별로 없다.

그리고 의존성 관리하는데 maven지원해주면 좋을 것 같은데 이런거 지원이 없었다.

지금은 gradle 지원이 되지 않을까???

근데 이제 새로 시작할거라면 Electron을 쓰는게 나아 보인다.

제대로 확인을 못 해보긴 했지만… 튜토리얼 돌렸을 때는 괜찮아 보였다.

 

——————————————————————————-

org.eclipsercp.hyperbola project running code with jdk7

메이븐적용은중단됨. 이클립스 플러그인/RCP제작에 maven은 적합하지 않음 tycho플러그인도 의존성을 관리해주기보다는 프로젝트 통합과 CI를 위한 역할만으로 한정되는 것으로 보임 p2업데이트사이트를 편리하게 제작할 수 있다고 하는데 이 부분은 조사를 못함 tycho : https://github.com/eclipse/tycho

이 문제를 해결하려는 몇가지 시도가 보이긴 한다.

  1. plugin을 따로 제작하여 이를 해결하려는 시도가 있었으나 편법에 가까운 방법을 사용하고있다.https://github.com/reficio/p2-maven-plugin
  2. 설정파일과 maven의 싱크를 억지로 맞추는 노가다작업

maven은 자체적으로 의존성을 관리하고 소스코드와 도큐먼트를 자동으로 링크시켜주는 부분이 편리해서 애용했는데 이 부분이 제대로 지원이 되지 않는다면 굳이 집착할 필요는 없어 보인다.