코딩자율학습 스프링부트3 자바 백엔드 개발 입문_2주차 학습 후기

코딩자율학습 스프링부트3 자바 백엔드 개발 입문 2주차 학습 후기


지난주 스프링 부트 기본 개념과 CRUD(Create/Read) 학습에 이어, 2주차에는 ‘수정(Update)’과 ‘삭제(Delete)’ 기능 구현, 그리고 웹 서비스의 핵심인 REST API를 다루었습니다.




6일차: 게시판 내 페이지 이동하기

6일차는 게시판 내 페이지 이동 방식인 링크와 리다이렉트에 대해 학습했습니다.



링크와 리다이렉트란

링크는 웹 페이지 간 직접 이동 방식이며, 리다이렉트는 서버 지시에 따라 브라우저가 자동으로 다른 페이지로 이동하는 방식입니다. 게시글 등록 후 목록 페이지로 자동 전환 시 리다이렉트가 활용됩니다.

<a href="/articles/new">새 글 작성</a>
<a href="/articles">목록으로 돌아가기</a>



컨트롤러에서 리다이렉트 처리는 다음과 같습니다.

// ArticleController.java
@PostMapping("/articles/create")
public String createArticle(ArticleForm form) {
    Article saved = articleRepository.save(form.toEntity());
    return "redirect:/articles/" + saved.getId();
}


또한, 롬복의 @Getter 어노테이션을 활용하여 코드 간결성을 높였습니다.




7일차: 게시글 수정하기(Update)

CRUD 중 ‘Update’ 기능인 게시글 수정 기능을 구현했습니다.



데이터 수정 과정

게시글 수정은 ‘수정할 데이터 가져오기’, ‘수정 페이지 만들기’, ‘수정 데이터 DB 갱신하기’의 세 단계로 진행됩니다.



수정 페이지로 이동하는 링크와 컨트롤러 처리 예시는 다음과 같습니다.

<!-- show.mustache -->
<a href="/articles/{{article.id}}/edit" class="btn btn-primary">수정</a>


// ArticleController.java
@GetMapping("/articles/{id}/edit")
public String edit(@PathVariable Long id, Model model) {
    model.addAttribute("article", articleRepository.findById(id).orElse(null));
    return "articles/edit";
}



수정 폼(edit.mustache)에서 기존 내용을 표시하고, 제출 시 컨트롤러에서 업데이트를 처리합니다.

<!-- edit.mustache -->
<form class="container" action="/articles/update" method="post">
    <input name="id" type="hidden" value="{{id}}">
    <input type="text" class="form-control" name="title" value="{{article.title}}">
    <textarea class="form-control" name="content">{{article.content}}</textarea>
    <button type="submit" class="btn btn-primary">수정 완료</button>
</form>




articleRepository.save() 메서드는 데이터 존재 여부에 따라 업데이트 또는 신규 생성을 수행합니다.

// ArticleController.java
@PostMapping("/articles/update")
public String update(ArticleForm form) {
    Article articleEntity = form.toEntity();
    if (articleRepository.findById(articleEntity.getId()).orElse(null) != null) {
        articleRepository.save(articleEntity);
    }
    return "redirect:/articles/" + articleEntity.getId();
}




8일차: 게시글 삭제하기(Delete)

CRUD의 마지막 기능인 게시글 삭제를 구현했습니다.



데이터 삭제 과정

삭제는 특정 게시글의 ID를 받아 DB에서 해당 데이터를 제거하는 과정입니다.


삭제 버튼과 컨트롤러 처리 예시는 다음과 같습니다.

<!-- show.mustache -->
<a href="/articles/{{article.id}}/delete" class="btn btn-danger">삭제</a>



RedirectAttributes를 통해 삭제 완료 메시지를 사용자에게 전달합니다.

// ArticleController.java
@GetMapping("/articles/{id}/delete")
public String delete(@PathVariable Long id, RedirectAttributes rttr) {
    Article target = articleRepository.findById(id).orElse(null);
    if (target != null) {
        articleRepository.delete(target);
        rttr.addFlashAttribute("msg", "게시글이 삭제되었습니다!");
    }
    return "redirect:/articles";
}




9일차: CRUD와 SQL 쿼리 종

CRUD 기능 구현 후, DB에서의 실제 동작을 SQL 쿼리 관점에서 분석했습니다.



JPA 로깅 설정 및 SQL 쿼리 확인

application.properties에 로깅 설정을 추가하여 JPA가 실행하는 SQL 쿼리와 매개변수 값을 콘솔에서 확인할 수 있었습니다.

logging.level.org.hibernate.SQL=DEBUG
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE


이를 통해 findById()save()deleteById() 메서드가 실제 SELECTINSERTUPDATEDELETE 쿼리로 변환되는 과정을 이해했습니다.



기본 SQL 쿼리 작성 및 ID 자동 생성

H2 DB 콘솔에서 직접 SQL 쿼리를 실행하며 DB 조작의 기본을 다졌습니다.

SELECT id, name, price FROM coffee WHERE id = 3;
UPDATE coffee SET price = 9900 WHERE id = 4;
DELETE FROM coffee WHERE id = 4;


또한, 엔티티 ID 필드에 @GeneratedValue(strategy = GenerationType.IDENTITY) 어노테이션을 사용하여 DB가 ID를 자동으로 생성하도록 설정했습니다.




10일차: REST API와 JSON

2주차 학습의 주요 내용으로 REST API와 JSON에 대해 학습했습니다.



REST API와 JSON의 등장 배경

REST API는 서버 자원을 클라이언트 종류와 관계없이 사용할 수 있는 방법이며, JSON은 웹에서 데이터를 주고받을 때 가장 널리 사용되는 ‘규칙적인 텍스트 형식’입니다. 웹 서비스의 복잡성 증가와 다양한 기기 간의 데이터 통신 요구로 인해 등장했습니다.



REST API 동작 살펴보기

크롬 브라우저의 Talend API Tester 확장 프로그램과 https://jsonplaceholder.typicode.com의 가상 API를 활용하여 REST API의 GETPOSTPATCHDELETE 동작을 실습했습니다. URL과 HTTP 메서드 조합을 통해 CRUD 기능을 RESTful하게 구현하고, key: value 형태의 JSON으로 데이터를 교환하는 방식을 익혔습니다.




2주차 마무리

이번 2주차 스프링 부트 학습을 통해 CRUD 기능 완성도를 높이고, 웹 서비스의 핵심인 REST API와 JSON 통신 방식을 이해했습니다. JPA SQL 로깅을 통한 내부 동작 분석과 API 통신의 중요성을 깨달은 것이 큰 성과였습니다.



Posts created 242

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top

원활한 서비스 이용을 위한 안내

현재 광고 차단 프로그램이 켜져 있습니다. 이로 인해 사이트의 일부 기능이 제한될 수 있으니, 쾌적한 이용을 위해 광고 차단 해제 후 새로고침 부탁드립니다.