1. WebSocket 이전의 양방향 통신 방법 (1) Polling 방식 클라이언트가 서버에서 HTTP Request를 주기적으로 요청하고, 서버가 응답하는 방식이다. 클라이언트가 주기적으로 요청을 하기 때문에 클라이언트의 수가 증가하면 요청의 수도 함께 증가하기 때문에 서버의 부담이 커진다. 또한, 요청과 응답후에는 연결이 끊어지기 때문에 요청할 때마다 항상 연결을 맺는 과정이필요하다. 이 부분에서 많은 비용이 소모된다. (2) Long Polling 방식 클라이언트가 서버에 HTTP Request를 요청하면, 서버는 대가하고 있다가 이벤트가 발생했을 때, 클라이언트에게 응답을 하는 방식이다. Polling 처럼 불필요한요청에 계속 응답하는 것이 아니기 때문에 요청에 따른 커넥션 맺는 과정에서 발생하..
1. Rest Api Rest는 Representational State Transfer 용어의 약자로서 2000년도에 로이필딩에 의해 처음 소개되었습니다. 여기서 Rest는 웹에 존재하는 모든 자원에 고유한 URI를 부여해 활용하는 방법론입니다. 그리고 API는 웹 애플리케이션에서 다른 서비스에 요청을 보내고, 응답을 받기 위해 정의된 명세를 의미합니다.결국 정리하자면, Rest Api는 Rest 아키택처 또는 특징에 맞추어 다른 서비스에 요청/응답을 위한 인터페이스를 의미한다. Rest 는 자원(URI), 행위(HTTP METHOD), 표현(Respresentation) 으로 구성되 있습니다. 여기서 URL, URI의 차이점을 간단히 비교하자면, URI는 인터넷상에서 자원을 나타내는 유일한 주소이고,..
오늘은 @Controller 와 @RestController 에 대해 알아보려고 한다. 이전에 공부했던 내용이고 매일 Controller 와 RestController를 사용하고 있기 때문에 정확히 알고 있다고 생각했다. 그러나 오늘 접한 오류때문에 아직은 정확히 알지 못한다고 생각하여 간단히 정리 해보려고 한다. 일단 오늘 접한 오류는 no suitable HttpMessageConverter found for response type 라는 오류 메세지였다. 원인은 Ajax를 통해 Response Type을 JSON포맷으로 넘기려 했지만, 실제로는 text/html 형식으로 넘겼기 때문에 발생했었던 오류였다. 분명 @RestController 덕분에, JSON 형식으로 Response가 응답되었을 텐데..
Spring Boot 실행하는 과정에서 최근에 겪은 오류를 해결한 내용을 정리해보려고 한다. 1, Spring Boor Application 실행 불가 log 확인한 결과, Web Config 를 읽은 후에, HikariPool-1 Starting에서 멈추는 현상이 계속 발생했다. 원인은 H2 Database에 Lock 발생해서 실행이 되지 않기 때문이다. 이 문제를 해결하기 위해 java-qna.mv.db, java-qna.trace.db 두 개의 파일을 삭제 했다. 이 파일들은 데이터베이스에 저장한 파일을 남겨 놓은 파일들이다. 이 파일들을 삭제하니, 해결이 되었다. User 디렉토리에서 ls-al 명령어를 사용하면 파일들을 확인할 수 있다. 솔직히, 정확한 원인과 삭제한 파일들의 역할은 아직 파악하..
이슈관리 시스템을 개발하면서 계속 오류가 발생하여 관련 내용을 포스팅하려고 한다. 오류는 클라이언트에서 서버로 Ajax 를 이용해서 비동기 요청를 했을 때 계속 발생했다. 오류는 '415 Unsupported Media Type' 였다. 415 오류는 지원되지 않는 형식으로 클라이언트가 요청을 해서 서버가 요청에 대한 승인을거부한 오류를 의미한다. 이럴 경우에는 ContentType, Content Encoding 데이터를 확인할 필요가 있다.결국 나는 AJax 요청을 했을 때, ContentType을 명시하지 않았기 때문에 오류가 발생했던 것이다. 오늘은 Ajax Option에 대해 알아보겠다! (1) async (boolan, default : true) - 해당 함수를 비동기 처리를 할지, 동기 처..
JPA는 쿼리 메소드의 파라미터에 페이징과 정렬을 전달함으로써, 웹 서비스 개발에서 자주 사용되는 페이징 개발에 대한 편의성을 제공하고 있다.매개변수에 Pageable을 사용함으로써 아래와 같이 Page 또는 List 타입으로 반환하여 사용할 수 있다. 나는 개인적으로 Page로 리턴받아 처리를 했다.List 컬렉션에도 기본적으로 제공되는 기능도 많지만, Page에는 페이지 처리를 위한 다양한 기능을 제공하고 있다. 아래참고!실제 페이징 처리 예제를 통해 확인해보자! 예제코드는 Controller → Service → DB → Service → Domain → Controller → View 순서로 동작한다. Page findByName (String name, Pageable pageable);List..
1. HTTP (HyperText Transfer Protocol) 동작 원리 웹의 동작원리는 아래 이미지와 같이 동작한다. 아래 이미지가 자세하게 나와있기 때문에 별다른 설명이 필요하지 않을거라 생각이 든다.혹시나 좀더 자세한 설명이 필요하다면 해당 이미지의 출처인 http://tcpschool.com/webbasic/works 에서 확인해보면 좋을거 같다. 동작원리를 보다보면, DNS 와 TCP 를 보게된다. 이 부분을 더 자세히 알아보자! 2. DNS (Domain Name System) 정의 및 동작원리 DNS (Domain Name System)는 특정 컴퓨터 또는 네트워크로 연결된 임의의 장치의 주소를 찾기 위해, 사람이 이해하기 쉬운 도메인 이름을 숫자로 된 IP 주소로 변환해주는 시스템이다..
1. Ajax (Asynchronous Javascript And Xml) 정의 일반적으로 HTTP 프로토콜은 클라이언트가 Request를 보내면 서버에서 데이터를 처리한후 Response를 보내고 연결을 끊는 방식으로 동작한다. 결국은 response의 body에 이동하는 화면의 HTML 정보가 담겨져 있기 때문에 전체 화면을 로딩하게 된다.회원가입 아이디 중복체크를 할 때, Ajax를 사용하지 않고 구현을 한다고 생각해보자. 그럼 아래와 같이 동작할 것이다. 1. 사용자가 웹 브라우저에 아이디를 포함한 정보 입력하고 정보를 Request의 body에 넣고 서버에 요청을 한다. 2. 서버가 DB에 접근해서 해당 아이디가 있는지 확인한다. 3. Response 객체의 body에 화면의 HTML 정보와 아..
스프링을 이용해서 의존성을 주입하는 세 가지의 방식을 비교해보려고 한다. Java에서 간단하게 구현할 수 있는 생성자, setter 메소드를 이용하는 의존성 주입을 제외한, @Autowired, @Resource, 태그를 비교해보겠다! 먼저 결론부터 말하자면, @Autowired 를 개인적으로 더 선호한다! 1. @Autowired vs @Resource @Autowired @Resource 사용 출처 스프링 프레임워크 표준 자바 빈 검색 방식 By Type --> By Name by Name -->By Type By Name 강제방법 @Autowired @Qualifier("Dog") @Resource(name="Dog") @AutoWired는 스프링 프레임워크에서만 사용가능하지만, @Resource는..
redirect vs forward Spring Boot 를 이용해서 프로그래밍을 하는 과정에서 페이지를 이동하는 두가지 방식이 있었다. 두 가지 방식을 간단하게 비교 정리해보려고 한다.먼저 Forward 방식을 알아보자! Client가 로그인을 위한 요청을 Server에 보내면, LoginServlet에서 요청을 받고, 중복체크를 하는 부분은 CheckServlet에게전달하여 처리하도록 한 다음에 CheckServlet이 요청에 응답을 하게 되어 있다. 로그인과 중복체크는 동일한 Web Container에서 처리되기 때문에 자원을공유할 수 있다. 그리고 LoginServlet이 전달하는 부분이 Web Container에 있기 때문에 사용자 입장에서는 주소의 변화를 확인할 수 없다. 요약하자면, Forw..