일괄적인 컬러 적용을 위해 테일윈드 :root 클래스에 darkblue 프로퍼티를 선언하여 사용하고 있었습니다.하지만 크롬에서는 작동하고 사파리에선 작동하지 않는 이슈가 터지고 말았습니다!! 아아~크롬만 보고 테스트해서 이미 메인 서비스까지 올려놨는데 말이죠~ 새벽에 확인하고 허겁지겁 롤백했다 아입니꺼~처음에 추정한 원인은 테일윈드CSS 클래스 관련해서 사파리엔 아직 지원하지 않는게 있나? 싶었지만,결국 원인은 오타였습니다. 사진에서 --darkblue를 선언할 때 중간에 쉼표가 들어간 게 보이시나요?--darkblue: 215, 56%, 17% // 이렇게 쉼표를 모두 붙이거나,--darkblue: 215 56% 17% // 이렇게 모두 없애야 합니다.사파리가 이상한 게 아니고, 크롬 브라우저의 CSS..
전체 글
개발하며 겪은 것들을 공유합니다.from collections import dequeans = 0n, k, m = map(int, input().split())mat = []visited = [[False for _ in range(n)] for _ in range(n)]for _ in range(n): mat.append([int(x) for x in input().split()])s_pos = []for _ in range(k): r, c = map(int, input().split()) s_pos.append((r - 1, c - 1))stone_pos = [(i, j) for i in range(n) for j in range(n) if mat[i][j] == 1]selected_stones = []q = deq..
간단하게 AWS를 이용해서 정적 배포를 해봅시다.도메인 구매 후 Route53에 등록하고, HTTPS를 위한 증명서 발급은 미리 되어있다고 가정합니다.1. S3원하는 이름으로 버킷을 생성합니다. 유저들에게 서빙할 html 파일을 저장하는 용도로 사용할 것이기 때문에 버킷에 대한 퍼블릭 액세스를 개방합니다. 나머지 설정은 기본 설정을 따르셔도 좋고, 필요한 부분들을 설정해주시면 됩니다.버킷을 생성했으면 해당 버킷의 속성 탭으로 접근해서 맨 아래의 정적 웹 호스팅을 활성화합니다. 맨 밑의 리다렉션 규칙은 비워둡니다. 이제 권한 탭으로 이동하여 버킷 정책과 CORS 정책을 설정합니다.정책 생성기를 사용할 경우 위 사진과 같이 설정하고, Actions는 GetObject, ARN은 버킷 ARN을 입력합니다.생성..
import syssys.setrecursionlimit(2500) # 재귀 깊이 설정n, m = map(int, input().split())highest = 0mat = []ans = [1, 0]visited = []for _ in range(n): buf = [int(x) for x in input().split()] highest = max(highest, max(buf)) mat.append(buf)def search(row, col, k): global visited if ( row n - 1 or col > m - 1 or visited[row][col] == True or mat[row][col] ans[1]..
프론트엔드 서버를 사용하던 환경에서 팀 내부적으로 굳이 프론트 서버 기능이 없다고 판단해 정적 배포로 전환하였습니다.이전까지의 CI/CD 플로우는 젠킨스를 활용해 특정 액션에 훅을 걸어 자동 배포되는 구조였습니다. 이전에 쓰던 젠킨스 프론트엔드 파이프라인을 다시 설정해서 써야하는 상황이었는데..프론트엔드 깃허브 레포를 정리하는 김에 깃허브 액션을 써볼까 해서 시도를 해봤습니다.깃허브 내부에서 해결할 수 있다면 젠킨스 비용을 절약할 수도 있겠다~ 했구요.S3, CloudFront등 AWS 기본 셋업이 되어 있다고 가정합니다.1. 깃허브 액션용 IAM 계정 설정원하는 이름으로 새 IAM 사용자를 생성합니다.생성이 완료된 IAM 계정의 액세스 키를 발급받아 저장해놓습니다. (발급했을 때만 보여주니 잘 저장해놓..
# Prev code: 사다리타기 구현을 너무 복잡하게 생각했음.# def run_ladder(lines):# res = [0 for x in range(n)]# for i in range(1, n + 1):# x, y = i, 0# while y 1 or lines[start][1] 사다리 타기 문제를 푸는 것에 실패했습니다.처음 접근할 때 기본적으로 전체적인 솔루션을 구상하긴 했으나, 사다리 타기 시뮬레이션을 깔끔히 구현하는 것에 성공하지 못했습니다.이전 코드와 비교하여 해설의 코드를 적용한 솔루션을 기록합니다.사다리 타기 로직과 아직 머릿속에서 불완전했던 조합 전개 부분을 학습했습니다.
개발 중 ref 객체를 자식 컴포넌트에 전달하는 과정에서 에러를 겪었습니다.이왕 정리할 거 ref에 대하여 한번에 다 정리하자 싶어서 작성합니다.ref란?크게 2가지 용도로 ref를 사용할 수 있습니다.컴포넌트가 일부 정보를 기억하고 싶게 하고싶지만 리렌더링을 유발하게 하고 싶지 않을 때DOM 요소에 직접 접근하고 싶을 때이번 포스트에서는 2번 용도에 대한 내용입니다. 1번에 대해서는 기회가 되면 다뤄보겠습니다.Ref로 DOM 조작하기보통 React로 개발을 할 때 DOM을 직접 조작할 일은 많지 않습니다. (React가 자동으로 해주니까요!)하지만 가끔 직접적인 DOM 접근이 필요합니다. 이번 같은 경우는 특정 노드에 포커스를 옮기는 경우입니다.예시 코드를 통해 보겠습니다.import { useRef ..
Next + Nest + Nginx의 조합으로 돌아가는 MVP 제품 개발 환경에서 문제가 발생했습니다.기획 당시 SEO를 중시하는 프로젝트 특성 상 앱 라우터를 선택했고,앱 라우터는 페이지간 라우팅 시 서버 렌더링이 원칙입니다.막상 구현을 하고 나니, 페이지간 전환 딜레이가 거슬릴 정도로 오래 걸려서..Suspense 기능을 이용하기로 마음먹었습니다.(2초~3초나 걸리기도 했음.. 현재는 프론트 백 모두 개선을 거쳐서 1초 미만입니다 ^^)import { Suspense } from 'react';...export default async function PoliticianPage({ params,}: { params: { politicianId: number; issueId: number };}) ..