목록작업 (8)
우리네 장

처음 팀에 들어왔을 때부터, 담당했던 프로젝트가 수 년간 유지보수 작업을 거치면서 점점 거대해지게 되었습니다. 그 동안 한 사람만이 프로젝트를 담당했던 것이 아니어서 코드 스타일이 모두 달랐고, 의미 없는 변수 명들이 넘쳤으며, 하나의 기능 흐름을 파악하는데, 대체 이 코드가 왜 쓰인 것인지에 대해서 정말 많이 고민을 하면서 이해하였습니다. 온프라미스 환경에서 클라우드 환경으로의 이관을 준비하면서, 이후 다른 팀원들과 함께 할 유지보수 작업을 위해, 과감하게 리팩토링을 진행하기로 하였습니다! 😂😂 작업을 하기 전, 지향했던 바는 계층형 아키텍쳐에 클린 아키텍쳐를 조금 묻혀보자! 였습니다. 작업 환경 Springframework 4.3.25 Mybatis 3.5 기존 프로젝트의 문제, 원래 프로젝트의 구조..

📝 문제 상황 사용자가 앱을 처음 키게 되면, 네이티브 단에서 서버로 버전 체크 API를 요청하게 됩니다. 버전 업데이트가 필요한 경우, 앱 파일을 다운받을 수 있는 s3 링크를 내려주게 되는데, private S3를 사용했기 때문에 아래 이미지처럼 보안 토큰이 포함된 presigned Url을 응답으로 내려주었습니다. 그런데 iOS의 경우, itms-services 프로토콜을 이용해서 해당 url에 접근 할 때, 정상적으로 파일이 다운로드 받아지지 않았습니다.. 보안토큰 없이 https://presigned-url.ap-northeast-2.s3/test/xxx.ipa 로 public 하게 접근하면 정상 다운로드가 되는데 말이죠..! 혹시나 하여, url에 포함된 토큰 부분의 인코딩을 바꿔보는 등 여러..

온프라미스 환경에서 클라우드 환경으로 인프라를 전환하면서, 서버를 이중화로 구축하였습니다. 세션 공유 정책으로 Sticky Session을 사용하기로 하였으나, 하이브리드 앱의 특성으로 인해 험난했던 여정을 소개합니다.. ※ 작성자에게만 험난할 수 있음.. ※ 왜 Sticky Session ? 일단 다양한 세션 정책 중 왜 Sticky Session을 사용하였을까요?? 아래 이미지는 저희가 사용했던 인프라 구성도를 대략적으로 작성해 본 것입니다. 관리자용 사이트는 private ALB를 사용하여, 일반 사용자가 접근하지 못하도록 구성하였고, 일반 사용자 분들은 public ALB를 통해 이중화 된 서버에 접근하도록 하였습니다. 이때 저 ALB Group 내 WEBWAS1 과 3 의 세션을 유지하도록 해야..
프로젝트 환경 Tomcat 8.5 JDK 1.8 SpringFramework 4.3.25 Mybatis 3.5 Oracle 11g Synchronized ? - JAVA 단에서 지원하는 프로세스 동기화 키워드 참고 : https://qpmi1zm29.tistory.com/43 📝문제 상황 해당 앱을 유지보수 할 당시, 반복적으로 접수되는 버그성 문의가 있었습니다. 사용자들의 수강 이력을 히스토리 성으로 관리하기 위해, 강의 최초 수강 시점에 "( 사용자 아이디 + 강의 고유 값 )" 을 키로 하여 테이블에 데이터를 남겼는데요. 당연히 삽입 전에 데이터 중복 확인을 하였으나, 같은 삽입 요청이 굉장히 빠르게 발생하는 경우 테이블에 insert 문이 반영되기 전, select ( 중복 조회 )가 이루어지게 ..

서비스에서 gateway 도메인으로 접근 시, 특정 endpoint 도메인으로 리다이렉트 시켜주는 alb 구성을 지켜보다가, redirect에 대한 이해가 조금 부족한 듯 싶어 정리해본다. Http Status Code http 프로토콜에 정의된 상태 코드 중 리다이렉트를 의미하는 상태코드는, 301과 302 그리고 308 이 있다. 브라우저에서는 해당 상태 코드에 대해서 리다이렉트가 되도록 처리가 되어있어서, 사용자는 네트워크 탭을 열어서 확인하지 않는 이상 알아채긴 힘들다. 그래서 나도 자동으로 위 상태코드가 나오면 자동으로 리다이렉트가 처리되는 거라고 생각했다...ㅎ 일단 상태 코드 특징에 대해서 먼저 알아보면, 301 과 302 해당 코드가 나오면 웹 브라우저나 spring의 restTemplat..
이번에 유지보수를 맡게 된 프로젝트가 있다. STG에서 수기로 해당 프로젝트의 was을 스크립트를 이용해 shutdown과 startup만 해주었을 뿐인데, 아주 무수히 많은 에러가 나왔다....ㅎ 일단, 서버 재기동 시에 크게 2가지 Exception이 발생하였다. 1. java.net.KnownHostException 이 발생하면서 GUID 생성을 못한다는 에러 2. FATAL : remaining connection slots are reserved for non-replication superuser and rds_superuser connections 1. java.net.KnownHostException 가 발생하면서 GUID 생성을 못한다는 에러 위 에러는 ehcahe 라이브러리에서 발생하는..

스프링 프레임워크를 사용하면 다양한 xml 파일을 통해 빈 설정을 하게 되는데, 이때 어플리케이션이 올라가는 환경마다 설정파일을 변경해서 적용해야 하는 경우, 환경 변수를 통해 동적으로 관리하곤 한다. 스프링에서는 profile 이라는 설정을 통해 환경마다 생성 될 빈을 관리할 수 있는데, 톰캣 환경 변수에 " spring.profiles.active " 라는 값을 설정해놓고 사용한다. ( 예시. -Dspring.profiles.active=dev ) 요 값을 이제 xml 스프링 설정 파일에서

### EC2 linux2의 기본 user는 'ec2-user' 고정 ###환경 변수란? ### 엄청 큰 범위의 전역 변수 느낌? OS가 참조하는 변수를 의미한다. 만약에 환경 변수가 설정 되어있지 않으면, cmd창에서 'java -version'과 같은 명령어는 실행되지 않는다. jdk 는 개발과 실행 모두를 위한 directory이고, jre는 실행만을 위한 directory라서 개발 시에는 jdk가 안정성이 더 높다. EC2에서는 지원하는 linux를 'yum list java'로 확인 할 수 있고 install 명령어로 설치 가능하다. java 명령어는 java 파일을 compile해서 실행하는 명령어이고, javac 명령어는 java 파일을 class파일로 compile 해주는 명령어 이다. -..