안드로이드 앱은 다양한 요소가 결합되어 만들어집니다. 그중에 UI에 관련된 액티비티, 프래그먼트 등이 있고 인텐트와 액티비티를 이용해 독립적으로 실행 가능한 모듈을 생성해 재사용성을 높일 수 있다. 또한 콘텐츠 제공자를 구현해 앱 간 데이터 공유도 가능하다. 서비스와 브로드캐스트 수신자를 통해서 백그라운드 작업을 할 수 있으며 매니페스트 파일을 통해서 앱 구성을 정의할 수 있고 앱 리소스와 매니페스트 설정을 통해서 앱 컨텍스트를 만들어 낼 수 있다. 안드로이드 액티비티 안드로이드 앱은 액티비티라는 컴포넌트가 하나 이상 반드시 결합되어 생성됩니다. 액티비티란 안드로이드 앱을 구성하는 기본 단위이며 앱의 기능을 갖는 단일의 독립 실행 모듈입니다. 액티비티는 안드로이드 Activity 클래스의 서브 클래스로 ..
SwiftyUserDefaults는 사용자 기본값을 쉽게 사용할 수 있는 오픈소스입니다. 키값을 한 곳에서 저장하고 관리할 수 있어서 편리합니다. UserDefaults 값은 사실 문자열로 관리하기 때문에 실수할 가능성도 높고 전역적으로 값을 관리하다 보면 실수할 가능성도 높습니다. 그래서 보통은 관련 매니저 클래스를 만들어서 한 곳에서 관리할 수 있게 하는게 보통입니다. 하지만 SwiftyUserDefaults 를 사용하면 조금 쉽게 모든 과정을 자동화 할 수 있습니다. 키 값 정의 ▼ 다음과 같이 키값은 기본 타입 또는 옵셔널 타입으로 지정할 수 있습니다. SwiftyUserDefaults 사용법 ▼ 사용법은 다음과 같습니다. ▼ 만약 스위프트 5.1 버전 이상을 사용한다면 다음 처럼 쉽게 접근이 ..
평소에 JetBrain사에 DataGrip IDE로 데이터베이스를 접속해서 관리하고 있습니다. 하지만 MySQL Workbench로도 작업을 하는 경우가 많이 있는데요. 오늘은 데이터베이스를 ERD 다이어그램으로 변경하는 방법을 알아보겠습니다. MySQL Workbench에 모델링(Modeling) 툴을 사용하면 테이블을 쉽게 관리할 수 있습니다. ERD 다이어그램 ERD (Entity Relationship Diagram) 이란 E-R 다이어그램이라고 하며 보통 ERD 라고 말합니다. ERD란 데이터베이스의 관계를 도표로 나타낸 것이라고 할 수 있는데요. 여러개의 테이블을 관리하다보면 단순히 코드로만 생각하기 어려울 때가 있습니다. 때문에 모델링 툴로 관계를 생각하면서 디자인을 할 수 있습니다. MyS..
스프링 부트란? 스프링부트(Spring Boot)는 자바 기반의 웹 어플리케이션 프레임워크인 스프링(Spring) 프레임워크 프로젝트를 좀 더 손쉽게 사용할 수 있도록 만든 도구라고 할 수 있습니다. 사실 웹 개발자가 아니라면 이전에는 스프링을 배우기가 굉장히 까다로웠습니다. 사실 자바 개발자들의 편의를 위해서 나온 프레임워크이긴 하지만 시간이 지날수록 다양한 기능과 설정들이 더해지면서 일반 개발자들이 접근하기는 러닝 커브가 꽤 있는 편이었죠. 하지만 지금은 스프링 부트 프로젝트로 인해서 많은 사람들이 스프링 부트로 개발을 하고 있습니다. 왜 스프링 부트인가? 국내 대부분의 대형 백엔드 프로젝트는 스프링(Spring)을 사용합니다. 자바스크립트(Javascript)나 파이썬(Python) 또는 루비(Ru..
IntelliJ 자동 import 인텔리제이에는 다양한 기능이 있습니다. 그중에 코드 완성이 정말 잘돼서 편리하죠. 아직 임포트 하지 않은 패키지가 있다면 엔터만 입력하면 자동으로 import 됩니다. 하지만 너무 과해서 필요 없는 패키지의 import를 유도할 때도 많습니다. 설정에서 간단히 수정해보도록 하겠습니다. ▼ 다음과 같이 자동완성이 될 때 현재 필요하지 않은 패키지 라이브러리가 자동 완성되지 않기를 원할 때가 있습니다. ▼ File(파일) -> Settings(설정) 메뉴로 이동합니다. ▼ Editor -> General -> Auto Import 메뉴로 이동합니다. 다음과 같은 화면에서 + 버튼을 눌러 새로운 조건을 추가할 수 있습니다. 다음 조건을 추가할 수 있습니다. (보통 패키지를 선..
Unresolved database references in annotations 설정 ▼ 인텔리제이(IntelliJ)를 사용해서 JPA를 쓰다보면 다음과 같이 Column 이나 테이블 명을 변경할 경우 텍스트에 경고표시를 볼 수 있습니다. 그냥 사용해도 빌드도 되고 문제는 없지만 조금 보기 좋게 출력하기 위해서 설정을 변경해 줄 수 있습니다. ▼ 다음과 같은 경로로 해당 옵션을 꺼줍니다. File > Settings > Editor > Inspections > JPA > Unresolved database reference in annotations ▼ 이렇게 옵션을 꺼주면 다음과 같이 해당 테이블 명이 녹색으로 잘 표시됩니다. 아주 간단한 것이지만 테이블 이름을 똑같이 쓰지 않을 경우 경고가 뜨는 것..
DataGrip 데이터베이스를 관리하기 위한 툴은 다양합니다. 그중에 IntellJ를 만든 젯 브레인에서 IntellJ와 유사한 인터페이스로 데이터 그립이라는 툴이 있습니다. MariaDB나 오라클 및 아주 다양한 DBMS를 지원합니다. 기타 MySQL 워크벤치나 데이터베이스 관리 툴에 비해 빠른 속도와 효율적으로 데이터를 검색할 수 있습니다. 인텔리 J나 안드로이드 스튜디오를 써보신 분은 알겠지만, JetBrain사의 툴은 코드 입력 시 다양하게 조합하여 기능을 구현할 수 있는데요. DataGrip도 인터페이스가 이와 유사해서 매우 편리하게 쿼리를 실행해 볼 수 있습니다. ER 다이어그램 보기 ▼ 데이터베이스 테이블을 더블클릭 하면 다음과 같이 데이터의 값과 항목들이 나타납니다. 현재 값이 없기 때문에..
이전 포스팅에 이어서 간단한 코틀린 문법을 전반적으로 알아보겠습니다. 코틀린은 현대적인 언어의 대부분의 장점을 가지고 있습니다. 그중에 타입추론과 타입체크가 편리하고 Nullable 을 도입함으로써 어플리케이션의 개발시 안정성이 높아졌습니다. 이번 포스팅에서는 코틀린이 가진 간단한 특징을 볼 수 있습니다. When 과 같은 구문은 스위치와 비슷하지만 훨씬 편리하고 다양하게 활용할 수 있어서 좋습니다. 기존의 자바보다 문자열 템플릿 또한 간결하고 활용범위가 넓습니다. 주석 ▼ 코틀린은 한 줄 주석과 블록 형태의 여러행 주석을 지원합니다. ▼ 블록 주석의 경우 안쪽에 또다른 주석을 넣을 수 있습니다. 문자열 템플릿 ▼ 문자열 안에서 ${} 구문을 통해 변수 또는 함수등을 사용할 수 있습니다. 조건문 ▼ 대부..
Kotlin, 코틀린은 매우 편리한 언어입니다. 예전에 비해서 많은 사람들이 사용하고 있고 특히 안드로이드 개발에 많이 사용되어집니다. 코틀린을 배우고 싶은 이유중에 하나는 최근에 스프링 부트를 개발하면서 코틀린으로 개발하는게 더 효율적인 것 같다는 생각과 어쩌면 앞으로는 자바 보다는 코틀린으로 개발하는 것이 더 트랜디한 방향으로 굳어질 것 같아서입니다. 또한 코틀린은 최근에 나온 대부분의 언어와 비슷하며 배우기도 쉽다고 생각됩니다. 오늘은 코틀린의 기본 문법에 대해서 알아보겠습니다. 패키지 정의 및 imports ▼ 패키지 정의와 imports 구문은 다음과 같이 소스 코드의 최상단에 기술합니다. 프로그램 시작점 ▼ 코틀린 애플리케이션의 시작점은 main 함수입니다. ▼ 배열 형태의 문자열을 인자로 받..
GitHub 토큰 로그인? 최근에 Github에 아이디 패스워드를 이용해서 로그인하려면 에러가 납니다. 이유를 찾아보니 최근에는 Access Token을 만들어서 토큰 인증 방식으로 로그인해야 한다고 합니다. Password authentication is temporarily disabled as part of a brownout. Please use a personal access token instead. Please see https://github.blog/2020-07-30-token-authentication-requirements-for-api-and-git-operations/ for more information. 저도 잘 모르고 있었는데 다음과 같은 제목의 만료 메일이 와서 로그인 토..
아이폰을 개발하다보면 스크롤 뷰를 많이 사용합니다. 제한된 영역에서 넓은 화면을 구현하기 위해서 입니다. 오토레이아웃을 사용할 경우 스크롤 뷰를 구현하기가 조금 까다롭습니다. Xcode가 버전업 되면서 현재는 ContentView와 FrameView에 오토레아이웃을 걸고 사용합니다. 하지만 SwiftUI 에서는 아주 쉽게 스크롤 뷰를 만들수 있습니다. 대신 조금 낮설긴합니다. GeometryReader를 이용해서 3개의 화면을 만들고 스크롤 뷰로 페이징하는 방법을 알아보겠습니다. 스크롤 뷰로 페이지 뷰 만들기 ▼ 아래 코드를 이용해서 페이징 처리가 가능합니다. colors 변수로 화면에 포함될 색상을 배열로 만듭니다. GeometryReader의 proxy 속성으로 각 화면의 화면 크기를 구합니다. .h..
MariaDB 관리 MariadDB 의 기초적인 사용자 관리와 간단한 SQL 구문을 이용해 데이터베이스 스키마와 테이블을 만들고 데이터를 삽입하는 법을 알아보겠습니다. ROOT 사용자 접속 MariadDB를 관리와 사용자를 만들고 제거하기 위해 root로 접근해야 합니다. 사용자 관리 루트 사용자로 접속하게되면 모든 설정을 수정하거나 사용자를 관리할 수 있지만 이는 보안적으로 결함이 되기도 합니다. 그래서 일반 사용자를 만들어 특정데이터에 접근을 사용자마다 제한을 두는 편이 좋습니다. 1) 사용자 생성과 권한 부여 (*는 전체를 나타냅니다.) sql > grant 권한종류 on 스키마이름.테이블이름 to 사용자이름@호스트 identified by '비밀번호'; 2) 사용자 삭제 sql > drop use..
package.json 파일에 실행 스크립트를 보면 다음과 같이 start, build, test, eject 4가지 명령이 있습니디. 일반적으로 start는 개발 모드 build는 배포용 빌드라고 알고 있습니다. 리액트(React) 에서 처음 공부할 때 중요하다고 생각되서 정리하는 차원에서 조금 더 자세히 차이점을 알아보고 실행하는 옵션들에 대해서 알아보겠습니다. (1) npm start 개발 모드로 프로그램을 실행하는 명령어 입니다. HMR(hot-module-replacement)가 동작해 수정과 동시에 화면이 변경됩니다. 개발 모드에서 코드에 에러거 있을 경우에는 브라우저에 메시지를 출력합니다. https 실행 옵션을 통해 https 인증서 없이 임시로 https 형태로 url을 만들 수 있습니다..
Objective-C로 아이폰 앱을 만들 때는 #pragma mark - 주석 내용을 포함해서 주석을 나타내던 것이 Swift로 넘어오면서 MARK로 변경되었습니다. 기존의 #pragma라는 부분을 더 이상 쓰지 않아도 됩니다. 또한 TODO, FIXME와 같은 구문도 추가할 수 있습니다. 다른 언어 C++, C에서는 보통 전처리 구문으로 인식하는 #pragma는 define이나 include와 같이 사용됩니다. 하지만 Xcode에서는 이를 전처리 구문으로 쓰기보다는 메서드의 구역을 나눌 때 보통 사용합니다. 스위프트 같은 경우에는 extension이라는 문법이 추가돼서 메서드의 구분을 줄 때 extension을 사용하기도 합니다. 영역 구분관련 주석의 종류 // MARK : 설명 // TODO : 할 ..
컴퓨터 프로그래밍에 제네릭이라는 용어가 있습니다. 제네릭 타입은 클래스나 인터페이스 또는 메서드를 정의할 때 타입을 파라미터로 사용합니다. 즉 가변 타입 클래스, 인터페이스, 메서드라고 생각하면 조금 알기 쉽습니다. 제네릭은 다음과 같은 두 가지 장점이 있습니다. 또한 다음의 장점은 코드의 재사용성을 높혀줍니다. 컴파일시 강한 타입 체크를 할 수 있다. (Stronger type checks at compile time) 형변환 코드를 없앤다. (Elimination of casts) ArrayList ▼ 간단한 예로 Java에서 자주 쓰는 ArrayList로 예를 들겠습니다. 다음과 같은 코드를 사용할 때 객체 생성시 타입이 String으로 정해지고 우리는 이 값을 사용하기 위해서 형변환을 하지 않습니..
하버드 대학교 강의 중에 CS50이라는 온라인 강의가 있습니다. 비전공자를 위한 강의로 컴퓨터의 다양한 기초지식을 배울 수 있게 해 줍니다. 영어공부도 하고 잘 모르는 기초지식을 쉽게 알 수 있어서 정말 좋습니다. 한 강의당 약 2시간 정도 되는데 다음과 같은 것들을 배울 수 있습니다. 컴퓨터에 대해서 잘 알고 있다고 해도 분명 도움되는 부분이 많을 겁니다. 오늘 소개해드릴 CS50 IDE는 이 강의를 위해 만들어진 툴 같습니다. 처음에는 이런 유사한 툴들이 많아서 크게 신경 쓰지 않았는데 리눅스 터미널 환경도 제공하고 있어 간단한 프로그래밍 연습에 좋을 것 같습니다. CS 50 커리큘럼 Week 0 - Scratch (스크래치) Week 1 - C (C 언어) Week 2 - Array (배열) Wee..
컴퓨터 프로그래밍에는 프로세스라는 개념이 있습니다. 프로세스란 실행환경이라고 생각하면 됩니다. 컴퓨터에는 메모리와 CPU가 있고 특정 프로그램이 할당한 메모리 공간과 그 외 자원들을 포함한 실행 환경을 프로세스라고 합니다. 이는 분명히 프로그램이나 애플리케이션과는 조금 다른 개념입니다. 한 개의 프로그램 또는 애플리케이션에 여러 개의 프로세스가 포함될 수 있기 때문입니다. 위에서 설명한 프로세스와 비슷한 하위 개념인 스레드가 있습니다. 스레드는 다른말로 lightweight process (경량 프로세스)라고도 합니다. 이유는 프로세스를 만드는 비용에 비해 스레드를 만드는 비용이 적게 들어가기 때문입니다. 스레드들은 어떠한 프로세스에 종속되며 프로세스에 할당된 메모리 또는 파일과 같은 자원을 스레드들끼리..
예외처리(Exception)란? 처음 프로그래밍을 하게 되면 그냥 동작하는 것에 중점을 두기 때문에 예외처리는 무시하고 넘어가기 쉽습니다. 예외는 에러(Error)의 범주에 포함됩니다. 에러는 예외를 포함에 시스템의 이상, 하드웨어의 문제등을 포괄적으로 나타내는 개념입니다. 가장 대표적으로 OutOfMemoryError를 말할 수 있습니다. 말 그대로 메모리가 부족해서 시스템이 중단 되는 상황이죠. 예외처리란 예외가 발생할 것을 개발자가 미리 예측해서 이를 제어하고 비정상 종료를 피하기 위한 처리 방법입니다. 자바를 포함한 대부분의 언어들은 이러한 예외상황을 처리하고자 Try Catch 문을 사용해서 처리합니다. 다음과 같이 두 문장으로 정리를 할 수 있습니다. 메서드 내에서 오류가 발생했을때 시스템에 ..