생각정리/항해99

[주특기 1주차] Spring 2일차

생각중임 2023. 8. 27. 00:01

Spring 입문주차 2주차


IoC(제어의 역전)

메서드나 객체의 호출작업을 개발자가 결정하는 게 아니라 외부에서 결정되는 것

객체의 의존성을 역전시켜 객체 간의 결합도를 낮추고 유연성을 높인다.

 DI(의존성 주입)

객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식

모듈 간의 결합도를 낮추고 유연성을 높인다.

JPA (Java Persistence API)

자바의 ORM 기술에 대한 API 표준 명세이고, 인터페이스의 모음이다. 가장 대중적인 프레임워크가 '하이버 네이트'이다.

JDBC API를 사용하여 SQL을 호출하여 DB와 통신한다.

Spring Data JPA

JPA를 쉽게 사용할 수 있게 만들어놓은 모듈

중요한 개념들을 일단 간단하게 정리를 해보고 아직까지 이해를 완벽하게 하지 못해서 반복해서 사용을 해보고 강의들을 보면서 익숙해지면 이해를 좀 더 할 수 있지 않을까 싶다.

 

Spring 과제 Level 1


서비스 요구사항

  1. 아래의 요구사항을 기반으로 Use Case 그려보기
  2. 전체 게시글 목록 조회 API
    • 제목, 작성자명, 작성 내용, 작성 날짜를 조회하기
    • 작성 날짜 기준 내림차순으로 정렬하기
  3. 게시글 작성 API
    • 제목, 작성자명, 비밀번호, 작성 내용을 저장하고
    • 저장된 게시글을 Client 로 반환하기
  4. 선택한 게시글 조회 API
    • 선택한 게시글의 제목, 작성자명, 작성 날짜, 작성 내용을 조회하기 (검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)
  5. 선택한 게시글 수정 API
    • 수정을 요청할 때 수정할 데이터와 비밀번호를 같이 보내서 서버에서 비밀번호 일치 여부를 확인 한 후
    • 제목, 작성자명, 작성 내용을 수정하고 수정된 게시글을 Client 로 반환하기
  6. 선택한 게시글 삭제 API
    • 삭제를 요청할 때 비밀번호를 같이 보내서 서버에서 비밀번호 일치 여부를 확인 한 후
    • 선택한 게시글을 삭제하고 Client 로 성공했다는 표시 반환하기

Usecase Diagram

 

 

API 명세서

기능 method url request response
게시물 전체 조회 GET /api/board/search   {
  "title" : "제목",
  "username" : "이름",
  "contents" : "내용",
  "modifiedTime" : "2023-08-26T18:43:01.226062”
}
게시물 선택 조회 GET /api/board/search/검색어 {
  "title" : "title",
  "username" : "username",
  "contents" : "contents",
  "modifiedTime" :  "modifiedTime"
}
{
  "title" : "제목",
  "username" : "이름",
  "contents" : "내용",
  "modifiedTime" : "2023-08-26T18:43:01.226062”
}
게시물 작성 POST /api/board/create {
  "title" : "title",
  "username" : "username",
  "contents" : "contents",
  "password" : "password",
}
{
  "title" : "제목",
  "username" : "이름",
  "contents" : "내용",
  "modifiedTime" : "2023-08-26T18:43:01.226062”
}
게시물 수정 PUT /api/board/게시물 ID {
  "id" : "id",
  "title" : "title",
  "username" : "username",
  "contents" : "contents",
  "password" : "password"
}
{
  "title" : "제목",
  "username" : "이름",
  "contents" : "내용",
  "modifiedTime" : "2023-08-26T18:43:01.226062”
}
게시물 삭제 DELETE /api/board/게시물 ID {
  "id" : "id",
  "password" : "password"
}
 
다른 API를 봤을 때 일단 수정, 삭제 시에는 url에 id가 들어가서 request에 들어갈 필요가 없었다.
url의 경우에도 구분을 한눈에 주는 게 좋아 보여서 구분을 주었는데 예시를 보니 동일 한 주소에서 method로만 구분을 하여 사용을 해서 수정을 해야 될지 봐야겠다.
계속 진행하면서도 처음 생각한 것 과 다르게 구현할 점들이 생겨 usecase와 API명세서도 보완을 해보면서 작성 연습을 해봐야겠다.
과제는 게시글 목록 조회, 작성, 선택 게시글 조회, 수정, 삭제를 구현하는 건데, view로 보이게 먼가 더 편한 거 같아 json형식으로 보내는 것 자체가 구현하는데 오래 걸렸다. 제대로 한 건지는 모르지만 일딴 리스폰하기에...
controller와 service도 재대로 구분이 된 지도 잘 모르겠다.
일단은 선택 게시글 조회에서 작성 날짜로 조회하는 것을 아직 구현하지 못했고 게시글 수정 시 비밀번호 일치를 하면 변경된 게시글이 반환되는데 비밀번호가 틀렸을 경우 수정이 안된 게시글이 반환되고 따로 메시지나 다른 여부가 안내되어 있지 않아 확인을 해봐야겠다.