2024년 회고를 해보자!블로그를 안 쓴지 오래되었는데, 이전에 정성들여 작성했던 글이 한번 날라가면서 한번 의지가 크게 꺾이고… 블로그 글을 꾸준히 올려야 한다는 압박감에 완성도가 없는 글을 발행해버리고, 그런 나에게 실망하며 블로그를 점점 안쓰기 시작했다. 그러던 중 12월에 모교(?)인 코드스쿼드에서 열리는 12월 회고 모임에 참석하기로 결정하고,모임 전에 나의 1년은 어땠는지 돌아보기로 했다. 2024년은 어땠는가?비개발 직무로 일을 하다 퇴사를 하고 2023년 1년 간 부트캠프를 통해 개발 공부를 했다.그리고 2024년 개발자로 취업을 하게 되었다. “원하는 바를 이룬 나의 2024년은 즐거움과 행복으로 가득했는가?”라고 묻는다면불행히도… 불안함과 방황으로 가득차 있던 해였다. 부트캠프를 다닐..
💬 들어가기 전에작년 6월 첫 번째 Spring 프로젝트를 진행하며 처음 CORS 오류를 마주했고, WebMvcConfigurer 설정을 통해 해결했다. 이후 프로젝트를 진행하며 Jwt 토큰을 도입하게 되어 토큰 인증용 Interceptor를 만들게 되었다.그런데 이때 preflight 요청이 제대로 처리가 되지 않아 CORS 오류가 또 터져버렸다. preflight 요청은 WebMvcConfigurer가 처리해준다고 생각했는데,Interceptor를 만들었다고 preflight 요청이 처리가 되지 않는 것이 이상했다. 당시에는 엉뚱한 곳에서 원인을 찾고 있었던 것 같고, 엉뚱한 내용을 블로그에 작성했다.(지금 보니까 내용이 아주 엉망이다.)[Spring] filter 기능 구현 후 CORS 에러가 발..
개인적으로 생각했을 때 스스로 타고난 성향 중에 하나가규칙이 있으면 지켜야 한다고 생각하는 것이다. 합리적이지 않은 룰이 있더라도 속으로는(겉으로도... 조금은) 툴툴대지만 그래도 규칙이니까 마음은 썩 내키지 않지만 지키려고 한다. 그래서 그런지 Java 공부를 시작하기 전에,그니까 코드 한줄을 치기 이전에 자바 컨벤션을 먼저 익히고 코드를 치기 시작했다. 정확히 기억은 나지 않지만 구글 자바 컨밴션, 네이버 핵데이 Java 컨밴션, 그리고 우테코 intellij Java code style을 정독했었던 것 같다.해당 컨밴션들이 조금씩 상이하기에 컨밴션의 합집합을 정리해 컨밴션을 익히고 인텔리제이에 코드 스타일을 적용하고 코딩을 시작했다. 부트캠프에서도 팀 프로젝트를 진행할 때 마찬가지로 항상 코딩 컨밴..
💬 들어가기 전에그동안 on-premise 환경에서 개발하다가 처음으로 AWS에 배포를 하게 되었다.서버 구성은 흔히 볼 수 있는 Spring 서버 앞단에 Nginx가 있는 구조다. 그런데 배포가 무사히(?) 되고 이런저런 테스트를 하다가 이상한 부분을 발견했다. 갑자기 유효하지 않은 엔드포인트로 요청을 보내면 어떻게 될까 궁금해서 포스트맨으로 API 요청을 날려봤는데내가 생각했던 Spring MVC 요청 흐름과 달랐다. 🌎 내가 인지하고 있던 Spring MVC 요청 흐름일단 흐름을 크게 정리하면 다음과 같은 흐름으로 처리되는 것으로 알고 있었다.Filter → DispatcherServlet → Interceptor → Controller 관련해서 구글링 해보면 내가 보았던 수많은 블로그들도 똑같..
회사랑 집이 가까워서 주말에 종종 (자발적) 출근하고는 하는데, 이번주에는 마침 기회가 되어서 CTO님이랑 같이 점심을 먹게 되었다. 왜 주말에 출근하냐고 해서 아직 해결되지 않는 버그가 있어서 해결하려고 출근했다고 했다. 이런 저런 얘기를 들으시더니 이런 말씀을 해주셨다. "상사로서 힘든 직원은 해맑은 눈으로 뭐가 문제인지 모른채로 같이 일하는 사람이다. 어떤 미션을 줘야 할지 고민이 되고... 또 그러면 성장에 한계가 있다. 지인님은 그래도 버그가 있으면 마음이 불편하고 괴로워하는 것은 프로그래머로서의 좋은 자질이다." 이번달은 유난히 단기간에 해결되지 않는 버그가 많아 자신감이 없어지고 "나 잘하고 있나?" 스스로 고민이 많았던 나날을 지내고 있었는데 저런 말들을 듣고 나니까 처음에는 뭔가 "아 그..
(24.09.08 추가)작성 후 문제의 원인을 알게되어 별도의 글에 정리했다.[SpringBoot] WebMvcConfiguration의 동작 원리 💬 프로젝트 상황현재 개발중인 프로젝트의 환경은 다음과 같다.SpringBoot3JDK 21Spring Security 사용하지 않음그런데 서버 첫 배포 후, 분명 다음과 같이 WebMvcConfigurer를 통해 설정을 추가해주었는데도프론트와 연동하는 과정 중에 CORS 에러가 발생했다. 설정 코드CorsConfig.java@Configurationpublic class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry regist..
코드스쿼드 부트캠프 기간동안 언젠가 이린이 이런 얘기를 했었다. "내가 짠 코드가 1주일밖에 안되었는데 벌써 레거시가 된 것 같아요!" 그때는 그냥 호응만 하고 넘어갔지만, 사실 크게 공감을 못했다.왜냐면 코드스쿼드때에서 팀프로젝트할 때는 사실 매 프로젝트마다 새로운 기술을 학습하면서 구현해야 했던 터라학습과 구현에 치여서 구현도 100% 못해서 이전의 코드를 돌아볼 새도 없었다. 사실 이린은 코드스쿼드 과정이 나랑 달라 3개월 먼저 끝났고 몇달 간 프로젝트를 더 했다고 들었다.그런 유지보수 기간의 차이였을까? 암튼 그때 이린이 했던 얘기가 최근에 문득 떠올랐다.지금 회사에 있는 스프링 프로젝트는 아키텍처부터 시작해서 기능 구현까지 혼자서 했다.(백엔드가 나 혼자밖에 없다.) 헥사고날 아키텍처니 레이어드..
💬 들어가며최근 프로젝트를 하며 json 데이터를 DB 컬럼에 그대로 저장해야 할 상황이 많았다.그동안 Nest.js TypeORM으로 json 데이터 타입을 다루는데 큰 문제가 없었는데multipart/form-data로 넘어오는 json 데이터를 저장하며 문제가 발생했다. 개발 환경은 다음과 같다.Nest.js + TypescriptTypeORMPostgreSQL 🔥 문제DB에 저장할 때 이런식으로 \n, \와 같은 개행문자가 들어가 있었다."[\n {\n \"index\": \"1\", ...생략]"조회할 때도 정의된 Json 형식으로 매핑이 안되고 저 데이터 자체가 스트링으로 인식되어 통으로 매핑되었다. 쿼리 매핑 결과{ "data": "[{\"index\": 1}, {..