본문 바로가기
  • 포르쉐타고싶다

인포테인먼트 - development82

[flutter] 에러명: 'Expected a key while parsing a block mapping' .yaml 파일을 만지면서 발생하는 오류다 .yaml파일은 들여쓰기의 의미가 중요하다 flutter_test: sdk: flutter flutter: uses-material-design: true assets: - loadjson/person.json 와 flutter_test: sdk: flutter flutter: uses-material-design: true assets: - loadjson/person.json 는 똑같은 내용을 담고있지만 assets의 들여쓰기 정도가 다르다. 따라서 아래의 코드는 성공하는 반면, 위의 코드는 'Expected a key while parsing a block mapping' 라는 에러가 발생하고만다. 들여쓰기를 신경써주자 2020. 5. 23.
[flutter-Error] BuildConfig is public, should be declared in a file named BuildConfig. java 해결 Tools -> Flutter -> Flutter Clean 해주고 다시 run하면 된다. 2020. 5. 21.
[MySQL] INSERT할 때 배열을 INSERT하는 방법 1. 배경 쿼리문을 짜다보면 개수가 정해지지 않은 배열을 INSERT해야 할 일이 생긴다. 만약 개수가 정해진 배열이면 INSERT INTO [TABLE] (COLUMN1, COLUMN2) VALUES (VALUE11, VALUE21), (VALUE12, VALUE22), (VALUE13, VALUE23) 이렇게 나열해서 insert할 수 있다. 하지만 개수가 정해지지 않은 객체배열은 어떻게 INSERT해야할까 서버에서 INSERT CONNECTION 쿼리문에 for문을 돌려서 '조진다'? LOOP PROCEDURE을 사용해야 할까? 2. 개념 방법은 쉬웠다. 1) 위에서 VALUES 뒤에 괄호를 넣어주지 않고 2) ?를 넣은 쿼리문을 connection_query에 넣어주고 3) ?에 대한 값으로 이중.. 2020. 5. 4.
[aws] RDS 보안그룹에 EC2 IP 설정했을 때 connection 에러 1. 배경 DB 서버 RDS의 보안그룹을 우리의 ip로 한정하기 위해서 보안그룹을 수정하였다. 회사의 ip, 집의 ip, 그리고 ec2서버의 ip를 제각각 보안그룹으로 등록하였는데 회사, 집은 통신이 되는 반면, ec2에서는 db에 접근하지 못하는 문제를 발견하였다. 2. 해결 - ec2 인스턴스를 RDS 보안그룹에 추가하려면 직접적으로 ec2의 public ip를 적어놓으면 안된다. - ec2의 보안그룹의 id 자체(sg-03~~~~7 꼴)를 rds의 보안그룹의 소스로 넣어줘야 한다. 2020. 4. 28.
[node.js] g suite 계정에 nodeMailer 적용 1. 배경 어플리케이션에 은근 안쓰이는 곳이 없는 기능 중에 하나가 유저에게 메일을 보내는 것이다. 이는 사용자를 인증하기 위한 곳, 예를 들어 임시비밀번호 발급 비밀번호 변경, 이벤트 결과 발표 등등 계정이 요구되는 어플리케이션에 필수로 들어가있다. Node.js에서는 이 기능을 NodeMailer를 사용해 구현할 수 있는데 송신하는 업체메일의 도메인이 어디냐에따라 설정을 달리 해줘야 한다. 그리고 메일을 송신하는 계정은 일반적인 gmail, naver 등 보편적인 웹메일이 아닌 업체마다 갖고있는 대표 도메인으로 만든 이메일을 그 송신자로 한다. 그리고 그 도메인의 메일을 관리하게 도와주는 툴 중 구글에서 만든 것이 g suite이고 이것을 사용하면 회사의 도메인의 메일을 관리할 수 있다. 그리고 g .. 2020. 4. 27.
[mysql] mysql과 excel 연동하기 : mysql for excel 1. 배경 엑셀로 되어있는 데이터 파일을 곧바로 mysql에 연동할 수 있다. 반대로, mysql에 있는 데이터베이스를 엑셀로 옮길 수 있다. 그 방법을 소개하겠다. 2. 구현 절차 0) mysql for excel을 설치한다.(설치가 되어있지 않은 사람에 한해서) 1) mysql로부터 테이블 구조를 가져온다. 2) 테이블 구조에 맞게 엑셀에서 데이터를 추가한다. 3) 데이터들이 추가된 엑셀파일을 mysql에 export(append)한다 3. 구현 방법 0) mysql for excel을 설치한다. - https://dev.mysql.com/downloads/windows/excel/ 여기서 설치할 수 있다. 1) mysql로부터 테이블 구조를 가져온다. - mysql for excel을 설치하면 아래.. 2020. 4. 26.
[mysql] INSERT - 중복되는 데이터는 넣지 않기 1. 배경 어떤 테이블은 데이터가 중복으로 들어가면 안되는 항목을 갖고있다. 예를 들어, 어떤 게시물의 [좋아요] 데이터를 갖고있는 테이블은 게시물_idx 유저_idx 조합의 칼럼을 갖고있고 로직을 간단하게 생각해보면 저 조합이 중복으로 들어가면 안된다는 것을 알 수 있다. (통신오류로 좋아요를 여러번 눌렀는데 제대로 취소되지 않고 중복으로 좋아요 데이터가 들어가게되면 나중에 유저가 나중에 좋아요를 취소했는데 좋아요 기록이 아직 남아있는 오류 발생) 그렇다면 애초에 중 {게시물_idx, 유저_idx}의 조합이 중복으로 insert되는 것을 미연에 방지해야 한다. 2. 개념 크게 두가지의 방법이 있다 1) 매 쿼리문에서 방지 ->where not exists 2) 컬럼 속성 설정을 통해 방지 -> (1) .. 2020. 4. 24.
[mysql] procedure의 인자로 배열 전달 : FIND_IN_SET 1. 배경 데이터베이스와 통신을 하면서 복잡한 쿼리문은 procedure을 이용해서 보다 효율적인 네트워킹할 수 있다. 프로시저에는 인자를 담을 수 있어 같은 내용의 프로시저에 변수만 다른 경우 상황에 맞게 프로시저를 함수같이 사용할 수 있다. 하지만 일반적인 함수와 다르게 프로시저는 배열을 인자로 전달받지 못한다. 반대로 프로시저를 사용해야 하는 대표적인 경우 중 하나가 반복문, loop이다. 다른 테이블 자체에서 loop를 돌리는 경우는 별다른 배열인자가 필요하지 않지만 유저가 무언가를 선택한 것에 대해서 그 배열을 가지고 loop를 돌리는 프로시저를 구현해야 한다면 프로시저의 인자로 배열을 넣어주어야 하는 상황이 종종 발생한다. 그렇다면 프로시저의 인자로 배열을 어떻게 넣어줄 수 있을까 바로 FIN.. 2020. 4. 24.
[javascript] join() - 배열을 문자열로 변환 1. 배경 서버와 DB간에 통신을 하는 과정에서 배열을 STRING으로 바꿔 보내야 하는 경우가 있다. 예를 들어, DB의 Stored Procedure의 인자로 배열을 넣고 싶을 때 서버에서 갖고있던 배열을 String으로 바꾸고 call [프로시저 이름] 의 인자로 넣어줘야 한다. 2. 개념 Array의 join() 메서드는 배열의 모든 요소를 연결해 하나의 문자열로 만든다. 3. 사용방법 const foodArr = ['Apple', 'Tomato', 'Orange']; console.log(foodArr.join()); // expected output: "Apple,Tomato,Orange" 중요한 것은!!!!! 콘솔창에 뜨는 것을 보면 콤마(,)와 다음 항복 사이에 공백이 없다! 프로시저를 부.. 2020. 4. 24.
[node.js] 이해가 어려웠던 카카오 로그인 박살내기 연동로그인은 앱과 사용자간의 거리를 좁혀주는 확실히 필요한 툴이다. 그 중 한국에서는 카카오를 사용하지 않으면 간첩(?)일 정도니 카카오 연동로그인 구현이 필수적이라고 생각한다. 하지만 연동로그인은 계정, 사용자 정보를 공유하는 것이니 그 절차가 복잡하고 까다로울 수 밖에 없다. 그래서 여러 지원 툴이 나와있는데 그 중 가장 유명한 것이 passport이다 하지만 passport는 페이스북, 구글 등 해외 소셜앱에 대해서는 체계적으로 그 방법이 나와있고 스택 오버플로우 등에서 그 절차 또한 여럿 공유되고 있다. 거의 모든 앱이 카카오 연동로그인을 갖추고 있는 만큼 그 레퍼런스도 충분히 많았지만 어떤 아이디어로 구현하고자 하느냐에 따라 프론트엔드와 백엔드가 어떻게 역할을 나누냐에 따라 등등 그 안에서 또 .. 2020. 4. 23.
[flutter] 에러 'Android toolchain - develop for Android devices ' 해결 1. 상황 - flutter를 설치하고 나서 기본적인 sdk를 설치했음에도 flutter doctor을 입력하면 아래와 같이 각 모듈들의 상태중에서 warning( [!] ) 표시가 붙어있는 것을 볼 수 있다. 1) Android license status unknown 2) Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses 이는 아래와 같은 두 단계로 해결할 수 있다. 2. 해결 1) [SDK Manager] -> [Android SDK] -> [SDK Tools] -> Android SDK Tools (Obsolete) 설치 이것은 flutter를 설치한다고 해도 자동으로 설치되지 않고 .. 2020. 4. 22.
[Node.js] pm2 무중단 서비스 구현 https://engineering.linecorp.com/ko/blog/pm2-nodejs/ PM2를 활용한 Node.js 무중단 서비스하기 - LINE ENGINEERING 자바스크립트는 가장 널리 사용되는 클라이언트 측 프로그래밍 언어이자 프론트엔드 웹 개발 언어 중 하나입니다. 그리고 Node.js는 Chrome의 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타�� engineering.linecorp.com 2020. 4. 20.
[nginx] upstream에 keep-alive 적용 2020. 4. 18.
[MySQL] trigger란 1. 배경 서버와 DB가 통신을 할 때, 소켓통신이 아닌 이상 서버가 요청한 쿼리문을 통해 DB가 수정된다. 하지만 한 테이블에 여러 테이블이 얽혀있는 경우가 있다. 예를 들어, 한 게시물에 '좋아요'를 누르면 1) 게시물 좋아요 갯수 키 값 1 증가 2) 게시물 좋아요 테이블에 {게시물 - 유저(좋아요 누른)} 데이터 추가 3) 알림 테이블에 좋아요 추가 알림 추가 . . . 등등 여러 테이블이 동시에 수정되는 경우가 있다. 이런 단일 상황에 정말 여러개의 쿼리를 직접 만들어야 하는걸까? 아니다. 2. 개념 trigger : 방아쇠 - 어떠한 상황이 발생하면 그에 따라 자동으로 수행되도록 정해놓은 프로시저 trigger는 위에서 설명한 것과 같이 한 테이블에 변화가 생겼을 때 그것과 연관된 다른 테이블.. 2020. 4. 15.
[MySQL] MySQL 프로파일링 - 쿼리문 성능 비교 서버는 쿼리문을 통해 데이터베이스와 네트워킹을 한다. 이 때, 같은 결과물이라도 쿼리문을 어떻게 짜냐에 따라 성능, 즉 클라이언트의 대기시간이 결정되고 이는 결국 어플의 존속문제에도 큰 비중을 차지한다. 같은 결과물들을 위한 다양한 방법의 쿼리문을 짜는데 각각의 쿼리문의 네트워킹 비용, 대기시간 같은 성능을 체크하는 방법 하나를 소개하겠다. 1. 네트워킹 시간 : MySQL 프로파일링. 이 기능은 각각의 쿼리문의 걸린시간들을 리스트 혹은 상세한 시간을 기록해서 보여준다. 2. 네트워킹 비용 : Last_query_cost 이 기능은 각각의 쿼리문에 드는 총 비용(cpu 용량 등)을 보여준다. 비용과 걸린 시간은 비례하지 않는다. 비용이 커도 걸린 시간은 적을 수 있다. 사용법은 이러하다. 1. 프로파일링.. 2020. 4. 10.