[FBTB] 4. 로그인 유지 기능 구현 [1]
·
Project/FromBookToBook
드디어 로그인 유지 기능 구현 ! 이 부분에서 정말 많은 시간을 보냈다. 헤매기도 많이 헤매고 조금 힘들었지만 그만큼 다 해냈을 때 성취감은 말로 이룰 수 없었다. 일단 이전 로그인 구현은 react-google-login이라는 라이브러리를 사용해서 프론트단에서 access-token을 바로 얻게되었다. 하지만 이전 포스팅에도 적어놨듯이 이게 여간 찝찝한게 아니었다 .. 구현은 되긴 하는데 (비록 이메일과 이름만 받아오는거긴 하지만) 보안상으로도 엄청난 실수를 하는 느낌. (그치만 이 라이브러리가 존재하는 이상 어떻게 어떻게 안전하게 구현할 수 있는 방법이 있을 것 같기는 하다.) 그래서 google server에서 authorization code를 받은 뒤 백엔드 서버에 보내고, 백엔드단에서 goog..
(임시) user/password springSecurity 클래스들
·
Project/FromBookToBook
auth.jwt package com.frombooktobook.frombooktobookbackend.auth.jwt; import lombok.RequiredArgsConstructor; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.Se..
Cookie 와 Session
·
Web
이번에 프로젝트를 하면서 cookie랑 session이 무엇인지 확실히 짚고 넘어가야할 것 같아서 정리해본다.컴공 3년 다니고 아직도 이 차이를 긴가민가 하는게 조금 쪽팔리지만서도 .. 구글링하면서 아 이랬지! 정도는 떠올라서 그나마 다행이다. ✏️ Cookie 쿠키쿠키는 사용자의 컴퓨터에 저장되는 작은 정보 저장 파일이라고 보면 된다.사용자의 정보를 cookie에 저장해놓았다가 필요시 쿠키를 참조하여 HTTP를 통해 서버와 통신할 때 정보로서 이용할 수 있다. - 클라이언트가 웹사이트에서 페이지를 요청한다.- 서버는 쿠키를 생성하여 쿠키에 정보를 담아 HTTP 화면을 돌려줄 때 클라이언트에게 함께 준다.- 클라이언트는 받은 쿠키를 로컬 pc에 저장한다.- 해당 서버에 다시 요청 보낼 때, 저장해놓았던 ..
[FBTB] 3. 로그인 기능 구현 (with Oauth2)
·
Project/FromBookToBook
이제 로그인 기능 구현이다. 생전 처음 들어보는 oauth2 를 사용하느라 여기저기 블로그도 많이 돌아다니고 유튜브도 많이 들락날락거렸다. ( 인증-인가에서부터 시작해서 oauth의 역할, session, cookie, jwt 기본 개념 공부도 자연스럽게 하게 되었다. ) 책에서 spring boot로 oauth2 google api를 통해 로그인을 구현하는 예제를 봐서, 이걸 토대로 열심히 코드를 짜다가 . . . 난관에 부딪혔다. 책에서는 view를 mustache로 구현하는데, 지금 나는 프로젝트에서 react라는 다른 프레임워크를 통해 view를 구현하고 있기 때문이었다. 처음에는 뭐 큰 차이가 있겠나 싶었다. 지금 내가 현재 구현한 back oauth 방식 + 뷰는 react로 짜는 법을 열심히..
[FBTB] 2. 독후감 목록 기능 구현
·
Project/FromBookToBook
목록 보여주는 기능은 그래도 좀 수월하게 짰다. 오류가 별로 안 나서 (나더라도 이해할 수 있는 오류) 오류 때문에 지체되는 시간이 적었다. UI는 역시 아주 대충 짰다 아무래도 나 미적 감각 없는 듯 대충 어떻게 어떻게 만들고싶다는 생각은 있지만 아직은 기능부터 구현하는게 먼저인 것 같아서 일단 미뤄둔다. 아직 페이지네이션도 구현 안 했고 진짜 기본적인 것만 짰다. (그래서 수월하게 짰던 듯 ㅎ) 이제 페이지네이션 구현하고, 웹사이트처럼 보이도록 header도 달고 뒤로가기도 추가하고 해야겠다. 더보기 구현 코드 Backend - PostListResponseDto package com.frombooktobook.frombooktobookbackend.controller.post; import com...
[FBTB] 1. 독후감 작성 기능 구현
·
Project/FromBookToBook
포스트 작성 구현 전에 oauth 관련 설정 + 클래스를 만들어 놨었는데 이것 때문에 얼마나 고생했는지 ... post 관련된 controller, service 다 만들어놓고 테스트를 해보는데 계속 뚱딴지 같은 응답이 서버에서 날아왔다. json 형태도 아니고, postman 이용해서 모든 post 요청을 보낼 때마다 구글 로그인 관련 html이 redirect되어서 response로 전달되었다. 인텔리제이 내에서 테스트할 때는 expected: 200 ok , got: 302 found 가 계속 .... 뭐가 문젠지 한참 몇 시간을 들여다보고 고쳐보고 하다가 결국 그냥 oauth관련 서비스 클래스들을 다 없애고 관련 dependency까지 전부 다 삭제해주니까 완전 멀쩡히 돌아가는 테스트 ^^ 그냥 ..
[Error] PostControllerTest 중 에러
·
Project/FromBookToBook
package com.frombooktobook.frombooktobookbackend.controller.post; import com.frombooktobook.frombooktobookbackend.domain.post.Post; import com.frombooktobook.frombooktobookbackend.service.PostService; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.Post..
[Error] UserControllerTest 중 Error
·
Project/FromBookToBook
- UserCreateRequestDto.java @Getter @Builder public class UserCreateRequestDto { private String email; private String nickname; private String password; public User toEntity() { return User.builder() .email(email) .nickname(nickname) .password(password) .build(); } } - UserControllerTest.java @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class UserControllerT..
[Spring] ResponseBody와 ResponseEntity
·
Back-End/Spring
우선, HTTP란?HyperText Transfer Protocol 의 약자로, server와 client간 데이터를 송수신하기 위한 규약이다. HTTP Request : 요청Start line : method, URL, version으로 이루어짐.Headers : 요청에 대한 접속 운영체제, 포트 번호, 쿠키/캐시 정보와 같은 부가적인 내용을 담고 있음.Body : json, xml로 된 요청에 대한 구체적인 내용HTTP Response : 응답Status line : 요청에 대한 처리 상태를 담고 있음. ex) 404 -> 200Headers : 서버 정보, 쿠키/캐시 정보, Access-Control-Allow-Origin (CORS에러 관련) 와 같은 부가적 내용을 담고 있음.Body : json..
spring - react , 백엔드-프론트엔드 연동하기 연습
·
Project/FromBookToBook
본격적으로 프로젝트 개발에 들어가기에 앞서, 백엔드 - 프론트엔드를 연동하여 데이터를 주고받는 방법을 먼저 알아보았다. 우선 백엔드 서버는 8080, 프론트엔드 서버는 3000으로, 서로 다른 포트끼리 데이터를 전달할 것이므로 가만히 두면 CORS 에러가 발생한다. 서치해본 결과, 이를 방지하기 위해서는 프론트엔드의 package.json에 프록시를 등록하면 된다. - package.json { "name": "frombooktobook-frontend", "version": "0.1.0", "private": true, "dependencies": { "@testing-library/jest-dom": "^5.16.2", "@testing-library/react": "^12.1.4", "@testin..
[Spring] 싱글톤객체 / 자동 의존 주입 / 컴포넌트 스캔
·
Back-End/Spring
@Configuration public class AppCtx { @Bean public MemberDao memberDao() { return new MemberDao(); } @Bean public MemberRegisterService memberRegisterService() { return new MemberRegisterService(memberDao()); } @Bean public MemeberLoginService memeberLoginService() { return new MemeberLoginService(memberDao()); } 위의 코드에서 memberReigsterService() 메서드와 memberLoginService() 메서드는 둘 다 memberDao() 메서드를 ..
[Spring] 의존 주입
·
Back-End/Spring
스프링에서 말하는 의존 주입, 의존 처리 ... 의존이라는 게 뭘 말하는걸까? 회원가입을 수행하는 코드를 짠다고 생각해보자. 이를 위해 MemberDao, MemberService, MemberControl 가 존재한다. 여기서 만일 동일한 이메일으로 회원가입을 하지 못 한다는 요구사항이 있다면 MemberService 클래스는 MemberDao 객체의 FindByEmail() 의 메서드를 사용하여 해당 이메일로 회원가입한 멤버가 있는지 확인한다. 이렇게 어떤 한 클래스가 다른 클래스 객체의 메서드를 실행할 때, 이를 '의존'한다고 표현한다. 위의 경우에서는 MemberService 클래스가 MemberDao 클래스에 의존한다고 표현할 수 있다. 의존은 변경에 의해 영향을 받는 관계를 말한다. 위의 예시..