TIL - 20250715

juni·2025년 7월 15일

TIL

목록 보기
65/317

0715 학습 정리: Spring Boot 실습 - JSON 요청/응답, Member & Feedback API, SSR/JSP

✅ 1. Member & Feedback REST API

📌 MemberController (v3-2)

  • JSON 기반 POST 요청으로 회원 등록
  • UUID로 유저 고유 식별자 생성
  • @RequestBody 사용
@PostMapping
public String join(@RequestBody Member member) {
    member.setUid(UUID.randomUUID().toString());
    memberStore.put(member.getUid(), member);
    return "새로운 멤버가 생성됨! - nickname: " + member.getNickname();
}
  • GET /api/v3-2/members 로 전체 회원 조회

📌 FeedbackController

  • 피드백 등록 시 POST 요청으로 객체 전달
  • Math.random() 으로 id 부여 (간단 처리)
@PostMapping
public String createFeedback(@RequestBody Feedback feedback) {
    feedback.setId((long) (Math.random() * 1000000 + 1));
    feedbackList.add(feedback);
    return "Feedback created: " + feedback;
}
  • GET /api/v3-2/feedback 으로 전체 피드백 조회

✅ 2. MemberController (v3-3): ResponseEntity 활용

📌 예외 응답 처리

if (member.getAccount().isBlank()) {
    return ResponseEntity
        .badRequest()
        .body("계정은 필수값입니다.");
}

📌 응답 헤더 추가 및 JSON 응답

HttpHeaders headers = new HttpHeaders();
headers.add("my-pet", "cat");
headers.add("hobby", "swimming");

return ResponseEntity
    .ok()
    .headers(headers)
    .body(memberList);

📌 단일 회원 조회 (PathVariable)

@GetMapping("/{account}")
public ResponseEntity<?> findOne(@PathVariable String account) {
    Member found = ...;
    return ResponseEntity.ok(found);
}

✅ 3. CORS 설정 (전역 설정)

  • 특정 클라이언트에서 API 호출 허용
@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/v3-3/*")
                .allowedOrigins("https://127.0.0.1:5500")
                .allowedMethods("GET")
                .allowedHeaders("*");
    }
}

✅ 4. SSR - JSP & 서버사이드 렌더링

📌 PetController + JSP

@GetMapping("/pet-page")
public String petPage(Model model) {
    model.addAttribute("petList", petList);
    return "chap4-1/pet";
}

📌 pet.jsp

<c:forEach var="pet" items="${petList}">
    <li>${pet.name}, ${pet.kind}, ${pet.age}살, ${pet.injection}</li>
</c:forEach>

✅ 5. SSR - Thymeleaf

📌 ThymeleafController

@GetMapping("/hobby-page") public String hoobyPage(Model model) { model.addAttribute("username", "또치"); model.addAttribute("hobbies", List.of("동생 괴롭히기", "폭식하기")); return "hobby"; }

📌 hobby.html

<h2 th:text="${username}"></h2>
<li th:each="hobby : ${hobbies}" th:text="${hobby}"></li>

✅ 요약

  • @RestController@ResponseBody 기반의 JSON API 처리법 학습
  • @RequestBody, @PathVariable, @RequestParam 활용법 익힘
  • ResponseEntity를 활용한 예외 처리와 커스텀 응답 구성
  • JSP와 Thymeleaf를 통한 SSR 방식 화면 렌더링 방법 익힘

0개의 댓글