개발/끄적이기

항해99 4주차 WIL

라니킴 2023. 1. 19. 20:53

Spring 숙련주차(2021.11.22~11.28)

 

😀 이번주
 
  저번 주에 이어서 spring을 학습하는 주였다. 저번 주에 비해서 지급된 강의의 체감 난이도가 쑤욱~ 올라간 느낌이었다. 저번 주 spring을 접하면서 많이 나왔던 용어나 spring을 공부한다면 알아야 할 개념들을 학습하는 시간이었다. 처음부터 이러한 어려운? 개념부터 공부를 시작하면 어려운 spring이 안그래도 더 어렵게 느껴져 포기하는 경우가 많다고 하길래 처음이니깐 느낌만 잡아가는 게 맞나보다하고 미루었다. 그 미루었던 궁금증을 이번 주에는 해결해야 했었고 이번 주 목표였다.

하지만 마음먹은 데로 잘 되지 않았다...
공부를 하면서 이해가 잘 가지 않아 여러 번 봐도 여전히 잘 모르겠다...
오 이제 조금 느낌이 오는 데? 해서 코드를 보면 이게 무슨 말인가, 이건 왜 사용했지? 그래서 이게 왜 좋다는 건데?? 차이점이 뭐야...
하고 모르는 점이 꼬리에 꼬리를 물어 생겼다. Spring을 본격적으로 시작한 지 일주일밖에 되지 않았으니 낙담하지 말자고 스스로 독려하며 이번 주를 버틴 것 같다. 어렵지만 재밌게 배우고 있는데 계속되는 에러에 멘탈이 정말 약해진 한 주였다.

개발 공부를 하면서 이렇게 머리가 나쁜 사람이었나 생각이 든다... 다들 너무 잘하고 있는 것 같은데 나만 뒤져치는 기분이 들어 더 열심히 해야겠다고 마음먹으면서도 자꾸 확신이 없어지는 한 주였다고 기록하고 싶다...

 

💡이번주 keyword

▶ SQL

DB에서 데이터를 꺼내려면 DB가 알아들을 수 있는 언어로 요청을 해야한다.

그 언어가 바로 SQL(Structed Query Language)이다.

 

 

▶ORM(Object Relational Mapping)

Object: "객체"지향 언어 (자바, 파이썬) Relational: "관계형" 데이터베이스 (H2, MySQL)

개발 언어로 개발하는데 DB에 데이터 요청이나 저장하는 로직은 SQL 언어를 사용해서 작성해줘야 하는 것이다. 이 얼마나 복잡하고 가독성 또한 좋지 않겠나..

이를 해결하기 위해 ORM이 나왔다. ORM이란, 데이터베이스 연결 시 SQL 언어가 아닌 애플리케이션의 개발언어로 데이터베이스를 접근할 수 있게 해주는 툴이다. Spring에서는 JPA 가 있다.

ORM

 

* JPA는?

Java Persistence API

자바 ORM 기술에 대한 표준 명세

직접 SQL  문을 작성하는 것을 JPA가 대신 것이다.

JPA


✅ 11.22(월)


- Controller, Service, Repository 역할 이해하고 프로젝트 구조화하기
- 왜 Controller, Service, Repository 구조로 작성해야 하는가?

   Servelt 사용해보고 왜 controller를 사용해야 하는지 알아보았다.

 request, response의 반복적인 작성을 spring이 대신해준다.
  API 마다 따로 파일을 만들 필요가 없이 한 곳에 작성하면 된다. 
 작성 시에는 유사한 성격의 API들끼리 묶어서 작성 연습하기!
 기능별로 클래스들을 모아놓으니 더 객체지향적인 것 같다고 생각했다. 


- MVC 이해하기.
- loC Container, DI 핵심 개념
- Spring security 


 첫 주차에 배웠던 인증 방식 쿠키/세션, JWT 토큰 방식이 다시 나왔다. 기억이 나지 않아 다시 한번 정리해 놓은 걸 다시 공부했다. 
     
✅ 11.23(화)

* 테스트 케이스 
* 개인과제 API, DB 설계

✅ 11.24(수)

과제 시작... MVC 패턴이 이해가지 않아 공부하고 해야 할 것 같다..

* JWT 인증방식
Spring security는 세션 기반 인증방식이다. Python 과제할 때 JWT token 방식을 이용해봤기 때문에 Spring에서는 어떻게 사용하는지 궁금해서 공부했다... 차원이 다른 어려움이었다. 

* thymeleaf
이전 과제에서 HTML, JQuery를 이용했는데 과제를 하면서 thymeleaf를 알게 되어서 한 번 사용해봤다.

Thyemeleaf는 서버사이드 자바 템플릿 엔진으로 spring MVC에서 주로 동적인 view를 만드는 데 사용한다. 

 

* 템플릿 엔진을 사용하는 이유 *

 

  1. 많은 코드를 줄일 수 있다.

     HTML에 비해 간단하다.

 

  2. 재사용성이 높다

     페이지 내에서 header나 footer등과 같이 바뀔 필요가 없는 부분도 다시 불러오는 것은 시간도 오래 걸리고 화면 깜      빡임도 있을 수 있다.  요즘은 서버사이드 렌더링을 하는 추세이다. 데이터만 바뀌면 되는 부분을 데이터만 새로 받아      와서 갈아 끼우는 방식으로 이해하면 된다. 

 

  3. 유지보수에 용이하다.

    동일한 Template 사용 시 Template과 넘겨주는 데이터만 수정하면 된다. 

 

✅ 11.25(목)

 

★ MVC 패턴 

화면에 보여줄 view에 대한 작업, DB에서 조회 혹은 DB에 저장할 내용을 중간에 가공, 처리하는 비즈니스 로직

 

저번 주 과제를 할 때는 post 요청은 받은 정보를 바로 controller-repository로 저장하는 과정을 거치고 update만 service에서 검증 후  repository에 저장하도록 했다.

하지만 이런 식으로 코드를 작성하는 것은 controller-service-repository 로 계층을 나누는 것에 반하는 작성이었다.

모든 계층을 순차적으로 지나가야 한다고 생각했다. 그렇게 하기 위해서 dto를 사용해 db와 분리해서 사용할 수 있도록 했다.

 

dto 왜 사용할까 

 

✅  11.26(금)

 

MVC 패턴

 

이제껏 service 는 클래스로 만들어서 사용해왔는데 다른 사람들의 코드를 보면서 service는 Interface로 생성하고 serviceImpl 로 구현해서 사용하는 경우가 많은 것을 봤다. 1:1로 매칭 되는 것 같은데 굳이 Interface로 구현해서 사용하는 이유가 궁금해서 검색을 해 보았다. 

 

[Spring] Service와 ServiceImpl - Code with Jamie

Jamie. Turning coffee into code

itzjamie96.github.io

 

 

MVC 구조에서 service와 serviceImpl

이제는 JSP 개발시 MVC 패턴으로 작업하는게 당연시 되고있다. MVC패턴이란 화면에 보여줄 view 에 대한 작업, DB에서 조회 혹은 DB에 저장할 내용을 중간에 가공, 처리하는 비즈니스로직, DB에 연결

multifrontgarden.tistory.com


 

'개발 > 끄적이기' 카테고리의 다른 글

2022.2.6(일) study  (0) 2022.02.07
항해 12주차 WIL  (0) 2022.01.29
항해 11주차 WIL  (0) 2022.01.24
2022.01.22 TIL  (0) 2022.01.23
항해 11주차 WIL  (0) 2022.01.17