목록프로그래밍 (408)
쌓고 쌓다
Response 구조 HTTP/1.1 200 OK status line Date: Sun, 2 June Server: Apache Content-Length: 1 Content-Type: text/html headers blank line hello body HTTP 응답 메시지 생성 1. HTTP 응답 코드 지정 // [status-line] response.setStatus(HttpServletResponse.SC_OK); SC_OK는 200으로 매핑되어 있어 메소드 호출시 200을 넣어줘도 동일하다. 2. 헤더 생성 //[response-headers] response.setHeader("Content-Type", "text/plain;charset=utf-8"); response.setHeader..
댓글 구현한 이후 게시글 삭제시 SQL Error가 발생했다. Cannot delete or update a parent row: a foreign key constraint fails 게시글 삭제 기능 구현 이후에 댓글 기능을 구현했고 게시글 삭제 부분에 댓글 처리를 추가적으로 작성해주지 않아 SQL 에러가 발생했다. 게시글 삭제시 해당 게시글의 댓글들도 함께 삭제하도록 코드를 추가 및 변경해보자. CommentRepository public interface SpringDataJpaCommentRepository extends JpaRepository { Page findByPno(Long pno, Pageable pageable); // 페이징된 댓글들 List findByPno(Long pno);..
HTTP 요청 데이터 HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 3가지 방식이 있다. GET - 쿼리 파라미터 /url?username=LSM&age=1 메시지 바디 없이, 쿼리 파라미터에 데이터를 담아 전달 POST - HTML Form content-type: application/x-www-form-urlencoded 메시지 바디에 쿼리 파라미터 형식으로 전달 HTTP message Body에 직접 데이터를 담아서 요청 HTTP API에서 주로 사용 (JSON, TEXT) JSON 주로 사용하며 POST, PUT, PATCH 1. GET 쿼리 파라미터 username=LEE, age=1 데이터를 아래의 URL로 전달한다. http://localhost:8080/reques..
서블릿 자바를 사용하여 웹 페이지를 동적으로 생성해주는 프로그램. HTTP 요청시 WAS(웹 애플리케이션 서버)는 Request, Response 객체를 새로 만들어서 서블릿 객체(helloServlet)를 호출한다. 개발자는 HTTP 요청 응답 정보를 Request, Response로 편하게 다룰 수 있다. Response를 바탕으로 HTTP 응답 메시지를 만들어 웹 브라우저에 전달한다. => 서블릿 객체는 싱글톤으로 관리되므로 공유 변수 사용 주의하자. 서블릿 환경 설정 스프링 부트는 서블릿을 직접 등록하여 사용할 수 있도록 @ServletComponentScan을 지원한다. @ServletComponentScan // 서블릿 자동 등록 @SpringBootApplication public clas..
게시글의 댓글 리스트를 출력할때 어떤 방법으로 하는지 여러 웹 페이지를 구경했는데 신기하게 댓글 페이지 이동시 URL이 변하지 않는것이다. 이 방법은 Ajax를 통해 웹 페이지 전체를 다시 로딩하지 않고, 웹 페이지의 일부분만 갱신하는 방법이다. 그럼 게시글도 그렇고 모든 부분을 Ajax로 처리하면 무조건 이득이 아닌가 생각이 드는데 웹 사이트를 둘러봐도 다들 그렇지 않더라.. 나중에 알아봐야겠다.. CommentRepository public interface SpringDataJpaCommentRepository extends JpaRepository { Page findByPno(Long pno, Pageable pageable); } 페이징된 댓글을 받아오는데 JPA가 기능을 제공한다. findB..
빈 스코프는 빈이 존재할 수 있는 범위이다. 스프링 빈은 기본적으로 싱글톤 스코프로 생성되기에 이때까지 스프링 컨테이너가 종료될 때까지 유지된다. 스코프 종류 싱글톤 : 기본 스코프로 스프링 컨테이너 시작과 끝까지 유지된다. 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는다. 웹 관련 스코프 request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프 session : 웹 세션이 생성되고 종료될때까지 유지되는 스코프 application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프 빈 스코프 정의 방법 @Scope("스코프") 형식으로 정의한다. 1. 컴포넌트 스캔 자동 등록 @Scope("prototype") @Component p..
DB 커넥션 풀 등.. 애플리케이션 시작 시점에 미리 연결하고 (초기화 작업) 애플리케이션 종료 시점에 연결을 모두 종료하는 (종료 작업) 작업을 위해 어떻게하면 될까? 스프링 빈 라이프사이클 객체 생성 의존관계 주입 스프링 빈은 객체 생성을하고 의존관계 주입 이후에 사용할 수 있는 준비가 완료된다. 초기화 작업은 의존관계 주입이 끝난 후 이뤄져야한다. *생성자 주입의 경우 빈 생성과 동시에 의존관계 주입이 이뤄진다. 객체의 생성때 초기화 작업을 함께하면 되는거 아니야? 생성자는 필수 정보를 받고 객체를 생성하는 책임을 갖는다. 초기화는 정보들을 가지고 외부 커넥션을 연결하는 등 무거운 작업을 이룬다. 따라서 생성자 안에서 함께 이뤄지는 것 보다 생성과 초기화를 나누는것이 유지보수에 좋다. 이 초기화 작..
SpringDataJpaPosterRepository public interface SpringDataJpaPosterRepository extends JpaRepository { Page findByTitleContaining(String title, Pageable pageable); } SpringDataJpa에 findBy 형식으로 메소드명을 작성하면 적절한 JPQL 쿼리를 생성해준다. 쿼리 메소드에 페이징을 원한다면 파라미터로 Pageable을 넘겨주자. LIKE %단어% 형태는 Containing 메소드를 작성해주면 된다. PosterService @Service @Transactional public class PosterService { public Page searchPageList(St..