일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- Anaconda
- 파이썬
- Machine Learning
- taskkill
- 자바파이썬
- expression statement is not assignment or call html
- 클라이언트사이드렌더링
- PID
- address
- SSR
- github markdown
- terminate
- 비동기
- Morphological analysis #Corpus
- Technical Writing
- 파이콘
- github
- khaiii
- gitbash
- 출처: 자바의 신 8장
- 플젝후체크
- 카우치코딩 #couchcoding #6주포트폴리오 #6주협업프로젝트v
- #스파르타코딩클럽후기 #내일배움캠프후기
- 모바일웹스킨
- 코딩온라인
- 카우치코딩 #couchcoding #6주포트폴리오 #6주협업프로젝트
- 필사
- 마크다운
- Kakao
- 서버사이드렌더링
- Today
- Total
개발 일기
질문게시판 CR 구현(1) Dto 생성자, H2 DB, application properties 설정 [편집 중] 본문
질문게시판 CR 구현(1) Dto 생성자, H2 DB, application properties 설정 [편집 중]
flow123 2021. 11. 27. 21:09스프링 꼬꼬마는 모든 코드들이 낯설다.
그래서 오늘은 하나하나 뜯어보고, 익숙해져봐야지.
내가 의구심이 가는 코드를 주석처리하면, 우리 친절한 인텔리제이가 하나하나 설명해준다.
아래코드에서, requestDto로 Article 생성자를 만드는 것이 잘 와닿지 않았다. 생성자를 왜 클래스에 만들까?
한번 Article 이라는 객체 클래스와 Article Service를 비교해보자.
왼쪽 하단의 dto 생성자를 지우면, ArticleService에서 articleRequestDto를 넣은 객체를 생성할 수 없다.
이떄, Service에서는 cannot resolve a constructor 라는 에러가 뜬다. 클래스에 articleRequestDto가 들어가는 생성자가 있어야만, 서비스에서 객체를 생성할 수 있는 것이다.
이번에는 클래스 생성자에 requestDto를 지워볼까? (주석 처리)
Dto 안의 title 과 Content 속성을 객체의 멤버변수 title, content 에 매핑하는 생성자다.
둘의 이름이 같기 때문에, 구분해주기 위에 객체는 this.라고 표시해준다.
참고로 멤버변수는 클래스 내에서 선언되는 변수다.
원래 requestDto 를 쓰면, 가져오지 않은 객체이니 당연히 cannot resolve symbol 메시지가 뜬다.
윗 줄을 ArticleRequestDto로 바꿔보니, 빨간 줄은 사라졌지만, getTitle() 을 해결하지 못한다.
에러메시지는 다음과 같다.
Non-static method 'getTitle()' cannot be referenced from a static context
Static 과 non-static의 차이가 뭘까?
static은 이미 객체화 되어 있어서 바로 사용할 수 있고,
non-static은 아직 객체화가 되어 있지 않아서 (아직 존재 x) new 키워드로 객체화한 후 (생성 후 ) 사용 가능하다.
ArticleRequestDto를 빼고 객체 requestDto만 들어간다면?
역시 resolve 를 할 수 없다고 만든다. Dto가 들어간 생성자를 만들 때,
타입 파라미터(클래스)와 객체를 모두 넣어줘야 한다.
public Article (ArticleRequestDto requestDto) {
this.title = requestDto.getTitle();
this.content = requestDto.getContent();
}
이 생성자는 클래스에서 생성되어서, Service 와 Controller 를 여행한다 (똑같은 형태로!)
클래스에서 정의되면,
프론트에서 -> RequestMapping으로 연결되어 Controller 로 -> Service에서 실행 되고 -> Repo 에 저장된다.
아래에 Long id 나 기본 값은, 이미 클래스를 정의하면서 생성되는 생성자이기 때문에, DTO처럼 따로 정의할 필요가 없는 듯 하다.
#데이터를 입력했고, 프론트 Getlist 로도 잘 찍히는데, 인텔리제이 내부 database에는 쌓이지 않는다..
이게 대체 무슨일일까. 며칠 전에는 되었는데??
알고보니 AutoSERVER를 설정해야하는데 Application properties에 코드를 지웠다. 뭐가 안될때 이것저것 바꿔놓으니 뭘 바꿨는지도 기억이 안나..
설정참조 출저: 스프링4 강의노트
application properties 파일도 추가하니, 이제 select 문도 로그에 찍힌다.
데이터 저장도 잘 되고, get Articles 도 안되던 것이 된다! 아마 db를 생성할 때는 username 을 설정했는데 아까의 application code 에는 username 도 빠져있고 show-sql 도 빠져 있어서. 그랬던 것 같다.
spring.h2.console.enabled=true
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:./1119db;AUTO_SERVER=TRUE
spring.datasource.username=sa
spring.datasource.password=
spring.thymeleaf.prefix=classpath:/static/
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=true
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type.descriptor.sql=trace
트랜잭션: 데이터베이스에서 데이터에 대한 하나의 논리적 실행단계
-더 이상 쪼갤 수 없는 최소 단위의 작업.
-모두 저장 or 아무것도 저장되지 않음.
ACID (원자성, 일관성, 고립성, 지속성)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어
롤백(영어: rollback)은 데이터베이스에서 업데이트에 오류가 발생할 때, 이전 상태로 되돌리는 것을 말한다. 후진 복귀라고도 한다.
트랜잭션 시작
- A 계좌 잔고 200,000 원 이상 확인
- A 계좌 잔고: 1,000,000 원
- A 계좌 잔고 200,000 원 금액 감소
- A 계좌 잔고: 800,000 원 (1,000,000 원 - 200,000 원)
- B 계좌 잔고 200,000 원 금액 증가
- B 계좌 잔고: 1,200,000 원 (1,000,000 원 + 200,000 원)
모두 성공 시 ⇒트랜잭션 Commit
중간에 하나라도 실패 시 ⇒ 트랜잭션 Rollback
<출처: 위키백과, 스파르타 코딩클럽 스프링 강의 >
https://almost-native.tistory.com/368
'TIL(Today I learned)' 카테고리의 다른 글
[노동요 프로젝트 - API 명세서] Restful하게 API 설계하기 (1) | 2022.01.25 |
---|---|
TIL - 프로젝트 예외처리, git show history (0) | 2022.01.03 |
TIL - 1123 클래스 DB설계 (0) | 2021.11.23 |
2달차 회고 WIL - 4FS (0) | 2021.11.22 |
위클리테스트 - 스프링 CR (0) | 2021.11.19 |