
Spring MVC의 기능을 확장시켜 직접 JWT 검증 방식을 구현하게 된 이유와 결과에 대해 기술합니다. 확장의 이유프로젝트를 개선하고자 구조를 변경하던 중, 팀원에게 서드파티 라이브러리 사용으로 인해 코드 이해 비용이 크다는 피드백을 받았습니다.그럼 어떻게 이해비용이 큰다 말했는지 이유를 살펴보겠습니다. 1. 회원 전용 API 인지 알기 어려워요 @PostMapping("/{memberId}") public ResponseEntity blocking( @PathVariable Long memberId, @RequestBody Map roomId ) throws Exception { blockBusiness.block(..

FriendShip 애플리케이션에서 인증/인가를 어떻게 구현 했는지 방법을 서술합니다. 인증/인가의 경우 구현 방법이 많습니다. 해당 방법이 완벽이 올바른 해답이라고 생각하지 않으며, 보다 나은 방법을 제시해주면 변경하도록 하겠습니다. JWT란? JWT(Jason Web Token)는 웹 표준으로서, 정보를 안전하게 전송하기 위해 JSON 객체를 사용하는 토큰을 정의하는 역할을 합니다. 주로 클라이언트와 서버 간의 정보를 전달하거나, 사용자 인증에 사용됩니다.JWT의 구조JWT는 세 부분으로 이루어져 있습니다Header(헤더): JWT의 헤더는 두 부분으로 이루어져 있습니다. 첫 번째 부분은 토큰의 종류를 지정하는데, 여기서는 "JWT"입니다. 두 번째 부분은 해시 알고리즘(예: HMAC SHA256 또..

일반적으로 서비스가 배포 되기 위한 과정은 크게 다음과 같다.프로젝트 디렉토리에서 ./gradlew build후, .jar파일을 생성.jar 파일을 이미지화 하여 Docker Hub에 pushEC2 인스턴스에 key pair를 이용하여 EC2 인스턴스에 접근EC2 인스턴스에서 Docker Hub에 있는 이미지를 pullEC2 인스턴스에서 Docker 이미지를 컨테이너화 하여 서버를 실행git의 main 브랜치에 있는 최신 변경 사항을 서버에 반영하기 위해서는 매번 위 과정을 수행하여 배포해야 할 것이다.이 과정은 반복적이며 자동화 할 필요가 있다.배포 자동화가 필요한 이유수동 배포는 반복적이고 시간이 많이 소요되는 작업이다. 이 작업을 자동화 하면, 개발자들이 더 중요한 작업에 집중할 수 있어 생산성이 ..

DB 설정 정보jwt secret keyAWS S3 인증 키외부 API 사용을 위한 토큰 정보그 외friendship은 위와 같이 노출되면 안되는 private 한 환경변수는 github에 올리지 않습니다.배포 자동화를 위해 git을 사용합니다.앞서 배포 자동화를 문서로 다뤘습니다. → CI/CD : Github Actions를 이용한 배포 자동화friendship 서비스는 배포 자동화를 위해 git action을 사용합니다. git action은 git에 있는 내용을 그대로 빌드 파일로 만들어 배포합니다.그런데, private 한 환경변수는 git에 올리지 않습니다. 그럼, 어떻게 private 한 환경변수까지 git에서 가져와 배포 자동화에 사용할 수 있는걸까요?git의 Actions secrets ..

이번에는 애플리케이션을 실행시키기 위한 환경변수들을 담은 yml 혹은 properties를 관리하는 방법에 대해 살펴볼 예정입니다. yml 혹은 properties는 무엇일까?application.yml은 Spring legacy에서의 web.xml, root-context.xml, servlet-context.xml의 합본입니다. 즉, application.yml은 이 프로젝트에서 사용하는 설정값들을 관리하는 파일입니다.그럼 왜 해당 파일을 지켜야할까?해당 애플리케이션의 중요한 환경변수로는 Datasouce 라던지 토큰의 비밀번호라던지 다양한 값을 갖고 있습니다.이 값을 무심코 github와 같은 저장소에 노출한다면 서버가 배포되었을 때 의도치 않은 타인으로부터 공격을 받을 수 있습니다.(예시로 DB..

오류배포 자동화를 구현했는데, bulid하는데에 오류가 발생했길래 봤더니spring-rest-docs에서 오류가 발생한것을 발견했습니다.asGemPath()에 문제가 있다면서 갑자기 안되는 문제였습니다.원인gradle 버전이 안맞아서 발생하는 오류라고 합니다.버전을 낮춰보라고 하네요. 그러나, 제 경우에는 버전을 6.5로 낮춰도 같은 문제가 발생했습니다. 해결➡️ 플러그인 및 build.gradle 수정플러그인과 build.gradle의 코드 일부를 수정해서 해결 할 수 있습니다.plugins { id 'java' id 'org.springframework.boot' version '3.2.1' id 'io.spring.dependency-management' version '1.1...

FriendShip 애플리케이션에서 S3에 클라이언트에서 압축한 이미지 파일을 업로드할 때 업로드 방식을 Stream 을 기존에 사용하고 있었습니다.기존의 Stream 을 통한 업로드 방식과 향상된 For문, Parallel Stream 을 사용한 방식을 비교하여, 더 빠르게 구현할 수 있는 방법을 모색합니다. 더불어 현재 방식에서 Parallel Stream을 통한 업로드를 하지 않는 이유에 대해 기술합니다. S3에 업로드할 파일 S3에 업로드할 파일들은 임시로 생성한 png 파일로, 적은 용량을 갖고 있습니다.똑같은 파일 크기와 같은 그림을 갖고 있지만 이름만 다른 경우로, 각 테스트에서 2개씩 업로드할 예정이기에 6개를 준비해줍니다.Stream을 적용하여 S3에 파일 업로드 테스트 코드@Test ..

개발을 하면서, 효율적인 SQL을 작성하기에 앞서 SQL 에 대해 더 친근해지고자!!예전에 프로그래머스에 있는 SQL 문제를 모두 풀었습니다.저만 알기보다, 각 게시글을 Lv 1에서 5까지하여 모든 문제의 답을 공유하고자합니다.(참고로 기본적인 데이터베이스 지식과 함께 SQL을 공부한다면,따로 SQLD를 학습하지 않아도 쉽게 따실 수 있습니다!! 따로 준비 안하고 땄습니듯! ) 최솟값 구하기 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.krSELECT MIN(DATETIME) FROM ANIMAL_INS 고양이와 개는 몇 마리 있을까 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Sol..