같은 url도 get,post로 나눠서 보여줄 거 다르게 할 수 있음
| 구분 | 어노테이션 | 설명
SpringDoc : 자동 문서화를 위한 라이브러리implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.8.13")https://mvnrepository.com/artifact/org.spri
@ControllerAdvice 어노테이션을 단 GlobalExceptionHandler 클래스를 만들어서 예외 발생시 잡을 수 잇게 할 수 있다.그러나 이러면 예외가 많아지면 처리하기 힘든데, 이는 RuntimeException을 extends 해서 처리 할 수 있다
적절한 파라미터를 뽑아내는 것은 중요하다...다음의 방법들이 있다@RequestHeader("뽑아올 파라미터 이름")@RequestBody("뽑아올 파라미터 이름")@PathVariable@RequestParam("뽑아올 파라미터 이름")
생성 시점: 애플리케이션 실행 시 (컨테이너 초기화 때)유지 범위: 애플리케이션 전체 동안 하나만 유지모든 요청, 세션에서 같은 인스턴스를 공유보통 서비스, 레포지토리 빈을 이렇게 둠@Servicepublic class UserService { // 애플리케이션
이렇게 선언하고으로 사용
다음 yml에 선언한 상수에 대한 코드를 보자여기서 costom.nums.num2는 괜찮다. 어차피 yml은 문자열로 본다. 문제는 costom.nums.num1다. 우리가 만약 이걸 시간으로 쓴다면 밀리세컨드로 쓰니 하루짜리 기간이다.절대 24 딸랑 넣으면 안된다.
CORS(교차 출처 리소스 공유)는 웹 브라우저의 보안 정책인 동일 출처 정책(Same-Origin Policy)을 완화하여, 다른 출처(도메인, 스킴, 포트)의 리소스에 접근할 수 있도록 서버가 브라우저에 권한을 부여하는 메커니즘이다.즉, 외부에서 api 요청할 때,
요청 처리에 실패했을 때, 길패 코드를 보내는 것은 중요하다.그렇다면 어떻게 실패코드를 정의하고 사용할까?실패 코드를 정의 할 때는 enum을 사용하면 좋다.enum: 열거형(enumeration)의 약자로, 연관된 상수들을 하나의 그룹으로 묶어 명명된 값들의 집합으로
인증을 위해 사용하는데, 주로 http 헤더에 담아서 보낸다.Authorization 헤더: 이 헤더는 클라이언트의 인증 자격 증명(credentials)을 포함하는 데 사용되는 표준 HTTP 헤더입니다.Bearer 스키마: "Bearer"는 토큰의 유형을 나타내는 인
\-> 로깅을 위한 공통 인터페이스설치 사용역시 어노테이션! 빠르고 쉽다 ㅎㅎ
자바에서 병렬 작업이나 비동기 처리는 스레드 단위로 수행된다.이러한 스레드의 생성과 관리를 효율적으로 처리하기 위해 Thread Pool을 사용한다.ThreadPoolExecutor는 스레드 풀의 생성, 재사용, 큐 관리, 종료 등을 담당하는 핵심 클래스다. 즉,여러
@NoArgsConstructor는 Lombok에서 제공하는 어노테이션으로,매개변수가 없는 기본 생성자를 자동으로 생성.위 코드에서 @NoArgsConstructor가 붙으면 다음 코드가 자동 생성된다:JPA(Entity 클래스)에서는 기본 생성자(파라미터 없는 생성자
스프링을 쓰다보면 이런 걸 볼 수 있다.이건 뭘까?바로 스프링의 Bean임을 나타내는 것이다.Bean은 스프링 컨테이너가 관리하는 객체로, 스프링이 생성·관리·소멸까지 책임진다.@Controller, @Service 등을 붙였을 때 생기는 걸 알 수 있는데, 빈에 등록
스프링 프로젝트를 점진적으로 코틀린으로 마이그레이션 해보자.일반적으로 원하는 파일을 선택 후 우클릭 -> conver java file to kotlin 하면 된다.뭔가 잔뜩 물어보는데 모듈 선택만 잘하면 문제가 없다.근데 이러면 코틀린 버전 중 가장 최신 걸로 된다.
앞선 포스트에서 코틀린 이전에 대해 다루었다.이번에는 코틀린 전환시 코틀린스럽게 하는 방법이다.기본 형태stream()은 없어도 됨. 바로 map{} 가능@JvmRecord 없어도 됨internal 제거필드 검증 위해 앞에 어노테이션(이건 @Vaild도 마찬가지), f
AtomicLong은 Long 자료형을 가지고 있는 Wrapping 클래스다.wrapper class : 기본 자료타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스.객체지향적 처리 : 객체가 가지는 메서드와 다형성,상속 사용하려고null 값 처리
일반적으로 JPA는 굉장히 편리하지만, 복잡한 쿼리를 날리고 싶을 때는 곤란해진다.그럴 때는 JPQL 직접 쿼리를 작성할 수 있다.하지만 이러면 쿼리문이 그냥 문자열 취급 된다는 문제가 있다. (쿼리스트링)이걸 해결하는 게 QueryDSL근데 Open Feign Que
다음 조건을 만족하는 값이 있는지 확인 하기 -> 특정 조건에 해당하는 열을 가져오는데, 1 로 가져옴 -> 있을 경우 1이 리턴, 없으면 null이 리턴 됨 -> 로 참/거짓 값을고 변환하여 리턴 조회에 페이징 기능 리턴값이 Page라 조회가 2번 필요하다. (데이터랑, 페이지 관련 메타데이터) +) JPA로 페이징 쓰기 끝. 근데 tota...
JPA를 이용하고, post 엔티티의 writer 필드에 user가 있다고 가정해보자.그럼 post를 전부 조회하게 되면 글을 쓴 user들 수 만큼 user 테이블을 조회하게 된다...(post의 writer를 보고 그 때마다 user를 조회하니까)그럼 글 쓴 사람이
열심히 프로젝트를 만들었다면, 배포를 해야한다. 그걸 위해 Docker를 보자. 도커? 도커는 애플리케이션을 ‘컨테이너(container)’ 단위로 패키징하고 실행할 수 있게 해주는 플랫폼이다. -> “어디서나 동일하게 동작하는 실행 환경”을 만들어 줌. (물론 가
AWS에는 이미지를 올릴 수 있는 버킷이 있다.EC2에 올려도 되긴하지만, 파일이 너무 많이 쌓이는 건 좋지 않고 비효율적이니 S3에 올려보자.일단 기본적으로 2가지 방법이 있다.1) 이미지 서버에 업로드 → 서버에서 S3에 업로드2) S3에 바로 업로드 → 메타 데이
Spring + JPA로 개발하다 보면 엔티티 값 변경을 어떻게 처리할지 머리 아파진다.이때, 할 수 있는 선택지는 두 가지다.엔티티 필드마다 set필드명() 을 호출하는 방식엔티티 내부에 update()나 change(), rename() 같은 메서드를 정의하는 방식
솔직히 인증인가는 파일도 많고 하다보면 뭔 소리인지 모르겠을 때가 많다...하나씩 정리해본다.어떤 페이지를 공개할지, 어떤 페이지에 로그인이 필요한지 결정한다. (인가 설정)대충 아래와 같은 걸 정한다고 보면 된다. 1) 로그인 페이지 경로, 로그아웃 처리 방식2) C