728x90
반응형

 

Atom은 Github에서 만든 에디터로 다양한 프로그래밍 언어를 편집할 수 있도록 고안된 도구입니다.

 

완전 무료이며 여러 패키지를 간단하게 설치할 수 있습니다.

 

HTML, CSS, JavaScript 와 같은 웹 기술로 화면을 구성하였기 때문에 익숙한 인터페이스 환경입니다.

 

 

 

 

 

Atom 을 설치해보겠습니다.

 

아래의 url을 통해 Atom 사이트로 이동합니다.

 

https://atom.io/

 

A hackable text editor for the 21st Century

At GitHub, we’re building the text editor we’ve always wanted: hackable to the core, but approachable on the first day without ever touching a config file. We can’t wait to see what you build with it.

atom.io

 

 

 

 

Download 버튼을 클릭합니다.

 

 

 

 

 

 

atom-mac.zip 파일이 다운받아 지는데 압축을 풀어주면 실행할 수 있는 Atom 아이콘이 생성됩니다.

 

 

 

 

 

Atom 프로그램을 실행하면 아래와 같은 화면이 보여지게됩니다.

 

 

 

 

 

무료이면서 Git 연동도 쉽게 사용가능하고, 프로그래밍 개발에 있어 많은 오픈소스패키지를 지원하는 Atom

 

지금 시작해 보세요.

 

728x90
반응형

'프로그래밍 > Tools' 카테고리의 다른 글

[XCode] Gitlab - #1 계정 연결하기  (0) 2019.11.08
[STS] SpringToolSuite SVN 프로젝트 연결  (2) 2019.07.15
[STS] SpringToolSuite SVN 설치  (0) 2019.07.13
[Mac OS X] Docker 설치  (0) 2019.04.26
728x90
반응형

 

Python 개발환경을 깔금하게 관리하는데 큰 도움이 되는 가상환경을 설치 해보려고 합니다.

 

우선 가상환경을 설치할 경로를 만들어 줍니다.

 

"mkdir 디렉토리명" 을 입력해주면 디렉토리가 생성됩니다.

 

생성된 디렉토리로 들어가서 "python3 -m venv 가상환경명" 을 입력하면 가상 환경이 설치됩니다.

 

 

 

 

 

 

 

"source 가상환경명/bin/activae" 를 입력 후 엔터를 누르면 설치된 가상환경이 실행됩니다.

 

 

 

 

 

가상환경을 설치할 때 python 버전을 명시 했음으로 가상환경이 실행되었을때

 

python3 대신 python이라고 입력해도 지정한 버전의 파이썬이 실행 됩니다.

 

 

 

 

 

이렇게 설치된 가상환경에서 다시 Django 설치를 해서 진행하면 됩니다.

 

https://gigas-blog.tistory.com/83

 

[Python] DJango 설치

Python으로 웹개발을 시작하려고 합니다. Python 웹개발에 필요한 DJango를 설치해보도록 하겠습니다. Django 다운로드 페이지로 이동합니다. https://www.djangoproject.com/download/ Download Django | Django..

gigas-blog.tistory.com

 

728x90
반응형

'프로그래밍 > Python' 카테고리의 다른 글

[Python3] Django 개발용 웹 서버  (0) 2019.03.31
[Python3] Django 프로젝트 생성  (0) 2019.03.30
[Python3] Project vs App  (0) 2019.03.29
[Python3] DJango 설치  (0) 2019.03.28
[Python3] Mac OS X에 파이썬 설치  (1) 2019.03.28
728x90
반응형

 

Python으로 웹개발을 시작하려고 합니다.

 

Python 웹개발에 필요한 프레임워크를 사용해야 개발 속도가 빨라집니다.

 

그래서 파이썬으로 만들어진 무료 오픈소스 웹 애플리케이션 프레임워크 DJango 를 설치해보도록 하겠습니다.

 

 

 

 

 

Django 다운로드 페이지로 이동합니다.

 

https://www.djangoproject.com/download/

 

Download Django | Django

 

www.djangoproject.com

 

 

 

아래와 같이 3가지 다운로드 방식을 지원하고 있습니다.

 

1. pip 정식버전 설치

 

2. pip 개발버전 설치

 

3. Git 개발버전 설치

DJango Download

 

 

 

 

1번 정식버전을 설치해보겠습니다.

 

Python 이 설치가 되었다면 터미널 프로그램에서 아래의 명령어를 통해 pip가 잘 설치 되어있는지 확인할 수 있습니다.

 

 

 

 

 

 

위와 같이 pip 가 설치되어있다면 pip를 통해 DJango를 설치하겠습니다

 

pip3 install DJango==2.1.7

 

 

 

 

Django가 잘 설치 되었는지 Python 명령어로 확인해 보겠습니다.

 

위와 같이 출력된다면 정상적으로 설치가 된겁니다.

 

 

 

 

 

다음 글에선 Django 애플리케이션을 생성해 보겠습니다.

 

728x90
반응형
728x90
반응형

 

Mac OS X 에는 기본적으로 Python 2.x 버전이 설치되어있습니다.

 

버전은 terminal.app 프로그램에서 확인 가능합니다.

 

 

 

 

 

터미널 실행 후 python 또는 python3 명령어를 입력하면 설치 현재 버전이 나오면 설치되어있는 겁니다.

 

Python 2.7.10

 

Python 3.x

 

 

 

 

현재 Python3 버전은 설치되어있지 않아 설치를 해보겠습니다.

 

설치를 위해 Python 다운로드 페이지로 이동합니다.

 

https://www.python.org/downloads/mac-osx/

 

Python Releases for Mac OS X

The official home of the Python Programming Language

www.python.org

 

 

 

 

Stable Releases 가 안정된 버전이기 때문에 Python 3.7.3 버전을 다운로드 하겠습니다.

 

Mac OS X Python 설치 페이지

 

 

 

 

다운로드 파일을 실행하여 설치를 진행합니다.

 

 

 

 

 

중요 정보를 확인합니다.

 

 

 

 

소프트웨어 사용권 계약내용을 확인합니다.

 

 

 

 

소프트웨어 사용권 이용 약관에 동의합니다.

 

 

 

 

Python 소프트웨어를 설치할 디스크를 선택합니다.

 

 

 

 

설치 유형을 확인합니다.

 

 

 

 

디스크에 설치를 허용합니다.

 

 

 

 

Python 설치를 진행합니다.

 

 

 

 

설치 완료가 되었다면 다시 터미널로 들어가 python3 또는 python3 --version 명령어를 입력해 버전을 확인합니다.

 

Python 3.7.3 설치

 

 

 

간단하게 Python3 버전을 Mac OS X 에 설치하였습니다.

 

728x90
반응형

'프로그래밍 > Python' 카테고리의 다른 글

[Python3] Django 개발용 웹 서버  (0) 2019.03.31
[Python3] Django 프로젝트 생성  (0) 2019.03.30
[Python3] Project vs App  (0) 2019.03.29
[Python3] 가상환경(Virtual environment) 설치  (0) 2019.03.29
[Python3] DJango 설치  (0) 2019.03.28
728x90
반응형


기존 JAVA 언어로 사용하던 방식들이 Kotlin 언어로 사용되면서 조금씩 간결하게 소스가 변경되었습니다.


람다를 사용하여 소스코드 가독성이 높아졌는데요.


특정 인터페이스가 한개로 구성되어있다면 {} 중괄호를 입력하여 함수명을 생략할 수 있는데


EditText 의 입력값이 바뀌는걸 감지하는 addTextChangedListener 함수는 3개의 함수를 Override 해야하기 때문에 함수명을 생략할 수 없습니다.






그렇기에 위의 함수를 정의 할때는 아래와 같이 정의해주면 됩니다.


    editText.addTextChangedListener(object: TextWatcher {
            override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
 
            }
 
            override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
 
            }
 
            override fun afterTextChanged(p0: Editable?) {
 
            }
        })

cs



728x90
반응형
728x90
반응형


Android는 XML 에서 디자인을 할 수 있습니다.


Drag & Drop 으로 쉽게 만들 수 있지만 정확한 값을 입력하기엔 더 번거로워 질 수 있습니다.


간단하게 버튼 디자인을 해보겠습니다.





일반적인 버튼입니다.


사각형의 디자인으로 정말 밋밋합니다.


    <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="LOGIN"/>
cs








버튼에 Radius 값을 넣어서 둥글고 이쁘게 만들어 보겠습니다.


res -> drawable 안에 새로운 XML을 만들어 줍니다.


이름은 편한이름으로 주면 됩니다.





버튼이 클릭되었거나, 비활성화 되었을 때가 있기때문에 selector로 만들어 주겠습니다.


item 은 각각의 상태를 정해줄수 있습니다.


item 안에 shape를 만들어 준다음 corners 로 버튼의 Radius 값을 정해줍니다.


solid 로 버튼의 색상을 지정합니다.


<selector xmlns:android="http://schemas.android.com/apk/res/android">
 
    <item>
        <shape android:shape="rectangle">
            <corners android:radius="20dp"></corners>
            <solid android:color="@color/colorBlue"></solid>
        </shape>
    </item>

</selector>
cs






위에 만든 xml 을 설정해주면 상태에 따라 변화하게 됩니다.


    <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/btn_blue"
            android:text="LOGIN"/>
cs



간단하게 버튼에 Radius 값과 색상을 넣어 멋지게 만들어줬습니다.

728x90
반응형
728x90
반응형

Android 로 Cloude Firestore 개발을 진행하면서 초기에 이런 에러가 발생하였습니다.

 

The library com.google.android.gms:play-services-basement is being requested by various other libraries at [[15.0.1,15.0.1]], 
but resolves to 16.0.1. Disable the plugin and check your dependencies tree using ./gradlew :app:dependencies.
cs

 

 

 

 

 

Firebase에서 제공하는 개발 환경 설정 방법이 오래되어있다보니 정보가 부족했습니다.

 

Firebase 콘솔에서 새 프로젝트를 만들고 데이터베이스 섹션에서 Cloude Firestore으로 설정했습니다. 

 

 

 

 

 

 

app/gradle 에 아래와 같이 코드를 삽입해 주었습니다.

 

dependencies {
    ...
 
    // Firebase Database
    implementation 'com.google.firebase:firebase-core:16.0.6'
    implementation 'com.google.firebase:firebase-firestore:17.1.0'
 
 
    ...
}
 
apply plugin: 'com.google.gms.google-services'
cs

 

 

 

 

 

프로젝트/gradle 에 아래와 같이 코드를 삽입해 주었습니다.

 

    ext {
        googlePlayServicesVersion   = "15.0.1"
    }
cs

 

allprojects {
    ...
 
    configurations.all {
        resolutionStrategy {
            force "com.google.android.gms:play-services-basement:$googlePlayServicesVersion"
            force "com.google.android.gms:play-services-tasks:$googlePlayServicesVersion"
        }
    }
}
cs
 

 

 

 

 

 

FirebaseFirestore.getInstance 부분에서 계속 에러가 났지만 위의 코드를 추가해줌으로써 에러를 해결했습니다.

 

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        val db = FirebaseFirestore.getInstance()
}
cs

 

 

728x90
반응형
728x90
반응형

 

 

간단하게 회원가입과 로그인은 대부분의 앱에서 필요로 합니다.

 

Email 회원가입/로그인은 Firebase에서 지원하고 있으며 기능을 구현해보도록 하겠습니다.

 

우선 Firebase 에 접속합니다.

 

https://console.firebase.google.com

 

로그인 - Google 계정

하나의 계정으로 모든 Google 서비스를 Google 계정으로 로그인

accounts.google.com

 

 

 

Authenfication 으로 들어간 뒤 '로그인 방법' 탭을 클릭합니다.

 

여러가지 로그인 기능이 있는데 이메일/비밀번호 로그인을 사용 설정 합니다.

 

 

 

 

 

 

사용자 탭으로 가보면 아직 사용자 정보가 보여지지 않고 있습니다.

 

정상적으로 로그인을 하면 이 화면에서 사용자가 보여집니다.

 

 

 

 

 

Android Studio 로 돌아가 앱 수준 build.gradle 파일에 

 

Firebase 인증에 대한 종속 항목을 추가합니다.

 

implementation 'com.google.firebase:firebase-auth:16.0.3'
cs

 

 

 

 

activity_main.xml 에 아래와 같이 추가해 주었습니다.

 

<EditText
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:inputType="textEmailAddress"
            android:ems="10"
            android:id="@+id/edit_email"
            android:hint="Email"
            android:layout_marginStart="16dp"
            app:layout_constraintStart_toStartOf="parent"
            android:layout_marginLeft="16dp"
            android:layout_marginEnd="16dp"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginRight="16dp"
            android:layout_marginTop="8dp"
            app:layout_constraintTop_toTopOf="parent"/>
    <EditText
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:inputType="textPassword"
            android:ems="10"
            android:id="@+id/edit_password"
            android:hint="Password"
            android:layout_marginStart="16dp"
            app:layout_constraintStart_toStartOf="parent"
            android:layout_marginLeft="16dp"
            android:layout_marginEnd="16dp"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginRight="16dp"
            android:layout_marginTop="8dp"
            app:layout_constraintTop_toBottomOf="@+id/edit_email"/>
    <Button
            android:text="Button"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:id="@+id/emailLoginBtn"
            android:layout_marginTop="8dp"
            app:layout_constraintTop_toBottomOf="@+id/edit_password"
            app:layout_constraintStart_toStartOf="parent"
            android:layout_marginLeft="16dp"
            android:layout_marginStart="16dp"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginEnd="16dp"
            android:layout_marginRight="16dp"
            android:background="@color/colorPrimary"
            android:textColor="@color/common_google_signin_btn_text_dark_default"/>
cs

 

 

 

 

ConstraintLayout 으로 구성하였고 Design 에 이렇게 보여지게 됩니다.

 

 

 

 

 

RC_SIGN_IN 은 Activity 의 requestCode 를 정해주었고

 

firebaseAuth 객체 변수를 전역으로 선언해 주었습니다.

 

    // Google Login result
    private val RC_SIGN_IN = 9001
 
    // Firebase Auth
    private var firebaseAuth: FirebaseAuth? = null
cs

 

 

 

 

Android 앱에 Google 로그인 통합하기 페이지를 참고해 Google 로그인을 앱에 통합

 

아래와 같이 GoogleSignInOptions 객체를 구성할 때 requestIdToken을 호출합니다.

 

구글 버튼이 클릭이 되면 구글 계정 인증 Activity가 보여지게 됩니다.

 

 

 

 

테스트이기 때문에 버튼을 한곳에 두어 진행하였고 응용하셔서 수정하시기 바랍니다.

 

    // [START onCreate]
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        firebaseAuth = FirebaseAuth.getInstance();
 
        googleLoginBtn.setOnClickListener {
            // 회원가입 또는 로그인 함수 호출부
        }
    }
    // [END onCreate]
cs

 

 

 

 

Email 사용자 생성 함수 입니다.

 

신규 사용자의 이메일 주소와 비밀번호를 createUserWithEmailAndPassword 에 전달하여 신규 계정을 생성합니다.

 

getCurrentUser 메소드를 사용하여 사용자의 계정 데이터를 가져올 수 있습니다.

 

     // EmailCreate
    private fun createEmail(){
        firebaseAuth!!.createUserWithEmailAndPassword(edit_email.text.toString(), edit_password.text.toString())
            .addOnCompleteListener(this) {
                if (it.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    val user = firebaseAuth?.currentUser
                    Toast.makeText(this"Authentication success.",Toast.LENGTH_SHORT).show()
                } else {
                    // If sign in fails, display a message to the user.
                    Toast.makeText(this"Authentication failed.",Toast.LENGTH_SHORT).show()
                }
            }
    }
cs

 

 

 

Email 사용자 로그인 확인 함수 입니다.

 

사용자가 앱에 로그인하면 사용자의 이메일 주소와 비밀번호를 signInWithEmailAndPassword 에 절달합니다.

 

getCurrentUser 메소드를 사용하여 계속 진행할 수 있습니다.

 

    // Email SignIn
    private fun loginEmail(){
        firebaseAuth!!.signInWithEmailAndPassword(edit_email.text.toString(), edit_password.text.toString())
            .addOnCompleteListener(this) {
                if (it.isSuccessful) {
                    // Sign in success, update UI with the signed-in user's information
                    Toast.makeText(this"signInWithEmail success.",Toast.LENGTH_SHORT).show()
                    val user = firebaseAuth?.currentUser
                } else {
                    // If sign in fails, display a message to the user.
                    Toast.makeText(this"signInWithEmail failed.",Toast.LENGTH_SHORT).show()
                }
            }
    }
cs

 

 

 

정상적으로 로그인이 되었다면 Firebase 사용자 탭으로 이동해 보겠습니다.

 

아래와 같이 사용자 정보가 추가되어있다면 잘 적용된 것입니다.

 

 

 

 

 

사용자를 로그아웃시키려면 signOut을 호출하면 됩니다.

    FirebaseAuth.getInstance().signOut();
cs

 

728x90
반응형
728x90
반응형

#본글은 Firebase에 프로젝트 등록까지 진행 후 내용입니다.

 

Google 로그인 기능을 추가하여 회원가입 없이 로그인 하는 용도로 사용됩니다.

 

Firebase에서 지원하고 있으며 기능을 구현해보도록 하겠습니다.

 

 

 

 

우선 Firebase 에 접속합니다.

 

https://console.firebase.google.com

 

로그인 - Google 계정

하나의 계정으로 모든 Google 서비스를 Google 계정으로 로그인

accounts.google.com

 

Authenfication 으로 들어간 뒤 '로그인 방법' 탭을 클릭합니다.

 

여러가지 로그인 기능이 있는데 Google 로그인을 사용 설정 합니다.

 

 

 

 

 

 

 

 

사용자 탭으로 가보면 아직 사용자 정보가 보여지지 않고 있습니다.

 

정상적으로 로그인을 하면 이 화면에서 사용자가 보여집니다.

 

 

 

 

 

 

Android Studio 로 돌아가 앱 수준 build.gradle 파일에 

 

Firebase 인증 및 Google 로그인에 대한 종속 항목을 추가합니다.

 

implementation 'com.google.firebase:firebase-auth:16.0.3'
implementation 'com.google.android.gms:play-services-auth:16.0.0'
cs

 

 

 

 

 

activity_main.xml 에 아래와 같이 추가해 주었습니다.

 

    <com.google.android.gms.common.SignInButton
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp" android:id="@+id/googleLoginBtn"/>
 
cs

 

 

 

 

ConstraintLayout 으로 구성하였고 Design 에 이렇게 보여지게 됩니다.

 

 

 

 

 

 

RC_SIGN_IN 은 Activity 의 requestCode 를 정해주었고

 

googleSigninClient 객체, firebaseAuth 객체 변수를 전역으로 선언해 주었습니다.

 

    // Google Login result
    private val RC_SIGN_IN = 9001
 
    // Google Api Client
    private var googleSigninClient: GoogleSignInClient? = null
 
    // Firebase Auth
    private var firebaseAuth: FirebaseAuth? = null
cs

 

 

 

 

 

Android 앱에 Google 로그인 통합하기 페이지를 참고해 Google 로그인을 앱에 통합

 

아래와 같이 GoogleSignInOptions 객체를 구성할 때 requestIdToken을 호출합니다.

 

구글 버튼이 클릭이 되면 구글 계정 인증 Activity가 보여지게 됩니다.

 

    // [START onCreate]
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
 
        // [START config_signin]
        val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id))
            .requestEmail()
            .build()
        // [END config_signin]
 
        googleSigninClient = GoogleSignIn.getClient(this, gso)
 
        firebaseAuth = FirebaseAuth.getInstance();
 
        googleLoginBtn.setOnClickListener {
            val signInIntent = googleSigninClient?.getSignInIntent()
            startActivityForResult(signInIntent, RC_SIGN_IN)
        }
    }
    // [END onCreate]
cs

 

 

 

 

 

 

정상적으로 로그인이 되었다는 것이고 Firebase에 등록을 수행합니다.

 

이렇게 응답이 정상이면 firebaseAuthWithGoogle 함수를 호출 합니다.

 

    // [START onActivityResult]
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
 
        // Google 로그인 인텐트 응답
        if (requestCode === RC_SIGN_IN) {
            val task = GoogleSignIn.getSignedInAccountFromIntent(data)
            try {
                // Google Sign In was successful, authenticate with Firebase
                val account = task.getResult(ApiException::class.java)
                firebaseAuthWithGoogle(account)
            } catch (e: ApiException) {
 
            }
        }
    }
    // [END onActivityResult]
cs

 

 

 

 

 

 

사용자가 정상적으로 로그인한 후에 GoogleSignInAccount 객체에서 ID 토큰을 가져와

 

Firebase 사용자 인증 정보로 교환하고 Firebase 사용자 인증 정보를 사용해 Firebase에 인증합니다.

 

signInWithCredential 에 대한 호출이 성공하면 getCurrentUser 메소드로 사용자의 계정 데이터를 가져올 수 있습니다.

 

    // [START firebaseAuthWithGoogle]
    private fun firebaseAuthWithGoogle(acct: GoogleSignInAccount) {
 
        val credential = GoogleAuthProvider.getCredential(acct.idToken, null)
        firebaseAuth!!.signInWithCredential(credential)
            .addOnCompleteListener(this) {
 
                // 성공여부
                if (it.isSuccessful) {
 
                    val user = firebaseAuth?.currentUser
                    Toast.makeText(this"로그인 성공", Toast.LENGTH_SHORT).show()
 
                } else {
 
                    Toast.makeText(this"로그인 실패", Toast.LENGTH_SHORT).show()
                }
            }
    }
    // [END firebaseAuthWithGoogle]
cs
 

 

 

 

 

 

정상적으로 로그인이 되었다면 Firebase 사용자 탭으로 이동해 보겠습니다.

 

아래와 같이 사용자 정보가 추가되어있다면 잘 적용된 것입니다.

 

 

 

 

사용자를 로그아웃시키려면 signOut을 호출하면 됩니다.

    FirebaseAuth.getInstance().signOut();
cs

 

728x90
반응형
728x90
반응형

 

Firebase 프로젝트를 만들어서 사용할 때 필요한 

 

디버그 서명 인증서 SHA-1 정보를 AndroidStudio 에서 확인해 보겠습니다.

 

 

 

 

 

AndroidStudio 우측에 Gradle 이라는 탭을 클릭합니다.

 

 

 

 

 

 

아래와 같은 화면이 보여지며 프로젝트 -> Tasks -> android 로 진입합니다.

 

3개의 설정 파일이 보여지는데 signingReport 를 더블 클릭합니다.

 

 

 

 

 

 

 

AndroidStudio 하단에 서명인증서 정보가 보여지게 됩니다.

 

 

 

 

 

간단하게 디버그 서명 인증서를 확인해 보았습니다.

 

 

 

 

728x90
반응형

+ Recent posts