@Service
, @Repository
, @RestController
어노테이션으로 컴포넌트 등록@Autowired
를 통한 의존성 주입(DI) 구성Member
도메인 생성 및 레이어 구성 (domain
, service
, repository
, controller
)MemoryMemberRepository
를 이용한 메모리 저장소 구현@RestController
와 @Controller
의 차이점 학습POST /members/new
)와 전체 조회 API (GET /members
) 구현 및 테스트feat:
, fix:
, refactor:
등@Controller
와 @RestController
의 차이로 인한 응답 혼동
목적 어노테이션 반환타입 JSON API 만들기 @RestController
List<Member>
등 객체 그대로HTML 페이지 렌더링 @Controller
String
(뷰 이름)String 값을 그대로 반환해 이래도 응답이 성공한 게 맞나 혼란을 겪었다
@Controller
와@RestController
의 목적이 다름을 학습
어노테이션 관련 import 누락으로 인한 compileJava FAILED
오류
build.gradle에 spring-boot-starter-web 추가
Optional.get()
사용 시 에러 메시지로 인한 디버깅
API 응답 형식과 상태 코드(200, 404, 500 등) 확인
@ModelAttribute
와 @RequestBody
의 사용 구분
항목 @ModelAttribute
@RequestBody
데이터 형식 form-data
, URL 쿼리스트링JSON, XML 등 사용 목적 웹 페이지 폼 처리 REST API에서 요청 데이터 처리 작동 방식 필드 바인딩 (스프링 바인딩 기능) HttpMessageConverter로 바디 변환 뷰와의 연관 주로 @Controller
에서 사용주로 @RestController
에서 사용예시 <form>
전송 데이터JS fetch/axios로 JSON 전송
구분 관계형 설치 필요 스키마 엄격성 주요 용도 H2 O X (임베디드) 엄격 개발/테스트용, 빠른 프로토타입 MySQL O O 엄격 서비스용, 트랜잭션, 복잡한 쿼리 MariaDB O O 엄격 MySQL 대체, 오픈소스 중심 서비스 MongoDB X O 느슨함 비정형 데이터, 유연한 스키마, 빅데이터
상황 적절한 DB 빠르게 화면 띄우고 기능 확인하고 싶을 때 H2 (임베디드, 설정 거의 없음) 실제 운영 가능한 시스템 만들고 싶을 때 MySQL / MariaDB (정석 RDBMS) 유저 감정, 태그, 유연한 구조로 다루고 싶을 때 MongoDB (문서 기반이라 자유도 높음)
controller
, service
, domain
, form
, repository
)다시 오랜만에 개발을 시작했다. 한 가지 오류를 잡으면 그 뒤 또 다른 오류들이 잇따르는 건 여전하여 한숨도 나오지만, 내가 이 오류를 잡아내 해결했다는 재미 역시 따른다. api 응답은 계속 애를 먹었던 부분이다. Swagger도 시도해보고 싶었는데, 자꾸만 오류가 떠서 이번에도 postman을 설치해보았다. 너무 오랜만이라 까먹은 것도 많은데 얼른 과거의 진도를 따라잡아 결과물을 내고 싶다.