dev-miri

[Server-7주차] 프레임워크 사용하기 실습 본문

Spring boot/UMC(22-1)

[Server-7주차] 프레임워크 사용하기 실습

miri-dev 2022. 5. 15. 10:22

[개발환경]

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 //서버 설정 다시 읽어오게 함

HEAP Size가 나오면 성공!-!

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.java 파일

어떤 형태, 어떤 데이터를 출력할 것인지, 클라이언트에게 전달할 것인지 정의

모델에서 정의한 형식대로 결과물을 리턴한다

 

 

GetUserRes getUserRes = userProvider.getUserByEmail(Email);
return new BaseResponse<>(getUserRes);

provider에 이메일을 넘겨줌

조회하는 것은 provider에서 처리, 생성하는 것은 service에서 처리

=>email을 조회하는 것이므로 provider로 넘겨준다

 

 

UserDao.java

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 처리

 

UserController.java

controller에서의 형식적 validation 처리

-이메일이 입력되지 않았을 때

-이메일 정규 표현과 맞지 안흘 때 에러 처리를 하고있다

 

UserProvider.java

 

Provider에서의 의미적 validation 처리

확인하는 것은 dao가 아닌 provider로 넘긴다->무언가를 체크하는 것도 조회의 의미를 가지기 때문에

provider에서 함수를 가져다 쓴다

UserProvider의 checkEmail 함수
UserDao의 현재 이메일이 존재하는지 확인하는 쿼리

validation은 유저 생성 뿐만아니라 모든 api에서 처리해야 함

 

 

<User조회 api 테스트>

연결 오류가 생겼다

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

 

value를 이메일 형식에 맞게 보내지 않았을 때는 에러코드가 다르게 나온다. 

형식적 validation까지는 가능하고, 그 이후의 과정에서 어떤 문제가 있는지 되짚어 봐야겠다. 

(아직 해결중)

Comments