👩🏻‍💻 Springframwork Mig 기록 - GitLab CI/CD 빌드 환경 맞추기 (feat. Gradle 프로필 빌드)
·
🖥️ DevOpѕ
인트로레거시 Spring Framework 기반 프로젝트를 Spring Boot 3와 Gradle 기반으로 고도화하면서GitLab CI/CD 빌드 환경을 맞춰야 하는 일이 생겼다.처음에는 단순히 “JDK 버전과 Gradle 버전만 알려주면 되는 일”이라고 생각했다.하지만 메일을 다시 읽고 .gitlab-ci.yml을 따라가다 보니내가 제대로 이해해야 하는 것은 빌드 도구 버전이 아니라소스가 어떤 서버에서 빌드되고, 어떤 프로필로 WAR가 만들어지고, 어떤 경로로 운영 서버까지 이동하는지였다.이 글은 사내 프로젝트의 실제 값은 모두 익명화하고, GitLab CI/CD와 Gradle 프로필 빌드를이해해 간 과정을 공개 가능한 수준으로 정리한 기록이다. 개발환경구분AS-ISTO-BEJavaJava 1..
📚 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 : 신입이 알아야 할 DB 성능·풀스캔·인덱스 9가지
·
🖥️ DevOpѕ
인트로 최근 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식을 읽으면서DB 성능과 인덱스에 대한 내용을 다시 정리하게 됐다.처음에는 DB 성능 문제가 생기면 “인덱스를 추가하면 되지 않을까?”라고 단순하게 생각했다.하지만 책을 읽고 실무 상황에 대입해보니, 인덱스는 정답이라기보다조회 패턴에 맞춰 설계해야 하는 도구에 가까웠다.특히 풀스캔, LIKE 검색, COUNT, 정규화와 비정규화,오래된 데이터 분리, 캐시, 장비 확장은 각각 따로 떨어진 주제가 아니었다.결국 하나의 질문으로 이어졌다.지금 이 API는 DB에서 읽을 필요가 있는 데이터만 읽고 있는가? 이번 글은 풀스캔을 줄이기 위해 내가 먼저 확인해야 할 DB 성능 항목 9가지를 정리한 기록이다.특정 회사 시스템을 그대로 설명한 글은 아니고, ..
👩🏻‍💻 Springframwork Mig 기록 : 화면에는 없는데 서버에는 필요한 값들 (feat. 세션 기반 파라미터)
·
🌱 Frαмeworĸ
인트로레거시 시스템을 Spring Boot 3 기반으로 옮기면서Controller 응답 방식과 세션 접근 방식을 함께 정리했다.처음에는 요청 파라미터만 잘 넘기면 기능이 그대로 동작할 거라고 생각했다.그런데 일부 기능에서 NullPointerException이 발생했다.이상했던 점은 화면에서 넘기는 값은 빠진 게 없어 보였다는 점이다.화면에는 없지만 서버 로직에는 꼭 필요한 값이 있었다. 바로 세션에서 꺼내 쓰던 사용자 식별값이었다.이번 글은 레거시 코드에서 암묵적으로 사용하던 세션 기반 값을 어떻게 추적했고마이그레이션 후에는 어떻게 NPE를 방어했는지 정리한 기록이다. 개발환경AS-ISTO-BEJava 1.7Java 17Spring Framework 4 계열Spring Boot 3 계열JS..
⚡️개발자가 자주 사용하는 NANO명령어 (알쓸나잡) : Vim 유저도 당황하지 않는 Nano 편집기 완벽 가이드 (설정부터 커스텀까지)
·
⚠️ Iɴғrα/KeyMαp👩🏻‍💻
시작에 앞서회사에서 리눅스 서버를 운영하다 보면 Vim이 손에 익어있음에도 불구하고,특정 배포판 환경이나 인프라 설정 때문에 Nano 편집기를 써야 하는 상황이 생기곤 합니다."Vim은 되는데 Nano는 왜 안 되지?"라고 답답해하셨던 분들을 위해Nano를 Vim처럼 강력하게 만드는 설정법과 필수 명령어들을 정리했습니다. 🙇‍♀️ 📊 한눈에 보는 에디터 비교: Nano vs Vim두 에디터의 가장 큰 차이는 '모드(Mode)'의 존재 여부입니다. 아래 표를 통해 나에게 맞는 도구를 확인해 보세요.구분Nano (직관적인 메모장)Vim (강력한 모달 편집기)핵심 컨셉Modeless: 보이는 대로 입력Modal: 모드 전환을 통한 조작진입 장벽매우 낮음 (메모장 수준)높음 (학습 곡선 존재)주..
⚡️개발자가 자주 사용하는 VIM 명령어 모음 : 알아두면 쓸데있는 Vim 잡학지식(알쓸빔잡)
·
⚠️ Iɴғrα/KeyMαp👩🏻‍💻
1. 모드 전환 (Mode Switching)명령어설명i커서 앞 삽입 모드 진입I줄 맨 앞에서 삽입 모드 진입a커서 뒤 삽입 모드 진입A줄 맨 끝에서 삽입 모드 진입o아래 줄 새로 추가 후 삽입 모드 진입O위 줄 새로 추가 후 삽입 모드 진입v비주얼 모드 (문자 단위 선택)V비주얼 라인 모드 (줄 단위 선택)Ctrl+v비주얼 블록 모드 (블록 단위 선택)Esc노멀 모드로 복귀2. 커서 이동 - 기본 (Basic Movement)명령어설명h왼쪽으로 이동j아래로 이동k위로 이동l오른쪽으로 이동0줄 맨 앞으로 이동^줄 첫 번째 비공백 문자로 이동$줄 맨 끝으로 이동gg파일 맨 처음으로 이동G파일 맨 끝으로 이동{숫자}G특정 줄 번호로 이동 (예: 10G)3. 커서 이동 - 단어 (Word Movement)명령..
🖥️ 실무 : StrictHttpFirewall이 동작하는 원리 (feat. PROPFIND, WebDAV) | PROPFIND가 뭐예요 ?
·
🖥️ DevOpѕ
작년 10월 말부터 진행했던 고도화 프로젝트가 개발 서버에서 통합 QA를 진행하고 있다.그리고 우리 프로젝트는 네이티브 개발자 분들이 WebView 사용과 API호출 등 연결을 해주고 있다.그래서 개발서버의 QA중인 고도화 서비스는 네이티브 개발자 분들 , 그리고 관계사 관리자 분들이 요즘 사용해 주고 있어서매일 개발서버 로그를 검수하며 문제는 없는 지 체크를 해보고 있다.오늘도 로그를 보면서 Exception 걸린 부분이 있는지 검토하고 있었다.그러다 PROPFIND 라는 Exception 문구가 있는 게 아닌가?이건 또 뭐다냐😟 하면서 구글에 검색해 보았다.내용을 알게 되고 서비스 운영 하는 개발자 분들이 알고 있으면 좋은 내용인 것 같아 오늘도 포스팅을 써본다🙋🏻‍♀️ 주제 정의S..
👩🏻‍💻 Springframwork Mig 기록 : OKTA SAML 로그인 무한 루프 디버깅기 (feat. 백엔드·프론트 환장의 콜라보)
·
🌱 Frαмeworĸ
INTROSpring Framework 4에서 Spring Boot 3으로 마이그레이션하는 고도화 프로젝트 중OKTA SAML 인증 연동을 붙이고 테스트 서버에 배포했다.설레는 마음으로 로그인을 시도했는데, 화면이 계속 새로고침되며 멈추지 않았다.처음에는 "배포를 잘못했나?" 싶어서 서버를 재시작해봤고, 로그를 다시 확인해봤다. 그런데 아무리 봐도 배포 자체는 정상이었다.Fiddler 네트워크 로그를 열어서 트랜잭션 흐름을 직접 추적해보고 나서야 원인이 보였다.백엔드에서 터진 HTTP 500 에러와, 그 에러 상황을 전혀 고려하지 않은 프론트엔드 리다이렉트 로직이 서로 맞물려 만들어낸그야말로 환장의 콜라보였다.처음에는 백엔드 문제라고 확신했는데, 백엔드를 고쳐도 루프는 계속됐다.두 레이어를 동시에 수정하..
🖥️ 실무 : GCP to OCI 이전 구축기 및 504 Gateway Time-out 해결기 (feat. Swap Memory)
·
🖥️ DevOpѕ
INTRO여느 때와 다름없는 평화로운 금요일결혼식을 한다고 2년 가까이 길었던 머리를단발로 싹-둑 자르고 파마를 하러 미용실에 방문했다.꾸벅꾸벅 졸고 있던 찰나, 휴대폰이 '징- 징-' 울렸다.무심코 화면을 켰는데 순간 내 눈을 의심했다.구글 클라우드 ~~~ 52,150원 결제 완료 카드사 결제 알림이 떠 있었다. "대체 내가 뭘 돌렸길래 5만 원이나 결제가 된 거지?"머리에 약을 바른 채 구글 클라우드 콘솔 앱을 켜고 한참을 뒤적거리며 찾아봤다.네트워크 트래픽 과금인가? 무료 티어 기준을 초과한 사용량이 무엇 때문인지 분명치 않았다.안 그래도 기존에 사용하던 GCP 무료 티어 서버는 너무 버벅거리고접근할 때마다 느려서 개발하고 테스트하기가 여간 불편한 게 아니었다.이 요금 과금 문자를 시작으로 평소 자..
🌱 인프런(인프랩) 방문기 | 공약은 반드시 지킨다 (feat. 카파도키아 파우치)
·
☃︎ Dιαry
공약의 시작2월 인프런 챌린지가 한창 진행 중이던 어느 날나는 생각나는 데로 공약을 걸었다."만약 제가 상금을 받게 되면, 3월 신혼여행에서 도라님 선물 사올게요." 챌린지를 열심히 하다 보면 그런 기분이 드는 순간이 있다.이걸 해낼 수 있을 것 같다는 근거 없는 자신감.그래서 던진 공약이었는데, 상금도 받고 꿈도 꾸지 못한 MVP가 되어버렸다.MVP가 되면 인프런 수강권 6개월권을 받는데정말 받아버렸다 !!!!!!!!!기쁘기도 했지만 솔직히 공약이 더 머릿속에 남았다.뭘 사다드려야 하지?!🥹 카파도키아에서 파우치를 샀다신혼여행지는 튀르키예였다. 인천 ➡️ 이스탄불 ➡️ 카파도키아 ➡️ 이스탄불 ➡️ 인천열기구 타고 하늘 뜨는 곳, 드라마 세트장 같은 절벽 마을들.정신없이 다니면서도 머..
🖥️ 실무 : Referer로 망분리를 시도했다가 배운 것들 (feat. Stateless vs Stateful)
·
🖥️ DevOpѕ
⟡ 인트로OKTA로 인증 방식을 전환하면서 기존 SSO 인증서가 담당하던 내/외부망 구분 기능이 사라졌다.처음에는 HTTP Referer 헤더를 이용해 내부망 사용자를 판별하려 했으나,즐겨찾기 접속·OKTA 리다이렉트·forward 등 실제 운영 환경에서 Referer가 소실되는 경우가 너무 많아정상 내부망 사용자까지 차단되는 문제가 발생했다.결국 Stateless한 Referer를 버리고, 서버가 상태를 기억하는 세션 플래그(Session Flag) 방식으로 전환하여 문제를 해결했다. 이 글은 그 과정에서 Referer가 무엇이고 왜 접근 제어의 신뢰 기반이 될 수 없는지를 정리한 기록이다. ⟡ 개발환경AS-IS TO-BESSO PKI 인증서 기반 내/외부 구분OKTA SAML 인증 기반인증서..
🖥️ 실무 : IP:8080은 이제 그만! 내 Spring Boot 프로젝트에 도메인과 HTTPS(무료) 자물쇠 달아주기🔒
·
🖥️ DevOpѕ
🤔 배포는 했는데.. 뭔가 아쉽지 않나요?열심히 만든 Spring Boot 애플리케이션을 AWS나 GCP 같은 클라우드 VM에 배포하고 나면, 이런 주소를 받게 됩니다.👉 http://123.45.67.89:8080동작은 잘 하지만, 뭔가 진짜 서비스 같은 느낌이 안 듭니다. IP 주소 외우기도 힘들고, 접속하면 브라우저에 '주의 요함(안전하지 않음)'이라는 무시무시한 빨간 글씨가 뜨죠.오늘은 Nginx(리버스 프록시)와 Let's Encrypt(무료 SSL 인증서)를 이용해 내 프로젝트에 멋진 커스텀 도메인을 연결하고, 안전한 HTTPS 초록색 자물쇠를 다는 방법을 정리해보겠습니다! 🚀 🤖 전체 아키텍처: 어떻게 연결될까?우리가 구현할 통신 흐름은 다음과 같습니다.[사용자]..
👩🏻‍💻 Springframwork 실무 : JSP에서 JavaScript로 데이터 토스 ! ObjectMapper로 해결한 이야기
·
🌱 Frαмeworĸ
배경 및 문제 정의Spring MVC 프로젝트에서 JSP 화면의 JavaScript에 서버 데이터를 전달해야 하는 상황이 생겼다. Controller에서 Model에 Java 객체를 담아 넘겼는데, JavaScript에서 이 데이터를 인식하지 못하는 문제가 발생했다.Java 객체를 그대로 Model에 담으면 JavaScript는 [MemberDto@abc123] 같은 toString() 결과만 볼 수 있었고,이를 JSON 형태로 변환해야 정상적으로 사용할 수 있다는 걸 알게 됐다.결국 Jackson 라이브러리의 ObjectMapper를 활용해 Java 객체를 JSON 문자열로 변환하는 방식으로 해결했다. 최종 해결 요약 Jackson 라이브러리의 ObjectMapper.writeVa..
김춘덕⸝ဗီူ⸜
'분류 전체보기' 카테고리의 글 목록