전체 글 400

[Kotlin] 코틀린 MapStruct 적용 및 사용하기 (feat.gradle)

서버 작업을 하면 빈번하게 필요한 Model과 DTO 변환을 필드 선언만 해놓으면 자동으로 변환해주는 MapStruct를 Java 작업할때 많이 사용하는데요. Kotlin에서도 적용해보았습니다. Kotlin MapStruct 적용 build.gradle.kts 파일에 추가해줍니다. // build.gradle.kts plugins { kotlin("kapt") version "1.7.10" } subprojects { apply(plugin = "kotlin-kapt") dependencies { implementation("org.mapstruct:mapstruct:1.5.2.Final") kapt("org.mapstruct:mapstruct-processor:1.5.2.Final") kaptTest(..

backend/Kotlin 2022.09.02

[Flutter] 안드로이드 스튜디오 ios emulator 빈 화면 해결 - blank white screen 오류

flutter 및 앱 개발 초보인 저는 flutter 프로젝트를 최초 생성후 ios emulator 로 앱 실행을 해보았었는데, 그땐 잘 나왔는데 어느날 한참 후 다시 실행을 시켜보니 화면이 그냥 하얗게만 나왔습니다. 당황했지만, 구글링을 해보며 언제나 그렇듯 해결책을 찾아 봅니다. 혹시나 다시 xcode 관련 설정이 안된게 있나 확인하려고 flutter doctor를 실행해보았지만, 다 정상이네요 flutter clean (시간이 조금..걸립니다.) 을 해보고 다시 에뮬레이터를 시작 후 앱 실행을 해줍니다. flutter clean 작업시에는 무슨일을 하는지 간단히 나오네요. 짜잔, flutter clean을 한번 해주고 나니 정상적으로 화면이 떴네요 flutter github issues에도 blan..

[Android Studio] Emulator 새창으로 띄우기 - Emulator Launch in tool window

Android Studio에서 Emulator를 이용해서 개발하다 보면 Emulator가 새창에서 실행이 될때가 있는데, 항상 새창에서 실행되게 하는 방법입니다. 처음에 아무 Emulator 기본설정은 하지 않으면 아래 화면처럼 답답하게 나오죠. 제가 원하는 모습은 아래 화면처럼 Emulator가 단독으로 실행되는것처럼 떠있는 상태입니다. (Standalone application 으로 떠 있는 화면) 기본 View Mode가 Dock Pinned 로 되어있습니다. 여기서 Float 도 해보고, Window를 선택해봤지만 원하는 모습이 아니었습니다. View Mode : Float 로 설정 해결 Android Studio -> Preference -> Tools -> Emulator 를 선택후, 오른쪽에..

[Kotlin] 코틀린 값 비교 - Equality Checks

Kotlin에서 == 연산자는 값이 같은지 비교하고, === 연산자는 참조값이 같은지 비교하는데 사용합니다. a == b 처럼 쓰면 아래처럼 컴파일 됩니다. if (a == null) b == null else a.equals(b) 아래 초 간단 예제를 봅니다. set, list 모두 동일한 결과이고 == 는 순서에 상관없이 set에 값이 같으면 true, === 는 객체 자체가 같은지 비교하니까 false로 나옵니다. list는 == 은 값의 순서가 같아야지 true, === 는 다른 객체니까 false로 나옵니다. fun main() { val book1 = setOf("book1","book2") val book2 = setOf("book1","book2") println(book1 == book2..

[Flutter] 안드로이드 스튜디오 AVD 에뮬레이터 실행 오류 - Android Virtual Device Error launching application on sdk gphone64 arm64.

이제 막 Flutter 입문하여 만지작 거리던 중 오류를 만났습니다. 1일 1오류를 겪고 있습니다. 코드넣는시간보다 오류해결하는 시간이 많지만 이겨내보겠습니다. 안드로이드 스튜디오에서 에뮬레이터를 실행하여 앱을 띄울려고 하니 아래와 같은 에러를 만났습니다. 오류내용 Launching lib/main.dart on sdk gphone64 arm64 in debug mode... Running Gradle task 'assembleDebug'... F/RenderEngine(27100): Unable to generate SkImage. isTextureValid:1 dataspace:513 F/RenderEngine(27206): Unable to generate SkImage. isTextureValid..

[Flutter] Andriod Studio Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE] 오류 해결

Android Studio 에서 Emulator를 이용해서 run 실행을 했을때 오류가 발생했을때 해결방법을 알아본다. adb: failed to install /Users/buri/dev/project-toy/positive/build/app/outputs/flutter-apk/app.apk: Failure [INSTALL_FAILED_INSUFFICIENT_STORAGE] 오류 내용 Launching lib/main.dart on sdk gphone64 arm64 in debug mode... Running Gradle task 'assembleDebug'... ✓ Built build/app/outputs/flutter-apk/app-debug.apk. Installing build/app/outp..

[Flutter] Android Studio 프로젝트 생성 및 앱 실행

Android Studio 2021.2.1 Patch 2버전 기준 flutter plugin 설치되어있어야 한다. 설치되어있지 않다면 설치! 설치 후 재시작을 해주면 Projects > New Flutter Project 가 생겼다. Flutter > New Project에 설치한 Flutter SDK의 경로를 선택해준다. Project 이름, 위치, 패키지명을 원하는대로 입력해준다. 프로젝트 생성 완료! main.dart 파일에 예제로 코드가 미리 입력되어있는 것을 볼 수 있다. 앱 실행을 위해 오른쪽 상단에 원하는 디바이스 Simulator를 선택해도 되고, 간단하게 Chrome(Web) 으로 띄워보겠다. 앱 실행 화면 오른쪽 하단의 + 버튼을 누르면 누른만큼 숫자가 카운팅되서 증가하는 예제이다.

[Kotlin] 가변 컬렉션과 읽기 전용 컬렉션 구분하기

이펙티브 코틀린 책을 읽고 간단히 정리해본 것입니다. 아이템1. 가변성을 제한하라. - 가변 컬렉션과 읽기 전용 컬렉션 구분하기 중에서 읽기 전용 컬렉션 Iterable, Collection, Set, List 인터페이스 읽고 쓸수 있는 컬렉션 MutableIterable, MutableCollection, MutableSet, MutableList 인터페이스 - 읽기전용 인터페이스를 상속 받아, 변경을 위한 메서드만 추가. Iterable 과 MutableIterable 인터페이스 package kotlin.collections import kotlin.internal.PlatformDependent /** * Classes that inherit from this interface can be rep..

backend/Kotlin 2022.08.02

[Kotlin] 읽기 전용 프로퍼티 - val property

다음 내용은 이펙티브 코틀린 책을 읽고 간단히 정리해본 것입니다. 아이템1. 가변성을 제한하라. - 읽기 전용 프로퍼티(val) 중에서 읽기 전용 프로퍼티인 val에 대해 정리해보자. val a = 10 //a = 20 // 재할당 불가. val list = mutableListOf(1, 2, 3) // 읽기 전용 프로퍼티(val)로 선언되었어도 mutable 객체를 담고 있다면 내부적으로 변환 가능 list.add(4) print(list) //list = mutableListOf(5) //val 로 선언되었다면 재할당이 불가능 '프로퍼티를 읽을 수만 있다는 속성(읽기 전용)'과 '값이 변할 수 없는 것(가변성)'을 구분해서 생각해야한다. var 프로퍼티를 사용하는 val 프로퍼티는 var 프로퍼티가 ..

backend/Kotlin 2022.07.30

[Spring] WebClient DataBufferLimitException WebFlux 오류 해결

글 작성시의 버전 Springboot : 2.3 버전 / Spring webflux : 5.2 버전 문제 WebClient를 통해 데이터를 가져오는데 데이터의 용량이 너무 커서 메모리 버퍼사이즈가 초과해서 DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144 에러가 발생했습니다. 해결 application memory 이슈를 피하기 위해 Codecs는 버퍼 데이터 사이즈를 제한을 두었습니다. 기본값으로 256KB이고, 만약 이 값이 충분하지 않을 경우에는 기본 코덱 설정값을 바꿔줘야합니다. WebClient를 build시 codec 설정을 넣어주면 되는데요. 특정사이즈(예 10MB)로 하고 싶다면? 10 * 1024 * 1024..

backend/Spring 2022.04.10

[Python, Selenium] Selenium webdriver executable_path deprecated warning 해결

개발환경 Python version : 3.9 Selenium version : 4.1.0 Chrome driver verison : Latest stable release: ChromeDriver 97.0.4692.71 python + selenium을 아래 코드로 작성하니 deprecated warning이 떴다 from selenium import webdriver driver = webdriver.Chrome(executable_path='/Users/buri/Downloads/chromedriver') driver.get(url) console output: DeprecationWarning: executable_path has been deprecated, please pass in a Ser..

backend 2022.01.09

[IntelliJ] 사용하지 않는 import문 자동으로 삭제되도록 설정

사용하던 코드를 삭제한 경우 아래처럼 import문이 그대로 남아있는 경우가 있습니다. IntelliJ > Code > Optimize Imports 인 단축키 control + option + O(mac 키보드 기준)를 사용할 수도 있지만.. 자동으로 설정하기 위해 Preferences > Editor > General > Auto Import > Optimize Imports on the fly을 클릭해주면 됩니다. (단, 언어를 여러개 사용중이시라면 언어별 Editor별로 Optimize Imports on the fly에 체크!를 해야합니다.) Java Editor 를 사용중이시라면 Java 영역의 Optimize Imports on the fly에 체크! Kotlin Editor를 사용중이시라면..

[Python] Python 3.9 버전 'HTMLParser' object has no attribute 'unescape' 오류 해결

python 설치 후에 한동안 사용하지 않아 upgrade가 필요했나 봄. 문제 python 파일을 만들어 수행하려고 하니 'HTMLParser' object has no attribute 'unescape' 오류가 발생. 1초 해결. pip3 install --upgrade setuptools # pip3 install --upgrade setuptools Requirement already satisfied: setuptools in /usr/local/lib/python3.9/site-packages (54.1.2) Collecting setuptools Downloading setuptools-60.2.0-py3-none-any.whl (953 kB) |████████████████████████..

카테고리 없음 2022.01.03

[IntelliJ] Plugin - Grep Console

인텔리제이에서 수많은 로그속에서 허덕이다 보면, 꼭 필요한 플러그인이 있다. 바로 Grep Console. 로그 레벨(log level)에 따라서 다른 백그라운드 색으로 설정을 해서 로그레벨을 인지 할 수가 있다. 또 많은 터미널의 로그 중에서 내가 grep 해서 보고 싶은 것만 오른쪽 클릭해서 볼 수 있고 예) TIMESTAMP라는 텍스트만 grep 해서 보고 싶다면 이렇게 해당하는 텍스트만 필터링해서 쓸 수 있다. 초 간단! 설치는 IntelliJ IDEA Plugin - marketplace에서 "Grep Console" https://plugins.jetbrains.com/plugin/7125-grep-console Grep Console - IntelliJ IDEs Plugin | Marketp..

[SpringData JPA] query method predicate keywords - null이 아닌 빈값을 제외하고 싶을때

보통은 컬럼값에 null이거나 null이 아닌 값을 쿼리하는 경우가 많은데 가끔 빈값으로 데이터를 채워 넣고 빈값("")이 아닌 데이터를 쿼리해서 리턴해야할 경우가 있다. 예) phoneNumber != "" Spring Data JPA에서 기본으로 제공하는 repository method명에는 isEmpty나 isBlank같은건 없다. 대신 method의 argument로 빈값("")을 넘겨 받도록 하고 Not 을 써주면 된다. repository.findByPhoneNumberNot("") https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-keywords Spring Data JPA - Referen..

backend/Spring 2021.10.14

[Junit5] SpringBoot 2에 JUnit5 적용

이 문서는 SpringBoot2.0 의 기본인 Junit4 대신에 Junit5를 적용해보면서 정리해봅니다. (기준 버전 junit 5.5.1, SpringBoot 2.0 버전) 공식 문서의 축약 버전입니다. 참고. SpringBoot 2.2.0 버전에서는 junit5 에서는 기본으로 변경됨. https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.2-Release-Notes#junit-5 JUnit5 ? JUnit 5은 기존버전과 다르게 3개의 sub-project로 이뤄져있다. JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage JUnit Platform : JVM 기반 테스팅 프레임워크를 ..

backend/Spring 2019.08.22

MacOS Mojave 업데이트 후 Git 오류 - xcrun: error: invalid active developer path

MacOS를 Mojave로 업데이트 후에 IntelliJ IDEA에서 Git 오류가 발생했다. Terminal을 열어서 git 명령어를 쳐도 같은 오류가 나타난다. # git xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun Xcode Command Line Tools와 dependency 때문에 생기는 문제인 것 같다. Xcode 전체 설치하면 시간이 오래걸리니, Xcode Command Line Tools만 설치하는 걸로(이것도 1시간은 걸린다..) # xcode-select --in..

[Junit5] SpringBoot2+Junit5 에서 TestEngine with ID 'junit-jupiter' failed to discover tests 오류 해결방법

Spring Boot 의 기본 junit4 대신 junit5(2019.7월 말 현재 최신버전인 junit 5.5.1 )를 쓰기 위해 설정하는 도중 만난 오류가 있어서 공유합니다. 개발 환경 IngelliJ IDEA gradle 5.0 Spring Boot 2.1.0.RELEASE Spring Boot 의 기본 junit4 대신 junit5(2019.7월 말 현재 최신버전인 junit 5.5.1 )를 쓰기 위해 설정하는 도중 만난 오류가 있어서 공유합니다. Spring Boot 의 기본 junit4 버전 제외. (build.gradle) testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude module: 'juni..

backend/Spring 2019.07.26 (2)

[Vue.js] Vue.js 개발 입문하면서 궁금했던 기초 질문들 & 소소한 링크들

Vue.js 개발 입문하면서 궁금했던 기초 질문들 & 소소한 링크들 공식 문서에 다 나오는 내용이지만, 처음에 궁금했던 것만 간추려서 작성해 보았습니다. 일단 인스턴스 라이프사이클 다이어그램부터 보고 시작하자. Vue 인스턴스의 생성부터 소멸까지의 라이프사이클 hook을 이용하기 위해서는 반드시 알아야 할 그림 자세히 보기 : 인스턴스 라이프사이클 훅 camelCase vs. kebab-case 어떻게 써야하나? HTML 속성은 대소 문자를 구분하지 않으므로 문자열이 아닌 템플릿을 사용할 때 camelCased prop 이름에 해당하는 kebab-case(하이픈 구분)를 사용해야 한다. Vue.component('child', { // JavaScript는 camelCase props: ['myMessa..

Frontend/Javascript 2019.07.22

[Java] Java Interface feature 변화의 history - 번역

History of Java interface feature changes 원문 : https://www.vojtechruzicka.com/java-interface-history/ 지나가며 글을 읽다가 빠른 번역(잘못된 번역이 많을 수 있습니다)을 해보았습니다. Original interfaces java 1.0의 interface는 두개의 type만 포함한다. constants와 public abstract methods. Constant fields Inteface는 field를 포함하고, 보통의 class와는 몇가지 차이점이 있다. - Fields는 value가 할당되어야 한다.(Fields must be assigned a value) - Fields는 public static final로 간주..

backend/Java 2019.07.17

[Spring] Lazy Initialization in Spring Boot 2.2 - 번역

Lazy Initialization in Spring Boot 2.2 https://spring.io/blog/2019/03/14/lazy-initialization-in-spring-boot-2-2 위의 글을 읽다가 조금만 번역해 보았습니다. 잘못된 부분이 있을 수 있으니 있다면 제보해주세요~ What Does it Mean to be Lazy? Spring Framework는 기본적으로 application context가 refresh될때 context의 모든 bean을 생성하고 dependency들을 inject(주입)된다. 대조적으로 bean definition이 느리게 초기화되도록 설정되면, 필요할 때까지는 dependency가 inject되지 않는다. Lazy Initialization 활성..

backend/Spring 2019.07.16

[Java] Java Iterator를 Java Stream 으로 변환하기

원문 Java Iterator to Java 8 Stream 을 가볍게 번역한 글입니다. list 대신 Iterator 객체를 반환하는 다른 라이브러리를 써야할 때가 있는데, 라이브러리의 관점에서는 문제가 없지만 반환된 iterator에서 Java 8 stream을 사용하려는 경우 문제가 될 수 있다.Iterator를 Iterable로 변환한 다음 쉽게 stream 쓸 수 있는 방법이 있다. Iterator iterator = elements.iterator(); Iterable valueIterable = () -> iterator; List StreamSupport.stream(valueIterable.spliterator(), false) .map(element -> element.asString(..

backend/Java 2018.09.07 (1)

[책] 함수형 사고 - Chapter 2. 전환 - 2.4 골치 아프게 비슷비슷한 이름들.

[책] 함수형 사고 - Chapter 2. 전환 책 함수형 사고(Functional Thinking)을 읽고, 관련 예제를 살펴보며 간단 정리한 것입니다. 책 예제와는 조금 다를 수도 있습니다. 참고) 영문 책의 예제 https://github.com/oreillymedia/functional_thinking 2.4 골치 아프게 비슷비슷한 이름들 - 스칼라 버전 /** 필터(filter) **/ //각 숫자가 3으로 나뉘어야 한다는 조건을 가진 코드 블록을 filter() 함수를 적용한다. val numbers = List.range(1, 11) numbers filter (x => x % 3 == 0) //res0: List[Int] = List(3, 6, 9) //스칼라에서는 매개변수를 언더바로 치환..

backend 2018.07.22

[책] 함수형 사고 - Chapter 2. 전환

책 함수형 사고(Functional Thinking)을 읽고, 관련 예제를 살펴보며 간단 정리한 것입니다.책 예제와는 조금 다를 수도 있습니다. 참고) 영문 책의 예제https://github.com/oreillymedia/functional_thinking Chapter 2. 전환 명령형 처리명령형 프로그래밍이란 상태를 변형하는 일련의 명령들로 구성된 프로그래밍 방식.전형적인 for 루프가 명령형 프로그래밍의 훌륭한 예. 초기 상태를 설정하고 되풀이할때마다 일련의 명령을 실행한다. 명령형 프로그래밍은 개발자로 하여금 루프 내에서 연산하기를 권장한다. 책에 나와 있는 예제에서는 세가지를 실행했다.한 글자짜리 이름을 필터했고, 목록에 남아있는 이름들을 대문자로 변형하고, 이 목록을 하나의 문자열로 변환했다..

backend 2018.07.22

[책] 함수형 사고 - Chapter 1. 왜

책 함수형 사고(Functional Thinking)을 읽고, 관련 예제를 살펴보며 간단 정리한 것입니다. 책 예제와는 조금 다를 수도 있습니다. 참고) 영문 책의 예제 https://github.com/oreillymedia/functional_thinking Chapter 1. 왜 전혀 새로운 프로그래밍 패러다임의 문제는 새로운 언어를 배우는 것이 아니고, 다른 방식으로 사고하는 법을 배우는 것. 객체지향 프로그래밍은 움직이는 부분을 캡슐화하여 코드 이해를 돕고, 함수형 프로그래밍은 움직이는 부분을 최소화하여 코드 이해를 돕는다. - 마이클 페더스 함수형 개발자는 적은 수의 자료구조와 그것들을 잘 이해하기 위한 최족화된 방법을 만들기를 선호한다. 객체지향형 개발자는 항상 새로운 자료구조와 그것에 부착..

backend 2018.07.15

[ios] iphone 무선 디버깅 연결하기

iphone app 개발시, USB 쓰기 귀찮으니까 무선으로 연결해보자! 아주 간단!!블로깅하는게 더 오래걸리는... 하지만, Xcode 9에서 새로 지원된 기능인 만큼.Xcode 9 이상, iOS 11 이상에서만 지원한다. Xcode > WindowDevices and Simulators 를 선택. Devices 탭에 connect via network 선택이 기본으로 선택해제 되어 있으니, 체크 해주고 나오면 끝! 빌드해서 실행해보자!

Mobile/ios & swift 2018.07.02

[ios] iPhone is busy. Preparing debugger support for 에러 문구

swift 문법을 처음으로 공부하고 나의 첫 앱을 시뮬레이터에서만 보다가 내 iphone 에서 보려고 설정중에,아래와 같은 문구가 한참을 나오고 사라지지 않았다. 해결방법 Xcode > Window Devices and Simulators를 선택 Devices 창에 아래와 같은 화면이 노출된다. 여전히 iPhone is busy... 라는 문구를 볼 수 있다. 왼쪽 하단의 아래 + 버튼을 눌러주고 현재 연결되어있는 iPhone 을 선택 후 Next 버튼을 클릭! Done 버튼을 누르고, 여전히 문구가 사라지지 않는다면 USB 연결되어있다면 다시 재연결해보자!

Mobile/ios & swift 2018.07.01

[Akka] Akka Document - Actor Architecture (3) - Failure handling

이 글은 원문 : https://doc.akka.io/docs/akka/current/guide/tutorial_1.html 글을 읽고 간략하게 정리한 내용입니다. (생략된 내용도 있습니다.) Akka Version 2.5.12 Failure handling 부모와 자식은 라이프 사이클 전반에 걸쳐 연결된다. actor가 실패 할 때마다 (예외를 던지거나 처리되지 않은 예외가 receive에서 끊어지면) 일시적으로 일시 중단된다. 앞서 언급했듯이, 실패 정보는 부모에게 전달되며, 부모는 자식 actor에 의해 발생한 예외를 처리하는 방법을 결정합니다. 이런 식으로 부모는 자식을 감독하는 역할을 한다. 기본 수퍼바이저 전략은 자식을 중지했다가 다시 시작하는 것이다. 기본 전략을 변경하지 않으면 모든 실패로..

[Akka] Akka Document - Actor Architecture (2) - actor lifecycle

이 글은 원문 : https://doc.akka.io/docs/akka/current/guide/tutorial_1.html 글을 읽고 간략하게 정리한 내용입니다. (생략된 내용도 있습니다.) Akka Version 2.5.12 The actor lifecycle actor가 만들어지면 존재하게되고 나중에 사용자 요청에 따라 멈추게 된다. actor가 멈추면 모든 자식도 재귀적으로 멈춘다. 이 동작은 리소스 정리를 크게 단순화하고 열린 소켓 및 파일로 인해 발생하는 리소스 유출을 방지하는 데 도움이 된다. 사실 저수준 멀티 스레드 코드를 처리 할 때 일반적으로 간과되는 어려움은 다양한 동시 자원의 라이프 사이클 관리하는 것이다. actor를 정지 시키려면, actor 내에서 getContext().sto..