본문 바로가기

매일코딩217

jsp mybatis sample file and spring mvc 2020. 11. 1.
깃 사용법 - 기초 깃은 소스코드의 버전을 관리하는 도구다. 버전: 의미있는 변화 또는 작업이다. 어떤 작업이 완결된 상태. 아래는 깃의 간단한 사용법이다. 따라해보자. 1.아무 폴더를 만든다. pwd 로 만든 폴더 위치에 들어온다. 2.바탕화면에 빈폴더를 만들고(gittest) 터미널을 열고, 폴더 위치에서 git init 이라고 명령어를 입력하면 빈폴더에 .git 이라는 파일이 생긴다. 이작업은 저장소에 필요한 기본적인 파일 구조를 만든다. 이파일은 이 폴더에 있는 파일들을 깃이 관리하는것을 도와주는 역할을 한다. 만든 폴더(로컬저장소)에는 세부분으로 나뉘어져있다. 1.작업디렉토리: 실제 파일 존재 -> 2.인덱스(스테이지) : 준비영역 -> 3.HEAD : 최종 확정 (commit) 3. vim mytext.txt 명.. 2020. 4. 3.
자바스크립트 객체 예제 //방법1.function Car(name,color){this.name = name;this.color = color;this.show = function(){console.log(name, color)}} var car1 = new Car('morning','blue');car1.show(); //방법2. 프로토타입 이용 function BigCar(name, color){this.name = name;this.color = color;} BigCar.prototype.show = function(){console.log('bigcar' ,this.name , this.color)}//자식 객체 1var bigcar1 = new BigCar('churare','white');bigcar1.show().. 2018. 10. 15.
node js data object 만들기 //person.js// person data object. setter getter 만드는 방법 var firstName, lastName, age; exports.setFirstName = function (fname) { firstName = fname;}; exports.setLastName = function (lname) { lastName = lname;}; exports.setAge = function (yrsold) { age = yrsold;}; exports.getPersonInfo = function () { return { firstName: firstName, lastName: lastName, age: age };};----------------------------------.. 2018. 10. 15.
nodemailer 메일 보내기 & 랜덤 비밀번호 //관련 모듈 설치//npm i nodemailer//npm i nodemailer-smtp-transport var nodemailer = require('nodemailer');//smtp 서버를 사용하기 위한 모듈이다.var smtpTransport = require('nodemailer-smtp-transport'); //아이디가 존재할 경우 //숫자 + 문자 + 특수문자 새로운 비밀번호 생성하고 var arr = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,~,`,!,@,#,$,%,^,&,*,(,),-,+,|,_,=,\.. 2018. 10. 15.
스프링 기초 DI 예제 4 스프링 기초 DI 예제 4 [스프링 컨테이너 생명 주기] 스프링 컨테이너 생성 : GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); ------> 설정 : ctx.load("classpath:baseBall.xml"); ctx.refresh(); ------> 사용 : Player player =ctx.getBean("player".Player.class); player.getName(); player.getPosition(); ------> 종료 :ctx.close() [빈 Life cycle(생명주기)] ctx.refresh 과정에서 빈이 생성 ctx.close() 컨테이너가 소멸하는 단계에서 빈도 자동으로 소멸됩니다. In.. 2018. 7. 17.
스프링 기초 DI 예제 3 스프링 기초 DI 예제 3 [의존성 주입 종류] setter(설정 메소드)를 이용한 주입 : 설정 메소드를 사용해서 의존성을 주입하는 것 Constructor(생성자)를 통한 주입 : 생성자를 사용해서 의존성을 주입하는 것 [의존성 주입(DI)의 장점] DI를 사용하면 개발 계획시에 시간이 요구가 되지만, 규모가 큰 프로젝트에서 유지보수 업무를 한다면 DI 개발의 장점을 느낄 수 있다. [의존 관계 설정 방법] - XML파일을 이용한 설정방법 - JAVA를 이용한 설정방법(어노테이션을 이용한다. @Configuration, @Bean) : 어노테이션(Annotation:Metadata)-JDK5부터 등장한 개념 ex)@Override 선언시에는 @를 사용하여 선언한다. 어노테이션은 . 컴파일러에게 정보를.. 2018. 7. 17.
sql 인젝션 2 sql 인젝션 1.입력데이터 검증 기법2.sql 인젝션3.명령어 인젝션 취약점원인 입력데이터 검증 방식 입력데이터 처리를 위한 규칙 설계자나 개발자는 외부에서 입력되는 값을 철저히 통제해야됨 입력값 검증은 애플리케이션에서 먼저 체크되어야 함 서버 애플리케이션에도 체크되어야 함 view 컴포넌트, controller 컴포넌트에 동시에 체크 해야 함 #sql 인젝션 취약점 개요 웹 애플리케이션에서 값을 입력받을 때 동적 쿼리 생성, 데이터 베이스에 쿼리를 전달하여 실행하는 경우 발생 검증되지 않은 외부 입력값으로 인해 정상적인 쿼리가 변조되어 데이터 베이스에 불법적으로데이터 열람, 수정, 삭제 됨 저장된 프로시저를 사용하여 시스템 명령 수행 비정상적으로 데이터베이스에 접근하거나 제어하는 공격 기법 모든 종류.. 2018. 7. 17.
보안이슈 및 개발보안의 필요성1 보안이슈 및 개발보안의 필요성1 취약한 애플리케이션 원인 70% - 80% 분석 => 설계 => 개발 => 테스트 => 배포 => 운영 sql 인젝션 취약점 xss 취약점(크로스 사이트 스크립팅) - 이메일 본문에 스크립트 명령어를 삽입하여본문을 열람하기만 하여도 악성 코드에 감염 될 수 있다. 시큐어 코딩 적용하면 94% 정도 해킹 감소 웹 애플리케이션 보안의 필요성 침해사고 사례를 통해 시큐어 코딩의 필요성 설명 소프트웨어 보안 약점과 취약점 정보 활용가능 행정자치부의 소프트웨어 개발보안 가이드를 활용가능 소프트웨어 개발보안 방법론을 설명 할 수 있음 보안 솔류션 종류 한계 방화벽이나 ids /ips 같은 보안 장비를 구축해서 원격으로 시스템의 취약한 서비스를 이용한 공격은 사실상 어려움 해커들은 웹.. 2018. 7. 17.
스프링 기초 DI 예제2 스프링 기초 DI 예제2 코드의 변경 없이 xml의 설정만으로 개발자가 원하는 객체의 주입으로 바꿀 수 있음. [의존성 주입 종류] setter(설정 메소드)를 이용한 주입 : 설정 메소드를 사용해서 의존성을 주입하는 것 Constructor(생성자)를 통한 주입 : 생성자를 사용해서 의존성을 주입하는 것 [의존성 주입(DI)의 장점] DI를 사용하면 개발 계획시에 시간이 요구가 되지만, 규모가 큰 프로젝트에서 유지보수 업무를 한다면 DI 개발의 장점을 느낄 수 있다. 예제1) 예제2) 2018. 7. 16.
스프링 기초 DI 예제1 스프링 기초 DI 예제1 스프링 프레임워크 특징 1 * 먼저 스프링 프레임워크는 자바언어를 기반으로 한 어플리케이션을 만들때 효율적으로 빠르게 제작할 수 있도록 하는 프로그래밍 툴이다.* 스프링은 자바의 객체를 담고 있는 컨테이너다.* 객체의 생성, 소멸과 같은 생명주기를 관리한다.* DI(의존성 주입패턴)을 지원한다.* AOP, 트랜잭션이나, 로깅, 보안과 같은 엔터프라이즈 어플리케이션에서 공통으로 필요로 하는 기능을 분리해서 각모듈에 적용할 수 있도록 하는 기능을 제공한다.* 스프링은 POJO를 지원한다. 즉 특정 인터페이스나 클래스를 상속받지 않는 순수한 자바 객체를 스프링 컨테이너가 저장하고 있다.* 트랜잭션 처리를 위한 일관된 방식을 제공한다.* 영속성과 관련된 다양한 API를 제공한다.* My.. 2018. 7. 16.
[node js] 성경 db 연동 [node js] 성경 db 연동mysql 성경 db를 찾아서 데이터를 넣어준 이후 작업. bible.jsvar express = require('express')var app = express()var router = express.Router()var mysql = require('mysql')var fs = require('fs')var ejs = require('ejs') //성경 메인 화면router.get("/bible",function(req,res){ console.log("메인화면 진행") //console.log(searchBibleIndex("여호수아")) fs.readFile('bible.html', 'utf-8', function (error, data) { res.send(ejs.. 2018. 6. 14.
우분투 mysql에 외부에서 접속하기 우분투 mysql에 외부에서 접속하기 가비아에서 클라우드 서버를 쓰고 있는데 ip/phpmyadmin 들어가서 쿼리 작업하기가 많이 불편했다. 이참에 나의 맥북으로 원격으로 접속할 수 있게 설정을 해보았다. 사진위주로 정리해보았다. 1.나의 맥북 터미널로 ssh 서버 원격 접속!2. etc/mysql/ 위치로 가서 vi my.cnf 열기~!3.bind-address 부분 주석처리 #bind-address ! 이렇게!4.sudo service mysql restart - 재시작! 5. mysql -uroot -p 접속6.select user, host from mysql.user (유저와 호스트 확인)7. % 이렇게 퍼센트로 기입된 host가 모든 host 허용이라는 뜻(나는 이미해놨음)8.사진에 crea.. 2018. 6. 13.
[node js] mysql 연동해서 파일 전송 [node js] 파일전송 네비게이션 file.jsvar express = require('express')var app = express()var router = express.Router()var mysql = require('mysql')var fs = require('fs')var ejs = require('ejs') //파일관련 모듈var multer = require('multer') //파일 저장위치와 파일이름 설정var storage = multer.diskStorage({ destination: function (req, file, cb) { //파일이 이미지 파일이면 if (file.mimetype == "image/jpeg" || file.mimetype == "image/jpg" |.. 2018. 6. 13.
[node js] mysql 게시판 구현 3년전인가 처음 게시판을 만들어보고 거의 처음인것 같다. 언제쯤이면 머릿속에 생각했던 내용들을 거침없이 만들 수 있는 날이 올까나. 암튼 게시판은 스스로 안보고 짤 수 있을 때까지 연습해보면 실력향상에 도움이 많이 되는 미니프로젝트긴하다. 나중에 게시판에 좀더 기능을 넣을 수도 있다. 예를 들면 db설계를 좀 해서 댓글 기능, 좋아요 기능, 조회기능 등을 넣어서 게시판을 확장 시킬 수 있다. 이번 포스팅에서는 아주 아주 심플한 게시판을 만들어서 페이징 기능의 핵심만 정리해본다.네비게이션아래는 파일 네비게이션이다. 우리가 사용할 파일들은 빨간점으로 표시해놓았다. node js 기본셋팅(app.js)app.js를 아래와 같이 작성한다. 게시판이랑 상관없는 로직도 있지만 지우지 않았다... var produc.. 2018. 6. 12.
자바스크립트로 블록체인 구현 강좌 11 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌 11 - 나만의 비트코인 발행하기지난 포스팅에서 하나의 네트워크에서 블록체인이 어떻게 작동이 되는지 살펴보았다. 이번포스팅에서는 여러개의 노드, 즉 컴퓨터들이 참여를 할때 블록체인 데이터가 어떻게 기록되는지 살펴보겠다.순서1. api.js 파일 이름을 networkNode.js 로 변경하자. 2. networkNode.js 파일 윗 부분에 동적 포트관련 변수 선언해준다.//동적 포트 package.json script 객체에서 2번째 방에 들어있는 데이터 3001,3002,3003 ...3005var port = process.argv[2];3. app.listen 을 아래와 같이 바꿔 준다.//동적 포트app.listen(port,function(){ console.l.. 2018. 5. 31.
자바스크립트로 블록체인 구현 강좌 10 - 나만의 비트코인 발행하기(소스코드) 자바스크립트로 블록체인 구현 강좌 10 - 나만의 비트코인 발행하기(소스코드)이번 포스팅에서는 블록을 채굴할때, 즉 컴퓨팅 파워로 마이닝 할때 실행되는 app.get(/mine) 함수 부분을 작성해보도록 한다. 순서1.먼저 마지막 블록을 가져온다.2.마지막 블럭의 타입은 객체 이기 때문에 key:value 형태다. 'hash' 키 값으로 해당 value(이전블럭해쉬)를 가져온다.3.현재 블럭데이터는 이전의 발생한 거래내역을 저장해야 하기 때문에 bitcoin객체의 pendingTransaction 배열에 담긴 값을 가져와서 넣어주고, index는 마지막 블럭 index + 1을 해준다.4. 이제 nonce, blockHash를 구할 수 있는 값들을 다 구했다. 5. 그리고 위의 값들을 이용해서 creat.. 2018. 5. 30.
자바스크립트로 블록체인 구현 강좌 9 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌 9 - 나만의 비트코인 발행하기 이번시간에는 api.js에 app.get() , app.post() 부분을 작성해주고, 개발에 조금 더 도움을 줄 node api를 설치 해보도록 하겠다. node js 에서 get, post이 부분이 이해가 안간다면...구글링을 부탁드린다..여기서는 조금이라도 알고 있다고 가정하고 쭉쭉 설명하겠다. 먼저 api.js 소스 코드다var express = require('express')var app = express() // 웹브라우저에 get 방식으로 /blockchain 주소를 입력했을 때 실행app.get('/blockchain', function (req, res) { res.send('blockchain Start')}) // 웹.. 2018. 5. 30.
자바스크립트로 블록체인 구현 강좌 8 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌 8 - 나만의 비트코인 발행하기이번 포스팅 부터는 앞에서 만든 blockchain을 서버에서 구현해보도록 하겠다. 우리는 서버 구축을 간단하게 도와줄 express api를 사용할것이다. 일단 구글로 가서 express npm을 검색하자. 아래 주소로 들어가도 된다. https://www.npmjs.com/package/express콘솔을 열어서 위에 install명령어를 자신의 개발 폴더 위치에서 입력해준다. 이제 express api를 설치 완료 했다. 개발환경으로 가서 api.js 파일을 생성해주고 아래 소스 코드를 입력해주자 아래 소스코드는 express npm 문서에 있다. 간단하게 설명하면 app.get은 웹브라우저에 / 의 값이 들어오면 함수 아래를 실행하겠.. 2018. 5. 29.
자바스크립트로 블록체인 구현 강좌7 - 나만의 비트코인 발행하기(소스코드 포함) 자바스크립트로 블록체인 구현 강좌7 - 나만의 비트코인 발행하기 이번 포스팅에서는 블록체인 기술에서 핵심이라고 할 수 있는 작업증명 POW 개념을 알아보고 코드로 구현해 보자. 간단한 용어정리를 하고 넘어가자. #용어정리해쉬: 해쉬는 의미없는 데이터다. 컴퓨터에서 블럭의 길이를 맞추기 위해서 메모리에 작성된 의미없는 데이터다.예)0000asdkflqwjkeljakldjflaj;블럭: 해쉬를 가지고 있는 사람이 코인을 획득할 수 있는 블록을 의미난이도: 블럭이 생성되는 시간을 일정하게 조정하기 위해 사용되는 개념(전체 해쉬의 양 증가 -> 난이도 증가-> 블럭찾는데 더 많은 해쉬 필요 _> 블럭 생성시간 유지됨)51% 공격: 전체 해쉬의 51% 이상 가진 집단이 존재할때 전체 코인의 이동정보, 즉 블록체인.. 2018. 5. 29.
자바스크립트로 블록체인 구현 강좌6 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌6 - 나만의 비트코인 발행하기저번 시간에 포스팅한 sha256 암호화 값 리턴 함수가 어떻게 사용되는지 보겠다. 일단 test.js 부분을 다 지운다. 그리고 아래 코드를 넣어준다. bitcoin 객체의 hashBlock 함수는 3개의 인자값을 받는다. 1. 이전 블락의 hash 2.현재 블록의 거래 데이터 3.nonce 값 //blockchain.js 모듈을 이곳에서 가져다 쓰겠다.const Blockchain = require('./blockchain'); //위에서 가져온 모듈의 객체를 만든다.const bitcoin = new Blockchain(); const previousBlockHash = "abcdedferefa"const currentBlockData .. 2018. 5. 28.
자바스크립트로 블록체인 구현 강좌5 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌5 - 나만의 비트코인 발행하기 이번 포스팅에서는 sha256 해시생성기와 npm을 이용해서 sha256 모듈을 설치해서 사용해보도록하겠다.일단.sha256 은 암호화 알고리즘의 하나이다. 음..엄청쉽게 말해서 '어떤 입력값이든 고정된 길이의 임의의 문자열값으로 출력한다' 라고 알고 있으면 쉽다.예를 들면 abc 값을 sha256 알고리즘에 넣고 돌리면BA7816BF8F 01CFEA4141 40DE5DAE22 23B00361A3 96177A9CB4 10FF61F200 15AD이값이 생성이된다. 길이를 보자.abcdef를 넣으면?BEF57EC7F5 3A6D40BEB6 40A780A639 C83BC29AC8 A9816F1FC6 C5C6DCD93C 4721같은 길이의 임의의값이.. 2018. 5. 28.
자바스크립트로 블록체인 구현 강좌4 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌4 - 나만의 비트코인 발행하기 지난 포스팅에 이어서 이번시간에는 저번 포스팅에서 작성한 마지막 블락 가져오기 함수와 새로운 트랜젝션 생성하기 함수를 test.js 에서 한번 찍어 보겠다. 그리고 트랜잭션과 새로운 블락이 생겼을 때 , 그리고 새로운 블록이 생긴 이후 트랜잭션 데이터는 어떻게 변하는지 이 관계를 살펴보도록 하자. test.js로 이동해서 새로운 블락을 생성하는 함수와 새로운 트랜젝션을 생성하는 함수를 하나씩 작성한다. //blockchain.js 모듈을 이곳에서 가져다 쓰겠다.const Blockchain = require('./blockchain') //위에서 가져온 모듈의 객체를 만든다.const bitcoin = new Blockchain(); //새.. 2018. 5. 26.
자바스크립트로 블록체인 구현 강좌3 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌3 - 나만의 비트코인 발행하기 이번포스팅에서는 마지막 블록을 얻는 함수, 새로운거래가 발생할때 거래 트랜잭션 데이터를 생성하는 함수를 만들어 보도록 하겠다.먼저 blockchain.js 로가서 이어서 코드를 작성해보자. Blockchain.prototype.createNewBlock ... 생략. 이 코드 아래에 마지막 블록을 가져오는 함수를 작성한다. //마지막 블록 얻기 - chain 배열에는 블록데이터가 들어간다. 맨마지막 블록을 가져와라.Blockchain.prototype.getLastBlock = function(){ return this.chain[this.chain.length - 1];} 그 밑에 새로운 트랜잭션이 발생했을 때 작동되는 함수를 작성한다.참.. 2018. 5. 26.
자바스크립트로 블록체인 구현 강좌2 - 나만의 비트코인 발행하기 자바스크립트로 블록체인 구현 강좌2 - 나만의 비트코인 발행하기 지난 포스팅에서는 자바스크립트로 블록체인 구현을 위한 셋팅과 자바스크립트의 데이터구조와 프로토타입에 대한 기본 지식을 알아보았다. 이번에는 지난번 포스팅에서 구현한 내용을 직접 console.log로 찍어보면서 대충 아~ 이런거구나 하고 감을 잡아보자blockchain.js 모듈화 하기//블록체인 데이터 구조function Blockchain(){ this.chain = []; this.newTransactions = [];} //블록체인 프로토 타입 함수 정의Blockchain.prototype.createNewBlock = function(nonce,previousBlockHash,hash){ //새 블록 객체 const newBlock.. 2018. 5. 25.
자바스크립트로 블록체인 구현 강좌1 - 나만의 비트코인 발행하기 2년전부터 블록체인 기술에 관심이 생겨서 이것저것 찾아보면서 지식을 쌓았다. 이론만 공부하면 뜬구름 잡는 이야기처럼 들릴 수 있기 때문에 개발자라면 직접 구현을 한번 해보는것이 중요하다. 블록체인을 구현할 수 있는 언어들이 많지만 그중에서 가장 접근성이 쉬운 자바스크립트를 이용해서 개발을 해보겠다. 일단 자바스크립트와 node .js에 대한 기초 지식은 있어야 한다. 자바스크립트로 블록체인 구현 강좌1 - 나만의 비트코인 발행하기1.셋팅바탕화면에 개발 폴더를 만든다. 예를 들면 blockchain폴더를 만들었다고 하자. 그 폴더 위치에서 npm init을 해준다. 그러면 node js 서버를 구축 할 수 있는 기본 셋팅이 완료 된다. blockchain 폴더 안에 dev 폴더를 만들고 그안에 test.j.. 2018. 5. 25.
firebase 안드로이드 2 단계 - tablayout framgment CustomAdapter 감사리스트 불러오기 firebase 안드로이드 2 단계 - tablayout framgment CustomAdapter 감사리스트 불러오기소스코드https://firebasestorage.googleapis.com/v0/b/testmemo-8978f.appspot.com/o/android_thanks_project%2FThanks2.zip?alt=media&token=41421387-7dbf-43a8-9e71-7dbdbe41750f 일지:tablayout 을 구성하고, fragment를 만들어주었다. 그리고 customAdaptView를 만들어서 listview에 넣어주었 (AdaptView를 통해서)파이어베이스에서 데이터를 가져와서 리스트뷰에 뿌려주었다. 다음에 할 것:1.감사리스트 써서 저장.2.리스트뷰 갱신.3.감사리.. 2018. 2. 19.
firebase 안드로이드 1 단계 - 설정 로그인 가입 기능 firebase 안드로이드 1 단계 - 설정 로그인 가입 기능 소스코드 다운로드 https://firebasestorage.googleapis.com/v0/b/testmemo-8978f.appspot.com/o/android_thanks_project%2FAndroid_Thanks1.zip?alt=media&token=f9cda798-6348-4bbd-8d89-d5e4c0af0f61 * 초기 설정 0. 안드로이드 플랫폼 설정해주기 1.Google-play.service.json을 app 수준에 넣어준다. 2.프로젝트 빌드 그래들 열어서 Sdk 추가하기 3.앱모듈안에도 sdk를 넣어준다. 4.싱크 나우 눌러주기 5.안되면 구글 리파지토리, sdk 업데이트 6.Apply plugin을 맨 아랫줄에 복사해서 .. 2018. 2. 16.
firebase 호스팅 테스트 4단계 글 수정 삭제 기능& 다른사람이 쓴 글 클릭하면 글 조회 firebase 호스팅 테스트 4단계 글 수정 삭제 기능& 다른사람이 쓴 글 클릭하면 글 조회 소스파일 개발일지마이페이지를 들어오면 현재 로그인한 유저의 key 와 글테이블에 넣어놓은 userkey를 비교해서 자신이 쓴글을 전부 가져오기를 성공했다.그리고 dom으로 수정, 삭제 버튼을 붙여 주었고, 수정과 삭제는 토글 기능을 구현해 주었다. 저장을 누르면 저장이 된다.그리고 감사 리스트에서 다른사람이 쓴글을 누르면 프로필 페이지로 이동하고 다른 사람 프로필과 쓴글을 볼 수 있다. 하지만 수정 삭제 버튼은 없다. 이것도 key를 이용해서 처리해 주었다. 그리고 js 인디케이터 기능을 구현해주었다. firebase storege에서 파일을 가져올때 시간이 조금 지연되는것을 발견했다... 이건 조금더 파봐야 .. 2018. 2. 15.
firebase 호스팅 테스트 3단계 프로필 페이지 만들기&html 웹에서 firebase 사진 업로드 firebase 호스팅 테스트 3단계 프로필 페이지 만들기 오늘은 프로필 페이지를 만들었다. html웹에서 firebase로 사진 업로드 하는 기능을 넣었다. 첫 프로필 화면에서 수정버튼을 누르면 사진 선택하기 버튼, 한줄 상태 메시지 수정하기 필드가 활성화된다. 저장하기를 누르면 사진이 firebase 스토리지에 저장이되고 그 URL 주소가 firebase 실시간 DB에 저장이 된다. 수정전 수정중 수정완료 * 남은 이슈1.쓴 글목록 날짜 최신순으로 정렬시키기2.마이페이지 읽어 올때 너무 사진이 너무 느리게 로드 된다. 그래서 사진 로드 되기전에 수정하기 버튼누르면 오류가 발생한다. 웹에는 로딩중이라는 인디케이터 같은게 없을까낭..음.. 그리고 마이페이지 부분 소스코드 정리를 좀 해야겠다..3.닉네임도.. 2018. 2. 14.