이번포스팅에서는 나만의 라이브러리를 만들어서 프로젝트에 적용해보도록 하겠다. 사용된 코드는 깃허브에 있습니다! 또한 이미 라이브러리를 완성한 후 적는거라 이미 완성 되어있는 것들은 감안해서 보셨으면 좋겠습니다. 현재 프로젝트에서는 게시글을 쓴 작성자와 해당 게시글에 댓글을 단 유저들한테 푸시메세지를 보내는 로직이 있다. private void send(String token, String nickname) { try { sendPushNotification(token, nickname); } catch (ExecutionException | InterruptedException e) { throw new InvalidNotificationException(); } } sendPushNotification..
엔티티를 생성할 때 무의식으로 아래와 같은 어노테이션을 박고 시작하는 분들이 있을 것이다. @NoArgsConstructor(access = AccessLevel.PROTECTED) 바로 저번 프로젝트 때만 해도 내가 쓰고 있었기 때문이다. 옛날에는 엔티티를 생성할 때 꼭 붙여준 것 같다. @NoArgsConstructor 어노테이션은 객체의 기본생성자를 자동으로 생성해준다. 즉 원래라면 아래코드를 직접 입력해야 하지만, 어노테이션을 붙이면 자동으로 붙여준다는 의미이다. public Member() { } @NoArgsConstuctor은 속성이 있는데, 그 중 액세스레벨을 설정할 수 있다. 액세스 레벨은 접근제한자이다. 왜 기본생성자의 접근 제한자를 private도, public도 아닌 애매하게 pro..
AOP에 대한 개념과 실전예제를 참고해주세요. 모든 코드는 깃허브에 있습니다. 문제 AOP를 사용하여 domain 패키지 안의 모든 요청에서 파라미터의 타입과 값을 찍으려고 했다. 코드는 다음과 같다. @Pointcut("execution(* com.motivation.mojaty.domain..web.api..*.*(..))") private void cut() {} @Before("cut()") public void before(JoinPoint joinPoint) { Object[] args = joinPoint.getArgs(); for(Object obj : args) { log.info("type = {}", obj.getClass().getSimpleName()); log.info("valu..
이번 포스팅에서는 FCM을 이용해서 특정 시간에 웹으로 알림을 띄워주는 API를 만들어보도록 하겠다. 준비 여기를 들어가서 프로젝트를 생성한다. 마음에 드는 이름을 정하고 계속을 누른다. 바로 계속 버튼을 누른다. 계정은 기본 계정으로 한다. 새 계정을 만들어도 상관 없을 것 같다. 그리고 프로젝트 만들기를 클릭하자. 그럼 아래 화면이 뜨는데, 웹(네모 박스)를 클릭해주자. 앱 닉네임도 아무렇게나 지어도 된다. 태그로 바꿔주고 복사한다. 그리고 콘솔로 이동 버튼을 눌러준다. 콘솔로 이동하면 방금 만들었던 웹 앱이 추가되어있다. 여기서 설정 모양을 클릭한다. 서비스 계정으로 이동해서 스니펫을 자바로 선택한 다음 새 비공개 키 생성 버튼을 눌러 json 파일을 다운받는다. 다운 받은 json파일은 인텔리제이..
이번 포스팅에서는 토큰을 발급하고, 가져오는 방법을 다르게 해보겠다. 모든 코드는 깃허브에 있으니 참고해주세요. 프론트가 좋아하는 방식 프론트가 좋아한다는 방식이 무슨 말일까 ? 기존 토큰 주고받기 방식이라고 한다면, 클라이언트가 로그인을 한다. 서버가 토큰을 발급해준다. 클라이언트는 이제 요청을 보낼 때 마다 토큰을 헤더에 넣어서 보낸다. 서버는 요청에 담겨있는 헤더를 찾아서 검사한다. 만족하는 응답을 한다. 정도로 되겠다. 여기서 중요하게 볼 점은 로그인 이후 요청을 보낼 때 프론트에서 직접 토큰을 헤더에 넣어주는 작업을 해야 한다. 하지만 만약 직접 헤더에 넣어주는 작업을 해주지 않아도 요청할 때 자동으로 토큰을 넣어서 보내준다면 어떨까 ? 프론트가 해야할 일이 줄어드니 좋아할 것이다. 토큰을 쿠키..
제목의 의미 만약 토큰방식으로 로그인을 구현한 적이 있다면, 아래 코드를 이해하는데 어렵지 않을 것이다. 아래 코드는 로그인을 해야지 접근할 수 있는 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 관리기능을 사용하면 손쉽게 제어할 수 있다. 이중에서 가장 좋은 이점은 첫번 째 이점이 아..
저번시간에 간단하게 내 컴퓨터에다가 이미지를 저장하고, 현재 진행하고 있는 프로젝트에 적용해보았다. 이번포스팅에서는 s3에 이미지를 업로드하는 방법을 알아보겠다. 내 로컬에다 이미지를 저장하면 안되는 이유 내 컴퓨터에다 이미지를 저장하면 안된다. 가장 큰 문제는 이미지경로를 조회하면 내 컴퓨터의 절대경로가 조회되기 때문에 해당경로를 가지고 이미지를 띄울 수 없다. 즉, 이미지는 저장되었지만 실제로 DB에 저장한 이미지경로는 그냥 문자열이나 똑같은 것이다. 두번째로는 용량이다. 나 혼자서 즐길 사이트를 만든다면 아무 문제 없겠지만, 사용자가 100명만 되도 아마 용량이 꽉 찰 것이다. S3 그래서 우리는 이미지를 자신의 컴퓨터 대신 가상의 공간에 넣어두고 관리할 것이다. 대표적으로 Amazon S3가 있다..
ProductApiController 먼저 판매글을 저장하는 로직을 만들어보자. 위 사진을 보면 사용자가 /new url에서 판매글에 대한 정보를 입력 후 저장을 하게 되면 ProductRequestDto에 데이터가 담겨져 오게 된다. 이 데이터는 서비스 계층, createProduct 메서드에서 처리된다. 그럼 ProductRequestDto를 한번 보자. ProductRequestDto 사용자가 입력한 데이터가 해당 DTO로 담겨지는데, 이 때 from-data로 입력을 받는다. 그래서 Controller에서 @RequestBody를 붙이지 않고 DTO 클래스에 setter까지 추가를 했다. 어떤 이유인지는 모르겠지만 setter를 열어두지 않으면 데이터가 담기지 않는다. toEntity 메서드를 보..
이번 포스팅에서는 이미지 업로드 API를 만들어보고 해당 이미지를 외부 폴더, 즉 자신의 컴퓨터에다 저장해보도록 하겠다. 먼저 프로젝트를 생성해보자. 프로젝트 생성 application.yml 표시되어있는 부분들을 자세히 봐보자. DB이름에는 생성해준 데이터베이스 이름을 넣고, 비밀번호를 넣어주면 된다. file.dir 에는 자신이 원하는 부분에 폴더를 만들고 경로를 넣어주면 해당 경로에 이미지가 저장되는 것이다. 나는 데스크탑에 images 폴더를 생성하여 해당 경로를 적어주었다. 컨트롤러 우리는 form-data 방식으로 파일을 전송할 것이다. 그럼 한번 Postman으로 확인해보자. 우리가 만들어준 경로에 원하는 사진을 넣으면 된다. 이 때 KEY 이름을 @RequestParam에서 명시해준 이름과..
- Total
- Today
- Yesterday