A DEVELOPER’S JOURNAL

기록하며 배우고, 함께 성장합니다.

개발자로 성장 일지 입니다.

차곡차곡 쌓인 기록 살펴보기
카테고리 관심 있는 주제로 모아보기

EXPLORE THE NOTES

전체 글 191

생각과 경험을 담은 기록
트러블슈팅

[재머시뮬레이터] WebSocket 다른 PC에서 접속되지 않는 문제 해결

1. 문제 상황Spring Boot 에서 STOMP 기반 WebSocket 기능을 구현했습니다. 서버에서는 다음과 같이 /ws 엔드포인트를 열어두었습니다.@Configuration@EnableWebSocketMessageBrokerpublic class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ws") .setAllowedOriginPatterns("*"); } @Override public voi..

2026.05.18
노트/회사 경험

요구사항 정의서 재정의 과정

프로젝트를 진행하면서 요구사항 정의서를 작성했지만, 단순히 기능을 정리하는 작업이라기보다는 설계 기준을 다시 잡는 과정에 가까웠습니다.이번 글에서는 요구사항 정의서를 작성하게 된 배경과, 그 과정에서 겪은 문제 그리고 해결 방법을 정리해보려고 합니다.1. 문제 상황 - 같은 기능을 다르게 이해현재 프로젝트는 큰 주제와 방향은 정해져 있지만, 세부적인 구현 방식은 계속 변경되는 상황이었습니다.이 과정에서 백엔드와 프론트엔드가 각각 설계를 진행하면서 문제가 발생했습니다.요구사항 정의서, 인터페이스 정의서, UI 설계가 서로 맞지 않음같은 기능을 보고도 서로 다르게 해석결과적으로 문서는 존재했지만, 서로 연결되지 않고 따로 노는 상태가 되어버렸습니다.2. 문제의 원인 - 기준이 되는 흐름 3. 해결 방법 -..

2026.04.21
노트/회사 경험

요구사항, 인터페이스, UI가 전부 어긋난 이유와 다시 정리한 과정

1. 문제 상황프로젝트를 진행하던 중 요구사항 정의서, 인터페이스 정의서, UI 정의서가 서로 맞지 않는 문제가 발생했습니다.요구사항 기준으로 만든 API가 UI와 맞지 않음UI 기준으로 만든 기능이 요구사항과 다름인터페이스 정의서가 요구사항과 매치가 되지 않는 부분이 일부 생김즉, 문서들이 서로 기준이 아닌 상태였다.2. 원인 분석문제가 발생하는 이유는 명확했습니다. 기준이 되는 흐름 없이 문서를 각각 작성했기 때문요구사항 기능 단위로 작성됨UI는 화면 기준으로 작성됨인터페이스는 API 기준으로 작성됨결과적으로 같은 기능을 서로 다른 기준으로 정의하게 되었고 정합성이 깨졌습니다.3. 해결 방법3.1 흐름도를 기준으로 재정의문제 해결을 위해 전체 기능 흐름을 먼저 재정의했습니다. 기존에는 기능, 화면, ..

2026.04.20
노트/프로젝트 회고

개발 공부를 다시 고민하게 된 이유

1. 서론작년 2월에 취업하고 난 뒤에 적응기를 거쳐서 실무를 하다 보니 개발 업무의 많은 부분이 기능 구현뿐만 아니라 문서 작성, 유지보수, 기존 코드 이해와 같은 작업에 집중되는 경우가 많았습니다.이 과정에서 느낀 점은 대학교에서 배웠던 CS 기초 지식들은 직접적으로 활용할 기회가 생각보다 많지 않다는 것이었습니다.물론 이러한 지식들이 전혀 필요없는 것이 아닌 구조 설계에 도움이 되지만 반복적으로 사용하지 않다보니 시간이 좀 더 지나면 기억이 흐릿해질 것 같은 느낌이 들었습니다. 2. 앞으로의 계획그래서 앞으로는 잊어버리기 전에 기초를 다시 정리하는 방향으로 공부를 진행하고자 합니다.단순히 이론을 다시 읽는 것이 아닌 직접 코드로 구현하고 정리하면서 실제로 이해한 내용을 기록하는 방식으로 운영할 계획..

2026.04.08
tech stack/Javascript

자바스크립트 기초 복습-변수, 조건문, 반복문, 함수

1. 이번 공부한 범위- 변수 (let, var, const)- 조건문 (if, if-else, switch)- 반복문 (for, while, do-while)- 함수 (function)회사를 다니면서 틈틈히 공부했었지만 블로그에 정리하지 않았으나 다시금 공부하면서 블로그에 정리하고자 합니다.2. 간단 요약변수var a = 10;let b = 20;const c = 30;변수는 사용 범위에 따라 3가지로 나뉩니다.전역 변수 : 함수 밖에서 선언, 프로그램 실행 시작부터 종료까지 생존지역 변수 : 함수 내에서 선언, 함수내에서만 사용가능블록 함수 : for 등 블록 내에서 선언된 변수전역 변수는 함수내에서 지역 변수와 이름이 같을 때 접근하기 위해서 this 키워드를 이용하면 접근할 수 있지만 let으로 ..

2026.03.30
노트/프로젝트 회고

[Markdown] 글쓰기 연습하기

서론마크다운(Markdown)은 개발자 블로그에서 가장 흔하게 사용되는 문법 중 하나입니다.단순히 글자를 꾸미는 용도가 아니라, 글의 구조와 흐름을 설계하기 위한 도구라고 생각합니다.이 글에서는 마크다운의 주요 문법들을 살펴보면서,각 문법을 어떤 상황에서 사용하면 좋은지 정리해 보려고 합니다.헤더#, ##, ### 같은 헤더는 글의 목차를 만들고 구조를 짜는데 사용됩니다.# 제목 (H1) : 글 전체의 제목으로 쓰거나, 아주 큰 대단원을 나눌 때 사용됩니다.## 소제목 (H2) : 템플릿의 큰 섹션을 나눌 때 사용됩니다. (예 : 1. 배경, 2. 문제)### 세부 제목 (H3) : 소제목 안에서 내용을 더 쪼갤 때 사용됩니다, (예 : 1.1 배경의 예)인용구단순히 인용할 때 뿐만 아니라, 글의 흐름상..

2026.01.06
devOps/git

[Git] 브랜치 간 폴더 단위 교체

서론오늘 협업 중 발생한 Git 브랜치 병합 충돌 문제를 해결한 과정을 정리해보고자 합니다. 상황은 다음과 같았습니다.GitHub 저장소에 main과 v2.0 두 개의 브랜치가 있고, 팀원과 나는 각각의 폴더를 수정 중이었습니다. 그런데 서로 다른 시점에 작업하다 보니 업데이트 충돌이 생겼습니다. 그래서 다음과 같은 해결 방법을 찾았습니다.팀원이 수정한 폴더는 그대로 유지내가 수정한 폴더는 완전히 교체불필요한 충돌 없기 푸시문제 상황서로 다른 시점에 커밋했기 때문에, 병합 시 충돌이 발생했습니다. 매번 혼자 깃허브를 사용하고 협업으로 깃허브 사용이 처음이다 보니 푸시에 충돌이 나서 이를 매번 수동으로 해결해야 했습니다.내 폴더만 교체하기브랜치의 기존 폴더는 삭제하고 로컬 폴더 업로드 하기main 브런치 ..

2025.11.10
트러블슈팅

[트러블 슈팅] 역직렬화 에러 발생

1. 문제 상황저번 주, 진행 중인 프로젝트에 대해 발주 업체로부터 피드백을 받았고, 해당 피드백을 반영하여 수정 작업을 진행했습니다.프론트엔드 파트에서 백엔드 수정 사항에 맞춰 작업하던 중, 특정 테이블이 조회되지 않는 문제가 발생했습니다.증상테이블 목록 조회 API 호출 시 데이터가 반환되지 않음개별 id로 조회 시 일부 데이터는 정상 조회되나, 일부 데이터에서 content null 오류 발생2. 문제 원인초기에는 테이블 조회 시 일부 컬럼 값이 null 인 것이 문제가 될 거라고 생각하지 않았습니다.이유는 해당 컬럼은 null 허용 설정이 되어 있고, 과거에도 null 일 경우 예외가 발생하는 것을 발견했습니다. 그러나 에러 로그를 재확인한 결과, 특정 컬럼을 역직렬화하는 과정에서 해당 값이 nu..

2025.08.13
트러블슈팅

[재머시뮬레이터] WebSocket 다른 PC에서 접속되지 않는 문제 해결

1. 문제 상황Spring Boot 에서 STOMP 기반 WebSocket 기능을 구현했습니다. 서버에서는 다음과 같이 /ws 엔드포인트를 열어두었습니다.@Configuration@EnableWebSocketMessageBrokerpublic class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/ws") .setAllowedOriginPatterns("*"); } @Override public voi..

2026. 5. 18.
노트/회사 경험

요구사항 정의서 재정의 과정

프로젝트를 진행하면서 요구사항 정의서를 작성했지만, 단순히 기능을 정리하는 작업이라기보다는 설계 기준을 다시 잡는 과정에 가까웠습니다.이번 글에서는 요구사항 정의서를 작성하게 된 배경과, 그 과정에서 겪은 문제 그리고 해결 방법을 정리해보려고 합니다.1. 문제 상황 - 같은 기능을 다르게 이해현재 프로젝트는 큰 주제와 방향은 정해져 있지만, 세부적인 구현 방식은 계속 변경되는 상황이었습니다.이 과정에서 백엔드와 프론트엔드가 각각 설계를 진행하면서 문제가 발생했습니다.요구사항 정의서, 인터페이스 정의서, UI 설계가 서로 맞지 않음같은 기능을 보고도 서로 다르게 해석결과적으로 문서는 존재했지만, 서로 연결되지 않고 따로 노는 상태가 되어버렸습니다.2. 문제의 원인 - 기준이 되는 흐름 3. 해결 방법 -..

2026. 4. 21.
노트/회사 경험

요구사항, 인터페이스, UI가 전부 어긋난 이유와 다시 정리한 과정

1. 문제 상황프로젝트를 진행하던 중 요구사항 정의서, 인터페이스 정의서, UI 정의서가 서로 맞지 않는 문제가 발생했습니다.요구사항 기준으로 만든 API가 UI와 맞지 않음UI 기준으로 만든 기능이 요구사항과 다름인터페이스 정의서가 요구사항과 매치가 되지 않는 부분이 일부 생김즉, 문서들이 서로 기준이 아닌 상태였다.2. 원인 분석문제가 발생하는 이유는 명확했습니다. 기준이 되는 흐름 없이 문서를 각각 작성했기 때문요구사항 기능 단위로 작성됨UI는 화면 기준으로 작성됨인터페이스는 API 기준으로 작성됨결과적으로 같은 기능을 서로 다른 기준으로 정의하게 되었고 정합성이 깨졌습니다.3. 해결 방법3.1 흐름도를 기준으로 재정의문제 해결을 위해 전체 기능 흐름을 먼저 재정의했습니다. 기존에는 기능, 화면, ..

2026. 4. 20.
노트/프로젝트 회고

개발 공부를 다시 고민하게 된 이유

1. 서론작년 2월에 취업하고 난 뒤에 적응기를 거쳐서 실무를 하다 보니 개발 업무의 많은 부분이 기능 구현뿐만 아니라 문서 작성, 유지보수, 기존 코드 이해와 같은 작업에 집중되는 경우가 많았습니다.이 과정에서 느낀 점은 대학교에서 배웠던 CS 기초 지식들은 직접적으로 활용할 기회가 생각보다 많지 않다는 것이었습니다.물론 이러한 지식들이 전혀 필요없는 것이 아닌 구조 설계에 도움이 되지만 반복적으로 사용하지 않다보니 시간이 좀 더 지나면 기억이 흐릿해질 것 같은 느낌이 들었습니다. 2. 앞으로의 계획그래서 앞으로는 잊어버리기 전에 기초를 다시 정리하는 방향으로 공부를 진행하고자 합니다.단순히 이론을 다시 읽는 것이 아닌 직접 코드로 구현하고 정리하면서 실제로 이해한 내용을 기록하는 방식으로 운영할 계획..

2026. 4. 8.
tech stack/Javascript

자바스크립트 기초 복습-변수, 조건문, 반복문, 함수

1. 이번 공부한 범위- 변수 (let, var, const)- 조건문 (if, if-else, switch)- 반복문 (for, while, do-while)- 함수 (function)회사를 다니면서 틈틈히 공부했었지만 블로그에 정리하지 않았으나 다시금 공부하면서 블로그에 정리하고자 합니다.2. 간단 요약변수var a = 10;let b = 20;const c = 30;변수는 사용 범위에 따라 3가지로 나뉩니다.전역 변수 : 함수 밖에서 선언, 프로그램 실행 시작부터 종료까지 생존지역 변수 : 함수 내에서 선언, 함수내에서만 사용가능블록 함수 : for 등 블록 내에서 선언된 변수전역 변수는 함수내에서 지역 변수와 이름이 같을 때 접근하기 위해서 this 키워드를 이용하면 접근할 수 있지만 let으로 ..

2026. 3. 30.
노트/프로젝트 회고

[Markdown] 글쓰기 연습하기

서론마크다운(Markdown)은 개발자 블로그에서 가장 흔하게 사용되는 문법 중 하나입니다.단순히 글자를 꾸미는 용도가 아니라, 글의 구조와 흐름을 설계하기 위한 도구라고 생각합니다.이 글에서는 마크다운의 주요 문법들을 살펴보면서,각 문법을 어떤 상황에서 사용하면 좋은지 정리해 보려고 합니다.헤더#, ##, ### 같은 헤더는 글의 목차를 만들고 구조를 짜는데 사용됩니다.# 제목 (H1) : 글 전체의 제목으로 쓰거나, 아주 큰 대단원을 나눌 때 사용됩니다.## 소제목 (H2) : 템플릿의 큰 섹션을 나눌 때 사용됩니다. (예 : 1. 배경, 2. 문제)### 세부 제목 (H3) : 소제목 안에서 내용을 더 쪼갤 때 사용됩니다, (예 : 1.1 배경의 예)인용구단순히 인용할 때 뿐만 아니라, 글의 흐름상..

2026. 1. 6.
devOps/git

[Git] 브랜치 간 폴더 단위 교체

서론오늘 협업 중 발생한 Git 브랜치 병합 충돌 문제를 해결한 과정을 정리해보고자 합니다. 상황은 다음과 같았습니다.GitHub 저장소에 main과 v2.0 두 개의 브랜치가 있고, 팀원과 나는 각각의 폴더를 수정 중이었습니다. 그런데 서로 다른 시점에 작업하다 보니 업데이트 충돌이 생겼습니다. 그래서 다음과 같은 해결 방법을 찾았습니다.팀원이 수정한 폴더는 그대로 유지내가 수정한 폴더는 완전히 교체불필요한 충돌 없기 푸시문제 상황서로 다른 시점에 커밋했기 때문에, 병합 시 충돌이 발생했습니다. 매번 혼자 깃허브를 사용하고 협업으로 깃허브 사용이 처음이다 보니 푸시에 충돌이 나서 이를 매번 수동으로 해결해야 했습니다.내 폴더만 교체하기브랜치의 기존 폴더는 삭제하고 로컬 폴더 업로드 하기main 브런치 ..

2025. 11. 10.
트러블슈팅

[트러블 슈팅] 역직렬화 에러 발생

1. 문제 상황저번 주, 진행 중인 프로젝트에 대해 발주 업체로부터 피드백을 받았고, 해당 피드백을 반영하여 수정 작업을 진행했습니다.프론트엔드 파트에서 백엔드 수정 사항에 맞춰 작업하던 중, 특정 테이블이 조회되지 않는 문제가 발생했습니다.증상테이블 목록 조회 API 호출 시 데이터가 반환되지 않음개별 id로 조회 시 일부 데이터는 정상 조회되나, 일부 데이터에서 content null 오류 발생2. 문제 원인초기에는 테이블 조회 시 일부 컬럼 값이 null 인 것이 문제가 될 거라고 생각하지 않았습니다.이유는 해당 컬럼은 null 허용 설정이 되어 있고, 과거에도 null 일 경우 예외가 발생하는 것을 발견했습니다. 그러나 에러 로그를 재확인한 결과, 특정 컬럼을 역직렬화하는 과정에서 해당 값이 nu..

2025. 8. 13.