프로젝트
-
Kotlin + Junit 5 could not Autowire 이슈프로젝트/자프링 -> 코프링 마이그레이션 2022. 11. 28. 00:01
개요 테스트를 진행하려고 @DataJpaTest를 달아주고 @Autowired lateinit var를 수행하였으나 could not Autowire라는 메시지가 보였습니다. @Autowired constructor를 사용하여 생성자로 초기화도 수행해보지만 동일한 에러가 발생하였습니다. 해결법 해결법은 매우매우 간단했습니다. 실제 코드의 패키지구조와 테스트패키지 구조가 달랐기 때문에 컴포넌트 스캔이 제대로 일어나지 않았기 때문입니다. 패키지구조를 동일하게 맞추니 에러가 사라졌습니다.
-
게시글 프로젝트 리팩토링프로젝트/자프링 -> 코프링 마이그레이션 2022. 11. 11. 00:01
개요 약 5개월 전 Spring JPA를 처음 다루는 시점에 로그인 + 게시글을 작성할 수 있는 토이 프로젝트를 진행하였습니다. 기술을 선택하기 위한 여러 가지의 고민들을 해보고 AWS 배포까지 한 사이클을 해볼 수 있었던 좋은 기회였습니다. 하지만 시간이 지난 후 코드를 다시 되돌아보았을 때는 부족한 부분들이 많이 보였습니다. - restful 하지 않은 url - read and write를 통한 동시성, 데드락 발생 - jpa paging시 클라이언트가 필요한 값만 반환하는 것이 아니라 모두 반환 - update 하는 부분에 @Transactional(readonly =true) 걸려 있음 - 의미없는 네이밍 - 살짝 부족한 테스트 코드 - 이로 인한 게시글을 저장할 때 member를 저장하지 않음..
-
코틀린(kotlin) - 숫자 야구 게임프로젝트/Kotlin + TDD 2022. 10. 22. 00:01
개요 코틀린과 TDD에 친숙해지고자 자동차 경주 게임에 이어 숫자 야구 게임을 구현해 보겠습니다. 요구 사항 정리 랜덤으로 1~9짜리 서로 다른 3개의 수를 생성한다. 사용자에게 수를 입력받는다. 입력받은 수를 검증한다. 입력받은 3자리 수에서 볼, 스트라이크 개수를 구해서 반환한다. 구해진 볼, 스트라이크를 통해 출력 값을 결정한다. 스트라이크, 볼 0개 : "낫싱" 스트라이크 0~2개, 볼 0개 아님 : "n볼 n스트라이크" 스트라이크 3개 : "3 스트라이크" 정답 문구 출력 : "3개의 숫자를 모두 맞히셨습니다! 게임 종료" 스트라이크 3개가 나올 때까지 2~5 과정을 반복한다. README.md ### 요구 사항 - [ ] 랜덤으로 1~9까지의 숫자 3개 생성 - [ ] 사용자에게 3자리 숫자를..
-
코틀린(kotlin) - 자동차 경주 게임프로젝트/Kotlin + TDD 2022. 10. 18. 00:01
개요 코틀린과 TDD에 친숙해보고자 자동차 경주 게임을 구현해보고자 합니다. 요구사항 정리 - 참여자 이름을 받아 자동차를 생성 - 이름은 5자 이하, 쉼표로 구분 - 횟수를 입력받아 횟수만큼 자동차 전진 - 자동차는 0~9의 랜덤 값이 4 이상일 경우 전진 - 우승자 출력(복수 가능) README.md ### 요구 사항 - [ ] 참여자 이름을 받아 자동차를 생성 - [ ] 이름은 5자 이하, 쉼표로 구분 - [ ] 자동차는 0~9의 랜덤값이 4이상일 경우 전진 - [ ] 횟수를 입력받아 횟수만큼 자동차 전진 - [ ] 우승자 출력(복수 가능) 우선 "참여자의 이름을 받아 자동차를 생성한다" 구현을 해보겠습니다. 1단계 : 실패하는 테스트 만들기 @Test fun `참여자 이름으로 차를 생성`(){ /..
-
코틀린 프로젝트 시작하기프로젝트/Kotlin + TDD 2022. 10. 16. 00:01
Intellij에서 코틀린 프로젝트 시작하기 1. File -> New -> Project 2. Kotlin 선택 후, 생성할 프로젝트 명 및 JDK 버전 지정 Next 3. Test Framework 및 JVM verson 선택 테스트를 위한 Junit5, JVM 버전은 11로 설정합니다. Finish 4. 실행해보기 Main.kt가 자동적으로 만들어져 있습니다. Gradle 파일들이 설치되기까지 3분정도 기다린 후 실행을 해보겠습니다. 끝!
-
업비트 RSI 알림이 만들기(with 텔레그램 봇)프로젝트/암호화폐 알림이 프로젝트 2022. 10. 14. 00:01
개요 Python, Upbit API, Telegram API를 활용해서 업비트 RSI 알림이를 만들어 보겠습니다. 여기서 RSI란 Relative Strengh Index의 약자입니다. 상대 강도지수라고 불리는 보조지표로 0에 가까울수록 파는 힘이 강하고 100에 가까울수록 사는 힘이 강함을 의미합니다. 일반적으로 RSI가 30보다 낮으면 과매도 구간, RSI가 70보다 높으면 과매수 구간입니다. 텔레그램 봇 준비하기 우선 텔레그램 아이디는 있다는 전제하에 진행하겠습니다. BotFather를 검색합니다. BotFather에게 새로운 봇을 만들겠다고 메시지를 보냅니다. 이제 bot의 이름과 bot의 username을 설정해줍니다. 이때 username은 항상 _bot으로 끝나야 합니다. 이후에는 Done..
-
리팩토링에 대하여프로젝트/미디어 스트리밍 서버 프로젝트 2022. 10. 8. 00:01
개요 1주차 스프린트에서는 한번도 해보지 못했던 미디어 서버를 구축하기위해 달렸습니다. 또한 그 과정속에서 Git에 익숙해지며, Covention을 정하는 등 공동의 목표를 위한 계획을 세워나갔습니다. 그러나 기능 구현에 포커스를 맞춘 만큼 코드 품질은 조금 떨어지게 되었습니다. 하지만 이러한 점을 인지한 상태로 기술 부채를 쌓아나갔으며 스프린트 2에서는 코드 품질을 향상하고자 합니다. 다음과 같은 문제점들을 인지하고 있었습니다. 부적합해 보이는 변수명/함수명 너무 많은 일을 하는 메서드 떨어지는 가독성 반복 되는 코드 테스트하기 어려운 코드 부족한 테스트 코드 리팩터링이 필요한 이유는? 고객의 모든 요구사항을 예측하고 논리적으로 완벽한 소프트웨어를 단번에 설계하는 것은 거의 불가능에 가까운 일입니다. ..
-
Kotlin 동시성 테스트하기프로젝트/미디어 스트리밍 서버 프로젝트 2022. 10. 7. 00:01
개요 Multi Thread 환경에서 데이터의 정합성을 보장할 수 있는지 확인하고자 합니다. 코틀린 공식문서를 기반으로 학습해 보겠습니다. https://kotlinlang.org/docs/multiplatform-mobile-concurrency-overview.html Concurrency overview | Kotlin kotlinlang.org 규칙 1 : 변경 가능한 상태라면 1개의 스레드에서 동작해야 합니다. data class SomeData(var count:Int) fun simpleState(){ val sd = SomeData(42) sd.count++ println("My count is ${sd.count}") // It will be 43 } 위의 메서드 처럼 상태를 가지는 경우..