묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 DB 2편 - 데이터 접근 활용 기술
외래키 중복 관련 질문
import com.example.banking.domain.user.User import com.example.banking.support.BaseEntity import jakarta.persistence.Entity import jakarta.persistence.FetchType import jakarta.persistence.JoinColumn import jakarta.persistence.ManyToOne @Entity class Account( var balance: Double, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") val user: User, id: Long = 0 ) : BaseEntity(id) { fun addAccount(user: User) { user.accounts.add(this) } fun addBalance(amount: Double) { balance += amount } fun subtractBalance(amount: Double) { balance -= amount } }import com.example.banking.domain.account.Account import com.example.banking.support.BaseEntity import jakarta.persistence.* @Entity class Transaction( val amount: Double, @Enumerated(EnumType.STRING) val type: TransactionType, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn val sender: Account, @ManyToOne(fetch = FetchType.LAZY) @JoinColumn val recipient: Account?, id: Long = 0L ) : BaseEntity(id) { constructor(amount: Double, type: TransactionType, sender: Account) : this(amount, type, sender, null) } import com.example.banking.domain.account.Account import com.example.banking.domain.user.User import com.example.banking.domain.user.UserInfo import com.example.banking.repository.account.AccountRepository import com.example.banking.repository.transaction.TransactionRepository import com.example.banking.repository.user.UserRepository import jakarta.persistence.EntityManager import jakarta.transaction.Transactional import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.annotation.Rollback @SpringBootTest @Transactional @Rollback(value = false) class TransactionTest( @Autowired private val em: EntityManager, @Autowired private val transactionRepository: TransactionRepository, @Autowired private val userRepository: UserRepository, @Autowired private val accountRepository: AccountRepository ) { @Test fun testTransaction() { val user1 = User(UserInfo("b", "Seoul", "123", "123")) val user2 = User(UserInfo("b2", "Seoul", "123", "123")) userRepository.save(user1) userRepository.save(user2) em.flush() em.clear() val account1 = Account(100.0, user1) val account2 = Account(100.0, user2) account1.addAccount(user1) account2.addAccount(user2) accountRepository.save(account1) accountRepository.save(account2) em.flush() em.clear() val sender = accountRepository.findById(account1.id).get() val recipient = accountRepository.findById(account2.id).get() val transaction = Transaction(50.0, TransactionType.TRANSFER, sender, recipient) transactionRepository.save(transaction) em.flush() em.clear() val transaction2 = Transaction(50.0, TransactionType.DEPOSIT, sender) transactionRepository.save(transaction2) // assertThat(sender.balance).isEqualTo(50.0) // assertThat(recipient.balance).isEqualTo(150.0) } } 위와같이 Transaction 엔티티와 Account 엔티티가 ManyToOne 으로 매핑되었을때, 테스트코드를 위와같이 작성시,transactionRepository.save(transaction2) 이 라인에서 Duplicate entry '97' for key 'transaction.UK_96vb4d846be64bta5qbxiicb1' 에러가 발생합니다.제가 알기론 외래키의 경우 중복된 값을 가지는것이 가능한것으로 알고 있는데, 같은 account id로 새로운 Transaction 을 생성할 시에 키가 중복이라는 에러가 발생하는데 왜 그런지 알고싶습니다. 코틀린으로 코드 작성한 점 양해부탁드립니다..
-
미해결10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트
4-B 정답코드에 대해 잘 이해가 안 됩니다.
https://www.acmicpc.net/source/share/c19e6a890efe4edcb2a98fedca33b37b안녕하세요. 4-b가 어려워 강의를 들었는데도 답지코드도 이해가 안되는 부분이 있어서 질문드립니다. 16번째 라인에 sum += min(cnt, n - cnt); 해당 부분이 이해가 잘 안 됩니다. cnt를 구하는 부분이나 n-cnt를 하는 부분은 열을 뒤집을지 말지를 결정하기 위해 필요한 값이라는 것은 알고 있습니다. 하지만 min(cnt, n-cnt)를 구하여 열을 뒤집을지말지를 결정해서 연산+1 을 하는 것이 아니라, 더한다는 의미가 어떤 것인지 잘 이해가 안 갑니다.또한 행을 뒤집으면 최적해가 이미 정해졌다는 것까지는 강의를 듣고 어렴풋이 알 것 같은데, 행을 뒤집는 연산에 대한 +1은 하지 않는지도 궁금합니다. (행을 두개 뒤집는다든지, 한 개 뒤집는다든지,, 등) min(cnt, n-cnt)를 더하는 것이 행과 열의 연산을 모두 포함하는 것 같기도 한데 원리(?)에 대해 이해하기가 어렵습니다. 도와주세요!!
-
미해결F6-비전공자·일반인을 위한 기업재무회계의 이해와 활용
강의자료 요청드립니다
강의 잘 시청하고 있습니다. 좋은 강의 감사드립니다.강의 자료를 요청드립니다. drju0624@gmail.com
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
회원조회 API 버전1 포스트맨에서 could not get response
아래의 코드대로 회원 조회 API를 버전1 과 버전2를 수행하는데, 버전2의 경우는 응답이 잘 받아지는데 버전1은 error: abort 가 뜹니다. /* * 회원 조회 * */ @GetMapping("/api/v1/members") public List<Member> membersV1(){ return memberService.findMembers(); } @GetMapping("/api/v2/members") public Result membersV2(){ List<Member> findMembers = memberService.findMembers(); List<MemberDto> collect = findMembers.stream() .map(m -> new MemberDto(m.getName())) .collect(Collectors.toList()); // 스트림의 처리 결과를 리스트 형태로 수집 return new Result(collect); // Result 클래스를 통해 List<MemberDto>를 반환 }
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
MemoryMemberRepository와 MemberService의 차이는 무엇인가요?
이 둘은 비슷한 메서드를 구현한다고 느껴집니다.(save=join) 왜 이런 구조로 작성하나요?
-
미해결쉽고 빠르게 끝내는 GO언어 프로그래밍 핵심 기초 입문 과정
맵 예제 코드가 바이러스 검사에 걸려요
if _, ok := map12["kiwi"]; !ok { fmt.Println("ex7 : kiwi is not exist!") }visual studio code 1.86.2에디션 Windows 10 Pro버전 22H2설치 날짜 2023-10-09OS 빌드 19045.4046경험 Windows Feature Experience Pack 1000.19053.1000.0 이 버전에서 Map 기초 수업의 예제 코드가 바이러스 체크에 걸립니다..!굉장히 흥미로운 현상인데, 같은 현상을 겪으시는 분이 있으신가요?왜 그런 것일까요? 최대한 문제의 소스코드만 발라내보려고 했는데, 코드가 조금 덜어지면 디펜더에 안걸리네요... 신기하네요... 메모리 침범이라도 되나...// 자료형 맵 package main import "fmt" func main() { // 맵 (Map) // 해시테이블, 딕셔너리(파이썬) // Key-Value로 자료 저장 // 레퍼런스 타입 (참조값 전달) // 비교 연산자 사용 불가능 (참조 타입이므로) // 참조 타입으로는 Key에 사용 불가. Value로는 모든 타입 가능 // make 함수 및 축약 (리터럴) 로 초기화 가능 // 순서 없음 // 예제 1 var map1 map[string]int = make(map[string]int) // 정석 var map2 = make(map[string]int) // 자료형 생략 map3 := make(map[string]int) // 리터럴형 fmt.Println("ex1 : ", map1) fmt.Println("ex1 : ", map2) fmt.Println("ex1 : ", map3) fmt.Println() // 예제 2 map4 := map[string]int{} // Json 형태 map4["apple"] = 25 map4["banana"] = 40 map4["orange"] = 33 map5 := map[string]int{ "apple": 15, "banana": 40, "orange": 23, } map6 := make(map[string]int, 10) map6["apple"] = 25 map6["banana"] = 40 map6["orange"] = 33 fmt.Println("ex2 : ", map4) fmt.Println("ex2 : ", map5) fmt.Println("ex2 : ", map6) fmt.Println("ex2 : ", map6["orange"]) fmt.Println("ex2 : ", map6["apple"]) // 예제 3 맵 조회 및 순회 (Iterator) map11 := map[string]string{ "daum": "http://daum.net", "naver": "http://naver.com", "google": "http://google.com", } fmt.Println("ex3 : ", map11["google"]) fmt.Println("ex3 : ", map11["daum"]) fmt.Println() // 예제 4 순서 없으므로 랜덤 for k, v := range map11 { fmt.Println("ex4 : ", k, v) } for k, v := range map11 { // 실행 중에도 순서 보장 X fmt.Println("ex4 : ", k, v) } for _, v := range map11 { // 스킵 가능 fmt.Println("ex4 : ", v) } fmt.Println() // 예제 5 맵 값 변경 및 삭제 fmt.Println("ex5 : ", map11) map11["home"] = "localhost" // 없을 때 추가 fmt.Println("ex5 : ", map11) map11["home"] = "http://test.com" // 있을 때 수정 fmt.Println("ex5 : ", map11) delete(map11, "home") // 삭제 fmt.Println("ex5 : ", map11) // 예제 6 맵 조회할 경우의 주의 및 팁 map12 := map[string]int{ "apple": 15, "banana": 115, "orange": 1115, "lemon": 0, } value1 := map12["lemon"] value2 := map12["kiwi"] // 존재 X. 변수형 기본값 int 0, string "", float 0.0 value3, ok1 := map12["kiwi"] // 키값 존재를 확인하기 위해 true, false value4, ok2 := map12["lemon"] // 두번째 리턴값으로 키값 존재 확인 fmt.Println("ex6 : ", value1) fmt.Println("ex6 : ", value2) fmt.Println("ex6 : ", value3, ok1) fmt.Println("ex6 : ", value4, ok2) // 예제 7 if value, ok := map12["kiwi"]; ok { fmt.Println("ex7 : ", value) } else { fmt.Println("ex7 : kiwi is not exist!") } if value, ok := map12["banana"]; ok { fmt.Println("ex7 : ", value) } else { fmt.Println("ex7 : banana is not exist!") } if _, ok := map12["kiwi"]; !ok { // _ 사용 가능, 키값 없을 때 예외 처리할 때 많이 사용 fmt.Println("ex7 : kiwi is not exist!") } // ??? 윈도우 디펜더에서 바이러스 있어보인다고 막네요 ??? }
-
미해결[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]
mysql프로젝트 관련 크롤링 질문
https://davelee-fun.github.io/ 이 사이트 크롤링을 1번 사진처럼 4파트로 분리해서 크롤링후 2번 사진 처럼 만들어놓은 DB 테이블에 insert하는 코드를 작성해보았는데, (3번사진) 크롤링부분에서 잘못된건지 코드가 잘 돌아가지 않습니다. 혹시 어느부분이 잘못됬는지 알수있을까요?import requests from bs4 import BeautifulSoup import re pg=1 if pg==1: #1페이지 크롤링시 res = requests.get('https://davelee-fun.github.io/') #웹사이트 get request 1페이지 soup = BeautifulSoup(res.content, 'html.parser') #html 파싱 items = soup.select('div.card h') product_id=17890001 #promary key 임의설정 page_num=pg for item in items: recom_info=item.select_one('a.text-dark') #추천 product_name=item.select_one('h4.card-text') #상품명 provider=item.select_one('a[target="_blank"]') #제공자 -> teddy register_date=item.select_one('span.post-date') #등록일자 -> 05 jun 2020 SQL = """INSERT INTO product_info VALUES('"""+product_id+"""', '""" + str(recom_info.get_text()) + """','""" + str(product_name.get_text()) + """','""" + str(provider.get_text()) + """', '""" + str(register_date.get_text()) + """','""" +page_num+ """'); """ print(SQL) cursor.execute(SQL)우선 1페이지를 크롤링한 값을 넣어보려고 했습니다.
-
해결됨
스프링 DB1편 update 메소드 질문
public void update(String memberId, int money){ String sql = "update member set money = ? where member_id=?"; Connection con = null; PreparedStatement psmt = null; try { con = getConnection(); psmt = con.prepareStatement(sql); psmt.setInt(1,money); psmt.setString(2,memberId); int result = psmt.executeUpdate(); log.info("result size={}",result); } catch (SQLException e) { throw exTranslator.translate("update",sql,e); }finally { close(con,psmt,null); } }save() , findById() 처럼 Member객체를 반환하지않는 이유가 궁금합니다.int update()로 1,0으로 정상 비정상을 확인하는 방법도 있나요 ?아니면 Member update()로 코드를 짜볼수도있을까요 ? 위의 방식으로update()에서 업데이트가 잘되었는지 리턴값으로 확인하고싶을때는 어떤식으로 해야하나요 ?제대로 된 질문인지는 잘 모르겠네요 ㅠㅠ
-
미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
persistence.xml 의 필요성
스프링 DB 2편 강의에서는 jpa를 사용할 때 프로젝트에 따로 persistence.xml을 설정해주지 않았는데 이번 강의에서는 persistence.xml이 없으면 jpa가 제대로 동작하지 않는다고 하셔서 그 이유가 궁금합니다.이전 강의에서는 전부 설정을 gradle로 했는데 이번 강의에서는 maven을 사용해서 그런건가요, 아니면 강의 초반에 스프링이 개입되지 않은 순수 자바로만 jpa 프로젝트를 진행한다고 하신 그 이유 때문인가요? 항상 강의 강의 잘 듣고있습니다. 감사합니다!
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
celery-worker, beat, flower, docker-compose 질문
안녕하세요 강사님 프로젝트 진행중입니다! ㅎㅎ 현재 장고없이 celery, beat, flower 를 로컬에서는 정상적으로 동작하는데 Docker 컨테이너로 해서 할 때 worker와 redis간의 포트문제가 발생하고 flower는 설치가 안되는 현상이있는데 장고없이 저 세가지를 컨테이너로 생성해서 정상적으로 동작할수 있는 docker-compose, dockerfile 작성 하는 팁이 따로 있을까요? 추가적으로 celery가 윈도우에서 멀티프로세싱이 안된다고 하는데 그것이 영향이 있어서 그런건가요?
-
미해결프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
안녕하세요! 강의자료 요청드립니다.
안녕하세요! 오늘 입문 강의를 처음 듣습니다.강의자료 요청드립니다.chlwjd0011@naver.com감사합니다!
-
해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
[MacOS] iterm h2 접속 오류
안녕하세요, 첨부한 사진과 같이 iterm에서 ./h2.sh 명령어를 통해 h2에 접속하려고 할 경우 다음과 같은 문구가 뜨며 h2에 접속이 되지 않습니다.검색해보니 macOS 관련 문제인 것 같긴 한데, 구글 및 커뮤니티에서 h2 접속 관련 질문을 찾아보았을 때 저처럼 h2 접속 오류 문제를 겪고 계신 분은 없으신 것 같아 어떻게 진행해야 할지 질문드립니다.(동일한 버전 - 2.2.224으로 일단 삭제 후, 재설치는 진행해본 상황입니다.)
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요! UDP 관련 질문입니다!
안녕하세요, 강사님!프로젝트를 진행하던 중 UDP 통신이 필요할지 고려해야 되는 부분이 있다고 생각되어 질문해봅니다 ㅎ..강의에서 사용된 코드에서 Listener와 Connector부분에서 매개변수로 넘겨지는 ProtocolType부분을 Tcp에서 Udp로 변경하면 UDP 통신이 수행되는 건가요??
-
해결됨자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]
entity 객체에 기본생성자를 넣어주는 이유
안녕하세요User객체에 기본생성자를 넣어야 작동하는 이유가 궁금합니다혹시 필드에 아무값도 넣지않을때를 대비해서 기본생성자를 사용하는건가요?
-
해결됨아키텍처 패턴 with iOS - GUI Architecture Patterns(이론)
MVVM in iOS - 리액티브 프로그래밍, 자동바인딩과 수동바인딩에서 질문이있습니다
안녕하세요강사님WPF에서는 자동바인딩이 제공되기때문에 MVVM을 사용하는데있어서 이점이있다고 말씀을해주셨고 iOS에서는 자동바인딩을 시스템레벨에서 제공해주지않기때문에 그런점에서 iOS의 MVVM패턴은 등장배경에서의 이유로 쓰이고있는지 고민해봐야한다고 말씀을 해주셨는데 여기서 궁금한점이 combine의 published는 uikit에서도 사용이가능하고 이는 combine이라는 도구를 시스템레벨에서 제공해주기때문에 combine의 등장으로 자동바인딩이 iOS에서도 제공된다고 할수있는게 아닌가라는 생각이들었습니다결국 $를 통해 binding변수로 만들어주면 해당 published변수의 변화에따라 view가 업데이트되니까 이런점에서는 uikit도 시스템레벨에서 자동바인딩을 지원한다라고 말할수있는게아닌가라는 생각이들었습니다 혹시 이부분에대해서 강사님의 생각이 궁금합니다!
-
해결됨앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지
LoginProject에서 경고문이 뜹니다.
안녕하세요 좋은 강의 덕분에 공부하고 싶었던 ios에 대해서 잘 알아가고 있습니다 !로그인프로젝트를 만들다가 보니 사진과 같은 경고문이 뜨는데 해석해보니 ViewController.self를 쓰라고 하는거 같더라구요그래서 self대신 ViewController.self로 바꾸면 경고문은 없어지는데 이런 에러가 뜨면서 앱이 꺼집니다. 저 경고문은 그냥 무시하면 되는걸까요?? tf.addTarget(self, action: #selector(textFieldEditingChanged(_:)), for: .editingChanged)그리고 이 줄에서 self는 ViewController를 가르키는게 아니라 텍스트필드를 가르킨다고 생각하는게 맞을까요??
-
해결됨실전! Redis 활용
Stable Cache Invalidation 해결방안
캐싱을 위해 redis를 사용할 경우 db에 값이 변경되었다면 redis에 있는 값과 일치하지 않는 정합성 문제가 일어날수 있다는 것은 알았습니다. 그러면 이걸 해결하기 위한 대표적인 방법들이 무엇이 있을까요??
-
해결됨[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)
라이브러리 및 데이터 불러오기 그리고 EDA 수업내용중에
라이브러리 및 데이터 불러오기 그리고 EDA 수업내용중에15분 36초 경에 보면 남성과 여성의 수를 확인하는데, 그때 남성의 수를 cond_male이라는 변수에 담았기 때문에 len(cond_male) 이렇게만 하면 안되나요? 왜 train[cond_male]이렇게 해주어야 하는지가 궁금합니다. 보통 데이터 프레임 안에서 컬럼을 선택할때 데이터프레임명['컬럼명'] 이런식으로 할때나 사용하는데, 변수로 지정후에도 왜 train으로 감싸나요??
-
미해결UIKit - iOS14 실무 가이드 <iOS앱 진짜 개발자 되기>
키보드 떠 있는 상태 만들기
저는 검색창을 눌러도 키보드가 아예 뜨지 않는데 어떤 코드를 추가해야 할까요? extension ViewController: UISearchBarDelegate { func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { term = searchBar.text requestMovieAPI() } }
-
미해결실전! 스프링 데이터 JPA
쿼리 메서드 @Query시 limit
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 강의 듣는 도중 궁금증이 생겨 질문드립니다.만약 쿼리 메서드를 사용하여 특정 조건에 의해 게시물 10개만 가져오고 싶을 때List<Board> findTop10ByWriteDatetimeGreaterThanOrderByCommentCountDescViewCountDescWriteDatetimeDesc(String writeDatetime);과 같이 지저분하게 코드를 작성할 수 있었는데 메서드 이름이 너무 길어져 @Query를 사용해서 코드 양을 줄이고 싶었습니다. 하지만, jpql에 limit를 사용할 수 없는데 이 경우 어떻게 jpql을 작성해야 하는지 궁금합니다.