Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 1차원 DP
- 2차원 dp
- 99클럽
- @BeforeAll
- @BeforeEach
- @Builder
- @Entity
- @GeneratedValue
- @GenericGenerator
- @NoargsConstructor
- @Query
- @Table
- @Transactional
- Actions
- Amazon EFS
- amazon fsx
- Android Studio
- ANSI SQL
- ApplicationEvent
- assertThat
- async/await
- AVG
- AWS
- Azure
- bind
- builder
- button
- c++
- c++ builder
- c03
Archives
- Today
- Total
기록
[튜토리얼] spring boot 게시판 curd 본문
1. 개요
최소한의 어노테이션과 기능을 사용하여 게시판의 curd api를 구현하였다. 추후에 여러가지를 추가 삭제하여 더 나은 구조를 만들어나가고자 한다.
2. 구조
일반적인 서비스에는 뷰와 데이터데이스가 붙어 아래처럼 구성되어 있으나, 현재까지의 프로젝트에서는 Contorller, Service, Dao만을 사용하고 있다.
3. 코드
기존의 프로젝트(2022.08.22 - [backend] - [튜토리얼] intellij/create spring boot project)에 다음과 같이 파일들을 생성한다.
VO
@Getter
@Setter
@ToString
@AllArgsConstructor
public class NoticeVo {
private Long id;
private String title;
private String content;
}
Controller
@RestController
@RequestMapping("/notice")
public class NoticeController {
private Map<Long, NoticeVo> noticeVoMap = new HashMap<>();
private final NoticeService noticeService;
public NoticeController() {
noticeVoMap.put(1L, new NoticeVo(1L, "title1", "content1"));
noticeVoMap.put(2L, new NoticeVo(2L, "title2", "content2"));
noticeVoMap.put(3L, new NoticeVo(3L, "title3", "content3"));
this.noticeService = new NoticeService(new NoticeDao(noticeVoMap));
}
@PostMapping
public void create(@RequestBody NoticeVo notice){
noticeService.create(notice);
}
@PutMapping
public void update(@RequestBody NoticeVo notice){
noticeService.update(notice);
}
@GetMapping
public List<NoticeVo> read(){
return noticeService.read();
}
@DeleteMapping("/{noticeId}")
public void delete(@PathVariable("noticeId") Long id){
noticeService.delete(id);
}
}
Service
public class NoticeService {
private final NoticeDao noticeDao;
public NoticeService(NoticeDao noticeDao) {
this.noticeDao = noticeDao;
}
public void create(NoticeVo notice){
noticeDao.create(notice);
}
public void update(NoticeVo notice){
noticeDao.update(notice);
}
public List<NoticeVo> read(){
return noticeDao.read();
}
public void delete(Long id){
noticeDao.delete(id);
}
}
Dao
public class NoticeDao {
private final Map<Long, NoticeVo> noticeMap;
public NoticeDao(Map<Long, NoticeVo> noticeMap) {
this.noticeMap = noticeMap;
}
public void create(NoticeVo notice){
noticeMap.put(notice.getId(), notice);
}
public void update(NoticeVo notice){
noticeMap.replace(notice.getId(), notice);
}
public List<NoticeVo> read(){
return noticeMap.keySet().stream()
.map(noticeMap::get)
.collect(Collectors.toList());
}
public void delete(Long id){
noticeMap.remove(id);
}
}
4. 결과
postman을 사용하여 직접 만든 api를 테스트했다. 삽입, 수정, 조회, 삭제가 의도한대로 동작하는 것을 확인할 수 있었다.
Create
Update
update 방식에는 데이터 전체를 갈아끼우는 put방식과 일부만을 교체하는 patch방식이 있다. 이번에는 put방식으로 update함수를 구현했다.
Read
Delete
5. 마무리하면서
파일구조를 다시 살펴보면, 컨트롤러는 서비스를 서비스는 다오를 호출하고 있다. 기존에 안드로이드에서 DI를 접할 일이 있었는데, 한번에 이해하기는 어려웠다. 스프링을 다시 공부하면서 Controller, Service, Dao간 의존성에 주입에 대해 공부할 수 있었고, 이를 통해 DI를 활용하는 경험을 할 수 있었다. 다음 포스팅에서는 여러 방법으로 의존성 주입을 하는 방법을 다뤄보고자 한다.
'Web > Spring' 카테고리의 다른 글
[튜토리얼] springboot에 데이터베이스(h2) 연결하기(2) (0) | 2022.09.01 |
---|---|
[튜토리얼] springboot에 데이터베이스(MySql) 연결하기(1) (0) | 2022.08.31 |
[튜토리얼] create spring boot project (0) | 2022.08.22 |
[환경설정] macOS/install Eclipse (0) | 2022.08.15 |
[환경설정] macOS/install java8 (0) | 2022.08.10 |
Comments