학교에서 하는 스프링 스터디에 참가했는데, 스터디를 위한 공부도 할겸 내 개인 프로젝트도 할겸 OKKY사이트를 모방한 DOKKY라는 서비스를 한 번 이번 겨울방학동안 만들어볼라 한다. 자바 공부도 시작한지 정말 별로 안 됐고 스프링은 이번에 완전 처음 접하기 때문에 완전 야생학습이 됐다..현재 내 스프링에 대한 지식수준은 김영한 님의 스프링 입문 강의(무료)가 전부이다.
현재 참여중인 스터디에서 Spring security, Lombok 이런 것들을 사용해서 일단 걔네들도 같이 끌고와서 프로젝트를 생성했다. 그리고 냅다 main메서드를 구동시켰다.
localhost:8080에 접속하니까 저런 페이지가 나왔다.
음? 나는 웰컴페이지같은 걸 만든 적이 없는데? 뭐지? 싶었다. 스프링이 원래 이런 걸 띄워주는건 아닌거 같고..뭔지 몰라도 security같은 놈이 띄워주는거구나 싶거니 하고 일단 넘어갔다.
이번 스터디에서 인증/인가는 Spring security와JWT로 구현하라고 지정돼있었다. jwt는 프론트 공부할 때 사용한 적이 있어서 그리 낯설지만은 않았지만 문제는 시큐리티라는 놈. 스프링에서 인증/인가를 쉽게 해주는 프레임워크다..라는 내용은 구글링해서 쉽게 찾을 수 있었지만 애당초 스프링을 이제 막 떼기 시작한 내게는 이 놈이 너무 낯설었다(사실 글을 작성하는 지금도 이 놈이 정확히 뭔지 왜 쓰는지 잘 모름). 사실 백엔드 단에 대한 지식이 워낙 바닥에 가까워서 그런 것 같기도.. 암튼 구글링을 통해 시큐리티와 jwt를 활용한 로그인 구현 등을 봤지만 도통 무슨 소리들인지 알 수 없었다. 자바, 스프링, 객체지향, 인증/인가 등 다 너무 낯설었고, 낯선 것들이 여기저기 얽혀 있으니 커다란 블랙박스에 마주친 것 같았다.
일단 만들면서 배우는 야생형 공부가 효율적이란 건 겪어봐서 알지만, 생판 정말 1도 모르는 상태에서 무작정 해본 적은 없었다. 근데 지금은 그래야 한다! ㅋㅋㅋㅋㅋ
이론 공부를 하고 만들기엔 시간이 너무 부족하다. 정말 야생으로 만들면서 배우는게 낫다 싶었다. 우선 DB연결부터 시작했다.
저 파일 gitignore통해서 git으로 관리 안 되게 하는 것에서도 조금 애먹었다. 별 거 아닌데 자꾸 안 됐다. 그래도 해내서 뿌듯했음(정말 별 거 아니지만..)
암튼 이제 로그인 기능 만들어볼 차례. post요청을 통해서 /account/login으로 이메일이랑 비번 보내면 처리하게 해야지~라고 생각했다. 김영한 님 입문 강의에서 봤던 방식은 컨트롤러 클래스의 각 메서드마다 @GetMapping같은 어노테이션 멕인 다음에 value로 "/account/login"을 주는 방식이었는데, 클래스에 @RequestMapping을 멕이면 공통된 url을 뺄 수 있었다. 그래서 클래스에 저 어노테이션을 통해 /account로 들어오는 요청들은 요 컨트롤러가 처리하도록 만들었다.
@RestController
@RequestMapping(value = "/account")
public class AccountController {
...
}
아 그리고 또 하나 이 과정에서 알게 된 건 RestController라는 어노테이션이다. 기존에 내가 알던 스프링으로 api만드는 방식은 @Controller 어노테이션과 @ResponseBody 어노테이션을 조합해 활용하는 방식이었다. @ResponseBody를 사용하면 뷰리졸버를 사용하지 않고 HTTP의 BODY에 직접 데이터를 넣는다고 배웠기 때문! 근데 RestController라는 이 둘을 합친 어노테이션이 따로 있었다. 앞으로 되게 많이 쓸 것 같은 느낌.
ok. 본격적인 회원가입/로그인 메서드를 만들기 전에, 일단 /account/login으로 GET요청 보내면 간단하게 hola라는 문자열을 리턴하는 메서드를 만들어 시험해보기로 했다. 스프링 생초짜인 만큼 일단 아주 기본적인 거라도 내 예상대로 돌아가는 걸 보고 싶었기 때문.
@RestController
@RequestMapping(value = "/account")
public class AccountController {
@GetMapping("/login")
public String login() {
return "hola!";
}
}
포스트맨켜고, localhost:8080/account/login으로 GET요청을 보내봤다. 너무나도 당연하게 hola!라는 문자열이 돌아오겠거니 했는데..
아무 일도 없었다.
뭐지 싶었다. 필시 포스트맨에 문제가 있었으리라 추측하고, 브라우저에 직접 url을 쳤다.
아닛? 이 창에서 넘어가질 않았다. 뭐지? 아 이거 저 url로 아예 고정된 거 같은데? 란 생각이 들었다..
구글링을 해보니 역시나였다. 스프링 시큐리티를 사용하면 기본적으로 제공되는 녀석이었다. 또한 이걸 끄는 방법 역시 있었다.
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
public class DokkyApplication {
public static void main(String[] args) {
SpringApplication.run(DokkyApplication.class, args);
}
}
요로코롬 exclude값 설정을 해주면 됐다. 근데 뭔가 시큐리티 자체를 아예 끄는 느낌(이 녀석이 이렇게 끈다 킨다의 개념이 있는 애인지도 모르겠다)..이 들긴 하지만 지금 당장은 그런 걸 다 알아보고 할 순 없다! 진짜 그냥 그때그때 부딪히는 수밖에..
암튼 이렇게 하고 다시 포스트맨으로 localhost:8080/account/login으로 GET요청을 보내봤다!
hola라는 메시지가 response로 돌아오는 것 확인.
이제 본격적으로 회원가입을 만들어볼 차례다.
'PROJECT > 개발일지' 카테고리의 다른 글
[백엔드 야생 도전일기] 스프링으로 회원가입/로그인기능 만들어보기 (3) (0) | 2023.01.29 |
---|---|
[백엔드 야생 도전일기] 스프링으로 회원가입/로그인기능 만들어보기 (2) (1) | 2023.01.28 |
[React project] EP04. 항상 볼 수 없는 사이 - 리액트에서의 조건부 렌더링 및 기본적인 css 작업 (0) | 2022.03.15 |
[React project] EP03. 너 분명 변했다면서. 근데 왜 그대로인건데! - 리액트의 setter함수는 비동기적으로 동작한다 (0) | 2022.03.04 |
[React project] EP02. 순조로울 줄 알았던 항해의 첫 장애물 - missing dependency (0) | 2022.02.27 |