데이터 처리 함수 구현

Today I Learend 날짜 2024년 3월 7일 목요일 내용 정신 없는 하루지만 그래도 큰 거 하나 끝냈다.. 데이터 처리 구현 위젯에 담길 데이터를 처리하는 로직을 꼭 완성하려 했고, 거의(?) 성공했다. 총 6가지 데이터를 얻었다. Flow 이전 TIL에서 언급했듯, 우리 서비스에서 위젯은 리뷰 서버에서 렌더링 해준다. 고객이 스토어에 접속 ⇒ shopify 쪽에 위젯 요청 ⇒ shopify가 우리 서버로 요청을 리다이렉트 ⇒ 저장해놓은 위젯을 응답 ⇒ shopify가 응답을 리다이렉트 의 과정이다. 따라서 이번 위젯들도 리뷰서버에서 처리되어야 한다. 필요한 데이터들 중 shop 서버에서 가져와야 할 것들이 있다. 고객이 상품을 주문하면 웹훅으로 우리 shop 서버의 order 테이블 등에 관련 데이터가 저장된다. 따라서 리뷰 서버에서 샵 서버로 일부 데이터들을 요청하도록 구조를 만들어야 했다. ...

2024년 3월 7일 · 3 분 · 배준수

파이썬 알고리즘 : 두 정수 사이의 합

2024년 3월 7일 알고리즘 문제풀이 문제 두 정수 사이의 합 난이도 Lv.1 코드 1 2 3 4 5 6 7 def solution(a, b): high = max(a,b) low = min(a,b) answer = 0 for i in range(low,high+1): answer += i return answer

2024년 3월 7일 · 1 분 · 배준수

이슈 처리

Today I Learend 날짜 2024년 3월 6일 수요일 내용 하루종일 문제를 해결하려고 별 방법을 다 써봤지만 잘 안된다. 리뷰 서버에서 샵 서버로 보내는 데이터 요청이 작동하지 않는다. 이 부분이 해결되지 않으면 답도 없으니 내일도 계속 고민해야 한다. 처리할 이슈가 생겨서 집단 지성을 이루었는데, 여전히 모르겠다. 실서버에서만 리뷰를 import하여 성공했음을 띄우는 기능이 작동하지 않는다. 더 정확히 말하면, import는 제대로 되고 반영도 되는데 프론트단에서는 무반응으로 나타난다. 창을 닫고 리뷰 페이지로 가보면 import도 잘 되고 import log도 잘 생성되었는데 화면에 반영이 안된다. 프론트 상 문제는 아닌 것 같은데.. 로컬이나 테스트 서버는 잘 되는데도 실서버에서만 안되니 난감하다. 코드도 똑같은데… 어디서부터 봐야할지 참.. ...

2024년 3월 6일 · 1 분 · 배준수

라프 코스터의 재미이론

라프 코스터의 재미이론 지은이: 라프 코스터 지음 출판사: 와이즈베리 감상 개발자가 되기로 마음 먹은 떄부터, 언젠가 꼭 게임을 개발하겠다는 꿈을 갖고 있다. 굳이 직업일 필요는 없다고 생각한다. 오히려 직업이 아니게 되면 훨씬 더 자유롭게 내 꿈을 펼칠 수 있지 않을까? 중요한 건 반드시 하겠다는 것이다. 페이커의 독후감 리스트에서 단번에 내 눈에 들어온 책이였다. 어떤 게임에서, 어떤 것에서 재미를 느끼는 것인가? 내가 워낙 쉽게 게임을 질려하는 타입이라 정말 수 백가지의 게임을 해봤다. 남들은 들어보지도 못했을 것 까지도. 반면 남들이 다 하는 것, 게임을 좋아하는 사람이라면 누구나 해봤을 법한(혹은 해야만 하는) 게임을 안한 경우도 있다. 나름대로 까탈스러운 구석이 있다 보니.. 이 책을 읽으면 내가 어떤 잣대를 가지고 있는지, 그게 어떤 의미인지를 알 수 있지 않을까 기대 했다. ...

2024년 3월 5일 · 6 분 · 배준수

망가진 로컬환경 고치기

Today I Learned 날짜 2024년 3월 5일 화요일 내용 스프린트 2일차 데이터베이스 모델링을 내가 처리하지 않았다. 하지만 이전에 이미 수 차례 회의를 통해 어떻게 작성할지 계획했기 때문에 이를 바탕으로 코드를 작성할 수 있었다. 이것저것 빠진 부분도 조금 있었지만 열심히 짜놓은 덕분에, 우선 기능 함수부터 편하게 구현할 수 있었다. 내일 테스트서버에 적용될 예정이니 pull 받아서 마이그레이션 하고 나면 본격적으로 함수를 테스트하고 완성할 수 있을 것 같다. 생각보다 너무 수월하게 잘되서 불안한데.. ...

2024년 3월 5일 · 2 분 · 배준수

파이썬 알고리즘 : 방금그곡

2024년 3월 5일 알고리즘 문제풀이 문제 방금그곡 난이도 Lv.2 코드 언제나 카카오 문제는 일단 문제 이해가 힘들다. 1차 62.9/100 점 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 def solution(m, musicinfos): # 정답 음악 제목 answer = '' # 정답 음악이 라디오에서 재생된 시간 answer_t = 0 for x in musicinfos: # 시작 시간, 종료 시간, 음악 제목, 악보 start,end,title,content = x.split(",") # 시작 시와 분 start_h, start_m = start.split(":") # 종료 시와 분 end_h, end_m = end.split(":") # 재생된 시간 계산 playtime = 60*(int(end_h)-int(start_h)) + (int(end_m) - int(start_m)) # 악보를 list화 tmp = list(content) # 재생된 시간이 악보보다 길다면, 악보를 반복한다. while len(tmp) < playtime: tmp += list(content) # 가장 처음부터 len(m)글자씩 보기 위한 반복 for i in range(len(tmp)-len(m)): # i번째글자부터 i+m번째 글자까지 합쳐, 길이가 m과 같은 글자를 만든다 k = "".join(tmp[i:i+len(m)]) if k == m: # 만든 글자가 m과 같지만, 맨마지막에 #이 온다면 정답이 아니다. # "ABC" 를 찾았지만 악보상 "ABC#"으로 되어있다면 찾은 것으로 되겠지만 실제론 찾은게 아니기 때문 # 첫번째 조건문은 그 다음이 #인지 확인할 때, 그 다음이 없을 경우를 위한 설정 if i+len(m)+1 < len(tmp) and tmp[i+len(m)] != "#": # 처음으로 찾은 음악이라면 정답으로 설정 if not answer_t: answer = title answer_t = playtime # 이미 찾은 음악이 있다면, 재생된 시간이 더 길 때만 업데이트한다. # 짧다면 업데이트할 필요가 없다. # 같다면 이미 찾은 음악이 더 먼저 재생되었기 때문에 업데이트할 필요가 없다. else: if answer_t < playtime: answer = title return answer 진짜 너무 복잡하다.. 풀면서도 이게 정답일 것 같지는 않다고 느꼈는데 역시나였다. 조건을 단순화해야한다. #이 붙었을 때를 제대로 처리하지 않은게 문제인듯 하다. ...

2024년 3월 5일 · 4 분 · 배준수

위젯 스프린트 시작!

Today I Learned 날짜 2024년 3월 4일 월요일 내용 스프린트 돌입! 간과한 것 이번 스프린트 때는 나름 철저히 계획을 세운다고 공을 많이 들였다. 오늘 시작하자마자 내가 크게 놓친 부분이 있다는 걸 깨달았다. 우리 서비스는 서버가 2개다… 기존에 있던 세일즈팝업을 위한 추상클래스는 shop 서버에 있다. 이와 관련된 데이터는 Shopify에서 웹훅을 통해 받는 주문 데이터를 이용해 연산하기 때문이다. 반면 위젯과 관련된 것들은 모두 리뷰서버에 있었다. 따라서 리뷰서버에서 위젯에 필요한 데이터를 shop 서버에 요청하고, shop 서버에선 이 데이터를 연산하여 반환해주어야 한다. ‘그냥 DB에 저장하면 되겠지!’라고 생각하고 넘겨버렸다.. 사실 이렇게만 되었어도 크게 당황은 안했을텐데.. ...

2024년 3월 4일 · 1 분 · 배준수

파이썬 알고리즘 : 점프와 순간 이동

2024년 3월 4일 알고리즘 문제풀이 문제 점프와 순간 이동 난이도 Lv.2 코드 일반적인 DP문제라고 생각했다. 조금 어려운 편이긴 하지만, 기존에 충분히 풀어봤던 유형이라 금방 풀 수 있었다. 도착지로 이동하는 마지막 방법을 점프라고 고정하고 생각했다. 1차 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 def solution(n): # 3칸까지는 고려할 필요 없음 if n <= 3: dp = [0, 1, 1, 2] return dp[n] # 그 이상일 때는 DP # 가장 최대 건전지 사용량은 그곳까지 점프로만 도달했을 때이므로 모든 곳을 최댓값으로 초기화한다. dp = [] for i in range(n + 1): dp.append(i) # 2,3일 때는 알맞게 초기화 dp[2] = 1 dp[3] = 2 # 4 이상일 때부터 DP for i in range(4, n + 1): # 반으로 나누었을 때 몫 k = i // 2 # 홀수여서 딱 절반인 곳이 존재하지 않을 때 if i % 2: # i까지 도달 비용 = 몫까지 도달하는 비용(dp[j]) + 몫부터 i까지 점프하는 비용(i-j) for j in range(k, i): dp[i] = min(dp[i], dp[j] + i - j) # 짝수여서 절반인 곳이 존재할 때 else: # 절반인 곳에서 순간이동하면 도착할 수 있으므로 절반에 도착하는 것과 같은 값 dp[i] = min(dp[i], dp[k]) for j in range(k + 1, i): dp[i] = min(dp[i], dp[j] + i - j) return dp[n] n칸 까지 갈 때, 절반인 n//2를 기준으로 생각하면 된다. 절반도 오지 못했을 떄 점프를 하는 것은 거기서 순간이동 하는 것보다 더 건전지 사용량이 소모될 것이기 때문이다. 예를 들어, 10 칸을 이동한다고 했을 때 ...

2024년 3월 4일 · 5 분 · 배준수

파이썬 알고리즘 : 둘만의 암호

2024년 3월 1일 알고리즘 문제풀이 문제 둘만의 암호 난이도 Lv.1 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 def solution(s, skip, index): answer = [] alphabet = list('abcdefghijklmnopqrstuvwxyz') n = len(alphabet) def check(num,x): idx = alphabet.index(x) while num: idx += 1 # 알파벳의 끝에 도달하면 맨 처음으로 보냄 if idx == n: idx = 0 result = alphabet[idx] # skip에 포함되지 않을때만 갯수를 셈 if result not in skip: num -= 1 return result arr = list(s) for i in arr: answer.append(check(index,i)) return ''.join(answer)

2024년 3월 1일 · 1 분 · 배준수

데이터베이스의 사용성 고려해보기

Today I Learned 날짜 2024년 2월 29일 목요일 내용 데이터베이스 계획 변경 다음 주에 시작될 스프린트의 공수와 일정을 확정짓는 플래닝미팅에 들어가기 전 마지막으로 PRD 기획 문서와 피그마를 체크했다. 기존에 열심히 고민하고 공부해서 이번에 추가될 데이터베이스 테이블을 짰는데, 몇가지 놓친 부분이 있어 크게 변경했다. 사용방식 기존 ERD 상으로, 위젯 테이블은 2개의 연관된 자식 테이블을 가지게 된다. 데이터 설정의 기준을 담는 테이블과 위젯에 포함되는 상품에 대한 테이블이다. 어제, 그제 열심히 고민한 부분은 후자였다. 하나의 상품이 위젯에 포함되는 갯수만큼 데이터를 만들 것인지, 상품 당 하나만 가지고 있을지. 전혀 생각하지 못한 부분이 뒤늦게 떠올랐고 의미없는 고민임을 알게됐다. 각 위젯은 데이터를 포함하기 위한 기준을 설정해야 한다. 예를 들어, 최근 이 상품을 구매한 고객에 정보의 최대 기준을 1일, 7일, 30일 등으로 가능하다. 똑같은 상품을 10일전에 김씨가 주문했어도 어떤 위젯에서는 최근 구매정보가 없다고 입력되야 하고 다른 위젯에서는 이 정보가 입력되야 한다. 같은 상품이라고 모두 정보가 같다는 보장이 없다는 의미이다. 따라서 각 상품은 위젯에 포함된 갯수만큼 데이터 정보를 가지고 있는게 맞았다. 황소 뒷걸음질 치다 쥐 잡은 꼴이네. ...

2024년 2월 29일 · 3 분 · 배준수