2019년 10월 7일 월요일

[스프링] 클라 개발자의 스프링 삽질기...

# 나는 뭘했지?
1. 남들 자바 할때 C/C++만 하면 된다는 말을 철썩같이 믿고, C/C++만 파다 실무는 Win32개발로 시작.
2. Win32 + OpenGL 어플 개발
3. 리눅스도 안돌아가는.. OS 도 없는 임베디드 소프트웨어 개발
4. 안드로이드 개발로 전향 Java
5. 아이폰 개발로 전향 Objective-C -> Swift
6. 잠깐 다시 안드로이드 feat. Kotlin
7. 다시 아이폰 개발.

# 참고 서적
  1. 토비의 스프링 3
    그래도 굴러먹은 짬밥은 있어서 초반의 설명을 이해하는데는 큰 어려움이 없었음.
    다만, 이렇게까지 해야 되나? 하는 의문은 있었지만....

2.코드로 배우는 스프링 웹 프로젝트
   우선 MySql이 유료로 바뀌면서 회원 가입을 해야 설치가 됨.
   교재는 MySql로 되어 있었는데... 우선 PostgreSQL이란 걸로 설치 해봄
   내가 받은 스프링 개발 도구는 4.x 대 버전이었는데, 책은 3기준.
   예제 생성을 위해서는 New>Spring Legacy Project 메뉴가 있어야 하는데 없음...
   -> Eclipse Marketplace 에서 sts로 검색하여 Spring tools 3 Add-On 을 설치한다.
https://marketplace.eclipse.org/content/spring-tools-3-add-spring-tools-4#group-details
   -> 더럽게 오래 걸리는데다, 중간에 몇번 실패함... 결국 성공
   -> File > New 에 바로 표시 되는게 아니고, File > New > Project... > Spring 에 보임
   ex00 프로젝트를 생성하자 마자, 바로 에러 발생 -ㅁ-;;
   검색하니 Spring Project Nature 를 지우라고 함
   뭐 이건 되는게 하나도 없음? Run on server 메뉴가 보이지 않음
   -> 프로젝트 속성 > Project Facets > Dynamic Web Module 를 체크 하라는데, 스테틱 웹 모듈 밖에 없음 --;; 장난 하나...
   -> 이번엔 "Eclipse Java EE Developer Tools" 이걸 깔아줌..
책에는 Run on server 를 하면 기존에 존제하는 서버가 있나 본데.. 난 뭐 이렇게 일이 쉽게 풀릴리 없지.... 수동 생성으로 하나 만들기로 함.
책과 가장 근접한 "Pivotal tc Server v3.0 - v3.2 at localhost" 이걸로 만들어 봄
-> 톰켓이 없다고 생성도 안됨..
-> "brew install tomcat@8" 로 톰켓 8.5 설치
톰켓 실행
-> cd /usr/local/Cellar/tomcat\@8/8.5.46/bin
-> ./catalina start
설치는 했으나 "Pivotal tc Server" 랑은 다른듯 함.
톰켓 8.5로 변경 하고 "/usr/local/Cellar/tomcat@8/8.5.46/libexec"를 경로로 지정 해줌.
실행 하려 하니 이미 켜져 있다고 함
-> ./catalina stop
다시 실행하니 됨 (Hello world 찍는데 3시간 걸렸네;;)


# 삽질중...

2019년 5월 21일 화요일

[IONIC] 아이오닉으로 실행할때 필요했던 커맨드 명령어 모음.


  • 일단 개발 환경이 중요함.
    • MAC OS 10.14
    • XCODE 10.0
    • Android Studio 3.4.1

  • node.js 설치
    • $ brew install node

  • IONIC 설치
    • $ npm install -g cordova ionic

  • IONIC 샘플 앱 생성
    • $ ionic start myApp tabs

  • IONIC 아이폰 앱 빌드
    • 플랫폼 추가
      • $ ionic cordova platform add ios
    • 빌드
      • $ ionic build ios
    • 시뮬레이터 설치
      • $ npm install -g ios-sim
    • 앱 실행
      • $ ionic cordova  emulate ios
          

  • IONIC 안드로이드 앱 빌드
    • 플랫폼 추가
      • $ ionic cordova platform add android
    • 빌드
      • $ ionic build android
    • 앱 실행
      • $ ionic cordova emulate android
          
  • 아이폰 빌드 예외 해결용
    • xcode-select 설치
      • $ xcode-select --install
    • 10.14 버전 (Mojave) xcode-select 설정
      • $ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

  • 안드로이드 빌드 예외 해결용
    • 자바 1.8 설치 (1.8만 된다 -ㅁ-;;)
    • 자바 버전 확인
      • javac -version
    • 현재 자바 홈 확인
      • $ /usr/libexec/java_home -V
    • 자바가 여러개 깔렸을때 1.8을 홈으로 지정
      • $ export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
    • Gradle 설치
      • $ brew install gradle
    • 빌드중에 라이선스 오류가 난다면...
      • Android Studio에서 해당 항목 업데이트
           
          
          
             
          

2018년 7월 24일 화요일

[Android] 안드로이드 tools:text에 샘플 텍스트 넣기

안드로이드 레이아웃을 잡을때 샘플 텍스트를 지정 할때가 있는데, 아래와 같은 녀석을 쓰면 편리 하다.

tools:text = "이런것 대신에..."

"@tools:sample/lorem/random" , "@tools:sample/full_names" , "@tools:sample/full_names" ,"@tools:sample/cities"

2018년 7월 11일 수요일

[Kotlin] 코틀린 특징 정리 (스위프트와의 차이, 자바도..)

코틀린 특징 정리 (스위프트와의 차이, 자바도..)

1. static 키워드가 없다 (9)
2. let대신 val 사용 (85)
3. 이름 변경해서 임포트 가능 (80)
  import java.text.SimpleDateFormat as MySimpleDateFormat
4. 파일 위치와 패키지 이름은 달라도 상관 없다. (82)
5. 함수 선언 fun (91)
6. 함수내에 함수 선언 가능 (92)
7. 단일 표현 함수, 반환 타입도 생략 가능 (95)
  fun some(a: Int, b: Int): = a + b
8. 매개변수 이름을 지정 할수 있다. (95)
  fun some(a: Int, b: Int) 일때,
  > some(a = 3, b = 7) 이렇게
9. Infix 함수 (97)
  infix fun Int.testFun(x: Int): Int {
    return this + x
  }
10. 재귀 함수 생성시 tailrec 키워드를 주면 컴파일러가 일반적인 반복문으로 컴파일 함. (101)
  > 단, 재귀 호출을 마지막에 하지 않는 다면 의미가 없다.
11. """ 로 묶어 raw 스트링 표현 (110)
  > 탈출 문자가 없음
12. Any 타입과 when (112)
  > when (obj) {
    1 -> return "One"
    "Hello" -> return "String"
    is Long -> return "Long"
    !is String -> return "Not a String"
    else -> "unknown String"
  }
13. Unit, Nothing 보이드 같은 개념, 제네릭에서 추가 정리 필요 (115)
14. is 캐스팅, !is도 있음 (116)
15. 형 변환 (117)
  > var dbl = 10.toDouble()
16. 배열 생성 (118)
  > arrayOf<T>(...)
  > intArrayOf(), xxxxArrayOf()
  > Array(size: Int, init: (Int) -> T)
17. 코틀린은 switch-case가 없음 (131)
18. 배열 선언 및 초기화에 [], {} 를 사용 할 수 없다. (131)
19. if-else 구문을 표현식으로 사용 가능 (133)
  > val result = if (a > 0) "Big" else "Small"
  > 표현식으로 쓰인 경우 else 부분이 없으면 에러가 발생 한다.
  > 또한 여러 줄인 경우, 마지막 줄이 결과 값이 된다.
20. when 구문 (137)
  > 12, 10 같이 여러 조건 사용 가능
  > in 1..100 같이 범위 지정 가능
  > !in 20..100
  > in list, in array 같이 여러 데이터에 속하는지를 가지고도 분기 가능
  > if-else의 대체용으로 사용 가능
  > when도 표현식으로 사용 가능함
21. for문 (142)
  > for (i in list.indices) // list의 인덱스를 이용
  > for ((index, value) in list.withIndex()) // 인덱스와 값 모두 활용
  > for (i in 1 until 100) 1부터 99까지
  > for (i in 1 until 100 step) 1부터 99까지 2씩 증가
  > for (i in 100 downTo 1) 100부터 1까지
22. continue, break에 라벨 사용 (147)
  > aaa@ for (i in 1..3) {
      for (j in 1..3) {
         if (j > i) break@aaa   // aaa까지 빠져 나감
         println("Do")
      }
  }
23. 전개 연산자 * (149)
  > val list2 = asList(1, 2, *array, 100, 200)
24. 전개 연산자를 매개 변수로 받기
  > fun some(vararg a: String)
25. 일치 연산자 (156)
  > a === b // a와 b가 같은 객체이면 true
  > a !== b // a와 b가 다른 객체이면 true
26. 코틀린은 삼항 연산자가 없다, if-else를 이용하자. (169)

2018년 7월 8일 일요일

[Swift, RxSwift] 매번 헷갈리는 map, flatmap.

 
Single.just(1).map { (input) -> String in
        return "Value = \(input)"
    }.flatMap { (input) -> PrimitiveSequence<SingleTrait, String> in
        Single.just(input + " Desu.")
    }.subscribe(onSuccess: { (result) in
        print(result)
    }).disposed(by: disposeBag)

2017년 8월 16일 수요일

2017년 7월 5일 수요일

[ios] Interface Builder에 GMSMapView를 추가했더니 런타임 에러...

맵뷰를 쓸일이 있어서 XIB에 GMSMapView를 추가 했는데,
아래와 같은 오류가 나오고 크래쉬 ㅠ_ㅜ
Unknown class GMSMapView in Interface Builder file.
검색 해보니,
1. Clean Build
2. XCODE 재기동
3. 앱 재설치
4. derived file 삭제
라는데, 정말 어이 없게도 1번을 한뒤 2번을 하니 됨 -ㅁ-;;