목록전체 글 (18)
이지선의 블로그
문제 상황프로젝트에서 주문을 생성할 때 배송 정보도 함께 입력받는 구조의 비즈니스 로직을 선택했다. 현재 주문 처리 흐름은주문 ➡️ 재고 확인 ➡️ 결제 ➡️ 재고 차감 ➡️ 배송 ➡️ 주문 완료순으로 진행된다. 여기서 맞닥뜨렸던 고민이 있었다. "배송 정보는 결제가 완료되어야만 유효한데, 주문 생성 시점에서 이 정보를 어떻게 안전하게 처리할 수 있을까?" 예를 들어, 사용자가 주문을 시작하면서 배송지 정보를 함께 입력했다고 해보자. 그런데 결제를 하지 않고 중간에 이탈해버린다면? 결과적으로 결제가 완료되지 않은 주문과 배송지 정보가 DB에 불필요하게 영구 저장될 수 있다. 사용자 수가 많아질수록, 예컨대 100명이 결제 없이 이탈한다면 그만큼 불필요한 주문 데이터와 함께 민감한 개인정보(주소, 연락처 ..
EC2의 개념EC2란 Elastic Compute Cloud의 줄임말로 AWS 클라우드의 가상 서버이다.말 그대로 컴퓨터 대여 서비스(?)이다! 클라우드 환경이 아닌 내 컴퓨터를 서버로 사용하게 된다면 컴퓨터가 항상 켜져있어야 하고 항상 프로그램이 실행되어야 하기 때문에 별도의 서버 운영 컴퓨터가 필요하다. 하지만 AWS EC2를 사용하면 초기세팅비인 하드웨어 비용을 절감하고, 사용한 만큼의 용량만 금액을 지불하면 되는 방식이라 애플리케이션을 더욱 빠르게 개발하고 배포할 수 있다. EC2의 구성(Instance / EBS / AMI) - 인스턴스 (Instance)쉽게 말해 CPU와 메모리(RAM)를 포함하는 컴퓨터 그 잡채!프로그램을 실행하고 데이터를 처리할 수 있는 환경을 제공하는 컴퓨터를 뜻한다.종..
문제 배경원래 로그인 시 필자가 담당하는 유저 모듈에서 JWT 토큰을 발급하고 이를 통해 인증을 처리하였으나, 다른 모듈로 요청이 전달될 때 인증 및 인가 정보를 제대로 전달받지 못하는 문제가 발생했다!이로 인해 다른 모듈에서 기능이 작동되지 않는 상황 ㅠ..해결 방안 문제를 해결하기 위해 두 가지 방안을 고려하였다 :모든 모듈에서 인증/인가를 구현하여 개별적으로 처리하는 방법api-gateway 모듈을 통해 인증/인가를 처리하는 방법이 중 두 번째 방법을 채택하였는데 그 이유는,api-gateway 모듈에서 인증/인가를 처리하게 된다면 코드 중복을 방지하고 다른 모듈을 추가하는 상황에서도 따로 인증/인가 로직을 추가할 필요가 없어 유지보수가 쉬워진다는 장점이 있기 때문이다. 즉! 해당 방법이 시스템 ..
구현 내용메일 서비스를(네이버, 구글) 제공하는 기업들은 각자의 SMTP서버를 가지고 있다.사용자가 서버로 이메일 인증 요청을 보내면 SMTP 서버를 통해 사용자에게 인증 코드를 전송한다. 구글 SMTP 서버와 스프링에서 기본으로 제공하는 API를 이용하여 이메일 인증 서비스를 구현해보자!구현 코드 ✏️ 이메일 인증 API 작성1. 이메일 인증 의존성 주입먼저 스프링 프레임워크의 이메일 관련 의존성을 주입한다.implementation 'org.springframework.boot:spring-boot-starter-mail:3.2.2' 2. EmailConfig 작성설정 파일에 SMTP 서버의 정보와 인증 정보를 설정한다.@Configurationpublic class EmailConfig { @..
도커파일이란? Docker Image를 생성하기 위한 설정 파일이다. 파일 내 작성된 구문으로 Docker Image가 만들어진다. 도커 파일의 구성# Dockerfile 예시FROM ubuntu:latestMAINTAINER Your Name RUN apt-get update && apt-get install -y nginxCOPY index.html /usr/share/nginx/htmlEXPOSE 80CMD ["nginx", "-g", "daemon off;"] FROM 베이스 이미지(Base Image) 지정 MAINTAINER 이미지를 생성한 사람의 이름 및 정보 LABEL Key-value 형식으로 작성된 메타 데이터 RUN 컨테이너 빌드를 위한 실행 Commands COPY ..
도커란? 리눅스 컨테이너 기술(LXC)을 기반으로 하는 오픈소스 가상화 플랫폼이다. 다시 말해 애플리케이션을 컨테이너 단위로 실행하고 배포하는데 유용한 오픈소스 프로그램이다. 도커를 사용하는 이유 - 애플리케이션 독립성을 가진다. OS, 다른 컨테이너와도 독립된 공간을 보장받아 충돌이 발생하지 않는다. - 컨테이너 내부에 작업 후 배포시에는 도커 이미지로 운영서버에 전달만 하면 된다. - 마이크로 서비스 구조(MSA)로 변화가 쉽다. 컨테이너 하나당 하나의 기능을 제공하는 모듈로 만드는 등 조정이 가능하다. 도커 vs VMware VMware은 웹서버를 운영하기 위해 어플리케이션마다 운영체제를 깔아야 한다. '가상화(Virtualization)'라는 이름으로 물리적인 컴퓨터 안에 가상 머신(Virtual..
https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 문제 문제 해결 import java.io.*; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in));..
https://www.acmicpc.net/problem/11726 11726번: 2×n 타일링 2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다. www.acmicpc.net 문제 문제 해결 문제를 풀기 전 DP 알고리즘에 대해 학습 후 진행하였다. DP, 즉 다이나믹 프로그래밍(동적 계획법)은 큰 문제를 작은 문제로 쪼개서 그 답을 저장해두고 재활용하여 사용하는 것으로 하나의 문제해결 패러다임으로 볼 수 있다. 일반적인 재귀를 사용 시 동일한 작은 문제들이 여러 번 반복 되어 비효율적인 계산이 될 수 있다. 예를 들어 피보나치 수를 구하고 싶을 때 재귀로 함수를 구성하면 다음과 같다. f..