얼마 전까지 문제없이 사용하던 DataGrip에서 갑자기 Communications link failure 메시지가 출력되면서 데이터 베이스에 접근하지 못하는 문제가 발생했습니다. Communications link failure 문제 해결 방법 이 문제를 해결하는 방법을 찾아보니 몇 가지가 있었는데 문제를 유일하게 해결했던 방법은 데이터베이스에 연결할 때 사용하는 드라이버 옵션을 바꾸는 방법이었습니다. YouTrack에 동일한 이슈와 해결 방법이 있어 문제를 해결 할 수 있었습니다. 기존에 사용하는 드라이버를 MySQL에서 > Amazon Aurora MySQL로 변경하면 Communications link failure 문제를 해결할 수 있습니다. TLS 프로토콜 옵션을 수정하면 문제를 해결 할 수 ..
오늘은 Axios를 사용해 파일 업로드 기능을 구현하는 방법에 대해 알아보겠습니다. 이전에 Axios 파일 다운로드 기능에 대한 글을 쓴 적이 있는데, 이번에는 그 후속 편으로 Axios로 파일을 업로드하는 방법을 코드로 확인해보겠습니다. Axios 파일 업로드 요청하기 axios({ headers: { "Content-Type": "multipart/form-data", }, url: "https://7942yongdae.tistory.com/file-upload", // 파일 업로드 요청 URL method: "POST", data: formData, }).then(...); Axios를 사용해서 파일을 업로드할 때 중요한 부분은 headers의 Content-Type, data입니다. 이 두 가지 ..
Enum은 Enumeration를 줄여서 사용하는 단어로 한국 말로는 열거형이라고 표현하는 단어입니다. 여기서 이야기하는 열거라는 단어는 `나열`되는 것들을 의미하는데, 프로그램에서는 특정한 특질이나 속성으로 분류해서 사용하는 값들을 나열할 때 쓰입니다. 간단히 말해 상수들을 나열해 놓은 것을 열거형(Enum)이라고 표현합니다. 열거(Enumeration) 개념 알아보기 일반적으로 프로그램을 개발할 때 상수(Constant)로 지정해서 사용하면 좋은 값들이 있습니다. 예를 들어 최대 값과 같이 값(리터럴) 자체가 의미를 가지고 있는 경우입니다. fun main() { val number = 10 validateNumber(number) if (number > 9) { // 사용하지 못하는 값을 전달 받은..
모든 프로그래밍이 배울 때 함수와 변수부터 시작하듯 코틀린을 배우는 방법도 첫 단추는 함수와 변수입니다. 코틀린으로 어떤 앱을 만들든 웹 서버를 만들든 함수와 변수는 가장 기초에 속하는 개념입니다. 오늘은 코틀린에서 정의된 함수와 변수의 기초 개념을 공부해보도록 하겠습니다. 앱을 만들어 보고 싶어 코틀린을 배우고 있는데 접한 지 얼마 되지 않아 많이 서투르고 어색하네요 Hello, world! 틀에 박힌 시작이기는 하지만 "Hello, world"를 출력하는 코드로 가볍게 코틀린을 알아보도록 하겠습니다. fun main(args: Array) { println("Hello, world") } 자바로 프로그래밍을 배우신 분이라면 뭔가 비슷한 형태의 코드라고 생각하실 수 도 있겠네요. 위에서 정의한 "Hel..
아이패드 미니 6을 구매해서 사용한 지 어느새 3개월이 지났네요. 막상 살 때는 고민을 했었는데 지금 보면 왜 굳이 미뤘나 싶을 정도로 편하게 사용하고 있습니다. 아쉬운 부분이 없지는 않지만 아이패드 미니 5에 비해 디스플레이의 공간감은 확실히 나아져서 좋습니다. 자 그럼 아이패드 미니 6과 아이패드 미니 5의 실물을 사진으로 확인해보겠습니다. 그리고 사용하면서 느낀 장단점들도요. 아이패드 미니 6과 아이패드 미니 5의 실물을 비교해보자 이번에 애플 공홈을 통해 구매한 아이패드 미니 6의 색상은 퍼플입니다. 스페이 그레이와 같은 어두운 톤이 아닌 밝은 톤의 색을 선택한다는 게 약간 고민이 되긴 했는데 분위기도 바꿔볼 겸 퍼플로 선택했습니다. 색감이 세련되어서 그런지 눈에 튀지 않고 고급스러워 보여서 좋아..
의외로 nodejs는 배우기 전에 설치 혹은 버전 때문에 문제가 되는 경우가 많습니다. 이번에는 NPM을 사용해 Nodejs 버전을 업데이트하는 방법을 알아보겠습니다. requires Node 10 or higher. Please update your version of Node. 간혹 Nodejs의 버전이 맞지 않아서 프로젝트를 만들거나 실행할 때 문제가 발생하곤 합니다. 이런 문구와 말이죠. npm 명령어를 사용해서 nodejs 버전 올리기 이미 nodejs를 설치해서 사용하고 있다면 nodejs의 버전을 올리는 방법은 어렵지 않습니다. n을 설치해서 nodejs 버전을 관리하면 됩니다. n은 nvm과 같이 nodejs 버전을 관리할 수 있게 해주는 도구 중에 하나로 nodejs 버전을 단일 혹은 여..
DataGrip에는 데이터 베이스의 테이블 DDL 정보를 손쉽게 특정 언어로 변환하는 기능이 있습니다. 바로 DataGrip의 Generate Code인데요. 예를 들어 기존 사용하는 데이터 베이스를 JPA를 이용해 사용하려고 할 때 일일이 직접 테이블 정보를 확인해서 @Entity 클래스 코드를 만들어야 하는 번거로움 덜어낼 수 있습니다. DataGrip의 Generate Code가 기본으로 제공하는 Generate POJOs.groovy 스크립트는 테이블 DDL을 자바 클래스 코드로의 변환을 도와줍니다. 간단하게 사용할 수 있는 기능이지만 조금 더 상세한 사용방법을 원하신다면, 공식 사이트의 Generate Code 기능 사용 방법을 확인해주세요. 코틀린 Data Class 스크립트 추가 하기 fea..
새해가 시작한 지 엊그제인 것 같은데 시간이 흘러 벌써 5월이 되었네요. 블로그를 시작한 지도 어느덧 1년이 지났어요. 처음으로 글을 올린 게 2021년 3월이었는데 지금은 1년이 지나 2년 차가 되었고 빠른 주기는 아니지만 여전히 꾸준하게 글을 올리고 있어요. 글을 쓰기 시작한 지 1년이 지나서 일까요? 어떻게 블로그가 변화했는지 그리고 어떤 이야기들을 했는지 확인해보고 싶은 마음이 생겨 이 글을 쓰게 되었습니다. 처음에 블로그를 운영할 때만 해도 여러 가지 주제를 탐문하고 많은 생각과 이야기들을 쓸 수 있을 거라고 생각했지만 지금의 결과를 보면 부족한 부분이 많아 내심 부끄럽기도 하네요. 자 그럼 조금은 늦은 감이 있지만 지나간 2021년을 되돌아보며 어떤 일들이 일어나고 변화했는지 살펴보겠습니다. ..
안드로이드 앱을 개발할 때 일반적으로 사용하는 기능 중 하나가 바로 findViewById()입니다. 특정 TextView의 문자 값을 변경하거나 이벤트를 처리할 때 등등 화면의 요소를 findViewById()로 찾아 제어합니다. val textView: TextView = findViewById(R.id.text_main) 이런 코드로 말이죠. 하나의 TextView 정도야 예제 코드처럼 쉽게 쓸 수 있지만 화면에서 관리해야 하는 요소가 늘어날수록 findViewById()는 부담스러울 정도로 늘어납니다. 이러한 부분을 조금 더 간결한 코드로 손쉽게 해결할 수 있는 방법이 데이터 바인딩입니다. 데이터 바인딩은 데이터와 화면을 연결 짓는 기술로 안드로이드 앱뿐만 아니라 화면과 관련된 기술들(WinFor..
자바에서는 객체를 문자화 시킬 때 toString()을 사용합니다. 대부분 사람들이 처음 toString()을 배울 때 단순한 출력문 함께 배우기 때문에 toString()을 인스턴스를 표현하는 @어쩌고의 문자 값 정도로 인지하지만 알고 보면 재미있는 녀석이 toString()입니다. toString()은 객체의 단순하게 보면 문자 값이지만, 객체의 입장에서 본다면 인스턴스화 된 자신을 문자로 표현할 수 있는 Object의 유산이에요. toString()을 잘 사용한다면 조금 더 재미있게 객체의 관점에서 객체를 바라볼 수 있어요. Object가 물려준 유산이 toString() 외에도 여러 가지가 있지만 오늘은 toString()에 대해서 이야기해보겠습니다. toString()은 어디에 사용될까? - 내..
의존성 주입(Dependency Injection)은 객체의 생성과 사용 관심사를 분리하는 프로그래밍 설계 방식입니다. 자바 같은 경우 추상화 도구(인터페이스, 추상 클래스)를 사용하면 손쉽게 의존성 주입하는 코드를 만들 수 있습니다. 오늘은 의존성 주입(DI)이라는 단어가 주는 부담을 덜어낼 수 있도록 이 글을 작성하게 되었습니다. 아직까지 의존성 주입이라는 개념이 대하기 어려우셨다면 뒤에서 이야기할 이야기를 통해 조금이라도 의존성 주입을 쉽게 이해하실 수 있으면 좋겠습니다. 아 그리고 의존성 역전(IOC)은 의존성 주입과 다른 개념이니 의존성 주입과 의존성 역전을 혼동하지 말아 주세요. 분명 둘은 다른 개념입니다. 의존성 정의부터 알아보자 의존성이라는 단어의 사전적인 정의는 "다른 것에 의지하여 생활..
안드로이드 앱을 개발하기 위해서는 기초적으로 알야 할 개념이 다섯 가지가 있습니다. 바로 액티비티(Activity), 서비스(Service), 브로드캐스트 리시버(Broardcast receiver), 콘텐츠 프로바이더(Content provider)라고 불리는 4개의 컴포넌트, 그리고 메시지를 칭하는 인텐트(Intent)입니다. 아직은 공부하는 중이라 코드 수준으로 명확하게 설명하기는 어렵지만 개념적으로는 한번 정리해두는 게 좋을 것 같아 이렇게 정리해봅니다. 안드로이드 앱에서 이야기하는 컴포넌트라는 것은 우리가 집을 만든다고 하면 필요한 시멘트나 골조나 벽돌 같은 개념입니다. 제대로 사용할 줄 몰라도 어떻게든 사용은 가능하지만 조금 더 정확히 알고 사용방법을 분명히 안다면, 더 멋진 앱을 만들 수 있..