개발 48

Springboot 프로젝트에서 Jasypt 암호화로 yml 설정 파일 프로퍼티 관리하기

🚩목차개요 스프링부트 프로젝트 내 application.yml application.properties 등 프로젝트 설정 파일을 관리하다 보면, 외부에 노출되어서는 안되는 값들이 생기기 마련입니다. 설정 파일 프로퍼티를 노출하지 않는 방법은 다양하지만 이번 포스팅에서는 Jasypt 암호화를 다루고자 합니다. Jasypt 라이브러리Jasypt 란? Jasypt는 Java Simplified Encryption의 약자로, 암호화 지식 없이도 자바 애플리케이션에 암호화 기능을 쉽게 추가할 수 있도록 도와주는 라이브러리입니다. dependency를 추가하고 Configuration 클래스만 작성하면 간단히 사용할 수 있습니다. Jasypt 적용하기1. dependencyhttps://mvnrepository...

개발/Spring 2024.05.07

[AWS] S3 이미지 업로드 후 URL 접근 시 Access Denied 해결

문제 AWS S3 버킷에 이미지를 업로드한 후 url로 접근 시 Access Denied 문제가 발생했습니다. 프론트엔드에서 url로 이미지 리소스에 접근해야하기 때문에 문제를 해결해야만 했습니다. 해결 방법S3 버킷 화면에서 권한 탭을 누릅니다. 퍼블릭 액세스 차단 편집 버튼을 누른 뒤, 위 화면에서 체크를 비활성화하고 변경사항 저장을 누릅니다. 다시 권한 탭으로 돌아가 버킷 정책 편집 버튼을 누릅니다. 아래 json 코드를 복사 붙여넣기 한 뒤 Resource 키의 밸류로 버킷의 arn을 작성합니다. { "Version":"2012-10-17", "Statement":[{ "Sid":"PublicReadGetObject", "Effect":"Allow", "Principal": "..

Springboot로 Web Socket 서버 구축하기

개요 일반적인 채팅 애플리케이션은 상대방이 나에게 메시지를 전송하면, 내 화면에 즉시 메시지가 표시됩니다. HTTP 통신은 클라이언트와 서버 간 요청과 응답이 완료되면 연결을 끊어버리기 때문에, 상대방이 메시지를 전송했는지 안 했는지 알기 위해서는 새로고침을 해야만 합니다.  하지만 나에게 신규 메시지가 전송될 때마다 새로고침 하는 것은 우리가 원하는 방법이 아닐 겁니다. 이 문제를 해결하기 위해 사용할 수 있는 프로토콜은 바로 Web Socket인데요, 왜 그런지 살펴보도록 하겠습니다. Web Socket 특징 2가지 HTTP 통신과 비교했을 때 WebSocket 통신에서 두드러지는 특징이 2가지가 있습니다. 첫째, 클라이언트와 서버가 TCP 3-way 핸드셰이크로 연결을 체결한 후, 해당 연결을 끊지..

개발/프로젝트 2024.05.02

Web3j 라이브러리를 활용한 이더리움 통신 Spring boot 프로젝트

개요 최근 블록체인 기술에 흥미가 생겼다. 빠르게 블록체인 생태계를 경험해보고 싶어 DApp을 개발해보려 한다. 흔히 DApp은 Truffle, Hardhat 프레임워크 상에서 Solidity 언어로 Smart Contract를 작성하고 배포한 뒤, 자바스크립트 라이브러리 web3.js를 통해 스마트 컨트랙트를 호출하여 동작한다.  하지만 이번 프로젝트는 블록체인 생태계에 대한 빠른 이해를 위해 진행하는 것이다. 따라서 Java 백엔드 개발을 해왔던 나에게 있어 개발 편의성 및 효율성을 따져, Web3j 라는 자바 진영 이더리움 라이브러리를 사용해보았다. 다음 프로젝트에서 Smart Contract를 작성해 Klaytn 블록체인의 Baobab 테스트넷에 배포하고, web3.js 자바스크립트 라이브러리로 ..

개발/프로젝트 2024.04.25

GitHub Actions Workflow yml 파일 구성요소

개요 GitHub Actions으로 CI/CD 파이프라인을 구축하며 ”워크플로우 파일을 작성하기 전 미리 알았더라면 좋았겠다“ 라고 생각한 핵심 구성 요소들을 정리해 보았다. Workflow 구성 요소들을 학습하고 나면 yml 파일 흐름이 눈에 들어올 것이다! GitHub ActionsWhat 우선, CI/CD란 무엇일까? 한국어로 번역하면 지속적 통합, 지속적 배포다. 코드 수정사항을 운영 환경에 통합해 배포하는 것을 의미한다. 깃헙 액션은 CI/CD 파이프라인을 구축할 때 사용할 수 있는 플랫폼 중 하나다. GitHub Actions 외에도 Jenkins, Travis CI, Google Cloud Build 등을 활용할 수 있다. Why CI/CD 툴을 활용해 자동 통합, 배포를 하는 것을 알았다...

개발/Git 2024.04.17

서블릿과 서블릿 컨테이너란 무엇이고 어떻게 동작할까? - 전통적인 웹 앱 부터 Spring MVC까지 (1)

개요 자바 스프링 웹 백엔드 개발자를 희망하는 사람이라면, 스프링 웹 프레임워크(Spring MVC)가 서블릿 기반으로 동작한다고 한 번쯤은 들어봤을 것이다. 그런데 서블릿이 뭘까? 스프링 MVC가 내장하고 있다는 톰캣 웹 서버는 또 무엇일까? 이번 시리즈에서는 다음과 같은 궁금증을 풀어보려 한다. 서블릿과 서블릿 컨테이너는 무엇일까? 왜 사용될까? (📍현재 포스팅) Spring MVC에서 서블릿 컨테이너의 동작 방식은 어떠할까? (🔗보러가기) 서블릿 컨테이너와 스프링 컨테이너의 차이점은 무엇일까? (🔗보러가기) 서블릿과 서블릿 컨테이너 우선, 전통적인 웹 애플리케이션에서의 서블릿과 서블릿 컨테이너에 대해 알아보도록 하자. (스프링 MVC 스펙 말고!) What Servlet은 자바 웹 애플리케이션에서 ..

개발/Spring 2024.04.16

정적 팩토리 메서드 Static Factory Method

What 정적 팩토리 메서드란? 클래스의 인스턴스를 반환하는 단순한 정적 메서드다. 클래스는 클라이언트에 public 생성자 외에도 정적 팩토리 메서드를 제공할 수 있다. 팩토리 메서드 디자인 패턴과는 전혀 관련 없는 개념이니 혼동하지 않도록 주의하자. Why 장점 - 왜 사용하는가? 1. 이름을 가질 수 있다. Human(String name, int height) Human(String name, int weight) // 불가능, 위와 동일한 생성자 시그니처 Human(int weight, String name) // 가능, but 의미를 알 수 없음 동일한 시그니처로는 생성자를 단 하나만 만들 수 있다. 순서를 변경해 다른 시그니처로 만들 수 있지만, 개발자는 앞에오는 int 매개변수가 heigh..

개발/Java 2024.04.11

Spring Security 인터페이스를 활용한 Rest API 로그인 인증 구현

개요 이번 교내 팀 프로젝트에서 Spring Security를 확실하게 짚고 가고자 회원관리를 담당했습니다. Spring Sedurity를 활용해 기본 제공 FORM 로그인이 아닌 REST API로 로그인 인증을 구현했습니다. 이 포스팅을 통해 Security의 인증 핵심 인터페이스를 어떻게 구현했는지 복기하려 합니다. Spring Security 인증 절차 & 핵심 인터페이스 포스팅을 함께 보시는 것을 추천 드립니다. Spring Security 인증 핵심 인터페이스인증 처리의 핵심 인터페이스 다섯 가지를 소개합니다.AbstractAuthenticationProcessingFilter: 인증 처리의 시작점AuthenticationProvider: 실질적인 인증 처리를 담당Authentic..

개발/Spring 2024.03.31

Spring Security 인증 절차 & 핵심 인터페이스

개요 이 포스팅을 통해 스프링 시큐리티 인증 처리의 핵심 인터페이스와 메서드들을 살펴보고, 메서드 호출 순서를 따라가면서 인증 처리의 동작 순서를 살펴보고자 합니다. 각 인터페이스의 핵심 메서드와 수행 로직을 표로 추출해 보았습니다. Spring Security 기본 제공 로그인 흐름AbstractAuthenticationProcessingFilter의 attemptAuthentication 메서드가 호출된다.폼에 입력된 username과 password를 각각 UsernamePasswordAuthenticationToken의 principal과 credential에 담아 생성한다. (인증처리 전의 토큰이라고 하겠다.)AuthenticationManager의 authenticate 메서드를..

개발/Spring 2024.03.23

[Github] Pull Request 템플릿 만들기

PR 템플릿 생성하기 PR 템플릿은 반드시 default 브랜치에 생성해야 합니다. 다른 브랜치에 생성할 경우 사용할 수 없습니다. 파일 저장 경로는 다음 세가지 중 하나로 설정하면 되며, 파일 명은 대소문자를 구분하지 않습니다. docs/pull_request_template.md .github/pull_request_template.md pull_request_template.md (루트) PR에 들어가면 좋은 내용 이슈 넘버: 어떤 이슈에 대한 PR인지 PR 유형: 기능 추가, 버그 수정, 빌드 파일 관련, 질문 등 주요 변경 사항: 변경 사항에 대한 간단한 브리핑 리뷰 시 유의 사항: 팀원들이 코드리뷰할 때 주의 깊게 봐야할 포인트 다음은 참고하기 좋은 PR 예시입니다. https://axolo...

개발/Git 2024.03.19