항해 99/Spring (49) 썸네일형 리스트형 LogBack을 통한 로그 관리 로깅을 하는 이유 로깅 : 시스템이 동작할 때 시스템의 상태 및 동작 정보를 시간 경과에 따라 기록하는 것을 의미한다. 로깅을 통해 할 수 있는 것 개발 과정 혹은 개발 후에 발생할 수 있는 예상치 못한 애플리케이션 문제를 진단할 수 있다 다양한 정보를 수집할 수 있다 사용자 로그의 경우 분석 데이터로도 활용할 수 있다 Reference https://tecoble.techcourse.co.kr/post/2021-08-07-logback-tutorial/ 로거 선택 기준 가장 많이 사용되는 로거 Logback java.tuil.logging Log4j2 Log Back의 성능이 전반적으로 가장 탁월하기 때문에 대체로 LogBack을 선택했다. Log Back이란? Slf4j의 구현체로 Spring Boo.. Jwt Access Token과 Refresh Token Refresh token의 필요성 Access Token만을 통한 인증 방식의 문제는 제 3자에게 탈취당할 경우 보안에 취약하다는 점임. 엑세스 토큰은 발급 된 이후, 서버에 저장되지 않고 토큰 자체로 검증을 하며 사용자 권한을 인증하기 때문에, 엑세스 토큰이 탈취되면 토큰이 만료되기 전까지, 토큰을 획득한 사람은 누구나 권한 접근이 가능해짐 JWT는 발급한 후 삭제가 불가능하기 때문에, 접근에 관여하는 토큰에 유효시간을 부여하는 식으로 탈취 문제에 대해 대응해야 함 토큰의 유효기간을 짧게하면 토큰 남용을 방지하는 것의 해결책이 될 수 있지만, 유효기간이 짧은 토큰의 경우 그만큼 사용자는 로그인을 자주해서 새롭게 Token을 발급받아야 하므로 불편하다는 단점이 있음. 유효기간을 짧게 하면서 위의 문제를 .. REST API URI 규칙 REST API URI 설계 규칙 모든 필수적인 자원 정보들을 소통하는데 있어서 가독성 있고 규칙에 위반되지 않은 URI 작성을 위한 규칙 URIs REST API는 자원의 주소를 나타내기 위해 Uniform Resource Identifiers(URIs)를 사용함 Client들은 웹의 연결 패러다임을 따라야 하며 URI를 불확실한 식별자로 대우해야 함, REST API 디자이너들은 잠재적 Client 개발자들에게 REST API의 자원 정보를 전달할 수 있는 URI를 만들어야 함 #1. URI에 후행 슬래시(주소 마지막에 붙이는 /)는 포함되지 않아야 됨 혼란을 줄 수 있고 의미가 없는 후행 슬래시를 URI 경로의 마지막에 포함시키지 않는 것은 규칙 중 가장 중요한 것 중 하나임. REST API는 후.. ExceptionHandler 예외 처리는 애플리케이션을 만드는데 매우 중요한 부분을 차지함, Spring 프레임워크는 다양한 에러 처리 방법을 제공함 Spring의 기본적인 예외 처리 @RestController @RequiredArgsConstructor public class ProductController { private final ProductService productService; @GetMapping("/product/{id}") public Response getProduct(@PathVariable String id){ return productService.getProduct(id); } } 위 컨트롤러의 getProduct에서 NoSuchElementFoundException 예외가 발생했다면 접속한 환경에 따.. QueryDSL QueryDSL - 래퍼런스 문서 QueryDSL 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해주는 오픈소스 프레임워크. QueryDSL이 제공하는 Fluent API를 이용해 코드 작성의 형식으로 쿼리를 생성할 수 있게 도와줌. 사용이유 Spring Data JPA가 기본적으로 제공해주는 CRUD 메서드 및 쿼리 메서드 기능을 사용하더라도, 원하는 조건의 데이터를 수집하기 위해서는 필연적으로 JPQL을 작성하게 됨. 간단한 로직을 작성하는데 큰 문제는 없으나, 복잡한 로직의 경우 개행이 포함된 쿼리 문자열이 상당히 길어지게 되고, JPQL 문자열에 오타 혹은 문법적인 오류가 존재하는 경우 정적 쿼리가 아닐 시 런타임 시점에서 에러가 발생함. 위 같은 문제를 해소하기 위해 QueryDS.. Entity와 DTO의 분리 Dto와 Entity를 분리해서 사용하는 이유 DTO와 Entity 구분 DTO(Data Transfer Object) : 클라이언트와 서버 간 데이터 전송을 위해 설계된 객체 Entity : 데이터베이스에 저장되는 데이터 객체로, 데이터베이스와 직접적으로 연결 Entity를 직접 반환할 경우 생기는 문제점 엔티티 구조 변경 시 발생하는 문제 요구사항이 변경되어 엔티티 필드 이름이 변경 될 경우, API 스펙이 변경되어 추가 작업이 요구된다. 효과적인 유지 보수가 어려워 시간과 비용이 증가함 필요한 데이터만 전송하기 어렵다 엔티티를 직접 반환하면 엔티티에 존재하는 모든 데이터가 반환 됨(트래픽이 증가할 수 있으며 성능 및 비용면에서도 현저한 차이를 가져올 수 있음) 사용자가 필요로하는 데이터만 전송하기 .. lombok 주의 사항 Lombok 사용 시 주의 사항 Lombok은 자바 컴파일 시점에서 특정 어노테이션으로 해당 코드를 추가할 수 있는 라이브러리이다. 간편한 코드 작성, 가독성, 유지 보수에 많은 도움이 되지만 편리한 만큼 잘못 사용하기 쉬운 것이 Lombok이다. @Data 사용 지양 @Data는 @ToString, @EqualsAnHashCode, @Getter, @Setter, @RequiredArgsConstructor을 모두 포함하는 강력한 어노테이션임. @Data 사용으로 인해 발생할 수 있는 문제점 1. 무분별한 Setter 남용 Setter는 그 의도가 분명하지 않고 객체를 언제든지 변경할 수 있는 상태가 되어서 객체의 안정성이 보장받기 힘들다. 불필요한 변경 포인트를 제공하지 않음으로써 안정성을 취할 수 .. Controller, RestController 차이 Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있음 차이점 @Controller의 역할은 Model 객체를 만들어 데이터를 담고 View를 찾는 것이지만, @RestController는 단순히 객체만을 반환하고 객체 데이터는 JSON 또는 XML 형식으로 HTTP 응답에 담아서 전송함 @Controller와 @ResponseBody를 사용하여 만들 수 있지만 이러한 방식은 RESTful 웹서비스의 기본 동작이기 때문에 Spring은 @Controller와 @ResponseBody의 동작을 조합한 @RestController을 도입 Spring의 Controller 동작방식 1. @Controller 이해하기 Controller로 view 반환.. 이전 1 2 3 4 5 6 7 다음