공부/TIL (84) 썸네일형 리스트형 23.11.23 예외처리를 위주로 구현을 했다. 클라이언트에서 요청이 나쁘게 들어올 때 상태코드와 어떤 예외가 발생했는지 클라이언트에 메세지로 전달하고 싶었다. ResponseDto를 이용해서 상태코드를 반환하고, 바디에 예외 메세지와, 상태코드를 반환하도록 코드를 변경했다. 따라서 모든 응답 DTO는 공통 DTO를 상속 받는다. 공통DTO(CommonResponseDto)는 메세지를 담을 String 필드와, 상태코드를 담을 int값을 갖으며 예외가 발생하면? 공통DTO의 바디에 상태 메세지를 반환하도록 했다. 이렇게 하니까 서버단에서가 아닌 클라이언트단에서도 어떻게 예외가 발생했는지 알 수 있어서 좋다. 이건 백앤드 개발자가 프론트 앤드 개발자와 협업시 좋은 요인이 될 수 있지 않을까? 생각한다. 23.11.22 오늘 정말 많은 기능들을 구현했다. 1. Spring Security를 이용한 인증 Spring Security를 이용해서 Jwt토큰 방식으로 사용자 인증을 하는 기능을 구현했다. 첫번째로 JwtUtil 클래스를 통해 Jwt를 다루는 클래스를 만들었다. JwtUtil클래스에는 JwtToken을 만들어 주는 기능, Jwt토큰을 확인하는 기능, 해당 토큰에서 정보를 담은 토큰을 잘라주는 기능, 잘라준 토큰에서 사용자 정보를 가져오는 기능, 토큰의 유효성을 판단하는 기능이 포함된다. Jwt토큰은 로그인 성공시 HttpServletResponse 클래스에 Header에 값을 넣어주는 방식으로 기능을 구현했다. 두번째는 Filter를 설계했다. 필터는 인증이 필요한 요청일 때, 헤더에 들어있는 토큰이 유효한지를 .. 23.11.21 팀프로젝트 시작! 내가 맡은 임무는 CRUD이다. 오늘 기본적인 틀은 다 만들어놓고 이제 인증/인가를 맡은 팀원을 도와줘야겠다. 어제 배웠던 몇가지 기술로 CRUD를 더 보기 좋게 만들었다. 1. ResponseEntity 사용 ResponseEntity를 사용하면 내가 원하는 상태코드를 줄 수도 있고, 바디에도 내가 넘기고 싶은 정보들을 넣어줄 수 있어서 좋다. 상태코드를 내가 주고 싶은대로 줄 수 있다는 것이 매력적이다. return ResponseEntity.status(HttpStatus.OK.value()).body(menuResponseDto); 요런식! 2. 입력값을 validation 정규 표현식으로 제한하기 사용자 입력 제한을 request단에서 제어한다. validation은 보통 회원.. [팀프로젝트] 뉴스피드 API명세서 기능 Method url request reponse purpose 로그인 POST /users/login { "username" : "유저아이디" "pwd" : "비밀번호" } { "로그인 성공", "상태코드 : 201" }, { "오류메세지", "상태코드" } DB에 저장된 유저만 로그인하여 JWT토큰을 응답 회원가입 POST /users/signup { "username" : "유저아이디", "pwd" : "비밀번호", "email" : "email@email.com" "nickname" : "닉네임", "profile" : "한줄 소개" } { "회원가입 성공", "상태코드 : 201" }, { "오류메세지", "상태코드" } 정규식에 맞춘 회원가입/DB에 회원 저장/DB에 중복된 회원 저장 실패.. 23.11.20 할일 카드 저장 프로젝트를 마쳤다. 회원가입/로그인 파트를 구현에 실패했다. Entity들의 연관관계를 맺고, CRUD하는데에는 성공했다. 오늘은 개인과제 해설 영상을 보면서 부족했던 부분들에 대해 다시 공부하는 시간을 가져야한다. 우선 이번에 실패한 개념들을 공부해보자. 1. 정규 표현식 회원가입시 개발자가 원하는 형태의 아이디와 비밀번호를 받을 수 있다. Validation의존성을 추가하여 사용하자. // Validation implementation 'org.springframework.boot:spring-boot-starter-validation' Build.Gradle에 추가해서 사용한다. 사용방식은 다음과 같이 사용한다. @Pattern(regexp = "^[a-z0-9]{4,10}$") p.. 23.11.17 본격적인 회원가입/로그인 코드를 작성시작! JWT를 이용하여 쿠키에 토큰을 저장하고.(토큰에는 seceret key가 들어있다.) 클라이언트는 제공받은 쿠키를 응답할 때 같이 보내 서버가 인증하기 위해 받는다. 이런 개념으로 코드를 작성하기 시작했다. 사용자의 인증/인가 허락 흐름은 이렇게 작동한다. 1. 사용자의 로그인 요청 2. 서버에서 사용자의 정보가 DB에 있는지 확인 2-1. 사용자의 정보가 DB에 존재 하지 않으면 오류 발생 및 오류 응답 2-2. 사용자의 정보가 DB에 존재하면 JWT 토큰을 쿠키에 담아 클라이언트에 전송. 3. 인증이 완료된 사용자는 앞으로 모든 응답에 JWT 토큰을 담은 쿠키를 같이 전송 4. 서버에서는 쿠키의 유효성을 검사해 쿠키의 인증/인가가 유효하다면 그에 맞는 권한.. 23.11.16 오늘은 유저-카드-댓글 세 Entity를 모두 연관관계를 만들어주었다. https://taeho-fighting.tistory.com/54 [Spring] Could not write JSON: Infinite recursion (StackOverflowError) 으악 이거 뜨면 좀 멘붕이다. 왜냐면 오류난 로그를 올리면 진짜 끝도 없이 계~~속 올라가야 한다. 이 에러의 이유는!! 바로 재귀 호출이다. 내 프로젝트에서 발생한 이유는 다음과 같다. 나는 카 taeho-fighting.tistory.com 그 과정에서 생긴 오류와 트러블 슈팅에 대한 포스팅. 영속성 전이를 통해 유저가 지워지면 관련된 모든 Entity를 지워준다. 마찬가지로 카드를 지워주면 관련된 댓글이 다 지워진다. 영속성 전이를 알려.. 23.11.15 ENTITY의 연관관계에 대해서 배웠다. 이번 프로젝트에 필요한 기술이다. 할일 카드 만들기에 유저, 카드, 댓글 이 세개의 엔티티의 관계를 정립해야 했다. 1. 유저와 카드는 1:N의 관계다. 2. 카드와 댓글은 1:N의 관계다. 3. 유저와 댓글은 1:N의 관계이다. 나의 초기 엔티티 관계에서는 유저와 댓글이 직접적인 연관을 맺지 않았다. 왜냐하면 댓글은 카드에 종속되어 있다고 생각해서이다. 여기서 고려해야 했던 부분이 카드에 달리는 댓글은 카드 작성자만 있는 것이 아니라, 다른 회원이 단 댓글도 보여야 한다. 따라서 댓글을 그저 카드의 종속된 객체로만 볼 수 없어졌다. 따라서 유저와 댓글의 관계도 맺어줘야 한다. 이 개념을 가지고 오늘 카드와 댓글을 매칭 시키는 코드를 구현했다. 아직 제대로 작동이.. 23.11.14 드디어 Spring으로 CRUD를 만들었다. [Create] POST 매핑된 createCare()메서드. @RequestBody 어노테이션으로 body에 JSON형식으로 데이터를 받아온다. @PostMapping("/create") public CardResponseDto createCard(@RequestBody CardRequestDto cardRequestDto){ return cardService.createCard(cardRequestDto); } JpaRepository를 사용하면 간단히 save를 할 수 있다. public CardResponseDto createCard(CardRequestDto cardRequestDto) { Card reqCard = new Card(cardReques.. 23.11.13 오늘은 스프링 숙련주차 강의 복습을 하면서 Spring Security에 대해서 복습했다. https://taeho-fighting.tistory.com/46 Optional에 대해 약간의 공부를 했다. https://taeho-fighting.tistory.com/48 정말 바보같은 트러블 슈팅을 함(Bean에 대해 잘못 이해해서 객체 생성을 안한채로 베서드를 호출함) 이전 1 ··· 3 4 5 6 7 8 9 다음