📌 학습내용
● Java & Spring 기본 용어와 개념 정리(주관적일 수 있음!)
● Web Service 구조 파악
서버를 배우는 지금의 상황에서 JPA, Repository, Service, Controller의 각각 기능과 DTO, Model의 역할을 익히는데 집중했다.
JPA
- Java Persistence API. 엄밀히 말하면 Spring Data JPA와는 동일한 개념이 아니다(Spring Data JPA가 좀 더 하위개념이라고 볼 수 있다.)
- Java 언어와 SQL 언어의 통역을 담당한다. JPA의 문법을 조금 익힌다면 Spring 내에서 별도로 SQL언어를 사용해가면서 데이터 연결, CRUD, 연결 해제를 직접 할 필요 없이 JPA가 그 기능을 대신 해준다.
Repository
- Spring Framework의 해당 프로젝트에서 어떤 방식으로 SQL을 불러들일지에 대해 정리해놓는 Interface.
- Interface는 멤버변수 없이 멤버메소드만 존재하는 클래스이다.
Service
- Business Logic을 구현하는 계층이다.
- 데이터에 대한 가공이 필요한 경우 service에서 처리된다.(CRUD중 Update)
- 이 때 불러오는 변수들은 final로 선언해준다.
Controller
- 서버의 계층중 Client와 가장 가까운 계층
- Return 값으로 JSON을 반환하여 client와 통신(@RestController)을 하거나, parameter로 페이지 구현에 필요한 정보를 담아 return 값을 html파일명의 string 값을 나타낼 수 있다(@Controller)
● Java Spring으로 나만의 항해 블로그 만들기
- FindbyId라는 Repository method와 Optional이라는 자료형에 대해 익숙하지가 않아 폭풍검색으로 몇일을 허비했다..
이 방황 덕분(?)에 Java Template Engine의 Thymleaf로 페이지를 구현하는 뜻밖의 소득도 있었다.
/*ArticleViewController.java 클래스 파일*/
@RequiredArgsConstructor
@Controller
public class ArticleViewController {
private final ArticleRepository articleRepository;
@GetMapping("/api/articles/detail/{id}")
public String readOneArticle(Model model,Article article, @PathVariable Long id) {
model.addAttribute("article", articleRepository.findById(article.getId()).get());
return "articleview.html";
}
}
📌 느낀점
● Week1의 미니프로젝트 데자뷰
- 항해를 시작하고 첫주 미니프로젝트의 과제로 했던 웹어플리케이션이 많이 생각났다.
가장 뚜렷한 차이가 있었다면 당연히 Python Flask FrameWork로 구현했던 과거와는 달리 이번에는 Java Spring Framework로 구현을 했다는 것.
JSON으로 데이터를 주고받는 방식은 아직도 많이 서툴다고 느꼈다.
이번 한주에서 가장
SSR(Server Side Rendering)과 CSR(Client Side Rendering)
● 교류를 통한 성장
-
● 절차적 -> 객체지향
-
📌 아쉬웠던 점
● '어떻게 질문(검색)할지 감이 잡히지 않는 것'
- 무슨 언어를 배우든 걸음마 단계에서 가장 껄끄러운 상황 아닐까? 학습 내용의 맨 마지막부분에 언급했던 Repository.findById로 Optional 값을 받는 부분에서 2일 이상을 고스란히 바쳤다. 수많은 시도의 검색으로 결국 해결을 했다.
함께 배우고 있는 사람들이 하나같이 하는 말이 이렇게 직접 부딪히며 해결하는 에러는 기억에 오래 남는다고 하던데.. 다시는 이런 문제로 같은 실수를 반복하지 않아야겠다🔥
● 시간효율
- 오전9시부터 오후9시까지 온전히 코딩을 하기에는 집중력이 흐트러지는 순간이 꽤 자주 있었다. 그러다보니 오후9시 이후로 미련을 가진 채 좀 더 하다가 애매하게 잠든게 다반사였던 한주였다. 그날그날의 목표를 좀 더 세분화해서 단위시간 활용 효율을 높여야겠다.
● 깃허브..
- 죽이됐든 밥이됐든 그날그날 작업했던 코드들을 꾸준히 올리려고하는데, 이것역시 습관화가 잘 안된다. Readme 작성, gitignore등등 개인 Repository 관리에 대한 부분과 협업시 고려해야할 Branch merge 등등도 평생공부가 될것같으니 기본을 잘 다져나가야겠다.
🧐 좀더 공부해볼 개념
- p6spy
- Slf4j
- Template Engine (Mustache, Thymeleaf 등등..)
- Hibernate
- @RequestBody
- @Controller vs @RESTController
- Optional String
- @Bean
- xml과 jsp
- @ModelAndView
- Servlet
- IoC(Inversion of Control)
- DI(Dependency Injection)
- JPA Repository의 findbyId vs findallbyId
Written by Joony-up
@브라운핸즈 도곡점
2021.03.28 19:30-21:28
'Computer 💻 > 항해99 ⛵️' 카테고리의 다른 글
항해일지 WIL _ Week06 (0) | 2021.04.12 |
---|---|
항해99 WIL : Week5 (0) | 2021.04.04 |
항해99 WIL : Week03 (0) | 2021.03.21 |
항해99 WIL : Week02 (0) | 2021.03.14 |
항해99 WIL : Week01 (0) | 2021.03.07 |