![[Tool/Swagger] 문서 작성법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FLsj4Y%2FbtsIReIMSo9%2FAAAAAAAAAAAAAAAAAAAAADq0TjTilqPNV4Aw41UVM_1pN9M1imVIyWKbmTKI6bQ6%2Fimg.gif%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D6kv56%252BYONPsvJRcBFoBdQwMObuk%253D)
Swagger 버전 및 의존성Springdoc-openapi를 사용한OpenAPI 3.0 스펙을 바탕으로 글을 작성했다.gradle의존성은 다음과 같다.implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' 1. Operation 설정 및 모델 객체 필드 설명@Operation(summary = "User login", description = "사용자 입력해보세용", requestBody = @RequestBody(content = @Content(mediaType = "application/json", schema = @Schema(implementation = UserSwagger.class))))@Po..
![[Tool/Git] git 브랜치 관리법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcRnUU6%2FbtsIQe2Fs9J%2FAAAAAAAAAAAAAAAAAAAAAMdvICol7QlWK9mh9Lw2pWgu2dHgZHBeYw8f7DP9EZys%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D8cBQ8ye5D%252BuV%252F%252BDe%252Bh%252F5UvjaZm8%253D)
1. branch 생성1-1. 로컬 저장소 최신 상태로 업데이트# 원격 저장소의 변경 사항을 로컬 저장소에 반영git pull origin main로컬 저장소를 최신으로 하고 branch를 생성해야 병합을 최대한 줄일수 있음으로 최신화1-2. 로컬 저장소 최신 상태로 업데이트# main 브랜치로 이동git checkout main# 새로운 브랜치 생성git checkout -b feature/branch새로운 브랜치를 생성하고 이동 feature/branch에는 자신이 생성할 branch 이름을 적는다. error/redis 이런식으로 적어도 된다.main branch에서 branch를 생성해야 하는것이 아니라면 checkout은 건너 뛰어도 된다.1-3. 새로운 브랜치에서 작업만들려고했던 기능을 개발하..
![[DB/Redis] Spring 연결](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fcde1CU%2FbtsIQdQcNfO%2FAAAAAAAAAAAAAAAAAAAAAPCgPTrT67Vz8MAXH7Mixxvy2QAyTlF5MPQWHNIZK_Sr%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3Dqm%252FuApGTxK6oxIJnT5F%252BMyA%252B7bs%253D)
@Configurationpublic class RedisConfig { @Value("${REDIS_HOST}") private String host; @Value("${REDIS_PORT}") private Integer port; @Value("${REDIS_PASSWORD}") private String password; @Bean public LettuceConnectionFactory redisConnectionFactory() { RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(); configuration.setHostName(hos..
![[Tool/Swagger] spring + swagger customizing + anotation custormizing](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcErBoN%2FbtsIQLq68Qh%2FAAAAAAAAAAAAAAAAAAAAALHC25tBqPvXEctpP4TpxQKN5KG0KyCssLjCztG4QVIv%2Fimg.gif%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D6FWvgu9Sxu6GwSc8r6SBpLgSxSI%253D)
1. 서론이번 글은 보통의 spring sagger 연결 방법이 아니다.@ApiOperation(value = "ID로 사용자 가져오기") @ApiResponses(value = { @ApiResponse(code = 200, message = "성공적으로 사용자 정보를 가져왔습니다"), @ApiResponse(code = 401, message = "리소스를 볼 권한이 없습니다"), @ApiResponse(code = 403, message = "접근이 금지되었습니다"), @ApiResponse(code = 404, message = "요청한 리소스를 찾을 수 없습니다") })@GetMapping("/users/{id}")public User..
![[Spring/기초] api 공통 응답 포맷 + 예외 처리 합치기 (2)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fs9GmE%2FbtsIAZp73Qw%2FAAAAAAAAAAAAAAAAAAAAAImSNWSn5GI-IZQIDdS0UAkXzXlbarFHyOUWunWDMZvG%2Fimg.gif%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DzVY3M7Qe8IMIJI5uoox9HtQZcmI%253D)
공통 응답 포맷을 만드는 이유일관된 응답 형식 유지모든 API 응답을 일관된 형식으로 유지할 수 있다.이는 전체적인 프로그램의 유지 보수성을 높인다.로깅 및 모니터링같은 방식으로 응답을 하니 로깅 및 모니터링이 더 쉬워진다.보안 및 데이터 검증응답을 전역적으로 처리함으로써 민감한 정보를 숨기거나 데이터를 검증하는 등의 보안 작업을 일관되게 수행할 수 있다.ResponseBodyAdvice 공통 응답 포맷1. 공통 응답 코드 형식 정하기public interface ResponseCode { String name(); HttpStatus getHttpStatus(); String getData();}클라이언트에게 공통 응답 코드를 어떤 형식으로 보내줄 것인지 정의한다.@Getter@Requ..
![[Spring/기초] 전역 예외 처리 + Test Code (1)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fblt53y%2FbtsIy55d5Fy%2FAAAAAAAAAAAAAAAAAAAAAH8-BqhFdGkOKpG1jKPFZLJ2KFBOkmBTdep53yFjky-o%2Fimg.gif%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DUaq7Yw9NqRce6sEq%252BHLZa%252BM7y2g%253D)
전역 예외 처리를 해야하는 이유Spring은 에러 처리를 위한 BasicErrorController를 구현해뒀다. 그래서 예외가 발생한다면 기본적으로 /error로 에러 요청을 다시 전달하도록 WAS 설정을 해놨다.이것은 Springboot의 WebMvcAutoConfiguration을 통해서 자동으로 이루어진다. 일번적 요청의 흐름은 다음과 같이 진행된다.WAS(톰캣)필터서블릿 (디스패처 서블릿)인터셉터컨트롤러예외가 발생했을 때 별도의 처리를 하지 않았다면 WAS까지 에러가 전달된다. 이때 WAS는 애플리케이션에서 처리를 못하는 예외라 exception이 올라왔다 판단, 대응 작업을 진행한다.컨트롤러(예외 발생)인터셉터서블릿 (디스패처 서블릿)필터WASWAS는 스프링 부트가 등록한 에러 설정에 맞게 요..