프로젝트 12

[플랭고] 프로젝트 앱스토어 / 플레이스토어 배포 회고

올해 여름부터 개발해 왔던 장소기반 일정관리 서비스 '플랭고'를 드디어 앱스토어와 플레이스토어에 배포했다! 처음에 생각했던 것보다는 이런저런 일 때문에 늦어졌지만 올해 안에 개발 시작부터 배포까지 한 사이클을 완료할 수 있어 굉장히 의미 있는 경험이었다. 비슷한 상황의 누군가에게 조금이라도 도움이 되었으면 좋겠다는 마음을 담아 개발 시작 단계부터 배포 과정까지 기억나는 일들을 정리해 봤다. 플랭고가 궁금하시다면 아래 링크에서 다운받아 사용해 보실 수 있습니다! :) AppStore 링크 / PlayStore 링크 프로젝트 시작 계기 이 행운의 프로젝트는 대전의 한 해커톤에서 시작되어… 사실 플랭고는 작년 가을 교내 앱 개발 해커톤인 '콜라톤'에서 시작된 프로젝트다. 2022년 9월부터 약 두 달간 팀원 ..

[플랭고] 회원 가입 프로세스 개선하기

여름부터 개발을 시작했던 플랭고가 이제 거의 배포 직전이라 자잘한 부분을 수정하고 있다. EC2에 백엔드 서버를 띄우고 애플에서 제공하는 테스트용 배포 플랫폼 TestFlight를 사용해 팀원들에게 앱을 배포하여 여러 기능을 테스트 하던 중 회원 가입 프로세스에 메일 인증 과정을 도입해야 하지 않겠냐는 피드백을 받았다. 문제 상황 메일 인증 로직은 개발을 처음 시작할 땐 분명 투두 리스트에 있었던 건데 개발을 바쁘게 진행하다보니 나중에 해야지 하고 미뤄두다가 결국 못하게 된 기능 중 하나이다. 어차피 배포하려면 꼭 필요한 기능이니 얼른 만들어보자고 마음을 먹었다. 현재는 유저가 앱을 통해 가입을 요청하면 메일 형식에 대한 검증만 수행하고 특별히 서버를 거쳐 메일을 인증하는 과정이 없다. 또한 회원 가입을..

[플랭고] 반정규화 + Lock vs 정규화 + 서브쿼리 - 누가 더 빠를까

배경 플랭고 앱 개발 중 기존에는 일정과 회원이 일대일로 대응되었는데 '함께 할 친구' 기능을 추가하면서 일정과 회원의 관계가 일대다로 변경되었다. 이에 따라 기존 조회, 수정 로직 등이 많이 변경되었는데 다른 부분은 모두 변경을 마치고 '일정 목록 조회' 기능에서 고민되는 부분이 생겼다. 현재 Schedule 테이블에 일정 관련 정보가 있고, ScheduleMember 테이블에 일정에 참여하는 회원에 대한 정보가 담겨있는데 앱에서 일정 목록 조회 시 다음과 같이 일정에 참여하는 회원 수를 표시해주기 위해서 목록 조회 시 Schedule과 ScheduleMember를 같이 조회해야 되는 상황이 생겼다. 이를 구현하기 위해 여러 방법을 사용할 수 있을 것 같았지만 각 방법 별 성능 차이를 확인하고 싶어서 ..

[해커톤 후기] 플랭고 앱 개발기

9월 말부터 11월 초까지 충남대 SW중심대학 사업단에서 주최하는 해커톤인 ‘콜라톤’에 참가하여 계획 관리 & 기록앱을 개발하고 결과적으로 3등상인 우수상을 수상했다! 어떤 과정을 거쳐 기획 및 개발이 이뤄졌는지 또, 앞으로는 어떤 방향으로 프로젝트를 발전시켜나갈 지 간단히 기록해보고자 한다. 참여 계기 백엔드 공부를 해오면서 계속해서 강의만 듣고 예제 코드만 따라 치다보니 너무 지루하고 공부를 해도 계속 까먹는 것 같았다. 인프콘에서 영한님께서 공부만 해선 안 되고, 반드시 내 것으로 만들기 위해 직접 기술을 사용해보라고 하셨던 이야기도 계속 맴돌았다. 내가 가진 지식으로 내 서비스를 직접 만들어보고 싶다는 생각이 강하게 들던 와중에 마침 우리 학과 동아리에서 해커톤을 주최한다길래 며칠 고민하다가 (내..

소나무 언어에 다른 기술 접목 아이디어

M -> 1 번역 후 다시 1 -> M 번역 시 머신러닝 활용 다대일로 번역 후 다시 일대다로 번역될 때 항상 동일한 실행을 보장하는 코드로 번역이 되어야 할텐데 이때 머신러닝 기술을 활용하여 적절한 번역 내용을 도출하고 번역 수행할 수 있을 것 같다. 소나무 언어의 범위 외의 Solidity 코드를 소나무 언어로 번역 시 머신러닝 활용 기존에 네트워크에 존재하는 Solidity 코드를 가져다 소나무 언어로 번역하고자 할 때 정의된 소나무 언어의 범위를 벗어나는 Solidity 문법이 발견될 경우 원래대로라면 번역 자체가 이뤄지지 않겠지만 여기에 머신러닝을 활용할 수 있을까? 어떻게 학습을 시켜야할지는 모르겠다. Solidity -> 소나무 언어로 번역 시 적절한 변수명 도출 Solidity는 기본적으로..

solidity contract 분석 및 한글 계약서와의 비교

한글 프로그래밍 언어인 '소나무 언어'의 설계 과정에서 solidity 계약서에서 어떠한 문법이 주로 사용되며, 한글 언어로 변환되면서 solidity 언어의 어떤 부분이 간소화될 수 있을지 등을 도출하기 위해 이더리움 네트워크에 배포되어 있는 기존 계약서를 분석하고 한글 계약서와의 비교를 수행했다. 1. solidity contract 분석 1-1. 중고거래 contract contract escrow { // contract 생성자 constructor(uint _price) public payable { seller = msg.sender; // contract를 생성한 사람을 seller로 지정 price = _price; // contract 생성 시 물건 값을 받아 price에 저장 pay =..

이해당사자 특정 및 문제 상황 정의하기

1. 중고차 거래 현재 문제 상황 중고차 거래는 개인 대 개인으로 이뤄지는 경우가 많다. 이에 따라 매물의 신뢰도가 보장 되지 못해 허위 매물, 침수 차 거래 등 거래로 인한 피해를 겪는 경우가 발생한다. 딜러는 자신이 판매하려는 차에 문제가 없다는 사실을 증명하기 어렵다. 구매자는 자신이 구매하고자 하는 차량에 하자가 없다는 사실을 확인하기 어렵다. -> 블록체인이 중개인 역할을 수행할 수 있다. 가능한 것들 중고차의 제원, 이미지, 하자 정도 등의 정보를 프로그램화 하여 블록체인 네트워크에 등록한다. 구매자는 클라이언트 프로그램을 통해 블록체인 네트워크에 접속하여 구매하고자 하는 차량의 정보를 확인하고 차량을 구매한다. 단순 중고차 거래에만 스마트 컨트렉트를 활용하지 않고 판매하려는 중고차의 제원, ..

인프런 '블록체인과 솔리디티' - 솔리디티

솔리디티 스마트 컨트렉트를 만들기 위한 언어 C++, JS, Python의 영향을 받음 EVM(Ethereum Virtual Machine)을 타겟으로 함 EVM : 이더리움 노드들이 공유하는 하나의 거대한 가상 머신 스마트 컨트렉트는 수정, 삭제가 불가한 블록체인의 특성상 신중하게 작성해야 함 하지만 이 때문에 신뢰성이 보장되는 것 remix.ethereum.org → 웹 기반 솔리디티 IDE, 테스트 및 디버깅 기능 지원 솔리디티 특징 튜링 완전한 언어 두 가지 특수한 변수를 가짐 msg.sender → 메시지를 보낼 주소 , msg.value → 메시지로 보낼 값 스마트 컨트렉트 구조 contract → class와 비슷한 개념 솔리디티 데이터 타입 문자열 → string(utf8로 인코딩), by..

인프런 '블록체인과 솔리디티' - 블록체인

블록체인 말 그대로 블록들이 연결된 체인 블록? 쉽게 이야기 하면 데이터들의 집합 이러한 블록은 모든 사용자가 동일하게 가지고 있음 이를 통해 한 사용자가 다른 데이터를 가진 블록을 가지고 있다면 해당 데이터가 틀렸음을 알 수 있다. 탈중앙화? 기존의 보안은 철저히 통제된 저장소에 제한된 인원만 접근이 가능하도록 하여 성립됨 반면 블록체인은 가능한 많은 사람들이 데이터를 가지고 있도록 하여 보안을 유지 이러한 시스템에서 칩입자가 데이터를 조작하고자 하면 수많은 사람들이 가지고 있는 블록의 데이터를 모두 수정해야 하기 때문에 보안이 유지될 수 있음 암호학을 기반으로 이러한 시스템이 설계되어 있기 때문에 블록체인을 통한 보안 시스템이 신뢰받을 수 있게 됨 머클 트리 http://wiki.hash.kr/ind..

도출된 아이디어 덧붙이기

기존에 도출된 아이디어에 추가적으로 아이디어를 덧붙여본다. 1. 순 우리말로 만든 언어 + 나무 언어 한글 프로그래밍 언어 약속에서는 함수를 약속, 클래스를 묶음 등으로 표현하는 등 예약어를 한글로 번역하여 사용함. 이에 클래스를 숲, 생성자는 씨앗, 함수는 나무, 변수 선언은 잎 등으로 비유적으로 대체하여 사용하는 아이디어를 구상함. 코드를 작성하는 것에 익숙하지 않은 사용자들이 쉽게 클래스, 함수 등의 개념을 익힐 수 있을 것으로 기대함. [숲] 사람: [잎] 나이 = 20 [잎] 성별 = "남자" [씨앗] 사람(_나이, _성별): 나이 = _나이 성별 = _성별 [나무] 나이변경 (새로운나이): 나이 = 새로운나이 2. 온점 + 반점 도입 한글의 끝맺음은 보통 . (온점)이라는 사실에 기반하여 기존..