본문 바로가기
728x90

전체 글520

springboot h2 인메모리 모드 설정 SpringBoot에서 H2 DB를 사용하는 방법을 알아보도록 하겠습니다. 1. H2 DB란 역시 우선은, H2 DB가 무엇인지부터 간단히 알아보는게 좋을것 같습니다. H2 란? H2DB는 JAVA기반의 RDBMS입니다. 특징 별도의 설치과정이 없고, 저용량에 가볍고 빠르고 JDBC를 지원합니다. 따라서 개발 및 테스트용으로 많이 사용됩니다. Mode Server mode는 다른 RDBMS처럼 데이터를 실제로 저장함으로써, 다른 사용자들이 접속할 수 있으며, server와 API등에서 접속할 필요성이 있을때 사용합니다. Embedded mode는 JDBC를 사용해 동일한 JVM에서 데이터베이스를 엽니다. 가장 빠르고 쉬운 연결모드이지만, 단 하나의 JVM에서만 데이터베이스를 열수 있기 때문에 테스트용 및.. 2022. 6. 30.
안드로이드 splash 화면 splash 화면이랑 애플리케이션을 실행하면 로고를 보여주고 지정된 시간이 지나면 사라지믄 화면을 말한다. 안드로이드는 Activity를 이용해 할 수도 있지만 테마를 설정해서 하면 구현이 가능하다 Splash 화면으로 사용할 화면을 테마로 구성해 MainActivity에 적용하고 onCreate 메서드에서 원래의 테마로 다시 설정하는 방식을 사용한다. Splash 에 사용할 이미지 생성 drawalbe에 이미지를 생성한다 splash.xml로 저장 Theme 설정 MainActivity에 적용할 테마를 작성한다. AndroidManifest.xml에서 테마 설정 특정 시간 후 원래의 테마로 설정 package com.example.app1memo import androidx.appcompat.app.A.. 2022. 6. 26.
안드로이드 View Binding Android Studio의 버전이 변경되면서 추가된 라이브러리 기존의 androidx를 통해 View의 주소값을자동으로받아오는 것은 Kotlin 밖에 되질않아 이를 자바에서 사용할 수 있도록 추가한 라이브러리 layout 폴더에 있는 xml 파일을 관리하는 클래스를 자동 생성하여 이를 통해 View를 관리할 수 있는 개념 layout 폴더에 있는 xml 파일당 하나의 클래스가 생성되며 이 클래스에는 xml 파일에 배치한 Viwe들을 관리할 수 있는 기능이 구현되어 있다. 이를 통해 View들을 손쉽게 관리할 수 있다. build.gradle 설정 액티비티에서 사용하기 val binding by lazy { 레이아웃파일명Binding.inflate(layoutInflater)} 프래그먼트에서 사용하기 /.. 2022. 6. 26.
안드로이드 json 사용하기 JavaScript Object Notation의 약자로 JavaScript 언어에서 객체를 표현하는 문법을 사용해 데이터를 표현하는 비 표준 문서이다. 다양한 데이터 타입을 표현할 수 있어 많이 사용하는 문서 양식이다. package com.example.httpjson import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import kotlinx.android.synthetic.main.activity_main.* import org.json.JSONArray import java.io.BufferedReader import java.io.InputStreamReader import java.net.HttpURLConnec.. 2022. 6. 26.
안드로이드 xml 문서 사용 xml 문서 Extensible Markup Language W3c에서 개발된 마크업 언어 데이터를 태그라는 것으로 묶어 관리하는 기법이다. xml 문서 파싱 문서를 분석하는 것을 Parsing 이라고 부른다. XML 문서 파싱에는 여러 방법들이 제공되나 여기에서는 비교적 간단한 DOM 방식을 사용한다. XML 문서에서 추출한 모든 데이터는 문자열이므로 적당한 타입으로 변환하여 사용해야 한다. package com.example.httpxml import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import kotlinx.android.synthetic.main.activity_main.* import kotlinx.androi.. 2022. 6. 26.
안드로이드 서버 미디어 가져오기 서버에 있는 이미지, 사운드, 동영상 데이터를 가져올 수 있다. 이미지는 Bitmap 객체를 만들 때 서버와 연결되어 있는 스트림을 설정해주면 이미지 데이터를 수신 받을 수 있다. 사운드는 MediaPlayer 객체를 만들 때 서버의 사운드 파일을 지정해주면 된다. 동영상은 VideoView에 서버의 동영상 파일을 지정해주면 된다. 파일 지정 시 웹 브라우저에서 요청할 수 있는 주소를 설정해야 한다. package com.example.httpmedia import android.graphics.BitmapFactory import android.media.MediaPlayer import android.net.Uri import androidx.appcompat.app.AppCompatActivity .. 2022. 6. 26.
안드로이드 앨범에서 사진 가져오기 카메라를 사용하는 것처럼 앨범에서 사진을 가져올 때도 다른 액티비티를 실행시켜서 사진을 가져올 수 있다. Intent.ACTION_PICK package com.example.getalbum import android.Manifest import android.content.Intent import android.graphics.BitmapFactory import android.graphics.ImageDecoder import android.os.Build import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.provider.MediaStore import kotlinx.android.synthet.. 2022. 6. 25.
안드로이드 사진 보정 카메라로 촬영된 사진은 다음의 이유 때문에 보정을 해야한다. ImageView는 특정 크기 보다 큰 이미지는 표현할 수 없다. 이 크기는 단말기 마다 다르다. 이미지의 용량이 너무 크면 서버와 송수신 할 때 데이터를 너무 많이 사용하게 된다. 스마트폰을 세워서 촬영할 경우 사진이 90도로 회전되어 있다. 2022. 6. 25.
안드로이드 사진 기능 카메라 기능이 구현되어 있는 Activity를 실행하여 사진을 촬영할 수 있다. 만약 카메라 기능이 구현되어 있는 애플리케이션이 다수 설치되어 있다면 앱을 선택하면 된다. 기본 카메라 사용하는 방법을 사용하면 사진 원본이 아닌 썸네일 이미지를 가져오게 된다. 원본 이미지 가져오기 안드로이드에서 촬영된 사진의 원본을 가져오려면 촬영된 사진을 파일로 저장한 다음 파일로부터 이미지 데이터를 가져오는 방식으로 개발해야 한다. 사진 보정하기 카메라로 촬영된 사진은 다음의 이유 때문에 보정을 해야한다. ImageView는 특정 크기 보다 큰 이미지는 표현할 수 없다. 이 크기는 단말기 마다 다르다. 이미지의 용량이 너무 크면 서버와 송수신 할 때 데이터를 너무 많이 사용하게 된다. 스마트폰을 세워서 촬영할 경우 사.. 2022. 6. 25.
안드로이드 GPS Global Positioning System 단말기와 네트워크 망, 위성 등을 모두 연결해 현재 위치를 측정할 수 있는 시스템 안드로이드는 단말기 내부에서 가용한 위치 측정 수단을 모두 동원해 위치를 측정하고 있다. 애플리케이션에 측정된 위치 값을 가져다 사용할 수 있다. Provider 안드로이드는 위치 측정을 위해 위치 정보 제공자를 선택해서 사용한다. 가급적이면 모든 위치 정보 제공자를 사용하는 것이 좋다. GPS Provider : GPS 위성과 통신하여 3각 측량 방법을 이용해 위치 정보를 습득한다. 위성과의 전파 송수신이 방해가 되는 요인(방해전파, 실내, 건물내, 계곡 등)이 있으면 정확한 위치를 측정할 수 없다. Network Provider : 이동통신 기지국, Wifi ap 등 통신망.. 2022. 6. 25.
안드로이드 센서 스마트폰에는 수십가지의 센서가 장착되어 있으며 이를 통해 사용자에 대한 정보를 수집할 수 있다. 스마트폰이 부팅되면 단말기에 장착되어 있는 모든 센서들이 동작하기 시작하고 애플리케이션에서는 이 값을 받아와 사용할 수 있다. 4차 산업 혁명 시대가 되면서 사용자에 대해 학습한 후 맞춤 서비스를 제공하는 애플리케이션들을 개발하는데도 이용할 수 있다. package com.example.sensorlist import android.hardware.Sensor import android.hardware.SensorManager import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import kotlinx.android.synthet.. 2022. 6. 24.
안드로이드 단말기 정보 파악 안드로이드 애플리케이션에서 단말기의 정보가 필요할 경우 정보를 가져다 사용할 수 있다. 안드로이드 8.0 부터 단말기 일련번호, 유심 일련번호 등 단말기의 고유한 정보는 사용할 수 없다. TelephonyManager 전화 기능과 관련된 정보를 가져올 수 있다. 전화번호 : line1Number SIM 국가 코드 : simCountryIso) 모바일 국가코드 + 모바일 네트워크 코드 : simOperator) 서비스 이름 : simOperatorName) SIM 상태(통신 가능 여부, PIN LOCK 여부) : simState) 음성 메일 번호 : voiceMailNumber) Build 안드로이드 OS 및 시스템과 관련된 정보를 가져올 수 있다. 보드 이름 : Build.BOARD 소프트웨어를 커스터마.. 2022. 6. 24.
안드로이드 화면 회전 layout 폴더에 수식어를 추가하면 회전에 따른 화면을 따로 적용할 수 있다. layout-port : 세로 화면 layout-land : 가로 화면 뷰 목원하기 안드로이드에서 화면 회전이 발생하면 화면을 새롭게 만들게 된다. 이때 일부 UI 요소들은 초기 값으로 설정되기 때문에 복원하는 작업을 해야 한다. onSaveInstanceState 메서드에서 복원 시 필요한 값을 저장한다. onCreate 메서드에서 복원 작업을 해준다. 화면 회전 막기 만약 화면이 회전되는 것을 막고 고정시키고자 한다면 AndroidManifest.xml의 Activity 태그에 screenOrientation 속성으로 설정하면 된다. package com.example.rotation import androidx.appc.. 2022. 6. 24.
안드로이드 해상도 대응 안드로이드는 단말기의 해상도에 따라 이미지를 선택하여 그림을 그릴 수 있도록 할 수 있다. 고 해상도 단말기에서 보다 선명한 이미지를 보여주는 목적으로 사용한다. ldpi : ~ 120dpi mdpi : ~ 160dpi hdpi : ~ 240dpi xhdpi : ~ 320dpi xxhdpi : ~ 480dpi xxxhdpi : ~ 640dpi drawable 이미지 적용하기 먼저 단말기 해상도에 해당하는 폴더에 이미지가 있을 경우 원본 크기 그대로 그린다. 해상도에 해당하는 디렉토리에 이미지가 없을 경우 인접한 해상도 폴더의 이미지를 가져와 적당한 배율로 확대하거나 축소해서 그린다. 인접한 해상도 폴더에 이미지가 없을 경우 drawable 폴더의 이미지를 확대 혹은 축소해서 그린다. mipmap 이미지 .. 2022. 6. 24.
안드로이드 지역화 단말기 대응 안드로이드는 단말기의 상태에 따라 대응할 수 있도록 지원을 하고 있다. 언어, 지역, 화면 해상도, 크기, 안드로이드 버전 등 다양한 옵션을 설정하여 단말기의 현재 상태에 대응할 수 있다. res 폴더내의 폴더에 수식을 설정해주면 수식어와 일치하는 단말기에 대해 이미지, 문자열 등을 선택해서 사용할 수 있도록 제공할 수 있다. 지역화 하나의 애플리케이션으로 다양한 언어 및 국가를 지원하기 위한 개념 안드로이드는 res 폴더에 있는 리소스 폴더에 국가 코드를 추가하여 지역화를 할 수 있다. 2022. 6. 24.
안드로이드 9 patch 이미지 View의 배경으로 이미지를 지정할 때 이미지의 가로 세로 길이보다 View의 가로 세로 길이가 더 길면 이미지가 늘어나게 된다. 만약 이미지가 말풍선과 같은 이미지라면 아래처럼 보기 좋지가 않을 수도 있다. 9 patch 이미지는 이미지의 늘어날 부분을 설정한 이미지이다. 늘어나는 영역으로 설정된 부분만 늘어나고 그렇지 않는 부분은 늘어나지 않기 때문에 이미지가 늘어나더라도 이상하게 나타나지 않게 할 수 있다. 2022. 6. 24.
안드로이드 이미지 애니메이션 drawable 폴더에 xml을 이용해 이미지를 만들 때 움직이는 이미지를 만들 수 있다 연속 동작을 표현한 이미지들을 준비하고 xml 파일이 이미지 순서를 작성해주면 움직이는 이미지를 만들 수 있다. package com.example.imganimation import android.graphics.drawable.AnimationDrawable import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInst.. 2022. 6. 24.
안드로이드 이미지 리소스 안드로이드는 drawable 폴더에 이미지를 넣어서 이미지를 사용할 수 있다. 이 때 xml 통해 이미지를 새롭게 구성하여 사용할 수 있다. 여러 이미지를 겹쳐 하나의 이미지를 만들 때 패턴 이미지를 만들 때 상태에 따른 이미지를 만들 때 기타 등등 drawable vs mipmap 현재 안드로이드는 이미지를 넣는 폴더로 drawable과 mipmap을 제공한다. mipmap 은 애플리케이션의 아이콘으로 사용할 이미지를 넣는 곳이고 drawable은 애플리케이션 내에서 사용할 이미지를 넣은 곳이다. 두 폴더의 차이는 뒤에서 살펴본다. drawable, bitmap 두 클래스 모두 이미지 데이터를 관리하는 클래스이다. Bitmap은 jpg, png, gif 파일로 부터 읽어온 이미지 데이터를 관리하는 객체.. 2022. 6. 23.
안드로이드 리소스 관리 애플리케이션에서 사용하는 다양한 미디어 파일, 데이터 파일 등을 리소스 파일이라고 부른다. 안드로이드는 리소스 파일들을 res 폴더를 통해 관리한다. 안드로이드는 이미지와 xml 파일을 리소스로 관리하며 xml 파일을 안드로이드에서 정의한 데이터들을 관리하는 용도로 사용한다. xml 파일로 관리되는 데이터들은 언어, 크기 등에 따라 단말기에 대응할 수 있도록 처리할 수도 있다. 문자열 관리 문자열, 문자열 배열을 xml에 등록해서 사용할 수 있다. 다국어 지원을 위해 사용한다. 색상 관리 색상을 xml에 등록해서 사용할 수 있다. 안드로이드는 단말기 제조사가 자신의 단말기에 안드로이드 OS를 넣게 된다. 이 때, 단말기마다 지원하는 색상, 처리 방식 등이 달라 원하는 색상이 나오지 않을 수도 있는데 이 .. 2022. 6. 23.
안드로이드 Preferences Screen UI를 통해서 Preferences를 사용할 수 있도록 제공되는 개념이다. PreferenceFragment를 사용하며 저장 기능까지 모두 구현 되어 있다. package com.example.preferencesscreen import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { val settingFragment = SettingFragment() val resultFragment = ResultFragment() override fun onCreate(sa.. 2022. 6. 23.
안드로이드 Preferences 안드로이드의 저장 방식 중 하나로 애플리케이션의 데이터를 간단하게 저장할 수 있는 수단이다. 많은 양의 데이터를 저장할 때는 SQLite를 사용하고 소규모의 데이터를 저장할 때 Preferences를 사용할 수 있다. 일반적으로 SQlite 데이터 베이스에는 학생들의 정보 등과 같은 다수의 매개체에 대한 데이터를 저장할 때 사용하고 애플리케이션 설정 데이터와 같이 유일한 데이터들을 기록할 때 Preferences를 사용한다. package com.example.preferernces import android.content.Context import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import kotlinx.androi.. 2022. 6. 23.
안드로이드 Content Provider 안드로이드 4대 구성 요소 중 하나로 애플리케이션이 저장한 데이터를 다른 애플리케이션이 사용할 수 있도록 제공하는 개념이다. 안드로이드 11버전부터 변경된 점 안드로이드 11 부터 다른 애플리케이션의 요소를 사용할 때는 AndroidManifest.xml에 명시해야 한다. https://developer.android.com/training/basics/intents/package-visibility?hl=ko 패키지 공개 상태 관리 | Android 개발자 | Android Developers 패키지 공개 상태 관리 앱을 만들 때는 기기에 설치된 다른 앱, 즉 내 앱에서 액세스하려는 앱을 표시하는 패키지 집합을 고려하는 것이 중요합니다. 앱이 Android 11(API 수준 30) 이상을 타겟팅한다 d.. 2022. 6. 23.
안드로이드 sqlite 2 안드로이드는 SQLite 데이터 베이스 사용시 직접 쿼리문을 작성하는 것 뿐만 아니라 제공되는 클래스를 이용하는 방법을 제공하고 있다. 코드 구현은 대부분 비슷하며 쿼리문 작성 대신에 클래스를 사용하면 된다. ContentValue 클래스를 이용하는 방법을 사용할 때 가장 중요한 클래스이다. ContentValue 클래스는 값을 저장할 때 이름을 부여하는 클래스로써 값을 저장할 때 사용하는 이름은 테이블의 컬럼이름과 매칭된다. ContentValue에 저장한 데이터는 테이블의 컬럼과 매칭되어 insert, update 등에 사용된다. package com.example.sqlite2 import android.content.ContentValues import androidx.appcompat.app.A.. 2022. 6. 23.
안드로이드 sqlite 1 안드로이드에서 사용하는 내장 데이터 베이스로 표준 SQL문을 사용하는 관계형 데이터 베이스이다. MySQL 과 유사한 문법을 사용하고 있으며 일반적인 관계형 데이터 베이스가 가지고 있는 기능을 가지고 있다. 동작 방식 SQLite 데이터베이스는 임베디드형 데이터베이스로써 데이터베이스를 사용하는 애플리케이션에 셋팅되는 데이터 베이스이다. 안드로이드는 안드로이드 OS에 내장되어 있으며 개발자가 만드는 애플리케이션은 안드로이드 OS에게 쿼리문을 전달하고 안드로이드 OS가 직접 데이터 베이스에 대한 처리를 하게된다. 작성 방식 안드로이드에서의 SQLite 데이터베이스 사용은 쿼리문을 이용하는 방법과 제공되는 클래스를 이용하는 방법 두 가지가 있다. 쿼리문을 이용하는 방식은 일반적인 SQL문을 사용하며 MySQL.. 2022. 6. 23.
안드로이드 assets raw 데이터 파일은 raw 폴더에 담으면 스트림을 손쉽게 추출할 수 있다는 장점이 있다. 허나 raw 폴더는 하위 폴더를 만드는 등 계층적으로 관리할 수 없다. 만약 파일들을 계층적인 폴더 구조를 만들어 관리하겠다면 assets 폴더를 사용한다. assets 폴더는 res 폴더 내부가 아니므로 리소스(R 클래스)로 관리할 수 없다. assets 폴더에는 다양한 종류의 파일들을 담고 사용할 수 있다. 특히 폰트 파일을 손쉽게 사용할 수 있도록 클래스를 제공하고 있다. val face = Typeface.createFromAsset(assets, "font/font1.ttf") textView.typeface = face package com.example.assets import android.graph.. 2022. 6. 22.
안드로이드 raw 파일 읽어오기 raw 데이터 raw 데이터는 가공되지 않은 원천 데이터를 의미한다. 사운드나 동영상, 사진 등을 데이터의 용량을 줄이기 위해 압축을 하게 되는데 이러한 가공을 거치지 않은 순수 데이터 들을 raw 데이터라고 부른다. 안드로이드에서는 각종 데이터 파일이나 동영상, 사운드 등의 데이터를 사용할 때 주로 사용한다. raw 폴더 실행 중 다운받거나 생성된 데이터 파일은 내부 저장소나 외부저장소에 저장해 두었다가 필요할 때 읽어오면 된다. 만약 데이터가 저장된 파일을 애플리케이션 내부에 포함 시키겠다면 raw 폴더에 저장하면 된다. raw 폴더에 저장된 파일은 스트림을 손쉽게 추출할 수 있다. 사운드 파일 재생하기 raw 폴더에 들어 있는 사운드 파일 재생은 매우 쉽다. mp = MediaPlayer.creat.. 2022. 6. 21.
안드로이드 파일 입출력 안드로이드는 애플리케이션이 데이터를 저장할 수 있는 저장소를 두 가지로 제공하고 있다. 내부 저장소 : 애플리케이션을 통해서만 접근이 가능하다. 외부 저장소 : 단말기 내부의 공유 영역으로 모든 애플리케이션이 접근 가능하다. 단말기를 컴퓨터에 연결하면 탐색기를 통해 접근할 수 있는 영역을 의미한다. 파일 입출력 내부 저장소 : openFileOutput, openFileInput 외부 저장소 : FileInputStream, FileOutputStream 안드로이드 10의 외부저장소 외부 저장소에 저장된 파일은 모든 애플리케이션이 자유롭게 접근할 수 있어 보안에 문제가 되었다. 이에 안드로이드 10에서는 외부 저장소에 제한을 두어 보안을 강화하게 되었다. 안드로이드 10에서는 외부 저장소의 정책을 무력화.. 2022. 6. 21.
안드로이드 Application Class 안드로이드 애플리케이션에 단 하나를 지정할 수 있는 객체이다. 이 객체는 같은 안드로이드 애플리케이션이라면 어디서든 주소 값을 가져올 수 있다. 이를 통해 안드로이드의 다양한 구성요소에서 공통적으로 사용하는 데이터를 관리할 수 있다. Application Class는 Application을 상속받고 AndoridManifest.xml 에 등록하면 된다 package com.example.applicationclass import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import kotlinx.android.synthetic.main.activity_main.* class .. 2022. 6. 21.
안드로이드 코드 View 코드를 통해 View 객체를 생성하여 layout에 추가할 수 있다. View 객체를 생성할 때는 생성자에 Context 객체를 설정해줘야 한다. Context는 어떠한 작업을 하기 위한 정보를 가지고 있는 객체를 통칭한다. 안드로이드에서는 Activity가 Context를 상속받고 있기 때문에 this를 넣어주면 되고 그 외에는 Context를 구하는 다양한 메서드를 통해 설정한다. package com.example.codeview import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.ImageView import android.wid.. 2022. 6. 20.
안드로이드 xml View 지금까지 예제는 layout 폴더에 있는 xml 파일을 통해 화면을 구성하였다. 이는 Activity가 처음 나타날 때의 모습을 설정하게 된다. 만약 실행 중 View를 만들어 추가할 경우에는 코드를 통해 View를 만들어 추가해줘야 한다. LayoutInflater를 사용하면 xml로 만든 화면 모양을 View 객체로 만들어 사용할 수 있다. layoutInflater.inflate 메서드 : layoutInflater.inflate 메서드를 사용하면 XML을 통해 View 객체를 만들 수 있다. val sub2 = layoutInflater.inflate(R.layout.layout_sub2, null) val sub3 = layoutInflater.inflate(R.layout.layout_sub3.. 2022. 6. 20.
728x90