본문 바로가기
728x90

분류 전체보기66

[다시 공부하는 Java] Stream API 개요 '아는 만큼 보인다' 라는 말을 Java와 Spring을 다시 공부하면서 매우 공감했다. 처음 습득하는 지식은 이해도 쉽지 않고 기억에 남기 어렵다. 하지만 여러번 반복해서 접하다보면 '이게 그때 그 말이었구나' 하고 깨닫게 된다. 그래서 내가 놓치고 있고 부족한 부분을 채우기 위해 다시 Java와 Spring을 공부하기 시작했다. 오늘 주인공은 Stream이다. Java 8부터 람다식, 함수형 인터페이스 등을 지원하면서 데이터를 처리하는데 자주 사용되는 함수들을 추상화한 Stream부터 복습해보자. Stream 개념 Stream이란, Collection의 담겨진 요소들을 하나씩 람다식을 수행하는 일회성 반복자이다. 소개한 그대로 Stream의 내부 메서드를 통해 반복적인 일처리가 가능하며 일회성이.. 2023. 4. 18.
메모리 누수 분석 및 개선 경험 개요 클라우드 서비스 어플리케이션 개발하면서 같은 페이지를 반복해서 이동할 경우 Detached HTML 요소들이 쌓여 Heap과 node가 증가하고 줄어들지 않는 현상을 발견하였다. 한마디로 메모리 누수가 발생하여 프로파일링을 통해 개선시킨 경험을 글로 정리하게 되었습니다. 메모리 누수가 발생할 수 있는 범위가 방대하고 누수가 발생한 객체나 DOM 요소가 프로파일링과 스냅샷을 사용해도 명확히 표시되는 것이 아니라 소스 분석을 통해 많은 정보를 수집해야 했습니다. 이 글에서는 프로파일링 방법과 개선 방법에 대해 다루겠습니다. 메모리 누수 메모리 누수란 더 이상 사용하지 않는 메모리가 반환되지 않고 계속 남아 있는 현상으로 브라우저에서는 GC(가비지 컬렉터)가 동작했음에도 불구하고 남아있는 메모리가 남아있.. 2023. 4. 10.
프로젝트에 Vue.js를 적용한 경험 개요 프로젝트 소스 중 문자열을 가지고 화면을 그리던 레거시 소스를 발견하여 직접 DOM을 조작하지 않고 화면을 구성하도록 Vue.js를 입혀 3300라인을 900라인으로 줄였다. 해당 경험을 간단히 정리해보았다. 화면 요구 사항 상품 리스트의 각 상품 정보가 다르다. 상품 리스트에 있는 상품 상태에 따라 뱃지가 달라져야 한다. 상품 케이스에 따라 버튼 UI가 다르다. 변경 전 소스 script에서 각 상품별 정보를 DOM에 문자열을 직접 수정한다. 상품 리스트 소스 중 스크립트 일부 ... if(contentItem.linkCd == 'APP_MN_KD30'){ content += '' var cnt = 0; if(item.newLaunched == 1 && cnt = 100) ? '' : '' con.. 2023. 4. 3.
Spring boot에 Swagger 적용하기 개요 API 인터페이스 관리는 스펙이 변할때 마다 일일이 수정하게 되면 생각보다 많은 비용이 드는데 Swagger를 이용하면 불필요한 비용을 줄일 수 있도록 API 문서화를 도와 단순하게 관리할 수 있다. 여기서 Swagge란, OAS(Open Api Specification)를 위한 프레임워크로 API 문서 자동화 및 테스트 기능이 있다. Swagger 적용 방법 우리는 많이 사용되는 Springfox를 이용해 swagger를 적용할 것이다. 프로젝트 버전 java : 11 spring-boot : 2.7.9 springfox-swagger : 3.0.0 1. 의존성 추가 dependencies{ implementation 'io.springfox:springfox-boot-starter:3.0.0' .. 2023. 3. 31.
Spring security + JWT 구현 방식 개요 사이드 프로젝트를 진행하면서 사용자 API를 개발할때 Spring Security를 적용해 보고자 소스 분석 및 개발을 진행하며 글로 정리하게 되었다. 예제 소스는 여기(github)에서 확인 가능하다. Spring security 역할 Spring security는 filter을 통해 인증(Authenticatio)과 권한(Authorization)을 확인한다. Filter 개념 Spring Security를 적용하기에 앞서 filter를 알아야 이해와 적용이 쉬울 것이다. 아마 처음 프로젝트를 개발하는 개발자들에게 filter에 대한 개념이 없었을 수도 있다. (필자도 그랬다) filter는 클라이언트 요청에 대해 사전에 걸러낼 수 있는 역할을 수행하며 요청(Request)와 응답(Respons.. 2023. 3. 29.
Cross-Origin Resource Sharing(CORS) 이란? * 해당 글은 공부 및 복습 목적으로 정리하기 위한 글 입니다. CORS 란? MDN Docs에서 CORS를 다음과 같이 정의하고 있습니다. CORS는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제입니다. 웹 애플리케이션은 리소스가 자신의 출처(도메인, 프로토콜, 포트)와 다를 때 교차 출처 HTTP 요청을 실행합니다. 보안 상의 이유로 브라우저에서 웹 애플리케이션은 자신의 출처와 동일한 리소스만 불러올 수 있으며, 다른 출처의 소스를 불러오려면 그 출처에서 올바른 CORS 헤더를 포함한 응답을 반환해야 합니다. CORS 예제를 통해 동작하는 방식을 살펴 본 뒤 Spring 서버 설정 방법까지.. 2022. 12. 27.
[Oracle Cloud] DB 데이터가 초기화 될 경우 Oracle Cloud 서버에 생성한 데이터베이스에 저장한 정보들이 간혹 초기화 되는 경우에 시도해 볼 만한 방법이 있습니다. READ__ME_TO_RECOVER_YOUR_DATA로 DB명이 변경되었을 경우 인바운드 규칙 확인하기 리눅스에서 스케줄러(crontab)를 사용하여 일정 시간에 캐시를 지워주기 (Oracle Cloud 무료버전은 메모리의 용량이 작아 정기적으로 지워 캐시로 인한 메모리 초과를 방지하기) 1. 인바운드 규칙 확인 데이터베이스 명이 READ__ME_TO_RECOVER_YOUR_DATA로 바뀐 경우는 누군가가 진입하여 DB를 조작한 것으로 인바운드 규칙이 0.0.0.0으로 되어 있는지 확인합니다. Oracle Cloud의 경우에는 다음과 같이 확인합니다. 1) Oracle Cloud.. 2022. 11. 21.
if문 제거하기 코드를 작성할때 항상 클린코드로 작성하기 위해 고민을 했다면 한번 쯤은 고려해볼만한 작업이다. 이번에는 객체 기반 언어인 자바스크립트에서 가독성을 높이기 위해 if문을 객체의 리터럴로 표현해보자. (다양한 객체 생성 방식 중 객체 리터럴이란, 하나 이상의 속성과 속성값들을 중괄호{}를 사용하여 하나의 객체로 표현한 방식) 예제 소스 1 function executeApp(name) { if(name === "CALL"){ return "전화 앱 실행" }else if(name === "CAMERA"){ return "카메라 앱 실행" }else if(name === "MESSAGE"){ return "문자 앱 실행" }else if(name === "MUSIC"){ return "음악 앱 실행" } } .. 2022. 11. 14.
[Linux] Zshell, oh-my-zsh 설치하기 터미널 환경을 가독성 향상과 명령어 효율성을 위해 Zshell과 oh-my-zsh 설치해보자. 설치 방법 1. zshell 설치하기 sudo yum install -y zsh 2. 리눅스는 보통 bash가 기본 쉘이기 때문에 zshell을 기본으로 변경하기 - util 다운로드( Ubuntu는 기본으로 사용 가능) sudo yum install -y util-linux-user.x86_64 - 기본 쉘 변경 chsh -s 또는 chsh /bin/zsh 3. git 설치하기 sudo yum install -y git 4. oh-my-zsh 설치하기 curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh 5. 재접속.. 2022. 11. 13.
728x90