Part 2 게시판 CRUD 만들기 (6-9장)

ttt-1-2·2025년 9월 27일

6장 - 게시판 내 페이지 이동하기

6.1 링크와 리다이렉트

  • 링크(link): 사용자가 <a><form>을 통해 다른 페이지로 이동하겠다는 요청만 전달하고 그 결과 페이지를 그대로 응답받는 단순 내비게이션 기능이다
  • 리다이렉트(redirect): 서버가 요청을 처리한 뒤 ‘다음으로 갈 주소’를 클라이언트에 지시하여 다시 요청하게 만드는 방식이다

6.2 링크와 리다이렉트를 이용해 페이지 연결하기

  • 새 글 작성 링크 만들기
<a href="/articles/new">New Article</a>
  • <목록 페이지> → <목록 페이지> 돌아가기
<a href="/articles">Back</a>
  • <입력 페이지> → <상세 페이지> 이동하기
    • 리다이렉드: 클라이언트의 요청를 받아 새로운 URL 주소로 재요청하라고 지시하는 것이다

      return "redirect:URL_주소";
  • <상세 페이지> → <목록 페이지> 돌아가기
//show.mustache
<a href="/articles">Go to Article List</a>
  • <목록 페이지> → <상세 페이지> 이동하기
 <td colspan="2"><a href="/articles/{{id}}">{{title}}</td>

7장 - 데이터 수정 과정

- 1단계: <수정 페이지> 만들고 기존 데이터 불러오기

[목록 페이지](항목 클릭)
    v
[상세 페이지](Edit 버튼)
    v
[컨트롤러] ── DB에서 기존 데이터 조회 ──> [모델에 담음]
    │
    v
[수정 폼 페이지 렌더]

- 2단계: 데이터를 수정해 DB에 반영한 후 결과를 볼 수 있게 <상세 페이지>로 리다이렉트하기

[수정 폼 페이지] --(Submit: 폼데이터)--> [컨트롤러]
    │                                             
    └─ DTO 생성 → 엔티티로 변환/병합 → 리포지토리.save() → DB 갱신
                                                    │
                                                    v
                                리다이렉트(결과 확인용 페이지 또는 목록)

HTTP 메소드

  • HTTP(HyperText Transfer Protocol)는 웹 서비스에 사용하는 프로토콜이다
  • HTTP의 대표적인 메서드:
    • POST
    • GET
    • PATCH(PUT)
    • DELETE

CRUD를 위한 SQL 문과 HTTP 메서드

데이터 관리SQLHTTP
CreateINSERTPOST
ReadSELECTGET
UpdateUPDATEPATCH (PUT)
DeleteDELETEDELETE

8장 - 게시글 삭제하기: DELETE

데이터 삭제 과정

  • Step 1: 클라이언트가 HTTP 메서드로 게시글 삭제 요청
  • Step 2: 요청 받은 컨트롤러는 리파지터리를 통해 DB에 저장된 데이터를 찾아 삭제한다
  • Step 3: 삭제 완료시 클라이언트를 결과 페이지로 리타이렉트한다
[상세 페이지] (Delete 클릭)
      │  POST/GET /articles/{id}/delete
      v
[컨트롤러] ── findById(id) → 존재 확인
      │
      ├─ 존재 O → repository.delete(엔티티)
      │
      └─ 존재 X → 아무 것도 안 함
      v
redirect:/articles  (목록)
[컨트롤러]
  delete 성공 → redirectAttributes.addFlashAttribute("msg", "삭제되었습니다!")
  └─ redirect:/articles
                 │
                 v
        [목록 페이지 index.mustache]
           {{#msg}} 삭제되었습니다! {{/msg}}

SQL 문으로 직접 DB 삭제하기

DELETE [FROM] 테이블면 WHERE 조건;

9장 - CRUD와 SQL 쿼리 종합

9.1 JPA 로깅 설정하기

  • 쿼리(query)란 DB에 정보를 요청하는 구문
  • SQL 쿼리:
    • INSERT (생성)
    • SELECT (조회)
    • UPDATE (수정)
    • DELETE (삭제)
  • 로깅(logging): 시스템이 작동할 때 당시의 상태와 작동 정보를 기록하는 것
# resources/application.properties
# JPA 로깅 설정
# 디버그 레벨로 쿼리 출력
logging.level.org.hibernate.SQL=DEBUG

# 쿼리 줄바꿈하기
spring.jpa.properties.hibernate.format_sql=true

# 매개변수 값 보여 주기
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

# DB URL 설정
# 유니크 URL 생성하지 않기
spring.datasource.generate-unique-name=false
# 고정 URL 설정하기
spring.datasource.url=jdbc:h2:mem:testdb
  • 로깅 레벨은 7단계가 있다:

    • TRACE(레벨1): DEBUG 레벨보다 더 상세한 정보
    • DEBUG(레벨2): 응용 프로그램을 디버깅하는 데 필요한 세부 정보
    • INFRO(레벨3): 응용 프로그램의 순조로운 진행 정보
    • WARN(레벨4): 잠재적으로 유해한 상황 정보
    • ERROR(레벨5): 응용 프로그램이 수행할 수 있는 정도의 오류 정보
    • FATAL(레벨6): 응용 프로그램이 중단될 만한 심각한 오류 정보
    • OFF(레벨7): 로깅 기능 해제
  • 서버 실행하고 쿼리 확인:

  • H2 Console 접속:

9.2 SQL 쿼리 로그 확인하기

INSERT 문

데이터를 생상(Create)할 때 어떤 SQL 쿼리가 동작하는지 확인해 보겠습니다

SELECT 문

데이터를 조회(Read)할 때 어떤 SQL 쿼리가 동작하는지 확인해 보겠습니다

UPDATE 문

데이터를 수정(UPDATE)할 때 어떤 SQL 쿼리가 동작하는지 확인해 보겠습니다

DELETE 문

데이터를 삭제(DELETE)할 때 어떤 SQL 쿼리가 동작하는지 확인해 보겠습니다

9.3 기본 SQL 쿼리 작성하기

  • CREATE TABLE 문의 형식은 다음과 같습니다:
CREATE TABLE 테이블명 (
	속성명1 자료형,
	속성명2 자료형
	속성명3 자료형,
	PRIMARY KEY (기본키)
);
  • ex: coffee 테이블을 만들어 보겠습니다

coffee 데이터 생성하기

//데이터 생성하기
****
INSERT
INTO    
        coffee
        (id, name, price) 
VALUES
        (1, '아메리카노', 4100)

coffee 데이터 조회하기

// 데이터 조회하기

SELECT
	id, name, price
FROM
	coffee
WHERE
	id = 3;

coffee 데이터 수정하기

UPDATE
	coffee
SET
	price = 9900
WHERE
	id = 4;

coffee 데이터 삭제하기

DELETE
FROM
	coffee
WHERE
	id = 4;

0개의 댓글