dev-miri
[Server-7주차] 프레임워크 사용하기 실습 본문
[개발환경]
local에서 개발->Test->EC2(배포)
템플릿 파일 : https://github.com/udemy-comgongbro/udemy_server_practice_springboot
GitHub - udemy-comgongbro/udemy_server_practice_springboot
Contribute to udemy-comgongbro/udemy_server_practice_springboot development by creating an account on GitHub.
github.com
<README 참고>
-baseResponseStatus에서 에러코드 관리
-config, utils 부가적인 정보/src에 코드 작성:src는 도메인별로 작성
-application에서 db정보 관리
-git ignore에 secret 폴더와 application.yml 폴더 추가->보안에 민감한 부분
-spring annotation이 많다->@로 된 annotation은 구글링하면서 알아보기!

aplication.yml에서 db정보 입력 후
testcontroller에서 db연결 테스트
sudo service nginx restart
nohub java -jar build/libs/demo-0.0.1-SNAPSHOT.jar
//혹은
sudo systemctl reload nginx //서버 설정 다시 읽어오게 함

https://devmiri.tistory.com/12
Spring boot/MYSQL 연동 트러블슈팅
Spring boot/MYSQL 연동의 기나긴 트러블슈팅 과정을 적어보겠다. 일주일이 넘는 시간동안 이 에러를 해결하려고 구글링도 엄청 하고 고생했지만, 문제는 정말 단순한 부분에 있었다는 것.... 에러 검
devmiri.tistory.com
트러블 슈팅 과정
연결이 잘 되었는지 postman으로 확인해보자

testcontroller를 참고하여 경로를 입력 후 send!
서버가 잘 실행이 됐고 db연결이 잘 되었다는 의미이다
<user 조회하는 db 설계>
usercontroller로 이동
@requestMapping은 컨트롤러의 모든 api uri앞에 기본적으로 들어가는 것


@GetMapping에 uri가 명시된게 없으므로 기본값만 들어간 users가 이 api의 uri가 된다, get 메소드라는 뜻
@RequestParam : email을 query string으로 받겠다고 명시된 부분
<GetUserRes> : 반환값
domain(user)에 mode이라는 파일이 있다->필요한 요청값과 응답값의 형식을 정의

어떤 형태, 어떤 데이터를 출력할 것인지, 클라이언트에게 전달할 것인지 정의
모델에서 정의한 형식대로 결과물을 리턴한다
GetUserRes getUserRes = userProvider.getUserByEmail(Email);
return new BaseResponse<>(getUserRes);
provider에 이메일을 넘겨줌
조회하는 것은 provider에서 처리, 생성하는 것은 service에서 처리
=>email을 조회하는 것이므로 provider로 넘겨준다

provider에서 이메일을 받고 dao로 넘겨줌
dao에서는 getUserRes 파일에 정의한 형식대로 불러오는 쿼리문을 작성한다
String getUsersQuert = "select userIdx, name, nickName, email from User";
String getUserByEmailQuery = "select userIdx, name, nickName, email from User where email=?";
public GetUserRes getUsersByEmail(string email){
String getUsersByEmailQuery = "select userIdx,name,nickName,email from User where email=?";
.....
}
parameter은 이메일 전달하고 있고, 물음표 자리에 들어갈 변수를 의미한다
parameter이 여러개일수도 있으므로 그 경우에는 리스트로 변수를 전달해주면 된다
return this.jdbcTemplate.query(getUserQuery,
....
}
return this.jdbcTemplate.queryForObject(GetUsersByEmailQuery,
....
}
return 형식이 query와 queryForObject로 다른데 차이점은 무엇일까?
queryForObject는 하나의 객체만 리턴할 때 사용
위에서는 리스트로 반환하기 때문에 query를 사용(위의 전체 코드 참고)
controller에서 형식적 validation을 처리, provider이랑 service에서 논리적 validation 처리

controller에서의 형식적 validation 처리
-이메일이 입력되지 않았을 때
-이메일 정규 표현과 맞지 안흘 때 에러 처리를 하고있다

Provider에서의 의미적 validation 처리
확인하는 것은 dao가 아닌 provider로 넘긴다->무언가를 체크하는 것도 조회의 의미를 가지기 때문에
provider에서 함수를 가져다 쓴다


validation은 유저 생성 뿐만아니라 모든 api에서 처리해야 함
<User조회 api 테스트>

연결 오류가 생겼다
postman으로 localhost:9000/test.log 했을 때는 정상적으로 작동이 되어서 서버 잘 실행하고 db연결이 잘 된줄 알았는데 데이터베이스 연결에 실패하였다고 뜬다

value를 이메일 형식에 맞게 보내지 않았을 때는 에러코드가 다르게 나온다.
형식적 validation까지는 가능하고, 그 이후의 과정에서 어떤 문제가 있는지 되짚어 봐야겠다.
(아직 해결중)
'Spring boot > UMC(22-1)' 카테고리의 다른 글
| [Server-10주차] API 개발 심화(Paging, transaction, stateless, 쿠키/세션, jwt, oAuth 개념 정리) (0) | 2022.05.29 |
|---|---|
| [Server-10주차]jwt 적용 실습 (0) | 2022.05.27 |
| [Server-7주차]개발환경 설정 (0) | 2022.05.13 |
| [Server 5주차] RDS와 Datagrip 연결하기/Datagrip table 생성 (0) | 2022.05.12 |
| [Server 4주차]AqueryTool을 이용해 데이터베이스 설계하기 (0) | 2022.05.12 |