목록백엔드 기술 정리/스프링 부트 (28)
-
시큐리티는 거의 마무리가 되었습니다. 이제 해결해야할 부분은 이미지 처리와 연결, 팔로잉구현, 회원정보 수정, 게시글 올리기 등을 해보겠습니다. ImageController를 만들겠습니다. 그런 다음 이미 프론트단은 거의 구현이 되어 있기 때문에 다음과 같이 만들어서 홈페이지와 인기페이지를 GetMapping으로 구현합니다. 마찬가지로 클래스를 하나 더 만들건데, UserController라고 짓고 회원정보페이지를 들어갈 수 있는 함수를 만듭니다. 그리고 /user/로 들어가서 회원별로 프로필을 들어갈 수 있게 /user/{id}라고 입력하면 입력되는 id값에 따라 페이지를 구분지어서 접속할 수 있습니다. 그러므로 파라미터로 가져올 때도 이런식으로 가져와야 합니다. 이렇게 파라미터를 가져오는 바인딩 방식..
이제는 로그인을 구현해보도록 하겠습니다. 마찬가지로 기본 프론트 양식은 갖추어져 있기 때문에 다듬는 과정으로 진행할 것입니다. signin.jsp의 action과 method를 다음과 같이 바꿉니다. 이렇게 로직을 짜면 로그인할 때 제출 방식이 "POST"가 됩니다. 아마 이런 질문을 하실 수도 있을 것 같습니다. "데이터를 입력하는데 도대체 왜 post방식을 써야 하나요?" 라고 말이죠. 지금 로그인은 데이터를 Insert하는 것이 아니라 데이터를 Select하는 것이 아닌가? 도 생각할 수 있습니다. 맞습니다. 원래는 아시다시피 Select할 때에는 Get방식을 채용해야 합니다. 그런데도 method = "POST"라고 입력한 이유는 username과 pw는 귀중한 정보이기 때문에 GET방식을 쓰게되..
저번 포스팅에서 우리는 Map을 이용해서 return했었습니다. 그런데 문제가 하나 있는데, 길이를 아주 길게 써서 작성하면 정상적으로 오류를 뱉지만 "유효성 검사에 실패했습니다" 메세지도 같이 출력하고 싶은데 그렇지 못띄웁니다. 메세지도 같이 띄우고 싶은데 그러지 못하기 때문에 dto에 클래스를 하나 만듦으로써 공통 응답 처리를 한 번 해보도록 하겠습니다. 이런식으로 web - dto내부에 auth 내부가 아닌 곳에 CMRespDto 클래스를 생성해보겠습니다. 그리고 Getter, Setter대신 롬복 라이브러리를 이용하고 있으므로 Data어노테이션과 No-, All-어노테이션을 답니다. 우리는 message와 errorMap 둘 다를 받고 싶은 것이기 때문에 dto는 이쯤 해두고 ControllerE..
지난 포스팅에 이어서 진행해보도록 하겠습니다. @ResponseBody 어노테이션을 달 경우 Controller가 붙혀져 있다 하더라도 return할 때 데이터를 return할 수 있다고 했었습니다. 그런데 이렇게 분기를 이용해서 return하게되면 file과 데이터를 다 return할 수는 없기 때문에 이 예외를 공통으로 처리하는 Handler가 필요해지게 됩니다. 그러므로 제가 해볼 것은 if문을 통해서 만약 에러가 발생했다면 이를 errorMap에 담아서 에러가 발생했다고 바로 return하지 않고 throw를 이용해서 나타낼 것입니다. 바로 이렇게요. 그리고 서버를 실행하고 오류를 일부러 발생시키면 다음과 같이 출력이 됩니다. 근데 회원가입하시면서 이렇게 뜨는 사이트를 혹시 보신적 있으신가요???..
지금까지 회원가입에 대한 기초적인 틀은 잡혔습니다. 이제부터 해볼 것은 예외상황 처리 과정입니다. 그림과 같이 서버, DB, JPA의 구조가 다음과 같을 때 사용자가 회원가입을 위해 username과 password 등을 Input한다고 해봅시다. 그런데 만약에 회원가입 시도 중 중복된 사용자에 대한 처리는 어떻게 해주는 것이 좋을까요? 회원가입할 때 username이 DB에 있는지 확인하는 루트는 서버 -> DB에 물어보는 방법밖에 없습니다. 그리고 사용자의 username을 20자로 제한하고 싶을 때 어떤 사용자가 20자 이상 입력해서 회원가입을 시도하려한다면 어떻게 막아야할까요? 이건 굳이 DB에 묻지 않더라도 서버의 앞단에서 미리 처리를 해줄 수 있습니다. 이것을 바로 전처리, 후처리 과정이라고 ..
지난 시간엔 비밀번호를 DB에 넣을 때 그대로 넣으면 문제가 생길 수 있기 때문에 암호화해서 DB에 넣는 작업을 해보겠습니다. 우선AuthService로 이동합니다. 이후 회원가입 메서드 위에 @Transactional을 달아줍니다. 이것을 걸면 함수가 실행되고 종료될 때까지 트랜잭션 관리를 스프링부트가 지원합니다. 보통은 이 트랜잭션을 Write할 때 사용하는데 우리는 Insert, Update, Delete할 때 사용하겠습니다. 왜냐하면 정보처리기사 관련 자격증을 공부해보신 분들이나 제 블로그에 있는 운영체제 포스팅을 읽으신 분은 이해하시겠지만 데이터를 Write할 때에는 그 어떤 사용자도 간섭해서는 안됩니다. 스프링부트에서는 다른 사용자가 접근하여 DB를 수정할 수 있기 때문에 @Transactio..