묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[왕초보편] 앱 8개를 만들면서 배우는 안드로이드 코틀린(Android Kotlin)
diet-memo 만들기 : 데이터베이스에 쓰기가 안됩니다.
안녕하세요 선생님 .'너무 잘 보고 있어요. 질문에도 대답해주셔서 넘 감사합니다.^^질문 : 앱도 정상적으로 작동하는데 Firebase 실시간 데이터베이스에 연동이 안됩니다.(에러 메서지도 안 뜹니다.) MainActivity.ktpackage com.ipari.diet_memo import android.app.DatePickerDialog import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.widget.Button import android.widget.DatePicker import android.widget.EditText import android.widget.ImageView import androidx.appcompat.app.AlertDialog import com.google.firebase.database.ktx.database import com.google.firebase.ktx.Firebase import java.util.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val writeButton = findViewById<ImageView>(R.id.writeBtn) writeButton.setOnClickListener { val mDialogView = LayoutInflater.from(this).inflate(R.layout.custom_dialog, null) val mBuilder = AlertDialog.Builder(this) .setView(mDialogView) .setTitle("운동 메모 다이얼로그") val mAlertDialog = mBuilder.show() val DateSelectBtn = mAlertDialog.findViewById<Button>(R.id.dataSelectBtn) var dateText="" DateSelectBtn?.setOnClickListener { val today = GregorianCalendar() val year : Int = today.get(Calendar.YEAR) val month : Int = today.get(Calendar.MONTH) val date : Int = today.get(Calendar.DATE) val dlg = DatePickerDialog(this, object : DatePickerDialog.OnDateSetListener{ override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int ) { Log.d("MAIN", "${year}, ${month +1}, ${dayOfMonth}") DateSelectBtn.setText("${year}, ${month +1}, ${dayOfMonth}") dateText = "${year}, ${month +1}, ${dayOfMonth}" } }, year, month, date) dlg.show() } val saveBtn = mAlertDialog.findViewById<Button>(R.id.saveBtn) saveBtn?.setOnClickListener { val healthMemo = mAlertDialog.findViewById<EditText>(R.id.healthMemo)?.text.toString() val database = Firebase.database val myRef = database.getReference("myMemo") val model = DataModel(dateText, healthMemo) myRef .push() .setValue(model) } } } }Gradle fileplugins { id 'com.android.application' id 'com.google.gms.google-services' id 'kotlin-android' } android { compileSdk 33 defaultConfig { applicationId "com.ipari.diet_memo" minSdk 21 targetSdk 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = '1.8' } } dependencies { implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'com.google.android.material:material:1.6.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' implementation platform('com.google.firebase:firebase-bom:30.4.1') implementation 'com.google.firebase:firebase-analytics-ktx' implementation 'com.google.firebase:firebase-auth-ktx' implementation 'com.google.firebase:firebase-database-ktx' }custom_dialog. xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/healthMemo" android:layout_width="match_parent" android:layout_height="60dp" android:layout_margin="20dp" android:hint="운동메모를 입력해주세요." android:background="@android:color/transparent"/> <LinearLayout android:layout_width="match_parent" android:background="#999999" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_height="0.5dp"/> <Button android:id="@+id/dataSelectBtn" android:text = "날짜를 선택해주세요." android:layout_margin="20dp" android:layout_width="match_parent" android:layout_height="60dp"/> <Button android:id="@+id/saveBtn" android:text = "저장하기" android:textColor="@color/black" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_width="match_parent" android:layout_height="60dp"/> </LinearLayout> _____그리고 다른 분들은 코드 올릴 때 텍스트형식이 아닌 일정한 형식으로 올리시던데 어떻게 하는건가요? ㅎㅎ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
루키스님 책 추천 해주실수있으신가요
안녕하세요 루키스님 파트1~9강까지 다 구매하여 지금 이제 파트3보고있는 수강생입니다학과도 컴공쪽이여서 나중에 게임개발자가 될려고 열심히 공부하고있습니다따로 책을보고 더 공부를하고싶어서 추천을받고싶은데자료구조, 알고리즘, 유니티 지금까지 보셨던 책중에 좋았던것들 베스트 추천해주실수있나요😊😊
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
Redis 분산락 질문
안녕하세요. 일단 좋은 강의 잘 봤습니다 :) 한 가지 궁금한 점이 있는데요. Redis의 Redisson을 사용할 때StockService의 decrease() 메서드에 Transaction 어노테이션을 걸어두면 비관적락 + 레디스의 분산락을 동시에 사용하면 오히려 기대했던 성능이 더 안나올 수도 있지 않나요?Transaction 어노테이션을 쓰려면 Mysql의 lock 기능을 쓰는게 좋을까요?저도 잘 알지못하지만 이번에 이 동시성 강의를 듣고 찾아보다가 궁금해서 질문드립니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
실무에서의 ManyToMany 연관관계 (계층구조)
안녕하세요실무에서는 ManyToMany같은 관계는 절대 사용하면 안된다고 하셨습니다.Category와 비슷한 조직도 같은 것을 만들고 싶은데 실무에서는 사용하면 안된다고 하여서 구글링을 하다가 클로져 테이블에 대해서 봤는데요막상 대입시켜서 해보려니 막막하여 글을 올림니다.혹시 참고할 만한 예제같은 것이 있을 까요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part3: 자료구조와 알고리즘
이 비교 연산자를 넣어주는 이유가 있나요?
bool operator<(const Pos& other)const { if (y != other.y) return y < other.y; return x < other.x; } 디버그를 해보니 Bfs함수에 parent[nextPos] = pos; 에서 들어가던데 어떤 원리로 그렇게 되는건가요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
트랜잭션 템플릿 사용 로직
txTemplate.executeWithoutResult((status) -> {try {//비즈니스 로직bizLogic(fromId, toId, money);} catch (SQLException e) {throw new IllegalStateException(e);} });위의 로직에서 파라미터로 status를 받는데이 status는 어디에서 받아오는건가요?이전 MemberServiceV3_1 에서는//트랜잭션 시작TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());이렇게 status를 받아와서 커밋과 롤백에 status를 사용했는데MemberServiceV3_2 에서는여러번 반복해 돌려보아도 저 status 에 대한 설명이 없어서답변 부탁드립니다.
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
node 설치후 추가설치건 확인방법
powerShell 로 설치된게 제대로 설치 됬는지 확인할 방법은 없을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
중단점 삽입이 안됩니다 ㅜ
중단점 삽입이 안됩니다 ㅜnamespace Sharp ~ 를 비롯한 {} 를 넣으면오류가 생기면서 빌드가 안됩니다. 왜이러는 걸까요...삽입하려면 이 위치에는 안된다고 자꾸 뜹니다
-
미해결따라하며 배우는 리액트 테스트 [2023.11 업데이트]
답변내용에 따라 새글로 깃헙 레포 링크 공유드려요!
https://www.inflearn.com/questions/663604위 질문 드렸던 수강생입니다! 요청주신 레포지토리 링크 드려요!그런데, 강의 내용 코드를 공개 레포로 해도 되나요?문제가 된다면 비공개 레포로 초대 드리겠습니다! https://github.com/gaeundev/react-shop-test
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
@Transactional 어노테이션만 붙이면 에러가 뜨네요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.문제 : @Transactional 를 주석처리하면 정상적으로 회원가입이 되서 h2 DB에 입력됩니다...그런데 다시 DB데이터 삭제 하고 @Transactional 어노테이션 설정을하면 아래와같이java.lang.IllegalStateException: java.sql.SQLException: Connection is closed뜹니다.. 정상적으로 지금까지 다된거같은데 갑자기 이러네요.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문
연산자 오버로딩 질문있습니다
int로 할때는 (a++)++ 후위형 증감 연산자가 안되는걸 확인했는데 그래서 연산자 오버로딩을 통한 후위형 증감 연산자를 만들었을 때도 똑같이 안될 거라고 생각했습니다. 하지만 예상과 다르게 컴파일단계에서 에러가 나지 않고 제대로 넘어가서 헷갈리네요 왜 그런건가요??
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
디스코드
아래 채널을 찾을 수 없습니다.무효화되거나 만료된 채널이라고 나옵니다.코드팩토리 디스코드https://bit.ly/3HzRzUM확인 부탁드립니다.
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
상품내역 조회 시 에러 발생..
안녕하세요 강의 잘 듣고 있습니다.다름이 아니라 상품주문 후 상품내역을 조회하는 과정에서 org.hibernate.LazyInitializationException: could not initialize proxy [jpabook.jpashop.domain.Item#2] - no Sessionat org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:176) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final]at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:322) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final]at org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor.intercept(ByteBuddyInterceptor.java:45) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final]at org.hibernate.proxy.ProxyConfiguration$InterceptorDispatcher.intercept(ProxyConfiguration.java:95) ~[hibernate-core-5.6.11.Final.jar:5.6.11.Final] 이라는 에러가 발생하여 확인결과@GetMapping("/orders") public String orderList(@ModelAttribute("orderSearch") OrderSearch orderSearch, Model model) { List<Order> orders = orderService.findAll(orderSearch); model.addAttribute("orders", orders); return "order/orderList"; }해당 요청에서 <tr th:each="order : ${orders}"> <td th:text="${order.id}"></td> <td th:text="${order.member.name}"></td> <td th:text="${order.orderItems[0].item.name}"></td> <td th:text="${order.orderItems[0].orderPrice}"></td> <td th:text="${order.orderItems[0].count}"></td>orderList.html의 ${order.orderItems[0].item.name}item을 찾지 못하여 public List<Order> findAll(OrderSearch orderSearch) { String jpql = "select o From Order o join o.member m"; // String jpql = "select o From Order o join fetch o.member m join fetch o.orderItems oi join fetch oi.item i"; // 아이템 정보를 끌어오기 위해서 join fetch 사용!! boolean isFirstCondition = true;jpql에서 fetch join으로 item을 강제로 불러오니 해결됐습니다. 그런데 질답 게시판을 보니 다른분들은 해당 문제가 발생하지 않는듯 하여 무엇이 문제인지 혹시 알수 있을까 해서 질문드립니다... 강의대로 코드를 그대로 따라치진 않았고 나름대로 이것저것 바꿔가면서 코드를 작성하긴 했으나 해당 문제는 아닌것 같았습니다. https://cantcoding.tistory.com/78해당 티스토리의 글과 비슷한 유형의 문제인듯 하여 계속 생각해봤으나 배움이 아직 부족한 탓인지 원인을 잘 모르겠습니다 https://drive.google.com/file/d/1u7Jsc8jrtwNeJZ1ycPJb2RtgvX7sghG6/view?usp=sharing구글드라이브 링크입니다.
-
미해결[리뉴얼] 타입스크립트 올인원 : Part1. 기본 문법편
안녕하세요 제로초님
interface Arr<T> { forEach(callback: (aaa: T) => void): void; } const test: Arr<string> = ['hello', 'world']; console.log( 'test', test.forEach((item) => console.log('item', item)) );안녕하세요 제로초님 하나 궁금한것이 생겨서 여쭤보고싶습니다.위의 사진은 정상적으로 작동하는 코드입니다.그런데 아래 사진 같은경우는 아래 사진에 첨부한 에러 메세지가 나오고 있습니다.둘의 차이점은 함수 이름을 forEach 를 사용했을때 에러(X)아래 사진은 함수 이름을 forEachTest로 사용 한 것 뿐인데forEachTest 라는 함수는 현재 에러가 나고있는데요,해당 코드에서 forEach와 forEachTest의 차이점은 무엇인가요??제가 생각했을땐 forEach에서도 에러가 나야 하지 않을까? 였습니다.해당 내용이 이해가 되질 않아서 답변주시면 감사하겠습니다. interface Arr<T> { forEachTest(callback: (aaa: T) => void): void; } const test: Arr<string> = ['hello', 'world']; console.log( 'test', test.forEachTest((item) => console.log('item', item)) );
-
미해결실전! 스프링 데이터 JPA
트랜잭션을 서비스에서 걸어주는 게 더 좋은 방식인가요?
스프링 데이터 JPA는 repository에 걸려있지만서비스단에서 걸어주고 전파를 받아서 사용하는 방식을 쓰는게 로직에 문제가 있을 때 더 안전하지 않을까 생각되는데 제가 생각한게 맞을까요?
-
미해결[리뉴얼] 타입스크립트 올인원 : Part1. 기본 문법편
redux에서 타입스크립트 적용할 때
type TReport = { [key: string]: string[]; }; interface IinitialState { report: TReport[] } const initialState = { report: [], //<- [{}] 로 해야 오류가 안남, 현재는 오류 };강의를 듣고 조금씩 적용을 해보면서,위 코드는 redux store의 처음데이터 initialState를 설정하는 건데요,저는 처음에 빈배열([ ])로 시작하길 바라는데, IinitialState를 초기 state의 타입으로 지정해주면 반드시 ([{}]) 의 형식으로 지정해줘야 합니다.union을 통해 회피하기 위해서interface IinitialState { report: TReport[] | [] }이렇게 해보기도 했는데 interface에서는 union이 안 먹힌다는게 생각났습니다. 보통 빈 객체로 시작하고 싶은 이런 경우에는 어떻게 타입을 지정하나요?
-
해결됨디자인 시스템 with 피그마
앞에 $ 표시는 저는 없는데 무엇인가요?
상동
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Post시 넘어가는 데이터에 질문있습니다
안녕하세요 강의 잘 듣고있습니다다름이 아니라 아이템 추가 폼에서 입력을하고 Post를 할때어떤 데이터가 @Modelattribute Item에 저장되는지 궁금합니다. <select th:field="*{deliveryCode}" class="form-select"> <option value="">==배송 방식 선택==</option> <option th:each="deliveryCode : ${deliveryCodes}" th:value="${deliveryCode.code}" th:text="${deliveryCode.displayName}">FAST</option> </select> 이코드에서 deliveryCode는 String타입이 아니라 DeliverCode타입이라 객체가 넘어가는줄알았는데 item에 String타입으로 넘어가 저장되더라고요 th:values의 값이 넘어가는 건가요? 저는 th:values는 비교하는 역할만 하는 줄 알고있었는데 어떤방식으로 Post값이 넘어가는지 궁금합니다
-
미해결
게시물 수정관련 End-Point 질문입니다.
익명게시판 토이프로젝트를 진행중입니다.엔드포인트는 /posts/posts/:postId 두가지로 나누어서 진행중인데게시물 수정기능과 관련해서 권한 인증체크에 대한 url설정을 어떻게 해야될지 몰라서 질문 드립니다.단일 테이블의 프로젝트이며 테이블에는pkuserName (유저가 게시글입력시 등록하는 자유이름)password( 유저의 비밀번호가 아닌 게시물의 비밀번호입니다.)제목본문으로 이루어져있습니다.삭제 기능의 경우 삭제 요청이 왔을때 권한 인증을 하면 되지만수정의 경우에는 권한 인증 후 게시물 수정화면으로 넘어가게 하고싶은데현재는 게시물 수정 완료후 비밀번호와 수정내용을 입력 받아 한번에 처리하는 형태로 구현하였습니다.구현하길 바라는것은게시물 수정버튼을 누른다.비밀번호 입력을한다. (이때 사용되는 url설계에 대한 질문입니다.)비밀번호가 일치하면 수정화면으로 넘어간다.수정완료 후 완료버튼을 누르면 수정이된다.현재 생각나는것은 controll uri를 사용하는걸로 생각되는데 혹시 보통 어떻게 구현할까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
Junit5 테스트 관련 질문있습니다.
강사님 제가 스프링부트, 스프링시큐리티, JPA로 간단한 프로젝트를 만들면서 mockmvc를 이용해 컨트롤러 쪽 테스트를 하는데 특정 메소드가 해당 메소드만 테스트를 했을 때에는 잘 수행이 되는데 해당 메소드가 속한 테스트 클래스를 전체 수행했을 때에 다른 메소드들은 다 정상 작동하는데 특정 한 메소드만 자꾸 NoSuchElementException 에러가 납니다. 혹시 이유를 알 수가 있을까요?..