IntelliJ 실행하기
* 코드 새로 작성하면 재시작하기!!
python venv처럼 setting하는 것이다.
ex) dependency에 MySQL Driver를 import 하면 프로젝트에서 mysql 사용 가능하다.
👉🏻 spring의 dependency가 python의 interpreter라고 보면 된다.
이 설정들은 어디에서 볼까?
👉🏻 build.gradle에 들어있다.
IntelliJ 실행 후 log를 확인한다.
Tomcat started on port(s): 8080 (http) with context path ''
path'' 👉🏻 기본 포트
동작했으니 확인한다.
http://localhost:8080 주소로 접속한다. 👉🏻 스프링 작동을 완료했다.
폴더 구조를 확인한다.
/src # 최상위
- /main # 실제 프로젝트에 포함된 부분
- /java # 자바 파일이 위치
- /com
- /sparta
- /item01
- Item01Application.java # 메인 파일
- /resources # 설정파일, 스태틱 파일
- application.properties # 메인 설정 파일
- /static # 스태틱 파일(image, javascript, css, html ...)
- /templates # html 파일
- /test # 테스트에 필요한 부분
- /java
- /com
- /sparta
- /item01 #테스트 관련 자바 파일
resource가 html, css, js를 넣는 폴더
resources/static에서 static은 aws 정적 웹 호스팅에서 나온 static이라고 생각하면 된다.
Annotation _ 편하고 유연하게 사용 : 특정한 기능을 하는 것
@Interface를 ctrl + 클릭 해보면 인터페이스 처럼 설계되어 있는 것을 볼 수 있다.
JAVA Class
클래스만 보는게 아니라 객체 지향을 본다.
객체 지향이란 객체가 각각의 역할과 책임이 있고 메세지로 상호작용해서 협력해 나가는 것이다.
처리할 수 있는 메세지들, 어떤 동작들 .. 그런 것들을 모아서 인터페이스가 된다.
인터페이스를 쓰는 이유는? 다형성 때문이다.
이 전에 다형성이 무엇인지에 대해 이해한 것을 적었다. ( 2021.11.07 - [spartacodingclub/WIL] - 8주차 )
팀원분과 다형성이 무엇인지에 대해 의견이 달라서 튜터님께 맞게 이해한 것인지 질문을 드렸더니
다형성을 왜 쓰는지 예시를 통해 아는게 더 중요하다고 하셨다.
👉🏻 다형성을 쓸때와 안쓸때는 코드적으로 어떤 차이가 생기는지 이해해보는게 중요하다!
<[OOP] 다형성(Polymorphism)이란?>, https://steady-coding.tistory.com/446
Layered Architecture
사용자에게 Controller가 요청을 받으면 service를 호출하고 service에서 처리한다.
db가 필요하면 Repository에 요청을 해서 db를 가져와서 client에게 view를 통해 보내준다.
Controller : 사용자가 주는 파라미터 값을 변수로 저장하고 서비스단에 넘기기
사용자 요청 실패하면 에러메세지를 띄우는 역할
Service : 사용자의 요청을 실질적으로 처리
Repository : db에 data를 가져오고 사용하는 중개자 (CRUD 사용 가능)
ex. Select ~ from ~, insert, update
DTO는 용도에 따라서 건드리는 얘
🤔❓ IntelliJ에서 Layer Architecture를 구분하는 것은 package인 건가?
어떻게 보면 package로 구분하는 것처럼 보일 수 있다.
사실은 class로 구분을 하는데 class가 많아져서 package안에 class를 넣어 관리를 하다보니
package로 구분하는 것처럼 보인다.
Getter/Setter
Lombok 이용
https://mangkyu.tistory.com/78
Gradle
디펜더시 추가하기 (참고)
Json In Java 코드는 build.gradle에 dependencies 에 넣는다.
코끼리 그림을 클릭하고 gradle build를 더블클릭하면 왼쪽 탭에 build라는 폴더가 생성된다.
RDBMS
데이터를 create.
그 데이터는 파일이 될 수도 있고 DB가 될 수 있다.
DB 중 RDBMS, 그 중에서 H2를 사용한다.
H2를 선택한 이유 매우 빠른 오픈 소스이기 때문이다.
( In-memory DB인 H2.
인메모리 DB란 서버가 작동하는 동안에만 내용을 저장하고,
서버가 작동을 멈추면 데이터가 모두 삭제되는 데이터베이스를 말한다. )
H2 웹콘솔 설정 👉🏻 application.properties 파일에 넣어준다.
스프링 부트 실행하기 👉🏻 프로젝트명Application
H2 실행되는지 test 하기 👉🏻 http://localhost:8080/h2-console
JPA 시작
JPA는 SQL을 쓰지 않고 데이터를 생성, 조회, 수정, 삭제할 수 있도록 해주는 번역기
( 테이블 구조로 쓸 수 있게 )
전체 코드가 Domain이고, DTO는 용도에 따라서 건드리는 얘
( Domain != DTO )
application.properties 👉🏻 세팅 정리
Interface란?
JPA는 Repository를 통해서만 사용할 수 있다
인터페이스는 클래스에서 멤버가 빠진, 메소드 모음집이라고 보면 된다.
[OOP] 다형성(Polymorphism)이란? , https://steady-coding.tistory.com/446
상속
"이미 만들어둔거 가져다 쓰자!"
부모의 메소드랑, 멤버변수를 상속받을 수 있고 오버라이딩을 해서 재 정의 해서 쓸수 있다.
그리고 부모형의 변수로 자식객체를 생성할 수 있다
(멤버 함수= 메소드)
* 부모클래스의 메소드를 자식클래스가 동일한 형태로 또다시 구현하는 행위를
메소드 오버라이딩(Method Overriding)이라고 한다. (※ 메소드 덮어쓰기)
* 상속을 위한 기본조건
- 상속 관계에 있는 두 클래스 사이에는 IS - A 관계가 성립해야한다.
< 상속 조건 및 특징 >, https://codedragon.tistory.com/3975
JPA 심화
Create는 http 메소드 어디에 매핑이 될까?
Create 👉🏻 POST
Read 👉🏻 GET
Update 👉🏻 PUT
Delete 👉🏻 DELETE
* Spring 실습을 하면서 Github에 코드와 정리를 같이 하고 있는데 JPA 심화 부분에서
새로 알게 된 사실들이 많아 Github Readme.md에 정리했다.
다른 부분들은 최소한의 정보+오류 해결한 방법에 대해서만 담고 있는데
05_JPA 심화 부분은 로그 보는 연습을 하면서 정리한 부분들이 많아 링크 첨부로 대신한다😆
어제 새벽까지 실습하다가 3시간만 자고 다시 수업들어야해서 졸려 죽을뻔했다...🥱
전체적으로 총 정리하는 느낌으로 진행하고 진도를 안나가서 그런지 잘 따라간 느낌이 들었다.
그리고 실습하면서 느낀건데 실강할 때 진도가 빨라서 못 쫓아가는 줄 알았는데
그냥 말이 빠르셔서 내가 잘 못듣는 거였다.
팀원분들도 못알아듣는다고 하는데 어떻게 잘 따라가는거지.. 🤔