이번 포스팅에서는 FCM을 이용해서 특정 시간에 웹으로 알림을 띄워주는 API를 만들어보도록 하겠다. 준비 여기를 들어가서 프로젝트를 생성한다. 마음에 드는 이름을 정하고 계속을 누른다. 바로 계속 버튼을 누른다. 계정은 기본 계정으로 한다. 새 계정을 만들어도 상관 없을 것 같다. 그리고 프로젝트 만들기를 클릭하자. 그럼 아래 화면이 뜨는데, 웹(네모 박스)를 클릭해주자. 앱 닉네임도 아무렇게나 지어도 된다. 태그로 바꿔주고 복사한다. 그리고 콘솔로 이동 버튼을 눌러준다. 콘솔로 이동하면 방금 만들었던 웹 앱이 추가되어있다. 여기서 설정 모양을 클릭한다. 서비스 계정으로 이동해서 스니펫을 자바로 선택한 다음 새 비공개 키 생성 버튼을 눌러 json 파일을 다운받는다. 다운 받은 json파일은 인텔리제이..
Redis로 로그아웃 토큰 방식에서 로그아웃 하기 위해서는 토큰의 만료시간을 만료시키거나 토큰 자체를 삭제해야 한다. 하지만 토큰의 만료시간은 직접 조작할 수가 없다. 실제로 로그인을 유지시키는 에세스 토큰을 서버가 가지고 있지 않기 때문이다. 토큰 자체를 삭제하는 방법도 불가능하다. 만약 요청에서 받아온 토큰을 삭제하더라도 클라이언트 입장에서는 그대로 들고있는 것이기 때문에 토큰을 삭제하는 의미가 없다. 그래서 다른 방법을 사용한다. 사용자가 로그아웃 요청을 보낸다. 이 때 요청헤더에서 에세스 토큰을 찾아서 넘겨준다. @DeleteMapping("/logout") public void logout(HttpServletRequest request) { authService.logout(request.ge..
어느날 깃에 푸시를 하는데 403 에러가 떴다. 권한문제라는 것은 알았지만 깃에서 403이 뜨는 경우가 있나 ? 싶어 구글링을 하며 고치려고 했다. 하지만 Organization에서 내 권한을 오너로 해주지 않은 문제였고, 오너로 변경하기만 하면 간단하게 끝나는 문제였는데 너무 성급하게 고치려고 하다보니 많이 꼬였다. 결국 토큰 생성 방식으로 푸시가 안되는 문제는 해결되었지만, 대신 푸시할 때마다 Username, Password을 물어보았다. 그래서 이번 포스팅에서는 물어보는 과정을 생략해보도록 하겠다. 푸시를 할 때 Username, Password 질문에 대해서 입력하고 푸시가 되면 아래 명령어를 입력한다. git config --global credential.helper store 캐싱으로 Us..
이번 포스팅에서는 토큰을 발급하고, 가져오는 방법을 다르게 해보겠다. 모든 코드는 깃허브에 있으니 참고해주세요. 프론트가 좋아하는 방식 프론트가 좋아한다는 방식이 무슨 말일까 ? 기존 토큰 주고받기 방식이라고 한다면, 클라이언트가 로그인을 한다. 서버가 토큰을 발급해준다. 클라이언트는 이제 요청을 보낼 때 마다 토큰을 헤더에 넣어서 보낸다. 서버는 요청에 담겨있는 헤더를 찾아서 검사한다. 만족하는 응답을 한다. 정도로 되겠다. 여기서 중요하게 볼 점은 로그인 이후 요청을 보낼 때 프론트에서 직접 토큰을 헤더에 넣어주는 작업을 해야 한다. 하지만 만약 직접 헤더에 넣어주는 작업을 해주지 않아도 요청할 때 자동으로 토큰을 넣어서 보내준다면 어떨까 ? 프론트가 해야할 일이 줄어드니 좋아할 것이다. 토큰을 쿠키..
제목의 의미 만약 토큰방식으로 로그인을 구현한 적이 있다면, 아래 코드를 이해하는데 어렵지 않을 것이다. 아래 코드는 로그인을 해야지 접근할 수 있는 url에 요청을 보냈을 때 토큰이 유효하는지 확인하는 filter다. (아래코드에서 토큰의 유효한지는 null인지만 확인하고 있다) @RequiredArgsConstructor @Slf4j public class JwtAuthenticationFilter extends OncePerRequestFilter { private final JwtTokenProvider jwtTokenProvider; private final CustomUserDetailsService customUserDetailsService; @Override protected void d..
Elastic Beanstalk이란 ? 아마존에서는 다음과 같이 정의하고 있다. 요약하자면 우리가 만든 코드를 업로드하기만 하면 Elastic Beanstalk가 배포까지 자동으로 처리해준다는 말이다. 밑에 Elastic Beanstalk을 사용함으로써 얻는 이점도 나와있다. 이것도 요약해보자면, AWS에 애플리케이션을 배포하는 가장 빠른 방법이다. Elastic Beanstalk은 사용자 대신 애플리케이션을 관리해주기 때문에 개발자는 시간을 따로 들일 필요가 없다. Elastic Beanstalk에서는 모니터링, 로그 등등을 알려주기 때문에 높은 트래픽 등을 쉽게 처리할 수 있다. Elastic Beanstalk 관리기능을 사용하면 손쉽게 제어할 수 있다. 이중에서 가장 좋은 이점은 첫번 째 이점이 아..
수동배포를 할 때 아래 명령어를 입력하고 프로젝트를 테스트하는 도중 실패가 떴다. ./gradlew test 아래는 실패했을 때의 에러문구다. 한번 번역해보니 버전에러인 듯 했다. 일단 버전문제 라는 것은 알았으니 좀 더 자세하게 봐보자. 윗부분에 자세하게 무엇이 잘못되어있는지도 나와있었다. What went wrong: Execution failed for task ':compileQuerydsl'. 에러문구를 번역한 것과 위 문구를 합쳐서 추측해보면, Querydsl을 컴파일을 하는데 버전이 너무 낮아서 생긴 문제다. 현제 EC2 자바 버전은 8버전인데, 내 프로젝트 버전은 11버전이기 때문이다. 그래서 EC2 자바 버전을 올려주기만 하면 해결 될 것같다. 다음과 같은 명령어를 입력한다. sudo y..
디자인 패턴이란 ? 위키에서는 다음과 같이 정의한다. 말을 어렵게 정의해놓은 것 같다. 좀 더 쉽게 말하자면, 프로그램을 한번에 딱딱 설계하는 것은 상당히 힘들다. 프로그램을 설계할 때는 어떠한 목적을 가지고 있으며, 어떤 기능이 있고 어떻게 동작하는지 등등을 깊게 고민해봐야 한다. 이런 머리아픈 고민들을 덜어내는 것이 디자인 패턴이다. 설계할 때는 다양한 문제들을 만나게 된다. 만약 엄청난 집중력으로 문제들을 풀 방법을 생각해냈다면, 한번 디자인 패턴과 비교해보자. 아예 똑같진 않더라도 해결 방법에 디자인 패턴 개념이 응용되었을 경우가 분명히 있을 것이다. 무슨 말이냐면 디자인 패턴은 이미 설계를 하면서 다양한 문제상황들을 만난 개발쌉고수들이 "이거 다른 개발자가 이 문제를 만나면 머리 좀 아프겠는데?..
저번시간에 간단하게 내 컴퓨터에다가 이미지를 저장하고, 현재 진행하고 있는 프로젝트에 적용해보았다. 이번포스팅에서는 s3에 이미지를 업로드하는 방법을 알아보겠다. 내 로컬에다 이미지를 저장하면 안되는 이유 내 컴퓨터에다 이미지를 저장하면 안된다. 가장 큰 문제는 이미지경로를 조회하면 내 컴퓨터의 절대경로가 조회되기 때문에 해당경로를 가지고 이미지를 띄울 수 없다. 즉, 이미지는 저장되었지만 실제로 DB에 저장한 이미지경로는 그냥 문자열이나 똑같은 것이다. 두번째로는 용량이다. 나 혼자서 즐길 사이트를 만든다면 아무 문제 없겠지만, 사용자가 100명만 되도 아마 용량이 꽉 찰 것이다. S3 그래서 우리는 이미지를 자신의 컴퓨터 대신 가상의 공간에 넣어두고 관리할 것이다. 대표적으로 Amazon S3가 있다..
ProductApiController 먼저 판매글을 저장하는 로직을 만들어보자. 위 사진을 보면 사용자가 /new url에서 판매글에 대한 정보를 입력 후 저장을 하게 되면 ProductRequestDto에 데이터가 담겨져 오게 된다. 이 데이터는 서비스 계층, createProduct 메서드에서 처리된다. 그럼 ProductRequestDto를 한번 보자. ProductRequestDto 사용자가 입력한 데이터가 해당 DTO로 담겨지는데, 이 때 from-data로 입력을 받는다. 그래서 Controller에서 @RequestBody를 붙이지 않고 DTO 클래스에 setter까지 추가를 했다. 어떤 이유인지는 모르겠지만 setter를 열어두지 않으면 데이터가 담기지 않는다. toEntity 메서드를 보..
- Total
- Today
- Yesterday