전체 글

단계별로 성장하자!
1. 문제 상황 내가 만든 사이트에서는 아무래도 우리 학교 대학생을 상대로 하기 때문에 회원가입시 학번, 패스워드, 이메일을 입력한다. 이 정보는 개인정보 이므로 암호화 할 필요가 있다. 패스워드 같은 경우는 비교만 하면 되므로 단방향 암호화 알고리즘을 이용하는 PasswordEncoder의 도움을 통해 쉽게 암호화 하였는데, 학번이나 이메일은 정보로 사용하기 위해서는 복호화할 수 있어야 하므로 양방향 암호화 알고리즘을 사용해야 한다. 어떻게 동작하는지를 먼저 파악하기 위해 먼저 AES256에 대해서 공부하고 코드를 구성하였다. 2. 문제 해결 ✏️ AES-256 대칭키 암호화 알고리즘을 사용하자 AES(Advanced Encryption Standard) AES 암호화 알고리즘은 암호화 및 복호화에 동..
1. 문제 상황 실제 운영해야 하는 사이트를 개발하고 있기 때문에 보안적인 이슈들을 계속 생각하고 수정해 나가고 있다. 기존에는 예를 들어 마이페이지 정보를 얻어오는 Rest API를 /api/members/{memberId} 라고 설계하고 구현했다. 하지만 Https 프로토콜을 적용하더라도 path variable 또는 query parameter로 받는 데이터는 URI에 포함되어 암호화되지 않기 때문에 보안적으로 좋지 않을뿐더러 Jwt token 인증 방식을 사용하면 토큰에 사용자 식별정보가 들어있는데 굳이 클라이언트한테 다시 본인에 대한 키를 받을 필요가 없다고 생각을 했다. 2. 문제 해결 ✏️ HttpServeletRequest를 사용하자 HttpServletRequest를 사용하면 사용자의 H..
1. 문제 상황 컨테이너를 각자 띄우고 네트워크를 연결해주고 볼륨을 연결해주고를 반복하다보니 아래와 같은 생각을 하였다. MariaDB, Redis, Spring Boot Jar, Prometheus, Grafana 등의 컨테이너를 한번에 띄우고 업데이트할 수 있는 방법은 없을까? 그리고 각 컨테이너의 docker network를 손쉽게 연결하고 볼륨, 의존관계, 기타 환경설정 등을 하나의 파일에서 편리하게 설정하고 관리할 수 있는 방법은 없을까? 2. 문제 해결 ✏️ Docker Compose를 사용하자! Docker Compose란 다중 컨테이너 애플리케이션을 정의하기 위한 Tool이라고 보면 된다. ✏️ Docker Compose 주요 특징 1️⃣ 단일 호스트의 여러 개의 격리된 환경 Compose..
1. 문제 상황 클라우드 플랫폼을 사용할 수 없고 학교 서버실 물리 컴퓨터(Ubuntu 20.04)에 배포해야 하는 상황이다. 물리 컴퓨터도 단 1대만 사용할 수 있어서 모든 처리를 한 곳에서 해야한다. 이러한 상황에서 Nginx 설정하는 방법을 알아보자. 2. 문제 해결 우선 현재 Nginx는 Docker 컨테이너상에서 동작하고 있으므로 Nginx 컨테이너상의 /usr/share/html/html 경로와 내 물리서버에 React App을 Build한 결과물 폴더의 경로를 볼륨 매핑하는 과정이 먼저 필요하다. 또한 Nginx 컨테이너와 같은 네트워크 상의 kiosek-backend 이름의 실행되고 있는 컨테이너가 있다고 가정한다. 1. 사용자가 브라우저에서 http://test.kr 을 입력하여 나의 N..
1. 문제 상황 Spring boot 프로젝트를 docker image로 build 하여 Ubuntu 서버의 도커 컨테이너로 실행을 시켰더니 아래와 같은 에러가 나타났다. The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64/v3) and no specific platform was requested ........ 2. 문제 해결 알고 보니 Docker Image를 build 했던 pc가 Apple M1 기반 맥북이었고 기본으로 Image build시에 Arm64 기반의 이미지가 만들어졌다. 하지만 배포할 서버는 Ubuntu 20.04로 Amd64 기반의 프로세서를 사용하기..
1. 분산락을 적용하게 된 상황 만약 여러 사용자가 동시에 같은 시간대이거나 겹치는 시간대에 예약 진행 시 어떻게 중복 예약을 막을 수 있을지 문제였다. 해당 예약 테이블은 아래와 같이 생성 되어있다. 하나의 회의 테이블은 이미 예약된 데이터와 시간이 겹치지 않아야만 예약이 가능하다. 동시에 100명의 사용자가 똑같은 (시간 + 장소)를 예약했을 때 8개의 중복 데이터가 발생하였다. 2. MySQL을 이용한 분산락을 구현한 이유 분산락을 구현하는 방법에 대해 검색해보면 Redis를 이용한 방법이 많이 보인다. 하지만 Redis를 이용하게 되면 추가적인 인프라 구축비용이나 유지보수 비용이 발생한다. 따라서, 나는 기존에 사용하고 있던 MySQL에서 제공하는 NAMED LOCK을 이용하여 Lock에 이름을 ..
DevPoong
Poong