프로젝트 초기에 쉽게 간과할 수 있는 것 중 하나가 API 응답 형식의 일관성이라고 생각한다. 기능 구현에 집중하다 보면 어떤 API는 String 값을 반환하고 어떤 API는 Map, 어떤 API는 엔티티를 반환하는 상황이 발생할 수 있다. 이런 응답 파편화는 프론트와의 협업 비용 증가와 예외 처리의 일관성을 해칠 수 있다. 이런 문제를 해결하기 위한 ResponseEntity, ApiResponse에 대해 알아보자. ResponseEntity: HTTP 응답 봉투 Spring MVC에서 ResponseEntity는 단순 반환 타입이 아니라 HTTP 응답 자체를 표현하는 객체이다.return ResponseEntity.ok(body); ResponseEntity의 핵심 역할 HTTP 상태 코드 명시..
API
러닝 앱 백엔드를 개발하면서 JWT 토큰 발급, 카카오 OAuth, 복잡한 보안 설정을 매번 거쳐서 API를 테스트하기엔 너무 번거로웠다. 특히 @AuthUser AuthenticatedUser user 파라미터를 사용하는 Controller들을 테스트할 때마다 실제 JWT 토큰을 만들어야 하는 상황이었다. 따라서 메인 로직은 건드리지 않으면서 테스트만을 위한 postman 프로필을 만들어 Mock 인증으로 우회하는 방법을 사용했다. 겪으면서 알게 된 것들이 꽤 있으므로 공유해보겠다. 구조📁 config ├── SecurityConfig.java (메인 보안 설정 - JWT 기반) ├── SecurityConfigPostman.java (테스트용 보안 설정 - Mock 기반) ├── Web..
지금까지 기능 구현, 단순한 개발에 대해 중점을 잡고 공부를 했었는데 이번에 꽤 규모가 큰 프로젝트를 하게 되었다. 기획자와 디자이너가 없어야 하고 팀원은 3명이 최대인 것이 조건이므로 백엔드 두 명, 프론트 1명 이렇게 해서 프로젝트를 하게 되었다. 겨우 기획과 디자인을 마치고(진짜 디자이너인가 싶을 정도로 디자인이 만족스럽게 나왔다) 프로젝트를 시작했다. 아직 진행 초기지만 백엔드를 담당하면서 프론트와 제대로 된 소통을 하기 위해 견고한 API 명세서를 작성하는 것이 프로젝트 완성에 얼마나 중요한 요소인지 깨달았기에 내가 공부한 것들을 여기에 풀려고 한다. API 명세서의 필요성 및 작성 원칙 여러 팀원이 함께 개발하거나 시간이 지난 후에 서비스를 확장하려면 API를 문서화해 두는 것이 매우 ..
오늘은 네이버, 카카오, 구글 소셜 로그인을 구현한 과정을 공유하러고 한다. 이번 게시물엔 로그인 창이 정상적으로 뜨는 것까지 구현하고 미가입 회원 회원가입 처리와 db 저장 로직을 다룰 것이다. 로그인은 총 4가지 이다. 1. 일반 로그인/회원가입 (세션 기반)사용자가 이메일과 비밀번호로 직접 회원가입하고 로그인할 수 있는 전통적인 방식이다. 세션을 통해 로그인 상태를 유지하며, 서버 측에서 세션 정보를 관리한다. 2. 소셜 로그인 (Spring Security OAuth2)구글 (Google): 가장 범용적으로 사용되는 소셜 로그인카카오 (Kakao): 한국 사용자들이 선호하는 플랫폼네이버 (Naver): 국내 사용자 접근성을 위한 선택3. 역할 기반 대시보드 (USER/ADMIN)로그인한 사용자의 ..
최근 개인 프로젝트를 하나 하고 있는데 지도 api를 가져와서 마커 표시를 하고 싶어서 여러 정보를 찾아보게 됐다. 대한민국 인구감소 지역을 2D 지도에 시각화하는 기능을 구현해봤다. Leaflet.js와 VWorld API를 조합해서 지도 위에 마커를 표시하고 지역별 데이터를 확인할 수 있도록 했다. Leaflet.js로 지도 초기화 function initMap() { const koreaCenter = [36.5, 127.5]; map = L.map('map-container', { center: koreaCenter, zoom: 7, minZoom: 6, maxZoom: 13, zoomControl: false // 기본 ..
API??? API란 Application Programming Interface의 약자로 다른 시스템과 데이터를 주고받거나, 프로그램을 실행할 수 있도록 도와주는 역할을 하며, 이를 통해 다양한 서비스를 개발할 수 있다. 특히 인터넷을 기반으로 하는 웹 서비스에서 많이 사용된다. 간단한 예를 들어보자. GET POST PUT DELETE 에 대한 건 들어봤을 것이다. GET은 서버로부터 정보를 요청하기 위해 사용된다. 주로 조회 작업에 사용된다. 보통 URL에 파라미터를 포함하여 요청을 보낸다. POST는 서버에 데이터를 전송하기 위해 사용된다. 주로 생성 작업에 사용된다. 클라이언트가 서버로 데이터를 전송하고 서버는 데이터를 받아 처리하고 응답한다. PUT은 서버에 존재하는 데이터..