묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
3강 firebase 쓰기가 동작하질않아요
3강 첫번째 유저 데이터베이스 쓰기강의보고 firebase 회원가입해보고있는데email, pw 는 등록이 되나realtime database에는 데이터가 들어가지 않습니다 package com.example.test_1.auth import android.content.Intent import android.os.Bundle import android.util.Log import android.widget.Button import androidx.appcompat.app.AppCompatActivity import com.example.test_1.MainActivity import com.example.test_1.R import com.example.test_1.utils.FirebaseRef import com.google.android.material.textfield.TextInputEditText import com.google.firebase.FirebaseApp import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.ktx.auth import com.google.firebase.database.ktx.database import com.google.firebase.ktx.Firebase class JoinActivity: AppCompatActivity() { private val TAG = "JoinActivity" private lateinit var auth : FirebaseAuth //추후 초기화해서 사용할 변수이다 private var nickname = "" private var gender = "" private var city = "" private var age = "" private var uid = "" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_join) //FirebaseApp.initializeApp(this); auth = Firebase.auth var joinButton = findViewById<Button>(R.id.joinBtn) joinButton.setOnClickListener { var email = findViewById<TextInputEditText>(R.id.join_email) var pwd = findViewById<TextInputEditText>(R.id.join_pwdArea) gender = findViewById<TextInputEditText>(R.id.join_gender).text.toString() city = findViewById<TextInputEditText>(R.id.join_area).text.toString() age = findViewById<TextInputEditText>(R.id.join_age).text.toString() nickname = findViewById<TextInputEditText>(R.id.join_nickname).text.toString() // Log.d(TAG, email.text.toString()) // Log.d(TAG, pwd.text.toString()) auth.createUserWithEmailAndPassword(email.text.toString(),pwd.text.toString()) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Sign in success, update UI with the signed-in user's information Log.d(TAG, "createUserWithEmail:success") var user = auth.currentUser uid = user?.uid.toString() // user가 null 이 아니면 toString val database = Firebase.database val myRef = database.getReference("message") myRef.setValue("Hello, World!") Log.d(TAG, "push database :success") myRef.setValue("11111111111") myRef.setValue("2222222222") //firebase 접속관련 util로 패키징 //FirebaseRef.userinfo.setValue("userinfo","hello") // val udm = UserDataModel(uid, // nickname, // age, // gender, // city) // FirebaseRef.userInfoRef.child(uid).setValue(udm) //성공시 메인으로 이동 // var intent = Intent(this, MainActivity::class.java) // startActivity(intent) } else { // If sign in fails, display a message to the user. Log.w(TAG, "createUserWithEmail:failure", task.exception) } } } } }
-
미해결1:1채팅 만들기(Android + Kotlin + Firebase)
Groupy 라이브러리 지원이 되지 않습니다.
gradle에 groupie 라이브러리를 최신 버전으로 implementation 하였는데도 불구하고 이와 같이 import 되지 않습니다. github 공식 문서대로 해도 지원되지 않는데, 2022년을 마지막으로 업데이트가 없는 걸로 봐서 지원이 종료된 걸로 알고 수강을 종료해야 될까요 ?
-
해결됨실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
hibernate가 select를 두번 하는 이유
안녕하세요 강사님 강의를 들으면서 이번에 처음 JPA를 알아가고 있는 중입니다.헌데 궁금한점이 JPA 특성인것인지 아니면 H2 DB 문제인지 그것도 아니면 제 Intellij 설정 문제인지 모르겠지만 select가 두번이 되는 이유가 무엇때문이지 궁금해서 질문 드립니다. 실질적인 동작에 문제가 생기지는 않겠지만 N+1 관련 강의를 듣다보니 불필요하게 쿼리가 호출되면 안좋은것 같아 여쭈어 봅니다. @Test @DisplayName("대출 기록이 없는 유저도 응답에 포함") fun getUserLoanHistoriesTest() { //given userRepository.save(User("A",null)) //when val results = userService.getUserLoanHistories() //then assertThat(results).hasSize(1) assertThat(results[0].name).isEqualTo("A") assertThat(results[0].books).isEmpty() }위의 코드를 동작시켰을때Hibernate: insert into user (id, age, name) values (default, ?, ?) Hibernate: select user0_.id as id1_1_, user0_.age as age2_1_, user0_.name as name3_1_ from user user0_ Hibernate: select userloanhi0_.user_id as user_id4_2_0_, userloanhi0_.id as id1_2_0_, userloanhi0_.id as id1_2_1_, userloanhi0_.book_name as book_nam2_2_1_, userloanhi0_.status as status3_2_1_, userloanhi0_.user_id as user_id4_2_1_ from user_loan_history userloanhi0_ where userloanhi0_.user_id=? Hibernate: select user0_.id as id1_1_, user0_.age as age2_1_, user0_.name as name3_1_ from user user0_ Hibernate: select userloanhi0_.user_id as user_id4_2_0_, userloanhi0_.id as id1_2_0_, userloanhi0_.id as id1_2_1_, userloanhi0_.book_name as book_nam2_2_1_, userloanhi0_.status as status3_2_1_, userloanhi0_.user_id as user_id4_2_1_ from user_loan_history userloanhi0_ where userloanhi0_.user_id=? Hibernate: delete from user where id=?출력 부분에 위에 처럼 뜨는데요제가 이해한 바로는 insert는 save 때문에 한번인 반면에getUserLoanHistoreies 부분에 findAll로 한번의 쿼리를 불러오는 거라서 user와 와 userloanhistory 테이블을 각각 한번 씩 조회 해야 하지 않는가 싶어서 질문 드립니다.추가로 확인해 보보니 LEFT join에 fetch를 추가했을때 위의 select user와 user_loan_history는 left join 쿼리문으로 변한는 반면 아래의 select user와 user_loan_history는 남아 있습니다. 따로 user를 find 하는 곳이 없는 것 같은데 이런 현상이 나오는 이유가 뭘까요?.... 추측 하기로는 AfterEach로 clear할때 deleteAll을 사용해서 사용했던 테이블을 모두 select 하는건가 싶긴 한데... 제가 이해를 잘 못해서 그런건지 이부분이 어렵네요....
-
해결됨스프링은 어려워! 코틀린과 Ktor로 백엔드/서버개발 기초정복 (커피주문시스템 개발)
패키지 폴더 domain이 없네요.
안녕하세요 ktor이란 가벼운 백엔드 프로그램이 있어서 반가운 마음에 수강 신청하고 강의 듣고 있습니다. 전 개발 시에 항상 폴더경로와 패키지 경로는 같게 하고 다른 강의나 책에서도 패키지 명은 폴더를 따라 가던데 강의/소스 보니 패키지 명이 폴더를 안따라 가는거 같아서 물어봅니다. 예를 들어서 CafeMenu.kt의 파일은 com>example>model 에 있습니다. 그런데 패키지 명은 package com.example.domain.model이라고 적혀 있는데 경로에서는 domain이 없어요...그래서 패키지 명을 수정한다면 domain이 이 빠진 package com.example.model 라 작성하거나domain 폴더를 생성하는게 맞지 않나요??흠 .. 뭐 이건 방식이긴 한데 빈 프로젝트에서 시작하는게 강의 듣는데 안 헛깔렸을꺼 같은데 ... 첫 ktor 샘플인 ktor-sample-world에서 plugins가 config로 변경된거 같아서 좀 당황했어요 ^^;; 원리 아무것도 모르고 시작할 땐 그냥 강사님의 이야기를 졸졸졸 따라 가는게 학생들의 마음이라 ... 뭔가 갑작스럽게 단계를 점프하면 고민을 많이 하거든요 ...이거 폴더 변경되도 문제 없나 ... 내가 빈프로젝트를 만들어서 프로그램 코딩하는데 나도 config의 폴더를 plugins로 변경해야 돌아가는거 아니야.... 폴더명 변경했는데 안돌아가면 어떻게 하지 이런 생각이 갑자기 들었거든요 .. 어째건 저 패키지명 저렇게 해도 되나요??
-
미해결모던 안드로이드 - Jetpack Compose 입문
TodoList - 04에서 recentlyDeleteTodo가 null일 경우 처리 방법 문의
개인적으로 변수가 null일 경우변수?.let {}이렇게 사용해 왔는데요. 강의에서는 viewModelScope.launch { todoRepository.addTodo(recentlyDeleteTodo ?: return@launch) }이렇게 사용 하셨는데요. 해당 부분만 보면 뭐가 더 좋다 이럴게 없어 보이기는 하는데요. 혹시 특정한 상황에서 ?: return 으로 하는 것이 필요한(or 더 좋은) 경우가 있을까요?
-
해결됨2시간으로 끝내는 코루틴
스프링 MVC 환경에서의 코루틴
안녕하세요.Spring MVC 환경에서 코루틴을 사용할 때 질문이 있습니다. (WebFlux 사용 X)다음과 같은 코드가 있다고 가정하겠습니다. 컨트롤러@GetMapping("/test") suspend fun test(): ApiResponse<Void> { testService.run() return ApiResponse.success(statusCode = HttpStatus.OK) }서비스class TestService( private val userRepository: UserRepository, ) { suspend fun run(): Triple<String, String, Int> { // 외부 API 호출 1 val nicknameDeferred = CoroutineScope(Dispatchers.IO).async { callApiForNickname() } // 외부 API 호출 2 val addressDeferred = CoroutineScope(Dispatchers.IO).async { callApiForAddress() } // Do something business logic // DB 호출 val duplicateCount = userRepository.findDuplicateCountById(1L) return Triple(first = nicknameDeferred.await(), second = addressDeferred.await(), third = duplicateCount) } }(callApiFor~() 메소드는 외부 API 호출이라고 가정하며 suspend function입니다)서비스 레이어에서는 2개의 외부 API 호출을 수행하고 DB호출을 한 후 리턴해주는 간단한 구조입니다. 질문초기에는 내부적으로 코루틴을 사용할 지 말지 결정할 수 없는 상황이 있기에 모든 컨트롤러 메소드를 suspend로 선언하는건 어떨까 합니다. (2번 질문의 성능 차이가 크지 않다면요^^) 이 부분에 대해 강사님의 생각과 실무에서는 보통 어떻게 하는지 궁금합니다.위 질문에 이어서, 코루틴이 전혀 사용되지 않는 상황에서 컨트롤러 메소드를 suspend로 선언하면 일반 메소드로 선언하는것과 성능차이가 어느정도 있을까요? (물론 트래픽 등 기타 상황별로 다르겠지만요)서비스 레이어를 보면 CoroutineScope을 통해 각 외부 API호출별로 루트 코루틴을 따로 만들고 있습니다. 각 외부 API들은 단순 조회 요청으로써 구조적 동시성이 필요하지 않다고 생각하기 때문인데요. 실무에서도 위와 같이 여러개의 외부 API호출을 병렬로 수행해야하는 경우 각 호출마다 CoroutineScope을 사용하여 개별로 루트 코루틴을 만들어서 사용하는지 궁금합니다.일반적인 웹 API 서버 개발을 수행할 때 구조적 동시성이 필요한 케이스가 있을까요? 어차피 추후 로직을 통해 반환값에 대한 검증을 수행한다고 생각해서요. 예를 들어 A, B, C를 코루틴으로 호출할 때 A가 실패해서 B, C를 취소하려해도 각 메소드의 레이턴시에 따라 취소될수도, 이미 완료됐을수도 있을 것 같습니다. 실무에서 웹 API 비즈니스 로직 구성 시, 개별 루트 코루틴이 아닌 하나의 루트 코루틴으로 묶어서 구조적 동시성을 보장해야만 하는 상황이 있을지, 있다면 무엇일지 궁금합니다.감사합니다.
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
강사님 실시간으로 혹시 문의하는 방법은 없을까요??
시간대가 서로 안 맞는 것 같아서 오류 하나 해결하는데 너무 오랜 시간 걸리는 듯해요...
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
해당 강의 들으시는 분들 중에 교육관련해서 서로 얘기 나누실 분 있으신가요??
서로 오류나 문제발생 하는거 공유하고 서로 도움 줄 수 있는 분들 소통하고 싶습니다... 저는 FCM에서 지금 한 달째 멈춰있는데, 이전까지 했던 것에 대해서는 제가 아는 선에서 도움을 드리겠습니다.
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
강사님 FCM 단계 진행하면서 오류들이 너무 많이 발생합니다...
진도가 나가지지 않아서 막막합니다...도움이 필요합니다...오류 발생한 것에 대한 내용도 글로 정리된 링크나 안내를 실시간으로 받아볼 수 있는 방법은 없을까요?? ㅠㅠ지금 한달 내내 같은 곳에서 멈춰있는 듯해서 미칠지경입니다...한 발 더 딛고 싶은데 같은곳에서 빙빙도니까 정말 정신적으로 너무 힘이드네요.
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
자료형 불일치 오류가 뜹니다
명언 앱 만들기 강의 수강 중 Type mismatch: inferred type is ViewDataBinding! but ActivityMainBinding was expected위와 같은 오류가 발생합니다. binding=DataBindingUtil.setContentView(this,R.layout.activity_main)에 빨간 밑줄이 그어집니다. package com.junho.goodwords import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.databinding.DataBindingUtil import com.junho.goodwords.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) binding=DataBindingUtil.setContentView(this,R.layout.activity_main) binding.showAllSentencesBtn.setOnClickListener { val intent= Intent(this,SentenceActivity::class.java) startActivity(intent) } } }gradle 에서는 buildFeatures{ dataBinding=true viewBinding=true }로 설정하였습니다.
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
북마크 페이지 화면이 이상하게 나옵니다.(망고)
제목에 나왔듯이 북마크 페이지에서 이미지가 나오지 않는데 어떤 페이지를 수정해야 할까요?ㅠㅠ
-
해결됨[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
빌드가 되지 않습니다
실행하려고 하면 위와 같이 빌드에 실패했다는 말과 함께 오류가 뜹니다. 전체 폴더를 구글 드라이브에 올려두었습니다. https://drive.google.com/drive/folders/1mbyI-lZ2UKh4nxh15dJqfDuF1pAWuNP-?usp=sharing
-
해결됨스프링은 어려워! 코틀린과 Ktor로 백엔드/서버개발 기초정복 (커피주문시스템 개발)
jar 배포 시 frontend 페이지에 접속이 안되는 이슈
./gradlew buildFatJar 로 빌드한 후에jar를 실행해보니 frontend 페이지가 접속이 안되는 이슈가 있었습니다 (윈도우, 맥 환경 동일).다른 분들은 정상적으로 실행되는데 제 환경이 잘못되어서 그런지도 모르겠습니다. Routing.kt에 react 설정부분을 아래와 같이 변경하니 정상적으로 동작합니다. frontend 폴더는 ./resources 폴더로 이동시켰습니다. 어떤 문제때문에 발생한 이슈인지 강사님이나 고수님들이 조언 주시면 감사하겠습니다. 😄 [기존 코드] singlePageApplication { react("frontend") } [변경 코드] staticResources("/", "frontend") { default("index.html") preCompressed(CompressedFileType.GZIP) }
-
해결됨스프링은 어려워! 코틀린과 Ktor로 백엔드/서버개발 기초정복 (커피주문시스템 개발)
혹시 kotlinx-datetime 라이브러리를 사용하지 않으신 이유가 있으신가요?
java 의 datetime 라이브러리를 사용하게 됨으로써, exposed 에서나 kotlinx-serialization 을 통한 직렬화에서도 직접 custom serializer 를 만들어주거나, 별도의 라이브러리를 주입하여 처리해주는 부분이 늘어간 것 같아서 질문을 드리게되었습니다.kotlinx-datetime 라이브러리를 통해 datetime 을 핸들링하게 될 경우엔 kotlinx-serialization 을 통해 직렬화 및 역직렬화를 수행할때, 별도의 custom serializer 를 만들어주지 않아도 라이브러리에서 지원이 되어서요. (exposed 는 이번에 처음 사용해서 지원하는 타입들이 내장되어 있는지 조사해봐야할 것 같습니다.)java 의 datetime 라이브러리가 아무래도 아직 더 대중적으로 사용하는 라이브러리라서, 익숙해서 사용하신 것인지, 이유가 궁금합니다.
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
BTS 만들 intent 사용에 오류
강의대로 intent 작성 후 alt+enter를 누르면 사진과 같이 밑에 새로운 함수가 생겨버립니다?어디가 잘못된 걸까요??import 부분도 강의 부분과 조금 다른듯 해서요
-
미해결[초중급편] 안드로이드 데이팅 앱 만들기(Android Kotlin)
FCM 토큰 문의
안녕하세요 강의 관련 문의가 있습니다.3분 00초에서 기존 회원의 경우 토큰 값이 없어서DB에서 삭제 후 신규 가입을 하셨는데요회원정보 삭제 없이 DB에토큰 값만 Update 할 수 있는 방법은 없을까요 ?강의 잘 보고 있고 항상 감사합니다 :
-
해결됨스프링은 어려워! 코틀린과 Ktor로 백엔드/서버개발 기초정복 (커피주문시스템 개발)
첫번째 Ktor 서버 띄워보기 전에 강의 하나가 빠져있는것 같습니다.
프로젝트를 어떻게 구성해야하는지에 대한 설명이 누락되어있는 것 같습니다. kotlinx serialization 을 add 해야 한다던지 그런
-
미해결[중급편] 친절한 JETPACK 개론 <하> (Android Kotlin)
ListAdapter / DiffUtil 관련 강의 문의
섹션 2 에 해당하는 모든 강의가 화면이 안보이는데원래 그런건가요? 혹시 삭제된 걸까요?
-
미해결
웹 앱 로그인 유지 방법
안녕하세요. 웹앱 기반의 앱을 만들고 있는 초급 개발자입니다. js에 있는 특정 로그인 암호화 알고리즘을 전부 kotlin에서 재정의하려하니 너무 골이 아파져서 방향을 어떻게 잡아야 할지 우선 여쭤보고 가는게 좋겠다고 생각하여 질문 남기게 되었습니다.우선 제가 생각한 방법들을 이렇습니다. 로그인 기능만 네이티브앱에서 구현(암호화 알고리즘 kotlin으로 재정의)해당 js함수를 사용하는 웹을 컨트롤러에서 호출하고, 응답만을 가져와서 Android 클라이언트에 반환위 두 가지를 일단 시도중인데 2번 방식이 쉽지가 않네요. 애초에 가능한건지도 확실치가 않아 보입니다.이런 고민을 해보신 적이 있다면 부디 조언 부탁드리겠습니다.
-
미해결노래 들으며 실전 프로젝트로 안드로이드 최신 기술을 공부해 보자! - 이름 궁합 편
API 제공 사이트에서 test 할때 서버에러가 나는데요.
이제 더이상 사용할 수 없는 API인걸까요?해결방법이 있다면 알려주시면 감사하겠습니다.