전체 글 21

[웨비톡] 궤도는 발사 후에 수정된다 - 직군의 벽을 넘어 살아남는 엔지니어란

궤도는 발사 후에 수정된다로켓은 처음부터 목표 궤도를 향해 비스듬히 날아가지 않는다. 발사 직후에는 거의 수직으로 상승한다. 가장 두꺼운 대기층을 뚫고 올라가야 하기 때문이다.그래서 로켓은 처음부터 완벽한 각도를 찾기보다, 먼저 강하게 위로 올라간다. 그리고 충분한 고도에 도달해 대기 저항이 줄어들면, 그때부터 엔진의 방향을 조금씩 조정하며 궤도에 가까워진다.처음부터 완벽한 경로를 갖고 출발하는 것이 아니라, 발사한 뒤 계속 수정하며 목적지에 도달하는 것이다.요즘 커리어와 기술을 바라보는 내 생각도 이와 비슷해졌다. 처음부터 완벽한 직군을 정하고, 완벽한 기술 스택을 고르고, 완벽한 방향으로 출발하는 것보다 중요한 것은 어쩌면 따로 있다. 일단 시작하고, 만들고, 배우고, 다시 수정하면서 자신만의 궤도를..

기타 잡설 2026.06.12

합동세미나 회고 - LINKareer를 리디자인하며

이번 SOPT 38기에서 진행한 LINKareer 합동세미나는 단순히 화면을 나누어 구현하는 프로젝트가 아닌 실제 서비스처럼 여러 명이 같은 코드베이스에서 컨벤션을 맞추고 기능을 연결해가는 경험이었다. 나는 홈 화면의 주요 섹션과 공통 컴포넌트, 그리고 후반부에는 채용 상세 페이지의 합격 자료 API 연동을 맡으며 UI 구현부터 데이터 흐름까지 여러 Task들을 경험했다.컴포넌트의 분리가장 많이 배운 부분은 '컴포넌트를 어떻게 재사용 가능하게 만들 것인가'였다. 처음에는 피그마 화면을 그대로 옮기는 데 집중했지만, 작업이 진행될수록 컴포넌트 이름, props 구조, 스타일 파일 위치, 시맨틱 태그 같은 작은 결정들이 팀 전체 개발 속도에 영향을 준다는 것을 느꼈다. 특히 HomeBanner, HomeCu..

프로젝트 2026.05.26

무한루핑 캐러셀 튐 현상 트러블슈팅

issue최근 SOPT에서 링커리어 리디자인 합동 세미나를 진행하면서, 홈 추천 공고 캐러셀을 무한 루프처럼 구현하는 과정에서, 마지막 슬라이드에서 첫 번째 슬라이드로 넘어갈 때 화면이 순간적으로 튀는 문제가 있었습니다.복제 슬라이드에서 실제 슬라이드로 인덱스를 보정할 때 transition을 잠시 끄고 위치를 이동시킨 뒤 다시 켜야 했는데, requestAnimationFrame을 한 번만 사용했을 때는 일부 상황에서 transition이 너무 빨리 다시 활성화되어 여전히 깜빡임이 발생했습니다.const restoreTransitionAfterJump = () => {window.requestAnimationFrame(() => {setIsTransitionEnabled(true);});};cause..

Linkareer 프로젝트 Carousel 구현

Carousel 구현 뜯어보기이번 캐러셀은 공고 카드가 3초마다 자동으로 넘어가고, 사용자가 직접 스와이프할 수도 있는 구조로 구현했다.핵심은 activeIndex로 현재 보여줄 슬라이드를 관리하고, transform: translateX(...)로 track 전체를 이동시키는 방식이다.기본 상수const SLIDE_INTERVAL_MS = 3000;const SWIPE_THRESHOLD_PX = 50;캐러셀 동작에 필요한 기준값을 상수로 분리했다.SLIDE_INTERVAL_MS는 카드가 자동으로 넘어가는 간격이다. 현재는 3초마다 다음 카드로 이동한다.SWIPE_THRESHOLD_PX는 사용자의 드래그를 실제 스와이프로 인정할 최소 거리다. 현재는 50px 이상 움직였을 때만 다음 또는 이전 카드로 전..

어디까지 useState로 관리해야 할까? & TS로 API 응답 다루기

React에서 state로 관리해야 하는 값과 아닌 값이번 SOPT 과제를 진행하면서 로그인, 회원가입, 마이페이지, 회원 조회 기능을 구현했다.구현하면서 가장 많이 고민했던 부분은 “어떤 값을 state로 관리해야 하지?”였다.처음에는 컴포넌트 안에서 쓰이는 값이면 전부 useState로 만들어야 할 것 같았다. 그런데 코드를 작성하다 보니, 모든 값을 state로 관리하는 것이 오히려 불필요한 렌더링과 복잡도를 만든다는 걸 알게 되었다.이번에는 특히 LoginPage에서 버튼 활성화 여부를 만들면서 이 차이를 제대로 느꼈다.처음 생각로그인 페이지에는 아이디 입력값과 비밀번호 입력값이 있다.const [userID, setUserID] = useState('');const [userPW, setUser..

두더지게임과 함께 알아보는 useRef와 타이머

이번주 SOPT 과제는 React 두더지 게임 만들기였다. useRef로 타이머를 구현하는 과정에서 알게 된 점들에 대해 정리해 보았다.(코드: https://github.com/38-lets-sopt-web/JiwonJeong/tree/week3/homework/Week-3/homework/whack-a-mole)useRef와 타이머이번 두더지 게임을 만들면서 제일 헷갈렸던 부분 중 하나가 타이머였다. 처음에는 단순하게 생각했다.“1초마다 state를 줄이면 되는 거 아닌가?” 라고.setInterval(() => { setTimeLeft((prev) => prev - 1);}, 1000);실제로 간단한 카운트다운은 이렇게도 동작한다. 그런데 게임처럼 시간이 끝났을 때 점수를 저장하고, 모달을 띄우고..

BEM 방법론, toLocaleString, Shallow Copy, .filter(Boolean), localeCompare

기술의 유행은 변해도 결국 본질은 '어떻게 하면 더 깨끗하고 안전한 코드를 짤 수 있는가'로 귀결되는 것 같다. SOPT 2주차 과제를 하며 바닐라 자바스크립트에 현대적인 방법론들을 적용해 보자니, 예전에는 무심코 지나쳤던 작지만 중요한 기법들이 눈에 들어오기 시작했다.오늘은 최근 프로젝트를 진행하며 새롭게 알게 된 것들과 코드의 질을 높여준 점들을 정리해 보려 한다.BEM 방법론 (Block, Element, Modifier)CSS를 작성하다 보면 항상 클래스 명명 규칙(Naming Convention) 때문에 골머리를 앓는다. container, inner, wrapper… 그러다 결국 div > div > p 같은 지옥의 선택자가 탄생하곤 하는데, 이를 방지하기 위한 구조적인 접근법이 바로 BEM이..

시멘틱 태그, noopener noreferrer, 하드웨어 가속

웹 개발을 시작한 것이 2021년쯤이니.. 벌써 5년쯤 되었다. 처음 시작할 때는 제이쿼리라는 $ 달린 것이 대세였는데, HTML CSS를 배우면서 JS로 넘어가기도 전에 이미 제이쿼리의 시대가 끝나 버리고 말았다. IT 업계가 그런 곳이니까. 늘상 빠르게 바뀌는 유행하는 기술들을 보며 계속해서 새로운 것을 시도해 보고 싶어서 새로운 것만 나오면 둘러봤다. 그러다 SOPT에 들어오게 되면서 오랜만에 다시 21년도에 만졌던 바닐라 웹을 만져보니 참 불편하면서도 이걸 배울 때 쯤엔 재사용성이니 뭐니 아무것도 몰랐던 나였던 걸 느꼈다. 그래서 개발하다 보니 여기서는 어떻게 현대적인 개발 방법을 적용할 수 있을지 궁금해져서 좀 찾아보았고.. 알게 된 것과 고민을 좀 적어 보려 한다.시멘틱 태그 (Semanti..

이진 탐색

이진 탐색이란 순차 탐색: 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인하는 방법. 이진 탐색: 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법. 시작점, 끝점, 중간점을 이용하여 탐색 범위를 설정한다.시간 복잡도 단계마다 탐색 범위 = 탐색 범위 / 2이므로 연산 횟수는 log2(N)에 비례한다. 다시 말해 이진 탐색은 탐색 범위를 절반씩 줄이며, 시간 복잡도 O(logN)을 보장한다.

알고리즘 2024.04.12

퀵 정렬, 계수 정렬

퀵 정렬 기준 데이터를 설정, 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꾸는 방법이다. 일반적인 상황에서 가장 많이 사용되는 정렬 알고리즘 중 하나이다. 병합 정렬과 더불어 대부분의 프로그래밍 언어의 정렬 라이브러리의 근간이 되는 알고리즘이다. (e.g. C, Java, Python) 가장 기본적인 퀵 정렬은 첫 번째 데이터를 기준 데이터(Pivot)으로 설정한다. 동작 방식 빠른 이유 시간 복잡도 퀵 정렬은 평균의 경우 O(NlogN)의 시간 복잡도를 가진다. 하지만 최악의 경우, O(N^2)의 시간 복잡도를 가진다. 계수 정렬 특정한 조건이 부합할 때만 사용할 수 있지만, 매우 빠르게 동작하는 정렬 알고리즘이다. 계수 정렬은 데이터의 크기 범위가 제한되어 정수 형태로 표현할 수 있을 때 사용 ..

알고리즘 2024.04.12