[TIL - 250723]

sum·2025년 7월 23일
0

📖 오늘 공부한 내용

  • Spring Boot 프로젝트 구조 설정 및 실행
  • @Service, @Repository, @RestController 어노테이션으로 컴포넌트 등록
  • @Autowired를 통한 의존성 주입(DI) 구성
  • Member 도메인 생성 및 레이어 구성 (domain, service, repository, controller)
  • MemoryMemberRepository를 이용한 메모리 저장소 구현
  • @RestController@Controller의 차이점 학습
  • 회원가입 API (POST /members/new)와 전체 조회 API (GET /members) 구현 및 테스트
  • Gradle 로그 해석과 오류 디버깅 경험
  • 커밋 메시지 컨벤션: feat:, fix:, refactor:

😵 어려웠던 내용

  • @Controller@RestController의 차이로 인한 응답 혼동
목적어노테이션반환타입
JSON API 만들기@RestControllerList<Member> 등 객체 그대로
HTML 페이지 렌더링@ControllerString (뷰 이름)

String 값을 그대로 반환해 이래도 응답이 성공한 게 맞나 혼란을 겪었다 @Controller@RestController의 목적이 다름을 학습

  • 어노테이션 관련 import 누락으로 인한 compileJava FAILED 오류

    build.gradle에 spring-boot-starter-web 추가

  • Optional.get() 사용 시 에러 메시지로 인한 디버깅

  • API 응답 형식과 상태 코드(200, 404, 500 등) 확인


❓ 궁금한 내용과 부족했던 내용

  • 테스트 코드 작성 시 어떻게 체계적으로 구성할지 (Coverage까지 고려)
  • @ModelAttribute@RequestBody의 사용 구분
항목@ModelAttribute@RequestBody
데이터 형식form-data, URL 쿼리스트링JSON, XML 등
사용 목적웹 페이지 폼 처리REST API에서 요청 데이터 처리
작동 방식필드 바인딩 (스프링 바인딩 기능)HttpMessageConverter로 바디 변환
뷰와의 연관주로 @Controller에서 사용주로 @RestController에서 사용
예시<form> 전송 데이터JS fetch/axios로 JSON 전송
  • H2와 실제 DB(MySQL/MariaDB)로 전환 시 차이점
    구분관계형설치 필요스키마 엄격성주요 용도
    H2OX (임베디드)엄격개발/테스트용, 빠른 프로토타입
    MySQLOO엄격서비스용, 트랜잭션, 복잡한 쿼리
    MariaDBOO엄격MySQL 대체, 오픈소스 중심 서비스
    MongoDBXO느슨함비정형 데이터, 유연한 스키마, 빅데이터
상황적절한 DB
빠르게 화면 띄우고 기능 확인하고 싶을 때H2 (임베디드, 설정 거의 없음)
실제 운영 가능한 시스템 만들고 싶을 때MySQL / MariaDB (정석 RDBMS)
유저 감정, 태그, 유연한 구조로 다루고 싶을 때MongoDB (문서 기반이라 자유도 높음)
  • 이후 로그인 기능 설계 방식 (세션 기반? JWT?)
  • 패키지 구조 구성 고민 (controller, service, domain, form, repository)
  • api 응답 형식

💬 느낀점

다시 오랜만에 개발을 시작했다. 한 가지 오류를 잡으면 그 뒤 또 다른 오류들이 잇따르는 건 여전하여 한숨도 나오지만, 내가 이 오류를 잡아내 해결했다는 재미 역시 따른다. api 응답은 계속 애를 먹었던 부분이다. Swagger도 시도해보고 싶었는데, 자꾸만 오류가 떠서 이번에도 postman을 설치해보았다. 너무 오랜만이라 까먹은 것도 많은데 얼른 과거의 진도를 따라잡아 결과물을 내고 싶다.

0개의 댓글