728x90
반응형

분류 전체보기 48

[안드로이드] 웹뷰(Webview)에서 캐시 컨트롤(feat. 웹 버전)

서론 프로젝트에서 웹뷰를 활용하여 네이티브 앱을 제작하고 있다. 그 중 안드로이드를 주로 담당하고 있는데, 안드로이드 네이티브 앱은 업데이트 없이 웹 상에서 업데이트가 일어날 경우, 기존에 남아있던 캐시들로 인해 업데이트 반영이 안되어 오류가 발생하는 문제가 있었다. 이를 해결하기 위해 백엔드 상에서는 웹 업데이트 시 버전을 올리고 이를 API로 호출하여 확인할 수 있도록 작업하고 앱에서 별도의 캐시 컨트롤을 해야했다. 본론 목표는 다음과 같다. 웹뷰를 로드하기 전에 기존 앱이 가지고 있던 웹 버전과 로드될 웹 버전을 비교한다. 필요하면 캐시를 삭제한다. 이 목표를 달성하기 위해서는 다음과 같은 작업을 진행해야 한다. 최초 실행 시 웹 버전을 SharedPreference에 저장한다. 실행할 때마다 Sh..

웹, 앱 2023.05.01

[스프링부트] 코드 실행 시간 측정

서론 프로젝트를 진행하면서 이중 for문을 사용하는 코드를 짜는 스스로가 너무 싫어서 코드 실행 시간을 확인해볼 필요성을 느꼈다. 본론 두 가지 방법이 있다는 걸 확인했다. 첫 번째는 자바를 배울 때 사용해서 기존에 알고 있던 방법이었다. long startTime = System.currentTimeMillis(); // 실행 코드 long stopTime = System.currentTimeMillis(); System.out.println("코드 실행 시간: " + (stopTime - startTime)); 두번째는 스프링에서 제공하는 stopwatch 방법이다. StopWatch stopWatch = new StopWatch(); stopWatch.start(); // 실행 코드 stopWatc..

웹, 앱 2023.03.27

[이슈] 스프링부트 Optional orElse() vs orElseThrow()

상황 java.util.NoSuchElementException: No value present 원인 // A Service Optional a = bService.getA(id); if(a.isPresent()){ do(a.get()); } // B Service public Optional getA(int id){ C c = bRepository.findById(id).orElseThrow(); // Exception 발생 원인 return Optional.ofNullable(c.getA()); } 해결 Optional의 orElse()를 사용해야하는 상황에 orElseThrow()를 사용한 것이 문제였다. orElseThrow()는 '내가 예외 처리를 하겠다'의 의미인데, 별도의 예외 처리를 하지 ..

이슈 2023.03.26

[NoSQL/몽고DB] 몽고DB 완벽가이드 3판 - 1

서론 1. 투입된 프로젝트에서 기존에 몽고DB를 사용하고 있었음 2. 진행하던 프로젝트에서 몽고DB를 활용하는 기능 제작이 필요해짐 3. 2번의 프로젝트에서 기존 mariaDB를 몽고DB로 옮기자는 이야기가 나옴 4. 요즘은 스토리지가 싸서 정규화고 뭐고 중복으로 데이터 때려박는 NoSQL이 많이 사용된다는 교수님의 농담 온 세상이 몽고DB를 사용하는 것 같은 기분,,,까진 아닌데 앞으로도 몽고DB를 활용할 일이 많아질 것 같았고, 지금까지는 그때그때 조각조각 찾아보면서 해왔지만 한번쯤 정리하고 가야할 필요성을 느끼게 되었다. 책으로 공부하는게 익숙하고 편해서 책부터 찾아봤고, 처음부터 훑기에는 몽고DB 완벽가이드라는 책이 괜찮을 것 같아서 이 책으로 시작하게 되었다. 더이상 관계형DB를 고집하지 않아도..

데이터베이스 2023.03.23

[타입스크립트] 타입스크립트의 타입, 클래스와 인터페이스

타입스크립트의 타입 any 타입 동적 타입 컴파일러가 타입을 확인하지 않음 → 사실상 타입이 없음 unknown 타입 unknown으로 타입을 선언하면 해당 변수에 모든 타입의 값을 설정할 수 있고 다른 어떤 타입으로 변경될 수도 있다 any 타입과는 다르게 먼저 변수의 유형이 무엇인지 확인하는 과정을 거쳐야 변수의 멤버를 호출하거나 다른 변수의 값으로 설정할 수 있다 인터섹션 타입과 유니온 타입 인터섹션 타입: 최종 객체가 여러 속성을 갖는 것 let obj: {name: string} & {age: number} = { name: 'tom', age: 25 } 유니온 타입: 최종적으로 하나의 타입을 갖는 것. 아래 예제에서 unionObj는 null 이거나 {name: string} 타입이 된다 le..

타입스크립트 2022.12.20

HTTP 완벽 가이드: 3장 HTTP 메시지

메시지 문법 - 요청 메시지의 형식 - 응답 메시지의 형식 - 메서드: 클라이언트 측에서 서버가 리소스에 대해 수행해주길 바라는 동작 메서드 설명 메시지 본문이 있는지 여부 GET 서버에서 어떤 문서를 가져옴 없음 HEAD 서버에서 어떤 문서에 대해 헤더만 가져옴 없음 POST 서버가 처리해야 할 데이터를 보냄 있음 PUT 서버에 요청 메시지의 본문을 저장 있음 TRACE 메시지가 프락시를 거쳐 서버에 도달하는 과정을 추적 없음 OPTIONS 서버가 어떤 메서드를 수행할 수 있는지 확인 없음 DELETE 서버에서 문서를 제거 없음 - 요청 URL: 요청 대상이 되는 리소스를 지칭하는 완전한 URL 혹은 URL의 경로 구성요소 - 버전: 이 메시지에서 사용 중인 HTTP의 버전 - 상태 코드: 요청 중에 ..

HTTP 완벽 가이드: 2장 URL과 리소스

URL 문법 - ://:@:/;?# 컴포넌트 설명 기본값 스킴 리소스를 가져오려면 어떤 프로토콜을 사용하여 서버에 접근해야하는지 가리킴 없음 사용자 이름 몇몇 스킴은 리소스에 접근을 하기 위해 사용자 이름을 필요로 함 anonymous 비밀번호 사용자의 비밀번호를 가리키며, 사용자 이름에 콜론으로 이어서 기술 호스트 리소스를 호스팅하는 서버의 호스트 명이나 IP 주소 없음 포트 리소스를 호스팅하는 서버가 열어놓은 포트번호 스킴에 따라 다름 경로 이전 컴포넌트와 슬래시로 구분. 서버 내 리소스가 서버 어디에 있는 지를 가리킴 없음 파라미터 특정 스킴들에서 입력 파라미터를 기술하는 용도로 사용 파라미터는 이름/값을 쌍으로 가짐 다른 파라미터나 경로의 일부와 세미콜론으로 구분하여 기술 없음 질의 스킴에서 애플..

HTTP 완벽 가이드: 1장 HTTP 개관

웹 클라이언트와 서버 - 웹 컨테츠는 웹 서버에 존재 - 웹 서버는 HTTP 프로토콜을 이용하기 때문에 보통 HTTP 서버라고 부름 - 웹 서버는 인터넷의 데이터를 저장하고 HTTP 클라이언트가 요청한 데이터를 제공 - 클라이언트가 서버에게 HTTP 요청을 보내고 서버는 요청된 데이터를 HTTP 응답으로 돌려준다 트랜잭션 - HTTP 트랜잭션은 요청 명령과 응답 결과로 구성 - HTTP는 HTTP 메서드라 불리는 요청 명령을 지원 HTTP 메서드 설명 GET 서버에서 클라리언트로 지정한 리소스 전달 PUT 클라이언트에서 서버로 보낸 데이터를 지정한 이름의 리소스로 저장 DELETE 지정한 리소스를 서버에서 삭제 POST 클라이언트 데이터를 서버 게이트웨이 애플리케이션으로 전달 HEAD 지정한 리소스에 대..

[현문hyun답] Web Server와 WAS의 차이

Static Web Page와 Dynamic Web Page Static Web Page - 저장된 그대로 사용자에게 전달되는 웹페이지 - 서버에 저장된 데이터가 변경되지 않는 한 모든 상황에서 모든 사용자에게 동일한 정보 표시 Dynamic Web Page - 동적인 contents를 반환 - 서버에 의해서 실행되는 프로그램을 통해 만들어진 결과물을 보여줌 Static Website Dynamic Website 페이지가 로드될 때 이전에 만들어진 content는 항상 동일함 content가 빠르게 만들어지고 정기적으로 변함 웹사이트를 구축할 때 주로 HTML 코드를 사용함 PHP, SERVLET, JSP, ASP.NET과 같은 server-side-language로 웹사이트를 구축함 모든 request..

현문hyun답 2022.11.10

[데이터베이스] 정규화란? 정규화의 이유와 종류

정규화란? 정규화(Normalization)은 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스 정규화의 이유? 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지 각 릴레이션에 중복된 종속성을 여러개의 릴레이션에 분할 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함 데이터 삽입 시 릴레이션을 재구성할 필요성 감소 효과적인 검색 알고리즘 생성 가능 ※ 삽입, 삭제, 갱신 이상 - 삽입 이상(Insertion Anomaly): 데이터 삽입 시 의도와 다른 값들도 삽입됨 - 삭제 이상(Delete Anomaly): 데이터 삭제 시 의도와 다른 값들도 연쇄 삭제됨 - 갱신 이상(Update Anomaly): 속성값 갱신 시 일부 튜플만 갱신되어 모순 발생 정규화의 종류..

데이터베이스 2022.10.19
728x90
반응형