항해99 62

20220215 개발일지 #세션? JWT?

어느 정도 기능 구현은 완료한 상태이고, 로그인 후 요청 시 인증이 안되는 부분은 우선 프론트에서 작업하고 계셔서 낮에는 조금 여유가 있었다. 오전에는 반 비몽사몽으로 있었던 것 같고 오후에는 자바와 스프링도 조금 봤다. cs스터디하고 나서 JWT 토큰 방식이 궁금해서 다른 팀원분들께 물어봤는데 다들 잘 알려주셔서 많이 배울 수 있었다. 프론트에서 header에 세션아이디를 토큰 처럼 보내주셨다. 그 뒤에도 여전히 인증이 안되는 문제가 있어 찾아봤는데 samesite 문제인 것 같았다. (참고자료: https://yousrain.tistory.com/23) 한참 검색하다가 어떻게 방법을 찾긴 했는데, 또 다른 문제에 봉착했다... none으로 설정할 경우 secure을 속성에 추가해야 하고, 이경우 HT..

20220214 개발일지 #Spring security 아키텍처 공부하기

현재 로그인은 기본적으로 controller에 구현되어 있고(로직들이 controller에 너무 많이 들어가 있는 것 같아서 서비스에서 구현되도록 리팩토링했다.), 아마 authenticationManager가 인증하면서 코드에는 보이지 않지만 AuthenticationProvider ~ DB에서 User를 찾아서 UserDetails에 담아 리턴하는 것까지 이루어지는 것 같다. 여기서도 보면 UsernamePasswordAuthenticationFilter를 통해 Authentication Manager로 연결되고 이후 로직들이 처리되는 것을 볼 수 있다. (참고자료: https://webfirewood.tistory.com/115) formLogin을 Disable한 상태고 별도로 Filter를 커스..

20220212 개발일지 #스프링 시큐리티 세션 토큰으로 보내기

시큐리티를 우선 세션으로 하기로 했는데, 시큐리티는 기본적으로 formLogin방식이었다. 프론트 코드를 함께 보면서 얘기를 해봤는데 form이 아닌 json으로 로그인 값을 받아야 할 것 같았다. (axios는 서버 url 입력하는 부분이 있었는데, form은 그 부분이 없어서 어떻게 서버와 연결해야하는지 잘 모르겠다고 하셨다.) 그래서 시큐리티 설정의 formLogin을 disable로 하고 json으로 받는 방식으로 변경하였다. json으로 받기 위해서 LoginDto를 새로만들고 UsernamePasswordAuthenticationFilter를 상속받아 custom 클래스를 만들었다. LoginDto도 새로 만들어서 Filter가 가로챈 값을 넣어주었다. public class CustomUse..

20220212 개발일지

오늘부터 프론트와 새로운 미니프로젝트에 들어간다. 계속 스프링 + html 위주로 구현을 해와서 어떻게 프론트와 붙는 건지 아직 잘 이해가 되지 않는다. 회원가입을 어떻게 구현할지 고민이 많았는데, security에 자신이 없어서 기본 세션만 사용을 하고 다른 기능에 좀 더 집중하기로 했다. 우선 회원가입쪽 기능 구현은 완료하고 내일 프론트와 테스트로 붙여보기로 했다. signup은 json으로 받아도 되는 것 같아서 그렇게 했고, 로그인은 form으로만 가능한 것 같다고 다른 분들이 알려주셔서 우선 이렇게 해보기로 했다. signup을 처음에 form으로 받을 때 계속 에러가 났는데, SignupDto에 @Setter를 붙여서 해결했다. 오랜만에 git을 사용해서 깃도 계속 햇갈리는 것 같다. 테이블 ..

20220210 개발일지 #ErrorCode구현하기

오늘은 에러코드를 구현하였다. Spring security쪽 에러는 처리하지 못하고 그외 다른 exception으로 처리한 부분을 모두 ErrorCode로 정리해주었다. #ErrorCode 다음과 같이 각 에러마다 HttpStatus값을 지정하고 에러코드와 메세지를 입력하였다. @Getter public enum ErrorCode { // 400 Bad Request INVALID_MIN_ORDER_PRICE(HttpStatus.BAD_REQUEST, "400_1", "1,000원 ~ 100,000원 사이를 입력해주세요."), TYPE_ERROR_MIN_ORDER_PRICE(HttpStatus.BAD_REQUEST, "400_2", "100원 단위로 입력해주세요."), INVALID_DELIVERY_FE..

20220209 개발일지 #MVC Test

어제 구현한 RestaurantMvcTest에 이어 FoodMvcTest와 OrderMvcTest를 만들었다. RestaurantMvcTest에 조금 변형만 하면 되는 거라서 금방 될 줄 알았는데 에러를 해결하는데 생각보더 훨씬 시간이 걸렸다. FoodMvcTest를 작성할 때 음식 등록 api에서 400에러가 발생하였다. 권한 설정으로 발생하는 403 에러가 아니라서 처음에는 서비스 로직을 의심했다. 혹시 리팩토링을 하면서 문제가 생겼는지 확인했는데, arc에서 잘 돌아가는 것을 확인했다. 그래서 restaurantId가 pathvariable로 들어가는데 restaurant를 생성하지 않아서 발생한 에러라고 생각했다. 다른 test code들을 확인하면서 음식점을 등록하는 테스트를 먼저 만들어주고, ..

20220208 개발일지

코드잇에서 cs 듣던 부분을 모두 들었다. 강의가 세세하지는 않지만 큰 흐름을 잡기에 좋은 것 같다. 다른 강의들도 조금씩 들어야겠다. JAVA랑 Spring 공부하려고 산 책을 스캔했다. 세세하게는 못봐도 항해하면서 1회독 하는걸 목표로 해야겠다. Service부분을 추가적으로 리팩토링했다. 처음에는 혼자 리팩토링하는게 어려웠지만 매개변수와 return값만 잘 지정하고 나면 크게 어렵지 않았다. security 권한 부여는 @Secured를 사용했다. 그런데 프론트를 구현해놓지 않아서 ARC로는 테스트가 한계가 있었다. 기존에 테스트 코드도 기능들이 추가되면서 수정이 필요한 상황이었다. 처음에는 기존에 있는 코드에서 수정을 하려고 했는데, security 부분이 들어가서 쉽지 않았다. controlle..

20220207 개발일지 #기능일부 추가

오늘은 개인공부 위주로 하고 저녁에 과제 추가기능을 일부 구현하였다. 심화 5주차 강의를 다 듣고, 코드잇에 컴퓨터 아키텍처 강의가 있어서 cs 스터디 공부를 위해 들었다. 회로 부분은 여기에도 자세히 설명되어 있지 않아서 이해가 안가지만 CPU가 돌아가는 부분은 도움이 많이 됬다. 레지스터나 RAM 부분에서 어떻게 작동는지, 코드를 작성하면 이게 어떤 과정을 거쳐서 실행되는지 큰 틀은 조금 잡은 것 같다. 추가 기능은 배달 가능 음식점 조회하기, 배달비 추가 할증 부분을 구현하였고 스프링 시큐리티도 기본 회원가입/로그인 부분은 구현하였다. 처음에 시작하기 전에 어려워 보여서 엄청 겁을 먹었는데 배달 가능 지역은 거리 계산하는 방법을 해결한 뒤에는 어렵지 않게 구현할 수 있었다. 스프링 시큐리티도 지난주..

20220206 개발일지 #배달앱 기본 기능 구현

오늘은 어제 제대로 못한 order 기능을 구현하는 것이 목표였고, 테스트 에러 문제도 다른 팀원 분들의 도움을 받아서 해결하였다. 테스트 에러는 return값 id를 restaurant로 하니 해결됬다! 앞으로 테스트코드 볼 때는 리턴 값도 잘 확인해야 할 것 같다. 2번 food의 경우에는 return이 없어야 했고, 3번 order는 return 값에서 변수명을 잘못 지정해서 nullexception이 났다. 먼저 테이블을 다시 설계하였다. 관련 기능을 구현한 블로그를 보고 많이 참고하였다. id의 경우 중복값 오류가 나오는 거 같아서 각각 테이블 명_id로 하였다. Entity는 Food, Order, OrderFood, Restaurant이다. 모두 1:N 양방향 관계이고, N쪽이 주가 된다. ..

20220204 개발일지

오늘은 주특기 3주차가 시작하는 날이다. 주특기 3주차 쯤 되면 그래도 Spring에 대해 많이 익숙해졌겠지 생각했는데, 전혀 아닌 것 같다. 어떻게 어떻게 한 주씩 과제를 마무리를 하고는 있는데, 잘 하고 있는 건지는 잘 모르겠다. 지난주 과제가 어려워서 이번주도 걱정이 많았다. 심화 4주차 강의를 듣고 있어서 일단 다 듣고 과제를 시작할까 했는데, 막상 과제를 받으니까 또 걱정이 되서 우선 과제부터 시작했다. 기본 과제는 배달 앱 서버를 구현하는 것으로, 식당과 메뉴 등록, 주문 등록까지 해야한다. 추가로 나온 과제에서 엔티티 간의 관계를 설정하는 부분이 있어서 4주차 강의를 모두 들었다. 강의노트+이론 부분만 들으려고 했는데, 실제로 어떻게 구현하는지 잘 모르겠어서 기능 구현하는 부분까지 모두 들었..