본문 바로가기

backend

(14)
[Spring Boot] 서버 로그(로깅) 완벽 가이드 초보 개발자와 실무 개발자를 구분하는 가장 확실한 기준 하나를 꼽으라면 바로 '로깅(Logging)을 어떻게 다루는가?'입니다. 대학생이나 학원 시절 프로젝트에서는 에러가 나거나 변수 값을 확인하고 싶을 때 무조건 System.out.println("바로여기")를 쓰곤 했었는데요. 하지만 실제 운영(Production) 서버에서 System.out.println을 쓰면, 치명적인 성능 저하(블로킹 I/O)가 발생할 뿐만 아니라, 서버가 재시작되는 순간 콘솔에 찍힌 글자들이 흔적도 없이 증발해 버립니다.어젯밤 11시에 결제가 실패해서 고객센터로 항의가 들어왔는데, 원인을 찾으려고 보니 로그 기록이 완전히 날아가 있다면 개발자는 등골이 오싹해질 수밖에 없습니다. 이번 글에서는 장애를 역추적하는 Spring ..
[Spring Boot] application.yml 완벽 가이드 (+ Profile 환경 분리) 스프링 부트(Spring Boot)로 개발을 진행하다 보면 필연적으로 데이터베이스 접속 IP, 비밀번호, 외부 결제 API 연동 키(Key) 등 수많은 '설정(Configuration) 데이터'를 다루게 됩니다. 초보 개발자들은 흔히 자바(Java) 코드 안에 String dbUrl = "jdbc:mysql://localhost:3306..." 처럼 값을 하드코딩(Hard-coding)하는 실수를 저지릅니다. 이렇게 코드를 짜면, 내 노트북(로컬)에서는 잘 돌던 프로그램이, IP가 완전히 다른 실제 라이브 운영(Production) 서버에 배포되는 순간 데이터베이스를 찾지 못하고 펑 터져버립니다. 배포할 때마다 소스코드를 열어서 주석 처리하고 IP를 고쳐서 빌드하실 건가요? 이런 원시적인 작업을 우아하게..
[Spring Boot] Spring Initializr 실무 의존성 설계 가이드 집을 지을 때 가장 중요한 것은 화려한 인테리어가 아니라 탄탄한 설계도와 뼈대(Foundation)입니다. 스프링 부트(Spring Boot) 개발 역시 마찬가지입니다. 처음에 프로젝트 뼈대를 어떻게 잡고, 빌드 도구를 무엇으로 선택하며, 어떤 라이브러리(Dependencies)들을 담고 시작하느냐에 따라 1년 뒤 프로젝트의 유지보수 난이도가 천차만별로 갈라집니다. 다행히도 스프링 진영은 개발자들이 손쉽게 뼈대를 짤 수 있도록 Spring Initializr(start.spring.io)라는 강력한 웹 기반의 제너레이터를 제공합니다. 실무에서 100% 통용되는 프로젝트 구조 설계와 필수 의존성(Dependencies) 세팅 노하우에 대하여 다뤄보겠습니다.1. Project, Language, Boot V..
[Spring Boot] 스프링부트 3 시작하기 자바(Java) 백엔드 생태계에서 Spring Framework는 절대적인 표준입니다. 수많은 엔터프라이즈 기업과 스타트업이 모두 스프링을 기반으로 거대한 서비스를 구축하고 있습니다. 그러나 과거의 레거시(Legacy) Spring은 초기 세팅이 너무나도 고통스러웠습니다. XML 파일에 빈(Bean)을 등록하고, 톰캣(Tomcat) 서버를 별도로 설치해서 .war 파일을 배포하고, 수십 개의 의존성 버전이 꼬이는 이른바 'XML 지옥(XML Hell)'과 '의존성 지옥(Dependency Hell)'을 겪어야만 했습니다.이러한 고통을 완벽하게 해결하고 개발자가 오직 '비즈니스 로직(Business Logic)' 작성에만 집중할 수 있도록 혁신을 일으킨 구원자가 바로 Spring Boot(스프링 부트)입니..