[Project]

[Window] -> [Translation] 메뉴로 이동Remote character set 목록 맨 아래에 있는 'Use font encoding' 선택[Window] -> [Appearance] 메뉴로 이동[Font settings]의 [Change...] 버튼 클릭글꼴 : 굴림체나 돋움체 선택 (뒤에 '체'가 붙은 고정폭 글꼴이 좋다고 한다.)스크립트(Script) : 창 하단에 '한글' 선택하기다시 [Session]으로 가서 [Save] 누른 후 접속
프로젝트 개요 단순한 주문 시스템을 넘어, 장기적으로는 브랜드 홍보부터 고객 소통 & 멤버십 혜택까지 아우르는 프랜차이즈 플랫폼 '꿀떡볶이'의 백엔드 시스템을 구축하고자 한다.기획 단계에서 서비스의 기능을 명확히 분류하고, 이를 데이터 모델로 연결하는 과정을 기록하겠다. 서비스 기능 요구사항 (사이트맵) 사용자 관점에서 접하게 될 기능들을 크게 7가지 카테고리로 분류하여 요구사항 구체화마이페이지 : 회원정보 관리, 쿠폰함, 멤버십 등급 확인, 주문 내역 조회매장찾기 : 지역별/매장명 검색 및 위치 기반 매장 정보 제공메뉴 : 카테고리별 메뉴 리스트(신메뉴, 메인메뉴, 반반메뉴, 세트메뉴, 사이드, 음료/주류) 및 상세 옵션(맵기조절, 토핑제거, 토핑추가) 조회주문 : 주문타입(배달, 포장, 매장취식)에 ..
본격적인 개발과 모듈 구조를 구상하기 전, '안녕 꿀떡볶이!' 문구를 띄워 보려고 한다.도커 컨테이너 app 멈추기 인텔리제이에서 실행하는 것이 도커 컨테이너 app에서 실행하는 것보다 편리해서, 우선 도커에서 app을 멈추겠다.docker stop honeydduk-api-server+) 도커와 인텔리제이 둘 다 띄워두고 싶다면 포트를 분리하면 된다.compose.yaml에서 '8081:8080'으로 바꾸면, 도커 앱은 8081로 접속하고 인텔리제이 앱은 8080으로 접속하게 된다.하지만 굳이 두 개를 띄울 필요는 없었기에, 도커 앱만 잠시 죽였다. Spring Security 모두 통과 시키기 http://localhost:8080/에 접속하면 아래와 같이 로그인 창으로 강제 리다이렉트 될 것이다.어..
프로젝트 자체를 이미지로 구워버리면 다른 사람이 내려받았을 때 JDK 설치나 DB 설정 없이 바로 실행할 수 있다.프로젝트를 맨 처음 생성하고 이 프로젝트 자체를 도커 이미지로 굽는 단계를 기록하겠다.IntelliJ에서 프로젝트 생성 추가한 라이브러리들- 우선 공부할 거리를 미리 쟁여둔다는 마음으로 추가했다.카테고리라이브러리 명칭용도기본/생산성lombok, devtools, configuration processor코드 다이어트용, 자동 재시작, 설정 파일 편의성핵심 웹spring web, thymeleaf, validation, openAPIAPI 개발, 화면 렌더링, 입력값 검증, 스웨거 문서화데이터/인프라jpa, mysql driver, redis, kafkaDB 관리, 캐싱, 실시간 메시지 처리인..
실무의 갈증을 떡볶이로 풀다 현재 실무에서 Java 8, Spring Boot 2.x, MyBatis, Oracle 12c 기반의 웹 프로젝트를 담당하고 있다. 하루가 갈수록 점점 복잡한 로직(매장별 선착순 쿠폰 사용 등)을 작성하게 되면서 벽을 느끼는 일이 점점 많아졌다.DB를 매 단계마다 조회하는 방식 대신Redis로 연산 처리를 대신하고 Kafka로 비동기 발급을 했다면훨씬 안정적이고 빨랐을 텐데 인프라의 제약 때문에 시도하지 못했던 최신 기술들에 대한 갈증이 커졌고,이를 직접 구현해보기 위해 개인 프로젝트를 결심했다. 왜 하필 '꿀떡볶이'인가?선착순에 최적화된 도메인배민이나 요기요 같은 거대 플랫폼을 모방하여 다양한 기능을 시도해볼까 생각을 했었다.하지만 아직 주니어 개발자의 1인 프로젝트에서는 ..
[사건의 발단] "결제가 너무 느려요 !!!!!" 평화롭던 서비스에 조금씩 비상이 걸리기 시작했다.특히 이벤트 기간이나 저녁 피크 시간대만 되면 "결제 완료 페이지로 넘어가는 데 한 세월이다"라는 고객 불만이 속출했다. 1. 장바구니에서 결제페이지로 진입2. 결제페이지에서 쿠폰 선택하여 적용 후 결제 시도3. 결제 처리4. 결제 및 주문 관련 대이터 세팅(이 사이에서 결제 지연 이슈 발생 !!!)5. 결제완료 페이지 진입 심지어 결제완료 페이지로 진입하기까지의 시간이 최대 146초(2분 26초)로 너무 길어지자,고객들이 오류인 줄 알고 '새로고침'이나 '뒤로가기'를 누르고 주문을 다시 시도하는 바람에 중복결제까지 발생하는 심각한 상황이었다. [원인 분석] 서버 사양 문제일까? 처음에는 서버나 DB의 성능..
같은 리눅스 서버, 다른 운영체제 최근 담당 중인 프로젝트와 서포트 하고 있는 프로젝트를 살펴보면서 한 가지 궁금증이 생겼다. 똑같이 AWS EC2 서버를 사용하고 있고 비슷한 서비스를 운영 중인데내 프로젝트의 OS는 아마존 리눅스를 이용하고 있고, 서포트 중인 프로젝트는 CentOS를 이용 중이다. 어차피 리눅스 명령어는 비슷한데, 왜 내 프로젝트와 서포트 중인 프로젝트의 운영체제가 다를까?각자 어떤 기준으로 OS를 선택한걸까? 서버(EC2)와 OS의 관계 먼저 개념 정리가 필요하다. EC2는 AWS에서 빌려주는 '가상 컴퓨터(하드웨어)'이고,Amazon Linux나 CentOS는 그 컴퓨터를 구동하기 위해 설치하는 '운영체제(SW)'이다. 우리가 노트북을 살 때 하드웨어는 삼성 노트북을 구매하고,그 ..
왜 docker 인가? 내 맥북에 직접 프로그램을 설치하지 않고 컨테이너로 격리해서 관리하여 로컬 환경의 깔끔함을 유지하고 싶었다.프로젝트 루트 폴더 생성 및 이동 먼저 전체 작업을 진행할 'work' 폴더와 프로젝트 폴더를 만든다.# 1. 루트에 work 폴더 생성mkdir ~/work# 2. work 폴더로 이동cd ~/work# 3. 꿀떡볶이 프로젝트 폴더 생성mkdir honeydduk# 4. 프로젝트 폴더로 접속cd honeydduk더보기더보기docker compose 파일 생성 (vi 편집기) 터미널에서 파일을 바로 만드는 가장 대표적인 방법, vi를 사용한다.여러 컨테이너를 한 줄의 명령어로 관리하기 위해 compose 파일을 생성하려고 한다.# docker-compose.yml 파일 생성 ..
기존 HTML escape 메서드 대체의 필요성을 느끼다 로그인하려 사용자가 입력한 ID를 전달 받은 서버에서 XSS 방어를 처리하려는 목적으로 사용한StringEscapeUtils의 escapeHtml 메서드를 보고 문득 의문이 들었다. StringEscapeUtils는 우리 프로젝트에서 총 3개의 버전이 있는데 아래와 같다.lang.StringEscapeUtilslang3.StringEscapeUtilstext.StringEscapeUtils이 3개 중에서 기존에 import 되어있는 StringEscapeUtils 클래스는 lang 라이브러리였다. 그러나 lang 라이브러리 StringEscapeUtils 클래스의 escapeHtml은 같은 특수기호가 있는 XSS 공격은 방어가 가능하지만 ';al..
숫자로 넘어오는 값은 int로 변수 세팅해도 되지 않나? 시작은 단순한 의문이었다. 이미 연동 된 핸드폰 본인인증 API 로직을 수정해야 해서,인증 성공 시 서버로 넘어오는 값 중 성별(SEX) 데이터가 있었다.남성은 홀수(1, 3), 여성은 짝수(2, 4) (주민번호 뒷자리 맨 앞 숫자 형태)우리 서비스 로직에서는 남자를 'M', 여자를 'F'로 변환하여 저장해야 함 처음엔 이렇게 생각했다." 어차피 숫자로 넘어오는 값인데, 컨트롤러에서 받을 때부터 int로 선언하면 편하지 않을까?나중에 형변환(Integer.parseInt)할 필요도 없으니까 ! " 하지만 '남이 주는 데이터'는 믿을 수 없다 ! 외부 API가 응답값으로 보내주는 데이터는 무조건 믿어도 되는 값일까?만약 내가 아무 생각 없이 int로..
어쩌다 CI, DI가 궁금하게 되었나 최근 내가 유지보수 담당하고 있는 웹프로젝트에서 황당한 이슈가 발생했다.누군가 타인의 통신사 멤버십 번호를 입력해서 할인을 받아가고 있던 것 ! 😱 단순히 멤버십 번호가 유효한지 확인하는 것을 넘어, '그 멤버십번호의 주인이 지금 로그인한 우리 회원이 맞는지' 대조해서 타인 명의 도용을 원천 차단해야만 했다.이를 해결하기 위해 통신사 측 정보와 우리 쪽 회원이 동일인인지 식별하는 'CI 비교 검증' 도입을 검토하게 되었다. 그런데 문득 근본적인 궁금증이 생겼다.본인인증 연동할 때마다 항상 세트처럼 따라다니는 CI와 DI.대체 이 둘은 정확히 어떤 차이가 있는 걸까? 지문(CI) vs 전용 입장권(DI) 본인인증을 거치고 나면 인증 기관에서 우리 서버로 암호화된 문자..
AWS > CloudWatch > RDS CPU 사용률이 오전 9:20분에 53.3%를 찍었다.오전 9:30분에는 34.0%로 슬슬 내려오더니, 9:45분이 되어서야 2.9%대로 해소되었다. 동시에 DB커넥션량은 평균 1,375대에서 오전 9:25분경에는 1,471개를 찍었고,14:40분의 1,535개를 마지막으로 서서히 내려가 14:50분경에 870개로 회복되었다. 가용메모리량은 CPU 사용률이 급격하게 증가한 시간대에 맞춰평소 1.4G 정도에서 오전 9:20분경 1.2G로 감소하기 시작했고,오전 9:20 ~ 14:40분까지 1.0G를 유지했다.다행히 14:45분서부터 1.3G로 회복되기 시작하면서, 14:50분서부터 현재 15:38분까지 1.8G로 회복되었다. 1. CPU사용량 급감 원인동일한 DB를..
soheepark
'[Project]' 카테고리의 글 목록