그순간

포스트

20개의 글

Zustand로 흩어진 모달 상태를 한곳에서 관리하기

서론Hello, GSM에는 로그인 안내, 결과 발표, 서류 제출 여부 변경, 이미지 용량 제한 안내처럼 사용자에게 확인을 요청하거나 상황을 알리는 모달이 많습니다. 사용자용 페이지와 관리자 페이지를 합치면 18개에 달했습니다.기존에는 모달이 필요한 컴포넌트마다 열림 상태와 마크업을 직접 가지고 있었습니다. 모달 수가 적을 때는 문제가 없었지만, 기능이 늘어

전준연·2026년 10월 28일·1 조회
Zustand로 흩어진 모달 상태를 한곳에서 관리하기

멀티모듈 프로젝트 만들기

DataGSM은 사실 MSA다..?MSA는 기능을 하나의 서버 애플리케이션에 모으지 않고, 도메인 경계별로 서비스를 나눠 각각을 별도의 애플리케이션으로 띄운 뒤 하나의 클러스터로 묶는 아키텍처입니다. 교내 프로젝트에서는 굳이 이렇게까지 나눌 이유도 별로 없고 기술적으로도 부담이 커서, 한번 해보고 싶더라도 실제로 시도하는 경우는 드물었습니다. 그런데 Dat

김태은·2026년 10월 28일·9 조회·1 좋아요
멀티모듈 프로젝트 만들기

Figma MCP 정리

1. Figma MCP란Figma MCP는 Claude Code 같은 AI 에이전트가 Figma 파일을 읽고 수정할 수 있게 해주는 Figma 공식 MCP 서버입니다. 스크린샷 대신 레이어 구조, 변수, 컴포넌트 정보를 에이전트에게 넘겨줍니다.쓰는 방향은 세 가지입니다.| 방향 | 내용 | 주로 쓰는 도구 | | --- | --- | --- | | 디자인

김유찬·2026년 10월 28일·6 조회

디자인 깨부수기

왜 정리했지?UI를 만들다 보면 이런 말을 자주 합니다.“이게 더 깔끔한 것 같은데?”“이쪽이 더 보기 좋습니다.”“버튼이 조금 이상한 것 같습니다.”저도 이런 말을 합니다. 디자인을 보자마자 이상하다는 느낌은 드는데, 막상 뭐가 이상한지 설명하려고 하면 말이 길어집니다. 버튼이 큰 건지, 색이 강한 건지, 위치가 이상한 건지. 일단 마음에는 안 드는데 이

김유찬·2026년 10월 28일·25 조회·4 좋아요

SEO 최적화 제대로 하는 법

웹 서비스를 개발하고 배포했다고 해서 사용자가 알아서 찾아오는 것은 아닙니다. 서비스가 아무리 잘 만들어져 있어도 검색엔진에서 발견하기 어렵다면, 필요한 정보를 찾고 있는 사용자에게 도달하기 어렵습니다. 특히 특정 학교의 학과 체험이나 입학 설명회처럼 사용자가 검색을 통해 정보를 찾는 서비스라면 검색엔진 최적화(SEO)가 중요합니다.저도 광주소프트웨어마이스

김서연·2026년 10월 13일·16 조회·1 좋아요
SEO 최적화 제대로 하는 법

CORS는 무엇이고 왜 에러가 발생할까?

1. CORS란 무엇일까?프론트엔드나 백엔드 개발을 하다 보면 API 요청을 보냈을 때 브라우저 콘솔에 CORS 관련 에러가 발생하는 경우가 있습니다. 요청 URL이 올바르고 서버가 정상적으로 실행되고 있는데도 응답을 읽지 못하는 상황입니다.CORS(Cross-Origin Resource Sharing)는 교차 출처 리소스 공유를 의미합니다. 브라우저에서

김서연·2026년 10월 12일·11 조회·4 좋아요
CORS는 무엇이고 왜 에러가 발생할까?

쿠키, 세션, JWT

1. 문제의 출발점 — HTTP는 무상태(Stateless) 프로토콜HTTP는 요청과 응답이 끝나면 연결 정보를 유지하지 않는다. 즉 서버 입장에서는 매 요청이 완전히 새로운 클라이언트의 요청처럼 보인다. 하지만 로그인 상태 유지, 장바구니 정보 유지처럼 "사용자를 기억해야 하는" 기능이 반드시 필요하다. 이 문제를 해결하기 위해 등장한 것이 쿠키, 세션,

홍지민·2026년 10월 12일·4 조회

모노레포(Monorepo) 제대로 이해하기

프론트엔드 프로젝트를 여러 개 운영하다 보면 비슷한 문제를 한 번쯤 만나게 됩니다.여러 서비스에서 사용하는 컴포넌트가 조금씩 달라지고, API 타입이나 유틸 함수도 중복해서 관리하게 됩니다. ESLint나 TypeScript 설정을 변경하려고 해도 프로젝트마다 따로 수정해야 합니다.처음에는 각각의 프로젝트를 별도의 Git Repository로 관리하는 방식

김서연·2026년 10월 3일·26 조회·5 좋아요
모노레포(Monorepo) 제대로 이해하기

알면 유용한 자료구조들

들어가며프로그래밍 언어를 여러 개 배우다 보면 아래와 같은 생각을 해보셨을거에요."파이썬에서는 list, 자바에서는 ArrayList, C++의 vector 이렇게 문법이 다른데 자료구조 공부를 굳이 해야할까?"그러나, 파이썬의 dict와 자바의 HashMap 등 모두 문법은 언어마다 제각각이지만, 그 바탕이 되는 자료구조는 거의 공통입니다.자료구조란, 데

배재현·2026년 10월 1일·25 조회·4 좋아요
알면 유용한 자료구조들

동적 배열

동적 배열 원본 동적 배열 2026.09.16 동적 배열에 대해서 알아봅시다. 배열을 크기 변경 가능성을 기준으로 나누어 보면, 크기가 고정된 정적 배열과, 크기 변경이 자유로운 동적 배열로 나눌 수 있습니다. 동적 배열은 더 유연한 데이터 관리를 가능하게 하며, 정적 배열은 크기가 고정된 대신 구현이 쉽고 메모리 사용량이 예측 가능하다는 장점이 있습니다.

김영원·2026년 9월 17일·22 조회·2 좋아요
동적 배열

OAuth state 파라미터는 CSRF 공격을 어떻게 막는가

1. 들어가며OAuth 2.0으로 소셜 로그인을 구현하다 보면 state라는 파라미터를 자연스럽게 마주하게 됩니다. 스펙 문서에는 "CSRF 공격 방어용"이라고만 짧게 설명되어 있는 경우가 많은데, 정작 "OAuth 흐름 안에서 CSRF 공격이 정확히 어떻게 일어나는지", 그리고 "state가 그중 어느 지점을 막는지"는 명확히 그려지지 않을 때가 많습니다

홍지민·2026년 9월 17일·26 조회·4 좋아요
OAuth state 파라미터는 CSRF 공격을 어떻게 막는가

Promise

Promise란?Promise는 비동기 작업을 처리할 때 사용되는 자바스크립트의 객체입니다.Promise를 이해하기 위해서는 먼저 비동기 작업이 무엇인지 알아야 합니다.비동기 작업?비동기 프로그래밍을 설명하기 전에 먼저 동기 프로그래밍부터 알아보겠습니다. 동기 프로그래밍은 작업을 한 번에 하나씩, 순서대로 실행하는 방식입니다.예를 들어 다음과 같은 코드가

강동혁·2026년 9월 17일·7 조회·2 좋아요

Vercel에서 AWS Lambda로 생기부 OCR 실행 환경 분리하기

Hello, GSM은 광주소프트웨어마이스터고등학교 입학지원 서비스입니다.기존에는 지원자가 입학원서를 작성할 때 생활기록부에 있는 정보를 직접 확인하고 비교하며 입력해야 했습니다. 생활기록부 PDF를 열어 필요한 정보를 찾고, 다시 지원서로 돌아와 하나씩 입력하는 과정이 반복되다 보니 작성에 시간이 오래 걸렸습니다.특히 성적처럼 입력해야 하는 정보가 많은 경

김서연·2026년 9월 15일·35 조회·6 좋아요
Vercel에서 AWS Lambda로 생기부 OCR 실행 환경 분리하기

Turborepo 도입으로 빌드 시간과 CI 가독성 함께 개선하기

서론Hello, GSM 프론트엔드는 사용자용 페이지와 관리자 페이지, 그리고 공통 패키지를 하나의 저장소에서 관리하고 있습니다. 기존 pnpm workspace 기반 모노레포 구조는 코드와 의존성을 함께 관리하기에 적합했지만, 프로젝트가 커지며 빌드와 CI를 실행하는 경험에는 개선할 지점이 생겼습니다.이번 글에서는 Turborepo를 도입한 이유, 마이그레

전준연·2026년 9월 10일·19 조회·2 좋아요
Turborepo 도입으로 빌드 시간과 CI 가독성 함께 개선하기

DataGSM의 OAuth Flow

DataGSM OAuth는 무엇인가?OAuth는 사용자가 비밀번호를 직접 노출하지 않고도, 다른 웹사이트나 앱에 자신의 정보를 안전하게 제공하기 위한 개방형 표준 인증/인가 프레임워크입니다.보통 구글 로그인 그리고 카카오톡 로그인이 대표적인 OAuth의 예시입니다.그런데 교내 프로젝트들의 입장으로 본다면, 기존 외부 OAuth를 이용한다면 학번, 기숙사 호

배재현·2026년 9월 9일·48 조회·2 좋아요
DataGSM의 OAuth Flow

interface와 Utility Type

interfaceinterface란?interface란 TypeScript에서 객체가 어떤 형태를 가져야 하는지 정의하는 방법입니다. 각 개체마다 어떤 타입의 값을 받아올지 정할 수 있는 기능으로, 짧게 예시 코드를 짜보았습니다.interface User { name: string; age: number; isFrontend: boolean }위와 같이 작

최민준·2026년 9월 3일·20 조회·2 좋아요

천진난만 Go 성적계산기 도입 이야기

성적 계산식이란Hello, GSM에는 성적 계산 로직이 있습니다. 고교 입학지원시스템이므로 당연합니다. 중학교 생활기록부에 기재된 정보로 성적을 계산하고, 본교 입학 지원에 사용하는 환산점으로 바꿔야 하기 때문입니다. 매년 새 입학 요강이 나올 때마다 이 로직을 수정해 왔습니다.계산식의 사용처Hello, GSM의 핵심 도메인인 만큼 여러 기능에서 사용합니다

김태은·2026년 7월 30일·35 조회·2 좋아요
천진난만 Go 성적계산기 도입 이야기

다중 OAuth 제공자 환경에서 DX와 UX 동시에 달성하기

사용자 경험을 향한 여정2025년, Hello, GSM(광주소프트웨어마이스터고 입학지원시스템)의 2026학년도 신입생 모집을 준비하며 개발을 진행했습니다. 변경된 입학 요강을 반영하는 작업이 큰 축이었지만, 더 나은 사용자 경험도 목표로 삼았습니다. 서버 애플리케이션을 개발하던 중 오래전 등록된 GitHub Issue를 발견했습니다.Issue #48: 사용

김태은·2026년 7월 29일·23 조회·3 좋아요
다중 OAuth 제공자 환경에서 DX와 UX 동시에 달성하기

더모먼트팀의 컨벤션

들어가며효과적인 협업은 단순한 기술적 역량을 넘어, 팀 전체가 공유하는 언어와 구조에서 비롯됩니다. 컨벤션은 바로 그 공유된 언어입니다. 일관된 코드 스타일은 가독성을 높이고, 유지보수 비용을 낮추며, 새로운 팀원이 컨텍스트를 빠르게 흡수할 수 있는 환경을 만들어줍니다. 결국 컨벤션은 커뮤니케이션 오버헤드를 줄이고, 팀이 본질적인 문제 해결에 집중할 수 있

배재현·2026년 7월 2일·100 조회·5 좋아요
더모먼트팀의 컨벤션

더모먼트가 일하는 방법

들어가며더모먼트팀은 2022년 창설 이후 현재까지 5년간 활발한 개발 활동을 이어오고 있습니다. 교내 팀 특성상 인수인계가 단절되거나 팀 자체가 소멸하는 일이 빈번한 환경에서, 더모먼트팀이 지속될 수 있었던 핵심 원인은 자체적으로 구축한 팀 문화와 협업 방식에 있습니다.더모먼트팀은 강력한 조직 문화, 내부적인 기술 혁신, 그리고 체계적인 의사소통 구조를 기

김태은·2026년 6월 13일·83 조회·15 좋아요
더모먼트가 일하는 방법