일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 프로그래머스
- 롬복사용시주의할점
- 생성자
- 정처기필기
- controller
- 자바
- 빌드자동화도구
- aws
- 서버
- CICD
- 무중단배포
- Java8
- 정처기
- 롬복
- 정보처리기사필기
- PULL방식아키텍쳐
- 어노테이션
- 롬북
- git
- 정보처리기사
- 알고리즘
- 정처기공부
- 빌드스크립트
- spring
- Docker
- 시계열디비
- 완전탐색알고리즘
- java
- Groovy문법
- API
- Today
- Total
목록Spring (12)
우당탕탕 개발일지
@Valid JSR-303 표준 스펙(자바 진영 스펙)으로서 빈 검증기(Bean Validator)를 이용해 객체의 제약 조건을 검증하도록 지시하는 애노테이션이다. 객체의 필드에 달린 애노테이션으로 편리하게 유효성검사를 제공한다. Spring Boot에서는 아래의 의존성만 추가해주면 @Valid 기능을 사용할 수 있다. implementation group: 'org.springframework.boot', name: 'spring-boot-starter-validation' Service에서 검증로직을 작성하여 확인할 수 있지만, DTO 또는 객체를 검증해야할 때 별도로 검증 클래스를 만들어 사용하는 것이 아니라 @Valid 애노테이션을 사용하여 간단하게 검증할 수 있다. 🔍 java.validatio..
트랜잭션(Transaction) 트랜잭션은 여러작업들을 하나로 묶는 단위로써 한 덩어리의 작업들은 모두 실행되거나, 모두 실행되지 않는다. 트랜잭션의 구성은 @Configuration, XML 기반 설정 말고도 애노테이션 기반으로 많이 사용한다. 애노테이션 방식은 선언적 트랜잭션 이라고 불린다. 트랜잭션 선언 시 해당 기능이 적용된 Proxy(프록시) 객체가 생성된다. 이렇게 생성된 프록시 객체는 @Transactional이 적용된 메소드가 호출될 경우, PlatformTransactionManager를 사용하여 트랜잭션을 시작하고, 정상 여부에 따라 Commit/Rollback 동작을 수행한다. 정리하면, 트랜잭션 처리를 JDK Dynamic Proxy 객체에게 위임하고 AOP를 통해 트랜잭션 처리 코..
게시판 만들기 구현 중 jwt를 이용해 토큰을 발급받고 이 토큰을 Spring Security로 인증 과정을 거쳐 권한이 있는 사용자만 API를 사용할 수 있게 구현하도록 만들었다. 이 때 사용한 jwtTockenFilter는 아래의 코드와 같다. ( 📃 OncePerRequestFilter 는 요청이 들어 올 때마다 해당 필터로 인증 과정을 거치게 하는 인터페이스이다. ) 이 때 인증과정에서 실패하거나 인증헤더(Authorization)를 보내지 않게되는 경우 401(UnAuthorized)라는 응답값을 받게 된다. 이를 처리해주는 로직이 바로 AuthenticationEntryPoint라는 인터페이스인데 이 인터페이스를 커스텀하여 원하는 응답값을 보여주게 하는 것이 CoustomAuthenticati..
애플리케이션의 인증, 인가 등의 보안 기능을 제공하는 스프링 하위 프레임워크 보안 관련 된 많은 기능들을 제공하기 때문에 편리하게 원하는 기능을 설계할 수 있음 🌈 Spring Security 적용 흐름 스프링 시큐리티는 인증과 권한에 대한 부분을 Filter 흐름에 따라 처리하고 있음 Filter는 Dispatcher Servlet으로 가기 전에 적용되므로 가장 먼저 URL 요청을 받지만, Interceptor는 Dispatcher와 Controller 사이에 위치한다는 점에서 적용 시기의 차이가 있다. 1. 사용자가 로그인 정보와 함께 인증 요청한다. 2. AuthenticationFilter가 요청을 가로채고, 가로챈 정보를 통해 UsernamePasswordAuthenticationToken의 인..
전역적으로 예외를 핸들링할 수 있는 어노테이션 전 계층에서 발생한 예외를 한 곳에서 관리하고 처리할 수 있게 도와주는 어노테이션 Custom Exception을 정의하여 사용 할 수 있음 @ControllerAdvice , @RestControllerAdvice 의 차이점 두 어노테이션의 차이는 @Controller 와 @RestController의 차이점과 동일 @RestController 는 @ResponseBody가 포함되어 있어 응답을 JSON 형식으로 내려줌 @ExceptionHandler 란? @ControllerAdvice, @RestControllerAdvice와 함께 사용되어지는 어노테이션 위 어노테이션이 적용된 Bean 내에서 발생한 예외를 받아 처리할 수 있는 기능 value 값을 가..
페이징(Pagingation) 기본적으로 게시판에서 작성된 포스트를 한 페이지에 모두 보여주기 보다 페이지를 나누어 쪽수별로 제공한다. 게시판의 포스트 뿐만 아니라 포스트에 작성 된 댓글이나 블로그 등도 마찬가지로 페이징처리를 하여 효과적으로 정보를 제공 한다. 이러한 페이징을 개발하기 위해 개발자가 직접 페이지 관련 쿼리를 파라미터로 받아 처리하는 방법도 있지만, JPA에서 제공하는 Pageable 객체를 사용하게 되면 보다 쉽게 페이징 처리를 할 수 있다. Pageable 사용 1 2 3 4 5 // 댓글 조회 @GetMapping("/{postId}/comments") public Response listComment(@PathVariable Long postId, Pageable pageable)..
ResponseEntity는 HttpEntity를 상속받는다. 데이터의 결과 값과 HTTP 상태 코드를 개발자가 제어할 수 있는 클래스이다. 클라이언트의 요청에 대한 응답 데이터가 포함되어있다. ResponseEntity에는 HttpStatus, HttpHeaders, HttpBody 를 포함한다. 상태코드, 헤더값, 결과값 등의 데이터를 프론트엔드에게 넘겨줄 수 있고, 에러코드도 자세히 설정해서 전달할 수 있다. 📌 ResponseEntity 구조 HttpEntity에서 상속받은 status, headers, body를 매개변수로 받는다. status : 상태 코드를 제어하여 넘김 http 상태 코드 headers : 요청/응답에 대한 요구사항 포함 body : 결과에 대한 값 포함 body와 head..
JWT(JSON Web Token) 당사자 간에 정보를 JSON 형태로 안전하게 전송하기 위한 토큰 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미 URL로 이용할 수 있는 문자열로만 구성 → HTTP 구성요소 어디든 위치할 수 있음 디지털 서명이 적용돼 있어 신뢰할 수 있음 서버와의 통신에서 권한 인가를 위해 사용 JWT 기반 인증은 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식 🌈 JWT 구조 JWT는 점(’.’)으로 구분된 아래의 세 부분으로 구성됨 헤더(Header) 검증과 관련된 내용을 담고 있음 완성된 헤더는 Base64Url 형식으로 인코딩 되어 사용됨 속성 alg : 해싱 알고리즘 지정 SHA256, RSA을 주로 사용하며, 토큰을 검..