분류 전체보기 (193) 썸네일형 리스트형 23년 1월 10일 sql sql의 CREATE INSERT UPDATE와 데이터 삭제에 대해서 배웠다. create는 테이블을 생성한다. CREATE TABLE 테이블_이름 ( 열_이름 데이터_타입, 열_이름 데이터_타입, ...) 예를 들면 이런식으로 쓸 수 있다. CREATE TABLE users (id INT, name CHAR(4), age INT); 또한 create를 할때 primary key에 AUTO_INCREMENT라는 것을 지정해줄 수 있는데, CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name CHAR(4), age INT); 이런식으로 쓸수 있고 AUTO_INCREMENT를 지정해주면 id값이 자동으로 증가한다. insert는 테이블에 데이터를 삽입한.. 23년 1월 9일 Exception에 대해서 배웠다. 일단 그동안 잘못알고 있던게 있는데, 예외와 오류는 다른 개념이다. 그동안 같은 개념으로 알고 썼었는데, 잘못 썼었던 것 같다. 에러는 시스템레벨에서, java.lang.Error 클래스의 서브 클래스에서 발생하며, 익셉션은 개발자가 구현한 로직에서 발생하고, java.lang.Exception 클래스와 그 서브클래스에서 발생한다. Error는 시스템 레벨의 심각한 수준의 에러이기 때문에 시스템에 변화를 주어 문제를 처리해야 하는 경우가 일반적이다. Exception은 RuntimeException 과 같은 수많은 자식클래스를 가지고 있다. RuntimeException은 CheckedException과 UncheckedException을 구분하는 기준이다. 이중 Ch.. Exception 의 종류 예외 클래스 (Checked Exception vs Unchecked Exception) Trowable을 상속받는 클래스는 Error와 Exception이 있다. Error는 시스템 레벨의 심각한 수준의 에러이기 때문에 시스템에 변화를 주어 문제를 처리해야 하는 경우가 일반적이다. Exception은 개발자가 로직을 추가하여 처리할 수 있다. Exception은 RuntimeException 과 같은 수많은 자식클래스를 가지고 있다. RuntimeException은 CheckedException과 UncheckedException을 구분하는 기준이다. Exception의 자식 클래스 중 RuntimeException을 제외한 모든 클래스는 CheckedException이며, RuntimeExceptio.. 19주차 개발일지 이번주는 저번주 금요일에 시작했던 팀프로젝트를 진행해 완전히 끝마쳤다. 이번에는 제대로 된 협업을 진행하여 몇가지 느낀게 있는데, 일단 프로젝트를 시작하기전 계획을 세우는게 얼마나 중요한지 깨닫게 되었다. 계획을 제대로 세우고 진행하니 서로 작업물이 꼬일 일도 없었고, 분업도 상세하게 나눌 수 있었다. 그리고 어쩌다 보니 팀장을 맡아 프로젝트의 머지를 담당하게 되었는데, 머지를 하다 보니 분업이 잘 나눠진대로 진행이 되는것이 보여서, 분업을 어떻게 해야 효율적으로 할 수 있는지 알게 되었다. 그리고, 협업시 깃 사용규칙을 팀원에게 배울 수 있었는데 다른 팀에 가더라도 유용하게 사용 할 수 있을 것 같다. 프로젝트를 진행하며 아쉬웠던 점은 테스트 코드를 써보지 못했던점과, 발표 도중 질문받은 리프레쉬 토큰.. 23년 1월 6일 팀 프로젝트가 끝났다. 발표중에 리프레쉬 토큰에 대해 질문을 받았는데, 내가 리프레쉬토큰에 대해서 제대로 이해하지 못하고 있다는걸 깨닫게 되었다. 일단 액세스 토큰이 만료되면 리프레쉬 토큰을 확인하고, 액세스 토큰을 발급하는 로직을 만들었는데, 문제는 이때 리프레쉬 토큰도 재발급 되게 만들어야 했는데 액세스 토큰만 재발급 되게 만들었다. 이렇게 로직을 만들면 리프레쉬 토큰이 한번 탈취당하면, 리프레쉬토큰의 기간이 만료될때까지 탈취한 사람이 무제한으로 액세스 토큰을 발급받을 수 있다. 그리고 유저db에 리프레쉬 토큰을 저장하기 때문에, db에는 유저정보가 담긴 jwt가 리프레쉬토큰으로 담길 이유가 없다. 이럴 경우에는, jwt가 아닌 다른 값을 이용해 리프레쉬 토큰을 만드는게 맞다고 한다. 찾아보니 이를 .. 23년 1월 5일 팀 프로젝트 기능을 모두 구현하고 최종적으로 main브랜치에 dev브랜치 병합을 했다. 인가가 되는 곳을 변경해 주었는데, @Secured로 인가를 하면 필터를 넘어 컨트롤러까지 와서 컨트롤러에서 인가를 검증하게 된다. 이렇게 되면 RestControllerAdvice를 통해 예외처리가 가능하다. 하지만, 시큐리티를 쓰는 이유가 인증 인가와 관련된 처리를 시큐리티 필터에서 처리해주기 위해서 쓰는 것이라고 생각했고,컨트롤러까지 내려와서 처리를 하면 시큐리티를 쓰는 의미가 없다고 생각해 SecurityConfig에서 .hasanyRole을 통해 인가를 처리하고, 예외는 accessDeniedHandler를 통해 처리해주었다. 그리고 추가적으로 게시글 전체 불러오기에 페이징 처리를 해 주었다. 그런데 문제는, 코멘트가 포.. 23년 1월 4일 팀 프로젝트 리프레쉬 토큰을 구현했다. 로그인을 할때, 유저DB에 리프레쉬 토큰을 저장하고, 클라이언트에게 리프레쉬 토큰을 발급하게 한 뒤, 액세스 토큰 만료시 클라이언트의 리프레쉬 토큰과 DB의 리프레쉬 토큰을 비교하게 하고, 이때, DB의 리프레쉬 토큰이 유효하고, 클라이언트가 보낸 리프레쉬 토큰과 일치하면 액세스 토큰을 재발급하도록 구상을 했다. 팀 프로젝트의 스프링 시큐리티에서 jwt를 통한 인증은 OncePerRequestFilter를 상속받은 jwtAuthFilter 클래스에서 하게 해놓았는데, 이 때문에 jwt를 통한 인증은 무조건 jwtAuthFilter를 거쳐야하기 때문에 리프레쉬 토큰 검증 로직은 jwtAuthFilter에서 구현하게 되었다. 구현하면서 생겼던 문제점은 1. 유저 db에 리프레쉬 토.. 23년 1월 3일 팀프로젝트 팀 프로젝트에 스웨거를 적용했는데 날짜가 직렬화가 되지 않는 현상이 발생했다. 날짜가 이런식으로 반환이 된다. 그래서 반환 dto마다 날짜에 @JsonFormat을 해줬다. 그랬더니 날짜가 제대로 직렬화가 되어서 반환되었다. 이는 이전에 개인프로젝트 진행을 할때도 스웨거를 적용했더니 생겼던 문제인데 무엇이 문제인지 잘 모르겠다. 스웨거 적용 이전에는 직렬화가 잘 되어서 나왔었기 때문에 스웨거 설정에 문제가 있는건 확실한데 무엇이 문제인지 아직까지는 잘 모르겠다. 스웨거와 openapi에 대해서 좀 더 알아보아야 할 것 같다. 그리고 시큐리티에서 jwt토큰 체크를 하는데 jwt토큰에 문제가 있는 경우 정해진 에러코드와 메세지를 띄우지 않아서 원인이 무엇인지 찾아보았다. Token Error를 띄워야하는데 .. 23년 1월 2일 팀 프로젝트 팀프로젝트의 기본적인 사항들을 모두 완성하고 기능들을 테스트 해 보았다. 작동중에 약간씩 오류가 있었는데, url을 API에 맞춰 쓰지 않았다거나, @RequiredArgsContructor을 썼는데 final을 쓰지 않았다거나 하는 사소한 문제였다. 그리고 더 해보기까지 구현해 보기로 했는데 이전에 도전했다가 실패한 리프레쉬 토큰을 구현해 보기로 했다. 그리고 시큐리티에서 jwt인증시 에러메시지를 반환하지 않는 이유를 찾았는데, jwtAuthFilter내에서 에러메세지를 반환하도록 해줘야 에러메세지가 반환이 되었다. 아마 시큐리티가 @RestControllerAdvice로 전역처리해준 익셉션 핸들러보다 더 앞쪽에서 작동이 되기때문에 그런 것이라고 생각한다. 내일은 리프레쉬 토큰과 스웨거를 프로젝트에 적.. 18주차 개발일지 이번주는 시큐리티에 대해서 배우고, 팀프로젝트를 시작했다. 시큐리티를 기존 개인프로젝트에 적용하긴 했으나, 어떤식으로 작동하는지에 대해서 이해가 부족하고, 시큐리티에서 작동하는 부분에 대해 예외처리를 하지 못했다. 시큐리티에서 예외처리를 하는 방법에 대해서 주말에 공부하기로 했으나, 팀프로젝트 진행에 집중해 하지 못했다. 팀프로젝트 내용은 기존 개인프로젝트 내용에, 시큐리티를 추가하고, 좋아요 기능을 추가하는 것이다. 우리 팀은 기존 코드를 활용하는 대신 아예 코드를 새로 써보기로 했고, 그래서 개인 프로젝트 기존의 구조는 가져갔으나 코드는 새로 쓰게 되었다. 내가 맡은 부분은 예외처리와 좋아요 부분인데, 예외처리는 개인 프로젝트와 조금 다르게 처리하도록 만들어 보았고, 좋아요는 아예 새로 구현해야해서 .. 이전 1 ··· 6 7 8 9 10 11 12 ··· 20 다음