Spring

· Spring
개요프로젝트를 진행하던 중 게시글의 요청이 연속으로 두 번 오면 게시글이 2개 작성되서 이전에 만들어둔 로직과 충돌하는 일이 발생했다.기존의 로직은 현재 진행중인 게시글이 있다면 더이상 게시글이 작성되지 않도록 했지만 연속으로 들어오는 요청을 방지할 방안이 없었다.즉, 2개의 요청이 들어왔을 때, 진행중인 게시글의 존재 여부를 체크를 2개의 요청이 모두 넘어가면 2개의 게시글 모두 작성된다는 문제가 발생한다.문제의 코드@Override public WantedResponseDTO createWanted(WantedDTO wantedDTO, MultipartFile mainImage, MultipartFile signature) throws IOException { UserEntity u..
· Spring
개요프로젝트를 진행하던 도중 실수로 유저가 동시에 버튼을 두 번 연속으로 누를 경우에 회원가입이 두번 발생하는 현상이 있다는 것을 알게되었다.이런 문제를 해결하는 방법을 찾아보던 중 동시성 제어를 해서 두 개의 스레드가 동시에 임계 구역으로 진행하지 못하도록 세마포 역할을 하는 무언가가 있어야한다는 것을 알게되었고 해당 내용을 테스트 해보았습니다.자바의 동시성 제어여러 스레드가 하나의 자원을 공유해서 레이스 컨디션이 발생하는 것을 방지해야 합니다. 자바에서는 synchronized 키워드를 통해서 메서드에 대한 동시성을 제어할 수 있었습니다.📌 synchronized 키워드 Essential Java Classes > Concurrency)" data-og-descri..
· Spring
개요 QueryDSL을 통해서 JPQL을 동적으로 구성할 수 있는 법을 공부하고 Spring Boot에 적용하는 방법을 찾아보고 적용시킨 방법을 기록한다. QueryDSL은 JPA에서 공식적으로 제공하는 JPQL 빌더가 아니기 때문에 따로 구성해주어야 한다. 적용시킨 Spring Boot 버전과 의존성들은 다음과 같다. version : 3.2.4 java version : 17 Spring Data JPA lombok MariaDB Driver Spring MVC 환경이 다르면 문제가 발생할 수 있다는 점, 안된다면 댓글을 남겨주세요 본론 Gradle에 QueryDSL 의존성 추가 // query dsl 버전 명시해야 jakarta사용 (javax X) implementation 'com.queryds..
· Spring
개요 프로젝트를 진행하면서 application.yml 파일에 입력되는 여러 민감정보(oauth token, database url, username, password 등..)이 github에 노출되는 것이 마음 한켠으로 불편했다. 그래서 docker container를 실행할 때 .env 파일을 통해 값들을 주입시켜주는 방법과 로컬 환경에서도 .env 파일을 통해 관리할 수 있는 방법을 소개하겠다. 본론 📌 .env 파일 만들기 확장자명 .env 파일을 먼저 만들어서 환경변수로 사용해야 한다. {환경변수명}={값} 위와 같이 간단한 형태로 작성해주면 된다. 아래는 예시이다. MY_DATA_SOURCE=jdbc:mariadb://127.0.0.1:3306/capstoneAuth MY_DATA_USERNA..
· Spring
서론 지난 포스트에 이어 스프링 프로젝트에서 리액트-스프링 부트간의 REST API를 통한 카카오 로그인과 카카오 회원가입 구현에 대해 소개하겠다. 본론 카카오 회원가입 카카오 서버로부터 정보를 받아와서 서비스에 정보를 등록해두고 회원가입 처리를 해준다. 프론트에서 인가 코드를 받아 서버로 전달 프론트 과정 설명으로 다루겠다. 프론트엔드에서 인가 코드를 발급받고 redirect uri로 리다이렉트되었을 때, 쿼리 파라미터에 담긴 code를 서버로 전달해주어야 한다. 위의 api를 통해 인가 코드를 발급받는다. 위의 3가지 쿼리 파라미터를 작성하고 GET 요청을 보내면 카카오 로그인 화면이 나타나고 로그인을 완료하면 설정한 redirect uri로 리다이렉트된다. redirect uri는 내 애플리케이션 ..
· Spring
개요 프로젝트를 진행하면서 소셜 로그인을 통해서 간편 로그인을 만들었다. 이번 포스팅에서 카카오 로그인을 React - Spring Boot간의 REST API로 구현하는 방법에 대해서 소개하겠다. 본론 카카오 developers에 정보 등록하기 먼저 카카오 developers에 가입해서 현재 프로젝트 애플리케이션을 등록해주어야한다. Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다. developers.kakao.com 카카오 developer에 로그인해준 후 내 애플리케이션으로 들어간다. 그 후 애플리케이션 추가하기 버튼을 눌러 애플리케이션에 대한 정보들을 기입해준다. 이때 기입한 ..
· Spring
개요 intellij에서 javadoc으로 문서를 만들어주는 기능이 있다는 것을 발견해서 프로젝트를 javadoc으로 만들어보았다!. 본론 기본적인 개념 javadoc 주석을 달아놓은 메서드와 클래스들을 문서로 자동으로 만들어준다. /** * 유저의 이메일이 데이터베이스에 존재하는지 체크 * @param email 체크하려는 이메일 * @return true 존재하는 이메일, false 존재하지 않는 이메일 * */ private void emailDuplicateCheck(String email){ if(userDAO.existUserByEmail(email)){ throw new EmailDuplicateException(); } } 위와 같이 /** 내용 */ 형태로 작성한 주석을 javadoc이라..
· Spring
개요 기존의 서비스에서 Access Token만을 사용하여 로그인 후 api에 대한 인가 처리를 진행해주었다. 하지만 이 방식은 Access Token의 긴 유효시간으로 인해 replay, MITM 공격에 취약하다는 문제점이 있다. Access Token이 만약 탈취된다면 공격자는 그 Access Token을 사용해서 정당한 유저를 사칭하여 모든 정보에 액세스할 수 있는 문제가 생긴다. 따라서 만료시간이 긴 Refresh Token과 만료시간이 짧은 Access Token을 두고 Access Token의 짧은 만료시간을 Refresh Token으로 좀 더 길게 유지시킬 수 있고 Access Token의 만료시간이 짧기 때문에 탈취당한다고 하더라도 공격의 강도가 약해질 수 있다. 따라서 기존의 Access..
창e
'Spring' 카테고리의 글 목록