분류 전체보기(20)
-
gRPC란 무엇인가
gRPC에 대해 알아보기 전에 RPC(Remote Procedure Call)에 대해 알아봅시다. Local Procedure Call과 Remote Procedure Call의 차이는 무엇일까요? Local Procedure Call vs Remote Procedure Call Local Procedure Call은 코드를 수행하기 위한 프로세스 내의 함수 호출을 말합니다. Remote Procedure Call은 A서버에서 B서버의 코드를 수행하는 것을 가능케 하는 방법입니다. RPC 구현체 대표적인 예로 구글에서 만든 gRPC가 있습니다. 많은 서비스들이 데이터 센터들과 함께 수많은 마이크로 서비스를 연결하기 위해 RPC 메카니즘으로 gRPC를 사용하고 있다고 합니다. gRPC가 핫한 이유 개발자 ..
2023.11.26 -
단방향 데이터 흐름의 이해
Compose의 중요한 키워드인 State를 이해하려면 먼저 기존의 View System의 흐름을 알아야 합니다. 기존의 View System은 아래와 같은 흐름을 갖고있었죠. 사용자가 버튼을 클릭 -> click event가 발생 -> event handler가 상태를 업데이트 -> 상태와 관련된 ui가 새로 업데이트됨 좀더 구체적인 예제로 알아볼까요? 구조화되지 않은 상태 사용자가 이름을 입력하면 바로 화면에 "Hello 이름"이 출력되게 하려고 합니다. 구현하는 한가지 방법은 TextView에 이벤트 콜백을 바로 추가하는 것이죠. viewBinding을 사용한다면 아래코드처럼 될것입니다. class HelloCodelabActivity : AppCompatActivity() { private lat..
2021.11.21 -
[안드로이드] WebViewClient와 WebChromeClient
웹뷰를 구현하기 할때 WebView객체를 만들게 되는데요, 단순히 WebView객체만 생성하면 화면만 보여질 뿐 웹뷰 속 버튼이나 다른 기능들은 동작하지 못합니다. 웹뷰 속 버튼을 앱에서 제어하기 위해 필요한 구현체들이 바로 WebViewClient와 WebChromeClient입니다. WebViewClient와 WebChromeClient 먼저 WebViewClient와 WebChromeClient 이 둘의 차이를 알아봅시다. WebViewClient는 웹페이지를 로딩할때 생기는 콜백함수들로 구성되어 있습니다. 반면 WebChromeClient는 웹페이지에서 일어나는 액션들에 관한 콜백함수들로 구성되어 있습니다. 예를들면 웹에서 새 창을 띄우려하거나 파일을 첨부하는 경우가 있습니다. 아래는 각 클래스에..
2021.11.01 -
[코틀린] var과 val의 차이
코틀린에서는 자바와 다르게 특정 타입을 명시하지 않고 변수를 선언합니다. String name = "홍길동";//자바 val name = "홍길동"//코틀린 그런데 위처럼 val이라고 선언한것도 있고 간혹가다 var이라고 표시한것도 있죠. 오늘은 이 val과 var의 차이를 공부해 보려 합니다. 변수를 선언하는 두 키워드 val - val은 value의 줄임말로 immutable reference며 val로 선언된 변수는 나중에 재할당 될 수 없습니다. 마치 자바의 final과 같은 기능입니다. var - var은 variable의 줄임말로 mutable reference며 var로 선언된 변수는 변경될 수 있습니다. final이 아닌(non-final)인 자바의 변수들이랑 같습니다. val은 위에서 말..
2021.09.19 -
[자바] Reference와 Object의 차이
Reference와 Object Object는 Class의 인스턴스로 특정 메모리 슬롯에 저장됩니다. Class는 Object를 어떻게 생성해야하는지 설명되어 있는 템플릿 같은 것 입니다. Reference는 'Object 변수나 함수'가 저장된 곳을 가리키고 있습니다. 정확히는 Reference는 object가 저장된 곳의 주소를 일련의 bit로 가지고 있는 것입니다. Reference와 Object의 차이 Object는 실제 데이터나 메모리를 들고있는 현실세계에 실재하는 존재고, Reference는 단지 변수이름에 불과한 '호칭'같은 것입니다. Java에서 Reference란? Object는 자바에서 절대 직접 사용되지 않습니다. 대신 Reference value를 사용해 마치 Reference va..
2021.09.19 -
[코틀린] 범위 지정 함수 let(), apply(), with(), run(), also()
코틀린에서 아주 자주 볼 수 있는 범위지정함수 5가지를 정리합니다. 범위 지정 함수는 코틀린에서 표준 라이브러리를 통해 제공하고 있습니다. let() apply() with() run() also() let() let()은 이 함수를 호출한 객체를 이어지는 함수 블록의 인자로 전달합니다. //1. 이 함수를 호출한 객체를 block의 인자로 전달하고 block의 결과를 반환 fun T.let(block: (T) -> R): R let은 불필요한 변수 선언을 방지할 수 있습니다. //let 사용 전 val file = File(path) if(!file.exists()){ throw FileNotFoundException(file.toString()) } val metadata = loadModuleMet..
2021.09.03 -
[남산맛집] 정창욱 셰프의 '금산제면소'
(2021.07.30 방문) 이번에 소개할 맛집은 바로 명동역 근처에 위치한 '금산제면소' 입니다. 간판은 없지만 새하얀 벽 때문에 멀리서도 눈에띈 외관이 인상적이 였는데요. 바로 이렇게 생겼습니다. 내부는 생각보다 좁았는데요, 7명정도 앉을 수 있는 정도의 아주 아담한 공간이랍니다. 저는 좀 이른시간에 방문해서 다행히 대기없이 바로 먹을 수 있었어요. 이 집의 독특한점은 바로 메뉴가 딱 1개라는 것이죠. 바로 탄탄멘. 저는 탄탄멘에 추가로 온천달걀과 밥 하나를 주문했습니다. 먼저 온천달걀이 나옵니다. 달걀은 반숙도 아닌, 거의 생 으로 나오기 때문에 호불호가 좀 있을것 같네요. 그리고 대망의 탄탄멘! 제가 생각했던 국물라멘은 아니였습니다. 오히려 마제멘과 유사했는데요, 저는 마제면을 더 좋아해서 넘 맛..
2021.08.12 -
Google Search Console 사이트맵 가져올 수 없음
블로그를 구글 검색에 노출시키기 위해 Google Console Search에 등록하던중 이상한 오류를 발견했습니다. 똑같이 튜터리얼대로 입력했는데 왜 안되는걸까요. 여기저기 구글링해본 결과 구글 서치 콘솔에 버그가 존재한다는 것을 알게되었고, https://contenteum.io/couldnt-fetch-sitemap-error-on-google-search-console-solved/ 여기서 해결책을 찾을 수 있었습니다! sitemap.xml이 아니라 /sitemap.xml로 입력하면 제출하면 성공이라고 잘 뜹니다.
2021.05.26 -
[안드로이드] 저장소 사용하기 - 2. Scoped Storage
안드로이드 버전10 이상부터는 Scoped Storage를 사용합니다. 이전 버전이였던 Legacy Storage와 어떤차이가 있는걸까요? 지난 포스트에서도 말했듯이 안드로이드의 저장소는 크게 내부저장소와 외부저장소로 나뉩니다. 두 버전에서 내부저장소는 동일하고 외부저장소의 구조가 살짝 바뀌었습니다. 외부저장소 구조의 변화 기존에는 공용공간안에 모든 파일이 저장되었다면, 변경된 후에는 개별공간이 샌드박스 형태로 보호되어있고 공용공간 또한 타입별로 분리되었습니다. 개별 앱 공간은 앱 삭제시 함께 제거되고, 공용공간은 앱이 삭제되어도 기기에 남아있습니다. 외부저장소 접근 방법 1. 개별 앱 접근방법 개별 앱 공간은 따로 권한요청이 필요 없고 Context.getExternalFilesDir()를 통해 자신의..
2021.02.24 -
[안드로이드] 저장소 사용하기 - 1. Legacy Storage
안드로이드에서는 저장소를 내부저장소와 외부저장소로 나눠서 관리하고 있습니다. 안드로이드 버전10(Q)을 기준으로 저장소의 모양이 바뀌었는데요. Q버전 이전의 저장소, Legacy Storage라는 형태가 Q버전 이후로는 Scoped Storage라는 형태로 변경되었습니다. 두개의 차이는 구조인데 그부분은 다음글에서 설명하고, 이번 글에서는 Q이전 형태인 Legacy Storage에 대해서 설명하려고 합니다. 내부저장소와 외부저장소? 내부저장소 | 내부저장소는 모든 스마트폰에서 제공됩니다. 앱을 설치하게 되면 해당 앱을 위한 저장공간이 할당됩니다. 이 공간은 샌드박스 형식으로 되어있어서 해당 앱만 접근하고 외부에서는 볼 수 없는 형태입니다. 앱이 삭제되면 이 공간 또한 같이 제거됩니다. 외부저장소 | 대부..
2021.02.23