개발 5

🤦🏻‍♀️고민하기 - Spring Security_API 경로에 따른 인증 및 역할 관리(1)

🌑 상황최근 팀 기능을 개발하면서 각 기능별로 보안 설정에 대해 고민해 보게 되었다.특히, API의 보안 설정을 어떻게 관리할지에 대해 여러가지 방법을 검색해 보고 고려하게 되었는데 가장 대표적인(?) API 네이밍 컨벤션과 Spring Security를 활용하는 방법 중에서 고르기로 했다. 🌗 과정API 네이밍 컨벤션가장 먼저 생각이 든건 API 네이밍 컨벤션을 통해 인증이 필요한 경로를 구분 짓고 싶었다.예를 들어, /api/team/secure/** 이런 식으로 인증이 필요한 경로라는 것을 config 파일에 등록하여 직관적으로 표현하는 것이 한눈에 보기 좋다는 생각이 들었다. 하지만 이 방식으로 진행했을 때의 단점은모든 보안 요구상을 경로에 반영하면 복잡해질 위험이 있다.역할별 접근 권한까지 ..

[spring boot] - Swagger로 API 문서화하기

💁🏻‍♀️ 나의 상황현직 개발자에게 Swagger UI를 현직에서도 많이 사용한다는 정보를 듣게 되어서, 이번 팀 프로젝트에도 적용해 보기로 마음먹었다! 1. Swagger란 무엇인가?Swagger는 RESTful API를 설계, 구축, 문서화 및 소비하기 위한 오픈 소스 프레임워크이다.Swagger는 API가 어떻게 작동하는지에 대한 명확한 이해를 제공하며, 개발자와 클라이언트 간의 의사소통을 개선하여 API의 품질을 높이는 데 도움을 준다. 2. Spring Boot에서 Swagger 설정하기2.1. 의존성 추가먼저 build.gradle 파일에 Swagger 관련 의존성을 추가한다. Spring Boot 3.x 버전부터는 springdoc-openapi 라이브러리를 사용하는 것이 권장된다.dep..

[개발] - MapStruct를 사용하여 매핑 구현하기

Spring Boot 애플리케이션에서 엔티티(Entity)와 DTO(Data Transfer Object) 간의 데이터를 변환할 때, 수동으로 변환하는 대신 Mapper를 사용하면 코드의 가독성을 높이고 유지보수를 용이하게 할 수 있다.이를 위해 흔히 사용되는 라이브러리가 MapStruct이다.(이전에는 항상 수동으로 하나하나 엔티티와 DTO를 매핑했었는데 이번에 새롭게 MapStruct를 알게 되어 사용해 보게 되었다.) 🩵 MapStruct란? MapStruct는 자바 애플리케이션에서 객체 간의 매핑을 간편하게 해주는 코드 생성기이다. 컴파일 타임에 매핑 코드를 생성하여 런타임 오류를 줄이고, 매우 효율적인 매핑 구현을 제공한다.Spring Boot와의 통합도 쉽게 이루어지며, 주로 엔티티를 DTO..

🤦🏻‍♀️고민하기 - [개발환경] 포크 앤드 풀(Fork and Pull) 워크플로우

🫧 나의 상황이전에 다른 프로젝트를 진행할 때는 항상 원격 저장소에서 git clone만 해서 프로젝트를 진행했었다.clone 한 후에 각자의 개발 브랜치를 생성하여 해당 브랜치 안에서만 개발과 merge 등을 했었는데, 이번에는 처음 해보는 방식으로 github를 활용하게 되었다.💡포크 앤 풀(Fork and Pull) 워크플로우란?소프트웨어 개발에서 협업은 필수적이다.특히, 팀 프로젝트에서는 여러 개발자가 함께 작업하는 것이 일반적이고이때, 각자의 작업을 안전하고 효율적으로 관리하기 위해 사용하는 대표적인 협업 방식이 바로 포크 앤드 풀(Fork and Pull) 워크플로우라고 할 수 있다.  1. 팀 깃허브 페이지 생성하기포크 앤드 풀 워크플로우를 시작하기 위해서는 우선 팀 깃허브 페이지를 설정..

[개발] Post Men 첫 사용 _ 여러가지 오류들

🛤️현상 : Could not send request Cloud Agent Error: Can not send requests to localhost. Select a different agent.라는 오류가 포스트맨에서 발생했고 ⭐원인 : 포스트맨에서 localhost로 요청을 보내려고 할 때 발생하는 문제입니다. Cloud Agent는 localhost로의 요청을 지원하지 않기 때문에 해당 오류가 발생합니다. 🗝️해결 : @CrossOrigin(origins = "http://localhost:3000", methods = {RequestMethod.OPTIONS, RequestMethod.DELETE, RequestMethod.GET, RequestMethod.POST, RequestMethod.P..