심은광

심은광님의 아티클

심은광

심은광

사이드 프로젝트로 드디어 월급을 이겼습니다 😆

안녕하세요.

저는 암기장 공유서비스 모두CBT 를 운영하는 1인 개발자입니다 :)

오랜만에 디스콰이엇에 글을 남기네요 ㅎㅎ

모두CBT를 운영한지 약 1년 3개월 만에,

처음 설정한 목표였던 "사이드 프로젝트로 월급 이기기"를 달성했습니다 !!! (작고 소중한 내월급..)

다음 목표는 "회사연봉 이기기" 입니다 !! 화이팅 !!

서비스를 통해 수익을 창출하는 데 있어 가장 큰 역할을 한 것은 SEO 였던 것 같아요.

서비스로 수익을 내고 싶으시다면, 지금 당장 SEO를 공부하세요 !!

광고에 태울 수 있는 돈은 한계가 있지만, SEO는 무료에요!

약 1년간 서비스를 운영하면서 SEO에 대해 공부도 많이하고, 이것저것 실험해보면서 노하우도 쌓인 것 같아요 ㅎㅎ

그결과 저는 광고에 돈을 태우지 않고 SEO만으로 서비스를 성장시킬 수 있었습니다 !!

( 광고에 태울 돈이 없음 ㅠ.. )

28일간의 검색 실적

스크린샷 2024-04-18 오후 9.12.33.png

목표달성 겸 자랑좀 하려고 글을 쓰게 됐습니다.

읽어주셔서 감사합니다 ㅎㅎ

제 프로필에서 '모두CBT'의 개발 이야기를 더 많이 확인하실 수 있습니다!

팔로우, 커피챗은 언제나 환영입니다 !

모두CBT

국가고시 필답형 실기시험 준비를 도와주는 서비스입니다 .

25
6
심은광

심은광

Docusaurus로 기술문서 만들어보세요 :)

최근 모노레포를 도입하면서 유틸 함수, 훅스 등을 공용화 하는 작업을 진행했었는데

하는 김에 문서화도 같이 진행하면 좋겠다는 생각이 들어서 이것저것 알아보다가 Docusaurus를 알게 되었습니다.

사용해 보니 너무 편하고 좋은 것 같아서 추천드립니다 !!

Docusaurus는 Meta에서 제공하는 오픈소스 문서 생성 도구로, React 기반으로 작동합니다.

너무나 깔끔한 기본 템플릿을 제공해주고 있고, 몇가지 설정만 해주면 바로 문서작성을 시작할 수 있습니다.

저는 로고 변경, 컬러 수정 등의 최소한의 커스텀 작업만 하고 바로 문서화를 시작했는데, 결과물이 생각보다 만족스러워서 추가적으로 커스텀을 하지 않아도 될 것 같아요.

스크린샷 2023-10-16 오후 11.15.34.png

Docusaurus는 Meta에서 제공하는 오픈소스인 만큼 공식문서가 굉장히 친절하게 되어있어서,

공식 문서 보시면 쉽게 활용하실 수 있으실 겁니다!!

공식 문서 링크 : https://docusaurus.io/

기술문서를 만드는 데 디자인이 고민되시거나,

빠르게 문서작성을 하고 싶으신 분들이 활용하시면 좋을 것 같아요 :)

혹시 더 매력적인 문서작성 도구를 알고 계시는 분이 있다면 .. 저도 알려주세요!! 감사합니다!!

0
0
심은광

심은광

[모두CBT] 문제집 출력 PDF 디자인을 업그레이드 했습니다 !

모두CBT는 온라인 문제풀이 서비스 뿐만 아니라 문제를 출력할 수 있는 서비스도 제공하고 있습니다.

모두CBT에 업로드 되어있는 자료들은 모두 출력이 가능하고, 유저가 직접 제작한 시험지도 출력이 가능합니다. !!

모두CBT가 어떤 서비스인지 궁금하시다면 아래 링크를 참고해주세요 !

모두CBT에서 기존에 제공하고 있던 PDF 디자인이 너무 단조롭다는 생각이 들어서 이번에 업그레이드를 하게 되었습니다.

BEFORE

스크린샷 2023-09-20 오전 2.15.53.png

AFTER

스크린샷 2023-09-20 오전 2.15.43.png

결과물이 꽤나 만족스럽네요 ㅎㅎ

만들고 보니, 다른 템플릿도 더 많이 만들어 보고 싶은 욕심이 생기는 것 같아요 !

다음에 더 멋진 템플릿 만들게 되면 다시 글 남기러 오겠습니다 :D

읽어주셔서 감사합니다.

모두CBT

국가고시 필답형 실기시험 준비를 도와주는 서비스입니다 .

9
0
심은광

심은광

[모두CBT] 제휴업체와 첫 콜라보 상품을 출시했어요 !!

안녕하세요 저는 국가고시실기 시험준비생들을 위한 서비스 모두CBT를 개발 및 운영하고 있어요 !!

모두CBT가 궁금하시다면 아래 글을 봐주시면 좋을 것 같아요.

이번에 문제집을 출판하는 업체와 제휴를 맺게 되면서, 콜라보로 첫 상품을 출시 했습니다 !!

저자님께서 주신 원고를 모두CBT에 올려서 온라인으로 학습이 가능하도록 구성했어요 ㅎㅎ

어제 출시했는데 !! 벌써 반응이 꽤나 좋네요 :D

유저 플로우나, 할인쿠폰 시스템 등등 서비스적인 부분은 전적으로 저한테 맡겨주셔서 열심히 고민해서 구성하고 개발했습니다 ㅎㅎ

어려운 기능은 없었는데, 할인쿠폰 시스템등은 새로 도입하다보니 생각보다 시간이 좀 걸렸던 것 같아요.. !

뭐 어쩃든, 모두CBT에 프리미엄 플랜이 하나 추가돼서 너무 행복합니다 !!

스크린샷 2023-09-12 오후 6.10.52.png

저의 자랑글 읽어주셔서 감사합니다 :D

모두CBT

국가고시 필답형 실기시험 준비를 도와주는 서비스입니다 .

7
2
심은광

심은광

카카오톡 오픈채팅 봇 대여 시스템 구축 완료, 서비스시작 !

저는 오픈채팅방을 운영하고 있는데 오픈 채팅방 활성화를 위해 봇을 개발해서 활용하고 있습니다.

카카오톡 오픈채팅 봇은 디스코드 봇, 슬랙 봇 처럼 확장성이 좋거나 기능을 고도화하는 데에는 한계가 있지만,

타 채팅 봇에 비해 월등한 접근성을 갖추고 있어서 경쟁력이 있는 것 같아요 !

적어도 한국에서는 카카오톡을 안하는 사람을 찾기가 더 어려울 정도니까요 ㅎㅎ

제가 개발한 오픈채팅봇이 궁금하시다면 아래 게시글을 봐주세요 !!

최근에는, 유저분들이 오픈채팅 봇을 단톡방이 아닌 개인톡에서도 활용하고 싶다는 의견을 주셔서 개발에 돌입했습니다 !

@사용자 인증에 대한 고민 ..

오픈채팅 봇 대여를 위해서 사용자 인증에 대한 고민이 필요했습니다..

제가 개발한 시스템에서 카카오톡을 통해 받아 올 수 있는 고유 정보는 닉네임 정도가 전부였습니다..

그래서 닉네임을 활용해야 겠다고 생각했고, 결과적으로 완성된 인증절차는 다음과 같습니다!

1. 시크릿 코드를 생성해서 유저에게 전달

2. 유저는 닉네임을 시크릿 코드로 변경

3. 봇이 유저의 닉네임을 인증코드로 활용해서 데이터를 전달

현재까지는 위 같은 형태로 인증방식을 구현했고, 약 일주일간 운영해 본 결과 다행히 큰 문제 없이 잘 운영되고 있는 것 같습니다 ㅎㅎ

오픈채팅봇을 대여해서 이용중인 회원님들

스크린샷 2023-09-11 오전 10.15.56.png

처음에 유저분들이 개발해달라고 해서 시작했는데..

아무래도 유료로 운영하다 보니 수요가 엄청 많지는 않았어요 ㅠㅠ..

현재는 약 여섯 분 정도가 신청해주셨네요 ㅎㅎ

그래도 분명 수요는 있었고 가능성은 본 것 같습니다 !

시간이 나면 좀 더 고도화를 진행해 볼 생각이에요.

읽어주셔서 감사합니다 !!

모두CBT

국가고시 필답형 실기시험 준비를 도와주는 서비스입니다 .

8
2
심은광

심은광

GoogleSheets를 데이터 베이스로 활용하기 (feat. nextjs)

최근에 랜딩 페이지 제작 의뢰를 받게 되었는데,

데이터를 어디에 저장하는 게 좋을까 고민하다가 GoogleSheets API를 알게 되었고 바로 적용해 봤습니다.

현재 바로 활용할 수 있는 데이터베이스 서버가 없거나,

일회성 데이터인데 테이블까지 만들어서 사용하기가 번거롭게 느껴지시는 분이 계시다면 활용해 보시는 것을 적극 추천드립니다.

적용 결과부터 보여 드리고, 간단한 사용법을 설명해 보겠습니다.

[적용결과]

register.gif

1. Google Sheets API 등록하기

API 등록과 관련해서 잘 정리된 블로그 글이 있어서 아래 포스팅 참고해주시면 좋을 것 같아요 !!

2. NEXTJS API 활용하기

아래 코드는 nextjs api를 활용해서,

googleSheetAPI 권한을 인증하고, Sheet에 등록정보를 입력해 주는 간단한 api 코드입니다.

이해가 조금 어려울 수 있는 부분에는 주석을 남겨놨습니다.

import { NextApiRequest, NextApiResponse } from "next";
import { GoogleSpreadsheet } from "google-spreadsheet";
import { JWT } from "google-auth-library";

async function loadGoogleDoc() {
  try {
//  formattedKey: vercel에서 환경변수에 저장한 값은 \n이 \\n으로 인코딩되어 있어서 다시 디코딩해줘야함
    const formattedKey = process.env.GOOGLE_PRIVATE_KEY?.replace(/\\n/g, "\n");
//  Google Sheets API를 등록하는 과정에서 발급받은 키, 이메일을 입력해주세요.
    const serviceAccountAuth = new JWT({
      key: formattedKey,
      email: process.env.GOOGLE_SERVICE_ACCOUNT_EMAIL,
      scopes: ["https://www.googleapis.com/auth/spreadsheets"],
    });
// Google Doc의 SheetId를 입력해주세요.
    const doc = new GoogleSpreadsheet(
      process.env.GOOGLE_SHEET_ID || "",
      serviceAccountAuth
    );
    await doc.loadInfo();
    return doc;
  } catch (error) {
    console.log(error);
  }
}

export default async function googleSheet(
  req: NextApiRequest,
  res: NextApiResponse
) {
  if (req.method === "POST") {
    try {
      const doc = await loadGoogleDoc();
      if (!doc)
        return res
          .status(200)
          .json({ ok: false, error: "사전등록에 실패했습니다." });
// "유저등록정보" 라는 이름의 sheet가 존재하는지 확인하고, 없다면 만들어줍니다.
      let sheet = doc.sheetsByTitle["유저등록정보"];
      if (!sheet) {
        sheet = await doc.addSheet({
          headerValues: ["email", "createdAt"],
          title: "유저등록정보",
        });
      }
// sheet에서 모든row 정보를 가져옵니다.
      const rows = await sheet.getRows();
// 이미 등록된 이메일인지 검증합니다.
      const isRegistered = rows.some(
        (row) => row.get("email") === req.body.email
      );
      if (isRegistered) {
        return res
          .status(200)
          .json({ ok: false, error: "이미 등록된 이메일입니다." });
      }
      const now = new Date();
      const utc = now.getTime() + now.getTimezoneOffset() * 60 * 1000;
      const koreaTimeDiff = 9 * 60 * 60 * 1000;
// sheet에 새로운 정보를 등록해줍니다.
      await sheet.addRow({
        email: req.body.email,
        createdAt: new Date(utc + koreaTimeDiff).toLocaleString(),
      });
      return res.status(200).json({ ok: true });
    } catch (error) {
      console.log(error);
      return res.status(500).json({ error: "Internal server error" });
    }
  }
}

위에서 작성한 api를 프론트엔드에서 활용하는 예시코드입니다.

const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
    try {
      e.preventDefault();
      if (isLoading) return;
      if (email === "") return;
      setIsLoading(true);
      const { data } = await axios.post("/api/googleSheet", {
        email: email,
      });
      if (data.ok) return message.success("사전등록이 완료되었습니다.");
      message.error(data.error);
    } catch (e) {
      console.log(e);
      message.error("사전등록에 실패했습니다.");
    } finally {
      setIsLoading(false);
    }
  };

마치며..

데이터 저장을 위한 서버를 따로 띄우는게 굉장히 번거롭게 느껴져서 저는 google sheets api를 활용해봤습니다 !!

혹시 이것보다 더 간편하고 좋은 방법을 알고계시는 분이 있으시면 저도 알려주세요 ㅎㅎ

읽어주셔서 감사합니다 !!

0
9
심은광

심은광

모두CBT 서비스가 처음으로 제휴를 맺게 되었습니다 !!

“모두CBT” 서비스를 시작한 지 7개월 만에 드디어 첫 제휴를 맺게 되었습니다 !!

제가 운영하는 서비스가 관련 분야에서 어느 정도 입소문이 났는지,

문제집 관련 출판을 하는 업체에서 먼저 연락을 주셨습니다.

몇 차례 얘기를 나눈 끝에 서로에게 도움이 될 만한 협업 방안을 찾게 돼서 제휴를 맺게 되었습니다 ㅎㅎ

작은 개인 프로젝트로 시작해서, 업체와 협업을 하게 되는 날이 올 거라곤 상상도 못했는데 너무 신기하고 즐거운 경험인 것 같습니다!

협업 관련해서 개발이 완료되면 또 메이커로그 남기러 오겠습니다 :D

@모두CBT x EHSmaster

스크린샷 2023-09-07 오후 12.39.31.png

모두CBT

국가고시 필답형 실기시험 준비를 도와주는 서비스입니다 .

8
4
심은광

심은광

사용자경험 개선을 위해 Optimistic UI를 적용 해봤습니다 !

Optimistic UI란?

Optimistic UI는 서버의 응답을 기다리지 않고, UI를 먼저 업데이트 하는 디자인 패턴입니다.

Optimistic UI를 사용하는 이유

예를 들어, 좋아요 이벤트를 생각해보겠습니다.

일반적인 경우 사용자가 좋아요를 클릭하게 되면, 프론트엔드에서는 데이터 저장을 위해 서버로 요청을 보내고 요청이 성공한 것을 확인 한 후, UI를 업데이트 해줍니다.

네트워크 환경이 원활한 경우에는 서버에 요청하는 시간이 짧아, 크게 문제가 없어 보일 것입니다.

하지만 네트워크 환경이 좋지 않은 곳에서는, 서버 요청시간이 길어지고 UI업데이트 지연이 발생해 사용자에게 렉이 걸린듯한 안좋은 경험을 줄 수 있습니다.

이러한 경험은 .. 사용자가 뒤로가기를 누르게 만들곤 하죠 ㅠㅠ..

Optimistic UI를 적용하면, 서버요청을 기다리지 않고 UI를 바로 업데이트 해주기 때문에,

UI업데이트 지연을 방지하고, 좋은 사용자 경험을 줄 수 있습니다.

저는 이번에.. 출근길 지옥철에서 저의 어플을 직접 사용해보면서.. UI지연현상이 일어나는 것을 확인하고, 고민끝에 Optimistic UI를 적용하게 되었습니다.

아래 이미지는 제 프로덕트에 Optimistic UI 를 적용하기 전,후를 비교한 영상입니다.

*테스트는 인터넷이 매우느린 Slow 3G 환경에서 진행했습니다.

Optimistic UI 적용 전 - 저장을 클릭하고 한참 뒤에, UI가 변경되는 것을 확인 할 수 있습니다.

before.gif

Optimistic UI 적용 후 - 저장을 클릭함과 동시에 UI가 업데이트 됩니다.after.gif

Optimistic UI 주의사항

Optimistic UI를 적용하게 될 경우, 데이터 성공여부를 기다리지 않기 때문에 서버와 클라이언트간에 데이터 불일치 현상이 발생 할 수 있습니다.

이러한 문제를 해소하기 위해, 데이터 요청이 실패할 경우 UI를 롤백 시키는 방법이 있긴 하지만 데이터 불일치 현상을 100% 커버할 수 있다고 보기는 어렵습니다.

그렇기 때문에 Optimistic UI 를 적용할 경우, 데이터 신뢰성과 사용자 경험개선간 트레이드오프에 대해 고민하고 선택해야 할 것 같습니다.

저는 고민끝에, Optimistic UI를 적용하게 되었는데, 여러분은 어떤 방식을 더 선호하시나요!?

모두CBT

국가고시 필답형 실기시험 준비를 도와주는 서비스입니다 .

12
0
심은광

심은광

오픈채팅봇 업그레이드 (feat. chat-gpt)

이번주 메이킹 - 오픈채팅 봇 업그레이드 !!

저는 요즘 오픈채팅 봇 만드는 재미에 빠져있습니다 :D
제가 운영하고 있는 오픈채팅방 참여자분들에게 신선한 경험을 주고 싶어서 시작한 오픈채팅 봇 만들기 프로젝트!!

처음에는 단순한 기능만 있었지만.. 생각보다 반응이 너무 좋아 이것저것 추가하다 보니 이제는 기능이 꽤나 많아졌네요!!

이번 주에는 드디어 chat-gpt를 오픈채팅 봇에 연동해 봤는데 아주 반응이 좋았습니다!
이용자분들이 굉장히 신기해하고 재밌어하셔서 개발한 보람이 있었습니다 ㅎㅎ

스크린샷 2023-08-28 오후 8.44.14.png

gpt 연동 외에도, 이것저것 집어넣다 보니 현재는 .. 날씨, 주식, 질문 등등 꽤나 많은 일을 할 수 있는 봇이 됐습니다 ㅎㅎ..

스크린샷 2023-08-28 오후 8.48.22.png

작업하면서 어려웠던 점

오픈채팅 봇을 만들 때, 핸드폰에 코드를 집어넣어야 하다보니.. 컴퓨터로 코드 작성하고 복사해서 핸드폰에 집어넣고 하는 과정이 너무 번거로웠습니다 ㅠㅠ

아직 이렇다 할 만한 해결책은 찾지 못했는데.. 연구를 계속 해봐야 할 것 같습니다.

다음 주에는 ..

이용자분들께서, 개인용 봇도 있으면 좋을 것 같다는 의견을 주셔서 제작해 보려고 합니다 ㅎㅎ

모두CBT

국가고시 필답형 실기시험 준비를 도와주는 서비스입니다 .

8
3
심은광

심은광

오픈채팅봇으로 공부방을 만들어봤어요 :D

약 6개월간 모두CBT를 운영하면서,  서비스 발전에 큰 도움이 됐던 것중 하나가 오픈채팅방이었던 것 같아요.

오픈채팅방을 통해 유저들의 피드백을 수용하고, 소통했던게 정말 큰 도움이 됐던 것 같습니다.

오픈채팅방을 좀 더 발전 시켜보고 싶어서, 어떻게 하면 유저분들께 좀 더 특별한 경험을 제공해드릴 수 있을까 고민한 끝에 오픈채팅봇을 제작하게 됐습니다 !!

제가 운영하는 오픈채팅방은 기사시험을 준비하시는 분들이 모여서 정보 공유를 하는 방인데, 랜덤으로 문제를 내주고, 정답을 알려주는 봇이 있으면 유용하겠다는 생각이 들어서 바로 개발에 돌입해봤습니다 !!

현재는 단순하게 문제를 내주고, 정답을 알려주는 2가지 기능 밖에 없지만 이것저것 추가해서 더 발전시켜볼 계획입니다 !

생각보다 유저분들 반응이 너무 좋아서 뿌듯하고 재밌네요 ㅎㅎ

스크린샷 2023-08-21 오후 3.42.26.png

저처럼 오픈채팅방을 운영하시는 분이 계시다면, 커스텀 오픈채팅봇을 만들어서 활용해보시는 것을 추천드립니다 !! 

7
2
심은광

심은광

서비스가 복제 당했어요.. !

안녕하세요.

저는 1인 개발자로 모두CBT 서비스를 개발 및 운영하고 있습니다.

어느덧 운영을 시작한지 6개월이 조금 지난 것 같은데.. 제가 만든 서비스를 그대로 복제한 사이트가 등장을 했습니다.. !

그렇게 큰 서비스도 아닌데, 이런식으로 복제가 일어날 줄은 상상도 못했어서.. 꽤나 당황스럽네요 ㅎㅎ..

그만큼 제가 만든 서비스의 가치가 있다는 반증일까요 .. !?

뭐 어쨋든.. 경쟁사라고 해야하나..? 경쟁사가 생긴만큼.. 더 열심히 서비스를 발전 시켜봐야 할 것 같습니다!

경쟁사는 출판업을 하는 회사인것 같은데.. 회사를 상대할 수 있을지 조금 걱정도 되면서 의지가 불타오르네요 !!

스크린샷 2023-08-19 오후 7.04.26.png스크린샷 2023-08-19 오후 7.03.58.png스크린샷 2023-08-19 오후 7.04.47.png스크린샷 2023-08-19 오후 7.05.28.png

이 정도면.. 사이트가 복제됐다고 봐야겠죠.. ???

모두CBT

국가고시 필답형 실기시험 준비를 도와주는 서비스입니다 .

11
0
심은광

심은광

6개월간 개인프로젝트를 운영하면서

어느덧 “모두CBT” 서비스를 시작한지 6개월이라는 시간이 지났네요.

개발자 이직 포트폴리오로 활용할 목적으로 시작한 개인 프로젝트였는데, 

감사하게도 생각보다 많은 분들이 이용해 주셔서 계속 서비스를 운영하고 있습니다 !

그동안 이뤄 낸 성과 및 앞으로의 목표에 대해 간단하게 얘기해보려고 합니다.

<6개월간의 성과>

  • 구글스토어 다운로드수 1만 +, 평점 4.8

  • 회원수 7000+

<6개월간 서비스를 운영하면서>

@ 서비스 탄생 배경

필기 공부를 도와주는 서비스는 있는데, 실기 공부를 도와주는 서비스는 왜 없을까? 라는 의문에서 시작해서 서비스를 만들게 되었습니다.

@ 피드백을 받기위한 노력!!

서비스를 혼자 운영하다 보니, 아이디어도 고갈되고.. 서비스가 오류 없이 잘 굴러가고 있는건지 확인이 어려웠어요. 그래서 어떻게 이 문제를 해결 할 수 있을까 고민했습니다.

  1. 첫번째 시도 - 자유게시판 개설

    처음에는 자유게시판을 만들어서 유저들의 의견을 들어보자고 생각했습니다. 하지만 생각보다 글을 써주는 사람이 많지는 않더라구요..  그래도 종종 버그 발견 글들을 올려주셔서 버그해결에 큰 도움이 됐습니다.

  2. 두번째 시도 - 오픈채팅방 개설

    오픈채팅방을 개설하고, 홈페이지에 입장할 때 오픈채팅방에 입장하도록 유도하는 안내를 띄었습니다.

    오픈채팅방은 생각보다 반응이 좋았습니다 ! 생각보다 많은 이용자분들이 들어와 주셨고, 현재는 감사하게도 약 1천명 이상의 유저분들이 오픈채팅방에서 활동해주고 계십니다 ㅎㅎ 

    서비스에 대한 다양한 피드백을 주셔서, 현재도 정말 큰 도움이 되고 있고 이용자분들이 서비스의 기획자이자 QA엔지니어 역할을 해주고 계십니다!!

    저처럼 혼자 서비스를 운영하고 계시다면 오픈채팅방을 개설해서 이용자분들과 소통해보는 것을 적극적으로 추천드립니다 !

@ 혼자 개발하면서 좋았던 점

혼자 서비스를 개발 하고 운영하다보니, 다양한 기능들을 내 마음대로 실험 해보고 적용할 수 있어서 너무 좋았던 것 같아요 !

이전에 “모두의 메타버스”라는 프로젝트를 개발했을 때는, 백엔드 개발자 분이 따로 계셨는데, 새로운 기능을 추가하고 싶을 때마다 요청을 드려야했고, 각자 현업이 있다보니 시간이 맞지 않아서 기능 하나 추가하는데에도 시간이 많이 소요돼서 힘들었던 기억이 있네요 .

@ 혼자 개발하면서 힘들었던 점

아무래도 혼자 서비스를 개발 및 운영하다보니 힘든점도 많았던 것 같습니다.

  1. 기술 및 전문성의 부족

    처음에 제가 가지고 있던 기술은 프론트엔드 개발 기술 하나 였습니다...

    매일 퇴근 후 열심히 공부해서 어찌저찌 서비스를 런칭하긴 했지만, 아직까지도 전문성은 조금 부족하다고 생각이 되네요 ㅎㅎ..!! 

  2. 시간 부족

    기술적으로 해결해야 할 문제도 있고, 추가하고 싶은 기능도 많은데..

    회사를 다니면서 서비스 개발을 병행하다 보니 아무래도 시간이 많이 부족하긴 한 것 같아요 ㅎㅎ.

<앞으로의 목표>

@ 어플 고도화

최근에 구글스토어에 어플을 런칭했는데, 제가 앱개발 쪽에 아직 지식이 얕다 보니.. 버그가 생각보다 많아서 어플환경에서의 버그들을 고치는게 첫번째 목표입니다 ! 

버그가 이렇게도 많은데.. 다들 평점을 높게 주셔서 정말 감사합니다 :D..

@ 신규 기능개발 - 유저의 자체 시험지 제작 및 판매기능 개발

현재는 “모두CBT”에 특정 시험에 대한 자료만 업로드 되어 있으며, 제가 혼자 자료를 업로드 하기에는 한계가 있어서, 유저가 직접 자신만의 시험자료를 제작해서 이용할 수 있도록 만들어둔 상태입니다.

앞으로의 목표는 시험자료 제작자가, 타 유저에게 시험지 뷰어 권한을 판매해서 수익을 창출 할 수 있도록 만들어 보려고 합니다.

<마치며>

정말 소소하게 시작한 포트폴리오용 프로젝트 였는데 제가 생각한 것 보다는 많이 커진 것 같아요 ! 

처음에는 정말 단순한 서비스였는데, 이용자가 생기면서 이용자분들의 피드백을 받다보니 서비스가 점점 커진 것 같아요 !! (아직도 많이 작긴하지만 ㅎㅎ..)

서비스를 운영하면서 가장 좋은 순간은, 유저분들이 “덕분에 시험 합격했어요!” 같은 긍정적 후기를 남겨주실 때 인 것 같아요 ㅎㅎ ..

서비스 런칭 후, 첫 시험이 끝난 후 정말 많은 분들이 개인톡으로 감사인사를 해주셔서 얼마나 뿌듯했는지 모릅니다 !!

앞으로도  메이커로써 많은 사람들에게  도움을 주는 프로덕트를 개발하고 싶습니다 !!

두서 없는 긴 글 읽어주셔서 감사합니다 :D

모두CBT

국가고시 필답형 실기시험 준비를 도와주는 서비스입니다 .

14
6
심은광

심은광

비전공자에서 사이드 프로젝트로 부수익을 내기까지

안녕하세요. 저는 이제 1년차가 되는 주니어 개발자입니다.

1인 프로젝트로 진행하던 사이드 프로젝트에서 수익이 나기 시작해서.. 너무 기쁜 마음에 글을 쓰게 됐습니다.

사실 이전에 디스콰이엇에도 게시했던 프로젝트였는데, 타겟팅이 너무 한정적이다 보니 큰 관심은 받지 못했던 것 같아요 ㅠㅠ..

프로덕트는 아래 추가했으니 궁금하신 분들은 구경해보셔도 좋을 것 같아요.


독자분들의 흥미를 끌기 위해, 저의 일주일간 애드센스 예상수익을 공개하고 시작하겠습니다 :D

큰 금액은 아니지만, 처음 진행한 1인 프로젝트에서 수익이 났다는데 큰 의미가 있는 것 같아요



- 모두CBT 간단한 소개

우선 제가 만든 사이드프로젝트의 이름은 모두CBT이고, 국가고시 실기시험 준비를 도와주는 서비스입니다. 자세한 설명은 프로덕트 게시글을 참고해주세요!


- 프로젝트를 시작하게된 계기

사실 이 프로젝트는 제가 개발자가 되기 이전부터 계속 생각하고 있었던 프로젝트 중 하나였어요.

프로젝트 시작계기를 자세하게 설명 드리고 싶어 과거이야기 부터 시작합니다 !


개발자가 되기 이전에 저는 전기과를 졸업하고, 기사 시험을 준비하는 수험생이였습니다.

당시 너무 방대한양의 공부 범위을 보면서.. 어떻게 하면 남들보다 효율적으로 공부할 수 있을까 고민했었고, 무작정 프로그램을 만들기 시작했습니다.

당시 제가 알고 있는 언어는.. 컴활1급 자격증을 취득하면서 공부했던 VBA언어 하나였어요.

그래서 무작정 엑셀을 데이터베이스삼아 VBA로 코드를 짜서 간단한 프로그램을 만들게 됐습니다.

정말 지금보면 많이 많이 부족한 프로그램이긴 하지만 당시.. 저에게는 너무 신세계였어요.. 내가 프로그램을 만들다니..

그래서 이길로 프로그래밍에 관심이 생겨서 하라는 기사공부는 안하고 개발공부를 시작하게 됐고, 지금은 벌써 1년차 개발자가 됐네요 ㅎㅎ


이때 만들었던 프로그램을 제 개인 블로그에 올렸었는데 생각보다 반응이 너무 좋았어요! 그래서 이 서비스를 고도화 시켜봐야겠다 라고 생각했고, 현재의 모두CBT 가 탄생하게 되었습니다.

당시 VBA로 만들었던 프로그램이 궁금하실 수도 있을 것 같아 링크 남김니다.

https://gisastudy.tistory.com/1


- 프로젝트를 개발하기 까지

프로젝트를 시작하기로 마음은 먹었지만, 저는 프론트엔드만 조금 다룰 줄 아는 그저 주니어 개발자였습니다. ( 현재도 주니어 개발자이긴 합니다 :D )

처음에는 백엔드 팀원을 찾아볼까도 생각했지만, 뭔가 혼자해보고 싶다는 욕심이 생기더라구요.

그래서 가장 익숙한 언어인 javascript로 백엔드를 개발 할 수 있는 nodejs를 선택했고,약 3달 동안, 매일 퇴근 후에 공부했던 것 같아요.

백엔드 공부를 약 3달간 한 이후, 여전히 부족한 실력이긴 했지만 무작정 프로젝트를 시작하게 됐습니다 !

많은 난관이 있었지만, 구글님과 ChatGpt님의 도움으로 난관을 극복할 수 있었고 약 3달 간의 개발 끝에 프로덕트를 런칭 할 수 있었습니다 !


- 프로젝트 개발이후

프로젝트 개발 이후 제 프로덕트를 알리기 위해, 정말 혼자 열심히 마케팅이라고 해야하나.. 홍보를 했던 것 같아요 ! ( 현재도 계속 하고있습니다.. )

네이버 카페부터, 카카오톡 오픈채팅 , 각종 커뮤니티 등 홍보를 안한 곳이 없는 것 같네요 ㅎㅎ.. ( 나는 마케터인가.. 개발자인가.. )

첫 한 달간은 정말 유입이 적었던 것 같아요.. 그런데 정말 매일 단 한분의 유저께서 열심히 제 서비스를 이용해주고 계시더라구요..

그래서 분명 누군가에게는 도움이되는 서비스구나 라고 생각하고 프로덕트를 계속 업데이트 시켰고, 점점 유입이 많아지기 시작했습니다 !


원래는 프로덕트를 데스크탑 위주로 개발을 했었는데, 생각보다 모바일 유입이 많더라구요.

그래서, 아.. 어플을 만들어야 되겠다 생각했습니다.

하지만 역시 저는 어플을 한번도 만들어 본적이 없었습니다. 😅

그래서 어떻게 하면 빠르게 어플을 만들 수 있을까 검색하고 검색한 끝에 !

flutter를 간단히 공부한 후, 웹뷰형태로 어플을 제작하게 됐습니다 !

단순 웹뷰라서 사실 통과 안될 줄 알았는데.. 안드로이드에서는 통과 시켜주더라구요 ㅎㅎ..

어플은 조금 더 공부한 후, 업그레이드를 해볼 생각입니다 !


현재는 프로덕트를 런칭한지 약 3달 정도 됐고,

아래와 같은 성과를 냈습니다 !

- 어플 다운로드 수 1000회 이상,

- 일 방문자수 약 500 ~ 800 명,

- 구글애드센스 승인 ⭐


- 마치며

프로젝트를 시작 하기전 프론트엔드만 조금 할 줄 아는 개발자였는데,

프로젝트를 진행하면서 현재는 백엔드도 조금, 어플도 조금 할 줄 아는 개발자가 된 것 같네요 ㅎㅎ

열심히 노력해서 백엔드, 프론트엔드, 어플 많이 할 줄 아는 개발자가 되고싶습니다.


정말 두서 없는 글이었음에도,

여기까지 글을 읽어주셨다면 정말 감사합니다.

너무 기쁜 마음에 주저리 주저리 쓰다보니 글이 길어졌네요 ㅎㅎ..

다시한번 읽어주셔서 감사합니다 !

모두CBT

국가고시 필답형 실기시험 준비를 도와주는 서비스입니다 .

11
4