목록java (78)
코딩마을방범대
웹 소켓을 이용한 메시지 전송(클라이언트) 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..
기존 log 에서 yml문의 변수 ON, OFF 값에 따라 log level을 조정하기로 했다 logback이든 log4j든 사용하고 있는 프로젝트라는 가정 하에 우선 build.gradle에 의존성을 주입시켜준다 (if문 사용 가능하게 해주는 dependency) // https://mvnrepository.com/artifact/org.codehaus.janino/janino implementation 'org.codehaus.janino:janino:3.1.9' 설정 파일인 xml에서 아래와 같이 사용 ${변수명}로 property resource에서 꺼내오거나 property("변수명")을 통해 yml 설정 파일에 자동으로 접근할 수도 있다 아래와 같이 이중 if문도 가능하다

개발, 운영 서버를 구분하기 위해 profile을 설정하며, 아래와 같이 4가지의 host가 있음 HOST PROFILE 개발 dev 테스트 stage 알파 alpha 상용 prod yml 설정 spring: profiles: active: - local group: local: - site-local - db-local dev: - site-dev - db-dev include: - db - my-service - site spring-profiles-active 활성화할 profile 설정 spring-profiles-group profile이 (?)일 경우 하위 항목들의 profile과 그룹을 정의 spring-profiles-include 설정을 통해 어플리케이션을 실행할 때 profile을 포함..

Form Data를 어느 method에 넣느냐에 따라 쿼리파라미터의 위치가 다르다get: urlpost: body컨트롤러에서 HttpRequestServlet을 이용하여 body를 출력하려 하면 null값이 출력됨요청 -> 필터 -> 디스패처 서블릿 -> 인터셉터 -> 컨트롤러로 값을 바인딩 하는 과정에서Interceptor에서 getInputStream() 을 호출하여 Http Body를 읽으면서 소비하였기 때문에Controller의 Http Body가 비어있는 것public void test(HttpServletRequest request) throws IOException { ServletInputStream inputStream = request.getInputStream(); ..