묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
Capturing Valus
cloule 3번째 강의에서 // Capturing Valus// reference Type(class, function, closure)// value Type(Int, String, Array, Dictionary, struct)라고 알려주셨는데 String은 reference type가아닌가요?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
redis lock과 mysql lock 성능 질문입니다.
강의를 보면 redis의 redisson과 mysql db lock 중 redisson을 이용한 방식이 더 성능이 좋다고 설명 해주셨는데요.강의의 테스트 코드 수행시간을 보면 mysql의 비관락이 약 2초, redisson을 이용한 방식이 약 5초 정도 걸리는 것을 보아 비관락의 성능이 더 빠른 것처럼 보이는데..이럼에도 불구하고 redisson의 성능이 더 좋다고 하시는 이유가 궁금합니다.
-
미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI, async, await)
2-4 멀티프로세싱 예제
`04-3-cpu-multi-processing.py`는 멀티프로세싱 예제 인데요process id는 worker 만큼 출력이 되는데, threading.get_ident() 으로 얻은 thread identity는 동일한 값이 나와서요.서로 다른 프로세스가 같은 스레드를 사용하는 것인가요??
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
안녕하세요 todolist강의중에서 UI구성중 xib파일 오토레이아웃질문입니다.
안녕하세요 xib파일에서 오토레이아웃 설정중에 오류가 나와서 질문드려요위와같이 xib파일에서 테이블셀에 오토레이아웃을 적용했는데 시뮬레이터에서는 오토레이아웃이 적용이안되고있습니다. xocde껐다 실행하기와 컴퓨터를 껐다켰는데도 이러는데 혹시 왜이러는건지 질문드려도될까요?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
낙관적 락, 비관적 락 말고 항상 분산락을 쓰는게 좋을까요?
공부하다가 의문이 생겼는데요,낙관적 락 - 충돌 잦으면 락 획득 재시도 로직 때문에 성능 안좋음비관적 락 - 충돌 잦으면 낙관적 락보다 성능좋음.분산 락- 스케일 아웃된 DB 환경에서도 사용 가능- Redis 라이브러리마다 다른데 Lettuce는 스핀락으로 구현되서 재시도 많으면 불리 Redisson은 pub-sub 기반이라 재시도 많으면 유리정확하진 않지만 이렇게 알고있습니다.질문은1. 잘못 알고 있나요?2. 제가 공부한게 맞다면, 무조건 비관적 락, 낙관적 락 말고 분산락 + Redis(Lettuce/Redisson) 쓰는게 좋은건가요?
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
환율 강의 테이블뷰에서 데이터 관련 질문있습니다.
안녕하세요 강의진행하면서 궁금한게있어서 질문드립니다.저의 경우 처음 Picker 뷰에서 rates배열에 url로 데이터 파싱한 데이터를 Table탭에서 delegate패턴을 이용해서 가져오는식으로 데이터를 가져오려 했습니다.먼저 Picker코드입니다. // // ViewController.swift // Exchange Rate // // // import UIKit class PickerViewController: UIViewController { @IBOutlet weak var usdTextField: UITextField! @IBOutlet weak var selectedCurrency: UITextField! @IBOutlet weak var selectedCurrencyName: UILabel! @IBOutlet weak var currencyPicker: UIPickerView! var rates: [(String,Double)]? // table data delegate weak var delegate: tableDataDelegate? // picker row변화에 따른 observer property 계산 var selectedRow = 0 { didSet { selectedCurrencyName.text = rates?[selectedRow].0 selectedCurrency.text = calculateCurrency() } } func calculateCurrency() -> String { let selectedValue = rates?[selectedRow].1 ?? 0 let usdValue = Double(usdTextField.text ?? "") ?? 0 let resultValue = String(format: "%.2f", (selectedValue * usdValue)) return resultValue } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. self.navigationItem.title = "Currency Converter Picker" fetchJson() //picker 연결 currencyPicker.delegate = self currencyPicker.dataSource = self // textField delegate usdTextField.delegate = self // porotcol delegate } func fetchJson() { let urlString = "https://open.er-api.com/v6/latest/USD" guard let url = URL(string: urlString) else {return} // data task URLSession.shared.dataTask(with: url) { data, res, err in guard let data = data else {return} do { let currencyModel = try JSONDecoder().decode(CurrencyModel.self,from: data) // rates: [key:value] 형태 // let rates = currencyModel.rates?.map { [$0 : $1] } // let rates2 :[(String,Double)]? = currencyModel.rates?.sorted(by: { dic1, dic2 in // dic1.key < dic2.key // sorted같은걸하면 Dictionary.Element가되서 tuple로 바뀜 // }) self.rates = currencyModel.rates?.sorted{ $0.key<$1.key } // picker 새로고침해야 데이터 내용이 보임 DispatchQueue.main.async { self.currencyPicker.reloadAllComponents() } // get table data print("rate: ",self.rates!) self.delegate?.getData(data: self.rates! ) // print("currentModel",currencyModel) } catch { print(err!) } }.resume() } } extension PickerViewController:UIPickerViewDelegate,UIPickerViewDataSource { func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return rates?.count ?? 0 } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { let key = rates?[row].0 ?? "" let value = rates?[row].1.description ?? "" return key + " " + value } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { selectedRow = row } } extension PickerViewController:UITextFieldDelegate { func textFieldDidChangeSelection(_ textField: UITextField) { selectedCurrency.text = calculateCurrency() } } 저의 경우 DispatchQueue.main.async { self.currencyPicker.reloadAllComponents() } // get table data print("rate: ",self.rates!) self.delegate?.getData(data: self.rates! )여기서 rates가 전부불어와지면 delegate를 이용해서 해당데이터를 table뷰로 가져오려고 의도했습니다. table데이터입니다.// // ListViewController.swift // Exchange Rate // // import UIKit protocol tableDataDelegate:AnyObject { func getData(data:[(String,Double)]) } class ListViewController: UIViewController { // Data list var conData = [(String,Double)?]() @IBOutlet weak var udsLabel: UILabel! @IBOutlet weak var costTextField: UITextField! @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. self.navigationItem.title = "Currency Converter Table" self.udsLabel.text = "UDS" // table // tableView.delegate = self tableView.dataSource = self let sb = UIStoryboard(name: "Main", bundle: nil) guard let detailVC = sb.instantiateViewController(withIdentifier: "PickerViewController") as? PickerViewController else {return} detailVC.delegate = self tableView.rowHeight = 100 } } extension ListViewController:UITableViewDataSource { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { print("cor: ",conData) return 10 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = self.tableView.dequeueReusableCell(withIdentifier: "MyTableViewCell") as! MyTableViewCell cell.currencyLabel.text = "good" cell.valueLabel.text = "allaal" return cell } } extension ListViewController: tableDataDelegate{ func getData(data: [(String,Double)]) { print("data: ",data) self.conData = data // print(self.conData) } } 여기서 delegate프로토콜을 만들고 Picker뷰에서 가져온 데이터를 conData라는 배열에 담아서 저는 담겨진 데이터를 이용해서 테이블뷰에 데이터를 뿌리는식으로 작업하려했는데 이런식으로 하니 프로토콜이 제대로 안되서인지 conData에 데이터가 담기지 않고 빈배열이 나옵니다.. 저의경우 table뷰에서 델리게이트를 사용한다고 위임하는 코드를 let sb = UIStoryboard(name: "Main", bundle: nil) guard let detailVC = sb.instantiateViewController(withIdentifier: "PickerViewController") as? PickerViewController else {return} detailVC.delegate = self이렇게 Main에있는 스토리보드를 가져와서 권환을 위임했는데 이게 틀린걸까요?어디가 잘못됐는지 잘모르겠습니다.. 답변 부탁드립니다!
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
환율 네트워크처리1 질문있습니다.
안녕하세요 강의 41:46분에pickerView 의 delegate중에서 didSelecRow에 관해서 궁금한게있는데 해당 delegate속성이 picker로인해 선택된 row를 반환해준다고 알고있습니다.궁금한게[ didSeleectRow가있는 delegate메서드를 사용하려면 저는 func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { selectedRow = row } 여기 함수안에서 var selectedRow = 0 { didSet { selectedCurrencyName.text = rates?[selectedRow].0 selectedCurrency.text = calculateCurrency() } }위에 해당하는 코드를 작성해야 함수가 작동된다고 생각했는데 강사님 강의보니 그게아니더라구요 왜 그런건가요? 가만생각해보니 didSelecRow에서 현재 선택된 row정보만 얻기위한 용도로 pickerView didSelectRow 델리게이트 메서드를 이용했고 row정보를 얻었으니 화면에 뿌려주는 역활은 굳이 안해도되기떄문에 위의코드처럼 따로 didSet속성을 이용해서 화면을 나타낸걸로 이해했는데 제가 이해한게 맞을까요?
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
변수 let 위치 질문입니다.
안녕라세요 강의 Result Type 8:18 부분에 switch문에서 해당하는case에 따라서 success,failure부분을 나눠서 하는 조건에서 let의 위치를 ()안에 쓸수도,바깥에 쓸수도있는걸 처음알았는데 혹시 이개념은 어떨때 사용하는지 알수있을까요? 그리고 해당 개념을 뭐라고 하는지도 알수있을까요?
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
Redis 질문입니다
현재 재고로직 처리하면서 redis를 사용하며다음과 같은 로직으로 구현하려 합니다. 재고는 redis에 넣어둔다.Redis에서 가져올수 없는 경우, rdb에 쿼리한다. 이때, 만약 rdb에서 재고를 가져오는 경우 어떻게 가져올수 있을까요? rdb데이터가 redis와 동기화되어 똑같이 있다면 다시 가져와 redis에 다시 넣어두면 되는데어떻게 동기화시킬수 있나요?? 주문이 끝날때마다 재고 rdb테이블에 insert하거나 update치면 rdb에 가해지는 부하나 재고rdb테이블의 lock으로 인한 성능저하는 redis를 쓰지 않을때와 별반 다르지 않지 않을까요??
-
해결됨성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
섹션 9 영상 잘림 확인 부탁드립니다
Movie Player 파트와 이어지는 Navigation Design 파트 사이에 영상이 잘린 것 같습니다. 확인 부탁드립니다. 반복해서 강의 잘 보고 있습니다 감사합니다
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
안녕하세요 강의내용 질문입니다.
안녕하세요 좋은강의 만들어주셔서 감사합니다.혹시 싱글톤패턴하고 ARC부분은 강의파트중에서 어디부분에서 가르쳐주시는지 알려주실수있으신가요?또한 개인적으로 여쭙고싶은건 강사님 강의들으면서 개인 포트폴리오 앱을 하나 만들려하는데 강의전부를 듣고 만들어보는게 좋을지 아니면 포트폴리오만드는걸 강의들으면서 병행으로 하면좋을지 궁금합니다. 감사합니다!
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
안녕하세요 Pessimistic Lock 사용 주의점에 대해 질문이 있습니다 !
안녕하세요 ! 강의 완강하고 문득 든 궁금증이 있어 질문 작성하게 되었습니다. 궁금한 부분은 'Pessimistic Lock 사용 시 스케일 아웃이 어렵다' 라는 부분인데요, 만약 모든 서버가 공유하는 외부 DB 스토리지가 있다고 가정했을 때, 서버 1 에서 1번 row 에 Lock 을 걸었다면 서버 2번에서는 어짜피 같은 DB 를 공유하기 때문에 해당 row 에 접근이 불가한 것이 아닌지 ? 라는 의문이 들었습니다. 제 생각이 어떻게 틀린건지 알려주시면 감사하겠습니다. 좋은 강의 감사합니다 ^^
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
이미지 기초 실행순서
안녕하세요 이미지로드 기초 실행순서가 헷갈려서 질문합니다.비동기방식으로 처리 안하면, 메인쓰레드는 직렬큐라 이미지뷰가 다 회전되고 난 후에 이미지 로드되는 시간이 오래 걸려야 하는것 아닌가요? 왜 쓰레드 락이 걸리는지 모르겠어요
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
동시성 이슈 원인에 대해 질문드립니다.
안녕하세요. 강의 잘 듣고 있습니다. 4분 17초부터 동시성 이슈의 원인을 db select, update하는 과정이 순서가 보장되지 않아 생기는 문제라고 설명해주시는데요. 해당 관점에 더해서 "stock을 select하고 와서 quantity 변수를 수정할때도 메모리상에 read,update,write가 이루어질텐데 여기서도 스레드들이 메모리 접근 순서를 보장할수 없기때문에 이와 같은 동시성 이슈가 생긴다" 라는 생각도 맞을까요?답변부탁드립니다.감사합니다.
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
스프링 부트 2.7.9 native query 에러
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.혹시 저와 같이 에러가 발생하는 분들이 있을 수도 있을 것 같아서 여기다 글을 적습니다!스프링 부트 2.7.9 버전으로 진행하다 named lock 부분에서 native query를 사용하니 org.springframework.beans.factory.UnsatisfiedDependencyException 이러 에러가 발생하더라구요! 그래서 이런저런 방법을 찾아보다가 혹시나 해서 스프링 부트 2.7.9 를 강의 버전에 맞춰 2.7.0 으로 바꿨더니 해결이 되었습니다.혹시나 저와 같이 오류가 나시는 분들은 참고해주세요!!(근데 오류가 나는 이유까지는 모르겠네요 ㅠㅠ)
-
해결됨성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
맵 랜드마크 영상 잘림 확인부탁드립니다
맵 랜드마크 영상 Search Controller 파트 내용 중 앞부분이 전 영상과 이어지지 않는 것 같습니다. (서치 테이블뷰 작성 내용없음)앞 부분이 짤린 걸까요?
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
Main.sync 관련 질문입니다.
학습하면서 어려움이 있으면 DispatchQueue.global().async { DispatchQueue.main.sync { Thread.sleep(forTimeInterval: 1) print("finish1") } }위 코드의 굵은 코드들이 실행될때, 어떤 thread들이 실행되고 있는지 설명 부탁드리고 싶습니다. 이렇게 thread가 진행된다고 이해하면 맞나요?
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
섹션 8. 앱 만들기 - 맵 랜드마크 에 누락된 부분이 있는 것 같습니다.
2번째 영상과 3번째 영상 사이에 SearchResultTableViewController 작성 부분이 누락된 것 같습니다. 확인 부탁드립니다.
-
미해결고수가 되는 파이썬 : 동시성과 병렬성 문법 배우기 Feat. 멀티스레딩 vs 멀티프로세싱 (Inflearn Original)
강의 정리한 것들
제가 강의 들으면서 VSC나 노트패드로 필기하고 따라하면서 따로 더 조사한 것들을 모았는데요그렇게 level1부터 4까지 완강했습니다. 이것들을 개인 유튜브, 깃헙, 노션, 블로그 같은 곳에 올려도 될까요?나중에 포트폴리오로 쓰고 싶기도 하고 개인 유튜브 영상을 만들 수도 있을 거 같습니다.물론 강의에 나온 대본을 따라한다는 것이 아니고 코드나 내용들이죠.
-
미해결성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]
[앱 만들기 - ToDo List] 챕터 TableView 만들기에서
강의에서는 ViewController의 createrTodo() 메소드에 아무런 구현도 하지 않았는데 마지막에 `+` 버튼으로 상세 화면으로 이동하는 모습이 나옵니다. xib으로 뷰컨트롤러 생성 후 네비게이션 컨트롤러에 푸쉬하는 내용이 동영상에서 빠진거같네요.