목록💡 백엔드/Java (74)
코딩마을방범대
Repository를 이용해 Redis를 활용하는 예제 코드에 JpaRepository가 아닌 CrudRepository를 활용해서 도대체 CrudRepository는 뭔가.. 싶어서 찾아보았다! CrudRepository 애플리케이션에 필요한 모든 기본 쿼리 추상화를 제공하는 저장소 인터페이스 메소드 설명 save(…) 엔터티 의 Iterable 을 저장 ( 여러 개체를 전달하여 일괄적으로 저장할 수 있음 ) findOne(…) 전달된 기본 키 값을 기반으로 단일 엔터티 가져오기 findAll() 데이터베이스에서 사용 가능한 모든 엔터티 의 Iterable 가져오기 count() 테이블의 총 엔터티 수를 반환 delete(…) 전달된 개체를 기반으로 엔터티를 삭제 exists(…) 전달된 기본 키 값을..
1. 톰캣 서버에 배포를 위해 war 파일을 생성하였으나 수동으로 생성하여 실행하니 Error: Invalid or corrupt jarfile 파일명.war 라는 오류가 발생함 2. war 프로젝트로 생성 시 자동으로 생성되는 SNAPSHOT을 수동 Exploded에 추가해서 생성해보니 아래와 같은 오류 발생 > java -jar test.war war에 기본 Manifest 속성이 없습니다. 이 때 부터 뭔가 가능할 것 같아서 찾아보았더니 실행가능한 war 파일이 빌드 시 자동 생성된다는 것이였다! ( 물론 war 프로젝트거나 build.gradle을 설정했을 경우에만 ) 프로젝트 생성 시 war 프로젝트로 생성하지 않았어도 아래와 같이 build.gradle을 설정하고 Add Frameworks S..
run 으로 프로젝트 실행 시 정상적으로 실행되어 API 등 호출이 가능했지만 debug로 돌리자 아래와 같은 에러가 발생했다 Method breakpoints may dramatically slow down debugging 위처럼 그냥 간단한 경고문처럼 뜨길래 실행에는 지장이 없는 줄 알았으나 검색해보니 저게 문제였다! ctrl + shift + F8 을 누르면 아래와 같은 창이 뜨는데 여기서 'Java Method Breakpoints' 를 체크해제 하면 된다 테스트 할 때 북마크가 아닌 왼쪽 공란을 눌러 빨간색으로 표시했었는데 이게 디버그 때 breakpoint로 잡히는지 처음 알았다 앞으로 F11로 북마크 이용하기!
웹 소켓을 이용한 메시지 전송(클라이언트) WebSocket 웹버전의 TCP 또는 Socket 서버와 클라이언트 간에 Socket Connection을 유지해서 언제든 양방향 통신 또는 데이터 전송이 가능하도록 하는 기술 Real-time web application 구현을 위해 널리 사용되어지고 있음 (SNS 애플리케이션, LoL 같은 멀티플레이어 게임, 구글 Doc, 증권거래, 화상채팅 등) 인터넷의 채팅 기능들은 websocket을 통해 이루어짐 WebSocket Sevrer를 운용할 때의 유의사항 WebSocket은 하나의 URL을 통해 Connection이 맺어지고, 후에는 해당 Connection으로만 통신 서버와의 정기적인 HTTP 연결을 설정 한 다음 Upgrade헤더를 전송하여 양방향 웹..
컨트롤러 HTTP API들의 메소드 consumes 클라이언트가 요청을 할 때 Content-Type 헤더 값이 일치해야 요청을 처리함 ex) consumes = MediaType.APPLICATION_JSON_VALUE: content-type값이 "application/json"일 때만 요청을 처리 @PostMapping(value = "", consumes = MediaType.APPLICATION_JSON_VALUE) 매치 되는 않는 경우엔 415 : Unsupported Media Type(지원되지 않는 미디어타입 형식이다) 응답 produces 클라이언트의 요청에 대한 응답 시 return할 데이터 타입을 명시 클라이언트가 요청을 할 때 accept 헤더의 값이 일치할 때만 요청을 처리 ex)..
클라이언트 측에서 넘어온 데이터를 바인딩 할 때 유효성 검사를 위한 어노테이션 컨트롤러에서 사용 가능하며, 유효성 검사를 할 항목은 해당 객체에서 설정해주어야 함 유효성 검사를 위한 어노테이션 종류 Anotation 제약조건 @NotNull Null 불가력 가능 @Null Null 입력 가능 @NotEmpty Null, 빈 문자열 불가 @NotBlack Null, 빈 문자열, 스페이스만 있는 문자열 불가 @Size(min= , max= ) 문자열, 배열등의 크기가 만족하는지 @Pattern(regex= ) 정규식을 만족하는지 @Max(숫자) 지정 값 이하인지 @Min(숫자) 지정 값 이상인지 @Future 현재 보다 미래인지 @FutureOrPresent 현재와 동일하거나 미래인지 @Past 현재 보다 ..
Java의 Entity 생성 중 ID(primary key)는 @GeneratedValue로 식별자값을 자동으로 생성시켜주는 옵션을 설정할 수 있다 배울 때 MySQL은 IDENTITY를 쓰면 된다고 해서 무작정 썼는데 드디어 찾아봤다 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long idx; 1. GenerationType.AUTO hibernate.dialect에 설정된 DB 방언 종류에 따라, 하이버네이트가 자동으로 전략을 선택하게끔 위임 Hibernate 5부터 MySQL에서의 GenerationType.AUTO는 IDENTITY가 아닌 TABLE을 기본 시퀀스 전략으로 가져감 2. GenerationType.IDENTITY..
Exception Handler 를 이용해서 컨트롤러가 아닌 외부에서 Exception을 처리하는 경우 response 데이터를 보낼 수 없이 자동으로 오류데이터가 전송되었다! 내가 원하는 response 값을 커스터마이징해서 보내고 싶은 경우 한참을 고안해보았고 검색도 많이 해봤는데 내가 원하는 결과는 나오지 않았다. 우선, 방법은 @RestControllerAdvice를 사용하거나 아래 방법을 사용! 첫 번째, 컨트롤러에 error response를 처리해줄 메소드 선언 HttpServletResponse 를 이용해 json 형태로 보내는 로직 public void error(ApiDTO apiDTO) throws IOException { HttpServletResponse response = ((S..