PROJECTS

Tosel Lab Platform

20여년간 영어인증능력 시험제도를 통해 입지를 다진 TOSEL의 신규 학습컨텐츠 플랫폼입니다. 전국 학원들을 대상으로 심사과정을 거쳐 TOSEL Lab 지정교육기관을 선별하고, 선별된 지정교육기관과 해당 기관의 원생들을 대상으로 맞춤식 진단 데이터 공유 및 처방과 컨텐츠 제공을 통하여 해당 지정교육 기관의 원생들의 영어능력 성장을 돕고 있습니다.

2022년 8월에 런칭, 약 5000여명이 사용중인 실제 서비스입니다.

서비스 초기 기획부터 개발, 소통 및 런칭까지 모든 프로세스에 주도적인 역할로 참여하였고 기존에 Monolothic한 시험 웹사이트에 모든 기능이 몰려있던 TOSEL 사이트 리뉴얼까지 고려하여 TOSEL Lab Main Web Site 및 4개의 Digital Contents가 포함된 Microservices Architecture 방식의 플랫폼으로 설계하였습니다.  

그럼 지금부터 제가 참여했던 TOSEL Lab Platform의 프로젝트들을 소개해드리겠습니다.


# SubProjects

TOSEL Lab Main website

TOSEL Lab Platform Main website   입니다. (lab.tosel.co.kr)

TOSEL Lab에 대한 소개와 이용방법등이 기재되어있으며 타 업체와 컨텐츠 협업이 예정되어있었기 때문에 CORS통신이 가능하게끔 설계하였습니다.
기관장 및 원생들은 해당 Main Site를 통해서 컨텐츠를 이용할 수 있습니다.
TOSEL Lab은 심사과정을 통과한 기관만이 사용할 수 있게끔 기획하였으며 총 14개의 유저종류가 존재합니다.

따라서 이 프로젝트를 진행하면서 가장 크게 느낀점에 대해 말씀드리자면 방대하고 복잡한 유저 권한관리의 필요성을 여실히 깨달았다고 할 수 있겠습니다.
유저종류에 따른 DB설계와 해당 종류에 따라 권한을 부여하는 API구축 등의 경험들을 통해 백엔드 개발자로서 유저 권한관리의 중요성을 파악할 수 있었고 또한 보안에 많은 신경을 쓰게되었습니다.

* 작업 내용
프로젝트 기획,유저 플로우 설계, DB설계, 기능 API 개발, S2S 통신 Restful API 구축, 유저 권한관리(jwt 기반 토큰을 통한 유저접근권한 설정)
* 사용 기술
Frontend - HTML/ CSS/ JavaScript/ Jinja2/ jQuery Backend - Python, Flask Database – MariaDB
* 개발 기간
2022.03-2022.06(3개월)
* 담당 인원
Backend 2, Frontend 1, Designer 1

Monthly Test

TOSEL Lab 지정교육기관의 원생들이 매월 응시하는 월별고사 컨텐츠인 Monthly Test 입니다.

시험 프로세스 기획 및 정립, 다양한 형태와 리소스에 대응하는 문항 db설계, 문항 레이아웃 확정 작업, timer 설계 등의 작업을 진행하였습니다.

Monthly Test의 경우 Offline/Online이 선택가능하게끔 기획되었기 때문에 성적처리 및 데이터 누적 프로세스도 두가지 방식으로 설계해야 했으며, 해당 과정에 어려움이 있었지만 업무 자동화 script 제작을 통해 해결할 수 있었습니다.

* 작업 내용
시험 프로세스 기획, 문항 DB설계, S2S 통신 Restful API 구축, 타이머 설계
* 사용 기술
Frontend - HTML/ CSS/ JavaScript/ Jinja2/ jQuery Backend - Python, Flask Database – MariaDB
* 개발 기간
2022.05-2022.06.01(약 1개월)
* 담당 인원
Backend 2, Frontend 1, Designer 1

Monthly Test - 성적처리 프로젝트

위에 설명드린 Monthly Test의 성적 처리 프로젝트입니다.

TOSEL Lab은 기관들의 원생의 실력을 진단 및 처방해주는 플랫폼이기에 응시자의 학교 / 지역 / 학원 평균 및 응시자가 고른 답의 추적이 편하게끔 성적데이터 DB를 기획 및 설계 하였습니다.

또한 Offline으로 Monthly Test를 응시한 기관의 경우 종이에 적힌 데이터를 바로 DB에 삽입할 수 없으므로 OMR 카드에 적힌 데이터값을 이용해 성적처리하기 위해 여러 업체와 소통하여 저희 프로그램에 맞는 OMR을 제작하는 등 복잡한 과정을 겪었고, OMR에 적힌 데이터값을 OCR을 이용하여 데이터로딩, 오답 정정, 엑셀파일로 변환 후 자동화 Script를 통해 성적 DB에 추가하는 방식으로 극복할 수 있었습니다.

* 작업 내용
OCR을 이용한 오답정정 프로그램 구현 ,OCR을 이용한 Offline OMR 데이터 로딩 및 엑셀파일화 프로세스 정립,엑셀파일의 DB 삽입 자동화 script 구현, 성적처리 프로세스 정립 및 알고리즘 구현
* 사용 기술
Backend - Python, Flask,openCV,pymySQL,pytesseract Database – MariaDB
* 개발 기간
2022.05-2022.06.01(약 1개월)
* 담당 인원
Backend 2

Monthly Test - 성적자료 프로젝트

Monthly Test의 성적자료 프로젝트입니다.

TOSEL Lab의 기획 상 원생의 데이터를 진단/처방 데이터 제공이 필요하기에 각 지역별/학교별/학원 별 평균 수치 및 미국학생들의 영어 독서능력 수치인 AR/Lexile과의 비교표가 포함되게끔 기획하였습니다.

각 평균수치 비교 및 AR/LEXILE 지수 등을 제공하는 부분의 알고리즘과 개인 및 모든원생들의 평균성적 DB설계 / 데이터 로딩 알고리즘을 구현하였습니다.

짧은 기간내에 끝내야하는 프로젝트였기에 원래는 Backend 개발이 주 분야인 제가 Publishing/Frontend 영역 또한 대부분의 작업을 하였고, 해당 부분에서 그래프 및 chart.js 등의 라이브러리 사용에 어려움이 있었습니다.

하지만 작업을 진행하며 퍼블리셔 및 프론트엔드 분야에 대해 더 많이 배울 수 있어 좋은 경험이었습니다.

* 작업 내용
성적 DB설계, S2S 통신 Restful API 구축, 성적데이터 로딩 알고리즘 구현, 일부 프론트 화면 구현
* 사용 기술
Frontend - HTML/ CSS/ JavaScript/ Jinja2/ jQuery Backend - Python, Flask Database – MariaDB
* 개발 기간
2022.05.23-2022.06.01(약 7일)
* 담당 인원
Backend1, Frontend 1

Placement Test

TOSEL Lab의 Digital Contents 중 하나인 Placement Test 입니다.

학원에서 신규 원생의 적절한 학습 레벨을 평가하여 반 배치고사로 활용하는 컨텐츠로 기획하였습니다

출제된 문항에 대한 응시자의 답변에 따라 다음문항의 난이도가 달라지는 Adaptive-Test 형태로 기획하였으며 유기적으로 출제된 다양한 문항 및 해당 문항의 정답여부를 통계화하고 분야별 레벨설정이 가능하게끔 Classification 알고리즘을 통해 구현하였습니다.

프로젝트를 진행하면서 Classification 및 Clustering등 머신러닝의 알고리즘들을 많이 공부하게 되었고 AI에 대해서도 관심이 생기게 되었습니다.

* 작업 내용
프로젝트 기획 참여, 문항 DB설계, S2S 통신 API 구축, 문항출제 알고리즘 구현
* 사용 기술
Frontend - HTML/ CSS/ JavaScript/ Jinja2/ jQuery Backend - Python, Flask Database – MariaDB
* 개발 기간
2022.04-2022.05(1개월)
* 담당 인원
Backend 2, Frontend 1, Designer 1

Daily Study (Self Study)

일일 문제풀이 Digital Contents인 Daily Study(Self Study) 입니다.

TOSEL Lab을 이용하는 원생들이 매일 문제풀이를 통한 자기주도 영어학습 습관을 키우고, 스스로 문제를 해결하면서 영어 성취도를 향상시켜 나갈 수 있게끔 제공하는 일주일마다 전체 문제가 제공되는 방식으로 기획하습니다. 또한 학생이 문제를 풀다가 중간에 save 하는 기능을 구현 하였고. 문제를 전체 다 푼 후 원장측과 학생 측에서 오답확인이 가능하게끔 제작하였습니다.

레벨별 / 카테고리 별로 다양한 문항이 존재하기에 종류별로 문항 DB 설계를 도맡아 진행하였고 문제 레이아웃 구축 작업, 오답확인 API 구축, 원장 측의 원생 Self Study를 확인이 가능한 기능을 하는 S2S 통신API 구축을 진행하는 역할을 맡았습니다.

* 작업 내용
프로젝트 기획, DB설계(문항DB, 학생 로그 DB),문제 레이아웃 작업, 오답확인 API구축, S2S 통신 API 구축
* 사용 기술
Frontend - HTML/ CSS/ JavaScript/ Jinja2/ jQuery Backend - Python, Flask Database – MariaDB
* 개발 기간
2022.05-2022.06(1개월)
* 담당 인원
Backend 2 , Frontend 1, Designer 1

Voca Quiz

TOSEL Lab을 이용하는 원생들이 단어학습을 할 수 있게 제공되는 Digital Contents인 Voca Quiz입니다.

랜덤으로 문항을 출제하는 알고리즘 설계 및 개발, 문항 및 문제풀이 관련 DB설계 및 수정, 본인 정답률과 전체 정답률을 기준으로 기반한 개인별 맞춤 오답노트 알고리즘 설계 등의 작업에 참여하였습니다.


또한 프론트엔드 부분으로는 랜덤한 단어의 글자 길이에 따라 레이아웃 배치가 달라지게 설계하는 역할을 담당하였고 프론트엔드와의 협업에 대해서도 많이 배울 수 있었습니다.

* 작업 내용
프로젝트 기획, DB설계 및 수정, S2S 통신 Restful API 구축, 랜덤 글자길이 레이아웃 배치 설계, 문항 및 오답노트 API 알고리즘 설계, API구축
* 사용 기술
Frontend - HTML/ CSS/ JavaScript/ Jinja2/ jQuery Backend - Python, Flask Database – MariaDB
* 개발 기간
2022.05.23-2022.06.01(약 2주)
* 담당 인원
Backend2, Frontend 1, Designer 1

Business Model Refactoring

TOSEL의 Business Process Model을 Microservices Architecture에 기반하여
새롭게 모델링한 과정 및 결과물입니다.



지난 20년간 전국적으로 영어 시험 사업을 진행해온 TOSEL에게 '웹사이트'란 단순히 홍보를 목적으로 할 뿐 아니라,
시험 응시자를 메인 유저로 삼아 [시험접수, 접수정보 변경, 성적확인] 등을 제공하는 서비스 플랫폼의 역할로 이용되어왔습니다.

TOSEL은 포스트 코로나 시대를 맞아 영어 학습 컨텐츠 제공 사업을 새롭게 시작하여 TOSEL을 영어 시험 뿐만이 아닌 종합적인 영어 학습/평가 기관으로
발돋움하기로 결정하였고, 이에 따라 기존 영어 시험 사업(TOSEL) 외에 온라인 영어 학습 컨텐츠 사업(위 TOSEL Lab)을 브랜딩 및 런칭하게 되었습니다.

그러나 기존의 TOSEL 웹사이트에 확장된 서비스를 추가하기에는 많은 문제점이 존재했습니다.

1. 노후화된 코드


10년간 업데이트되지 않은채로 기본 유지보수만 진행되어 노후화된 코드로 인해 신규 서비스 추가 개발이 어려움.
(낮은 jdk 버전으로 인한 https 기반 api 호출 불가)


2. 정규화되지 않은 데이터베이스


서비스의 변화가 있을 때 마다 기존의 데이터베이스 구조를 최대한 바꾸지 않는 방향에서 임시적으로 추가된 구조가 정규화되어있지 않아
데이터의 무결성이 보장되지 않는 문제. (수많은 중복데이터와 쓰레기데이터)


3. 서비스의 혼재


메인 타겟 유저가 다른 여러가지의 부수적 서비스들이 Monolothic Architecture 로 설계된 홈페이지에 뒤섞여있어
각 유저군이 원하는 서비스를 사용하기 어려울 뿐 아니라, 관리자 입장에서 필요한 Admin / ERP 등을 개발/관리하기 용이치 않음.

이러한 문제점에 따라 기존의 시험 사업을 위한 웹사이트를 전면적으로 리뉴얼할 뿐만 아니라, 새롭게 런칭하게될 온라인 영어 학습 컨텐츠 사업을 위한 웹사이트들을 MicroServices Architeture로 설계하여 개발하기로 결정했습니다.

해당 프로젝트는 TOSEL Lab 프로젝트와 같은 기간동안 진행되었으며 모든 기획과 리팩토링 계획 과정에 참여하였습니다.
프로젝트를 진행하며 백엔드 개발자로서 서비스의 리팩토링 과정을 작업하며 많은 공부가 되어 좋은 경험이었고, 기존 서비스의 구조적 단점을 파악하고 새롭게 설계하여 리팩토링 하는 과정에서 어떠한 부분을 고려해야 할 지, 어떻게 하면 더 효율적인 아키텍쳐 방식으로 설계할 지에 대해 직접 느낄 수 있었습니다.

(기간:2022.03 ~ 2022.06 / 인원: Backend 2, Frontend 1, Designer 1)

Tosel SSO

# Tosel SSO project

TOSEL 에서 새롭게 시작하는 서비스는 각각의 유저군이 다르기 때문에 Microservice Architecture 로 설계되었지만, 궁극적으로 TOSEL 은 각 서비스가 연계되어 최종적으로 학습-평가-분석의 사이클을 통하여 체계적인 영어 실력 향상을 목표로 하고있습니다. 즉, 서로 다른 각각의 서비스의 유저들이 언제든지 다른 서비스의 유저가 될 수 있고, 그 과정에서 각 서비스에서 발생하는 데이터가 통합적으로 관리되어야 합니다. 이에 따라, 모든 서비스는 축적된 데이터를 서로 공유하고, 공유된 데이터의 identification을 위한 통합 유저관리 서비스가 필요하게 되었습니다.

이에 따라 SSO를 통해 JWT 방식으로 각 서비스에 cookie를 발급하여 로그인 여부 및 데이터 접근 권한을 관리하였고, 타 업체 서비스와의 연계를 위해 도메인이 다른 경우에도 통신할 수 있도록 CORS 기반으로 개발되었습니다. JWT 방식으로 제공하는 토큰은 로그인 여부 및 유지 시간을 내포하는 refresh-token 과 데이터 접근 권한을 관리하는 access-token 으로 나뉩니다. refresh-token은 SSO를 통해 로그인 성공시 로그인을 요청한 각 서비스에 발급되며, 각 서비스는 만료 시간보다 이전에 refresh-token을 주기적으로 SSO에 제공하여 refresh-token의 만료시간을 연장함으로써 로그인 정보를 유지합니다. 또한, SSO 내에 저장된 공유 데이터가 필요할 경우 각 서비스는 만료되지 않은 refresh-token을 이용하여 SSO에게 access-token을 발급받으며, 발급받은 access-token을 통해 지정된 권한 내의 정보를 요청할 수 있습니다. access-token은 일정 시간 이후 만료되며, 연장할 수 없습니다.

해당 프로젝트를 진행하는 동안 대부분 서로다른 서비스들에서 요청 시 정보를 제공해주는 S2S Api(Restful) 구축을 진행하였습니다.
Single Sign-on의 기술적인 부분도 흥미로웠지만, 제일 크게 기억에 남는 점은 SSO 설계 시 현재 만드려는 서비스들을 전부, 확실히 파악한 후 해당 서비스들에서 공통적으로 필요로 하는 회원의 정보에 대해 추합 후 통합회원 DB설계를 해야 한다는 점 이었습니다.

(기간: 2022.04 ~ 2022.05 / 인원: Backend 2)

Tosel 교재몰 (SCM)

TOSEL의 공급망관리시스템 (SCM)과 쇼핑몰의 역할을 하는
TOSEL 교재몰 프로젝트 입니다.


1. 교재(도서)의 특성 상 초판/증쇄/개정/증보/개정증보/재고상태 등의 현황 파악 및 관리가 가능해야하고 트래킹 기능또한 필요하다는 점.


2. 기존 TOSEL 교재를 이용하는 유저종류가 일반회원 / 지역본부 / 총판 등 4개의 종류가 있으며 각각의 유저군마다 이용가능한 기능과 view가 달라야 하는 점.


3. 총판 및 지역본부(영업본부) 의 경우 일반 회원 및 단체 회원(학원)과 다르게 판매량 단위가 매우 크기 때문에 경우에 따라 증쇄 여부를 결정할 필요성이 있다는 점.


4. 기존 총판과 지역본부에서 TOSEL 교재 요청하는 방식이 각각의 총판과 지역본부별로 전화 / 팩스 / 이메일 / 메신저 등 너무나도 상이하여 통합 시스템 구축 필요성이 대두되었다는 점.


5. 본사에서 교재를 관리할 때에도 수동으로 엑셀을 이용하여 관리하다보니 금액 및 재고여부가 불일치하는 등 차질이 많아 자동화 시스템 구축이 절실했다는 점.

등의 이유로 쇼핑몰의 기능도 가지고있는 통합 공급망 관리 시스템(SCM)으로 기획하였습니다.



웹과 모바일 모두 이용 가능하게끔 작업하였으며 프로젝트 기획/유저플로우 설계/ 와이어프레임 설계/ 교재(도서) DB설계 /유저별 권한 관리시스템 설계/ S2S api / 메인페이지 / 상세페이지 구축을 담당했습니다.

해당 프로젝트를 진행하며 백엔드 개발자로서 SCM에 대한 이해 / 체계적인 도서 DB 설계 / 유저 DB설계 및 유저권한관리 시스템 기획/ api 구축등의 경험을 하며 많은 공부가 되었고,
기존 사업 시스템을 빠르게 숙지하고 필요한 기능을 파악하여 개발 하는 능력이 많이 향상되었습니다.

(기간: 2022.01 ~ 2022.4 / 인원: Backend 2, Frontend 1, Designer 1)

CARD 24 : 카드/카드사 추천 웹사이트

# CARD 24 프로젝트

각 유저의 조건에 맞는 카드와 카드사를 추천해주는 웹사이트인 CARD24 입니다.

Monolothic Architecture 형식의 카드 및 카드사 추천 웹사이트이고, 웹 개발을 배우고 처음 진행했던
개인적인 팀 프로젝트입니다.

Springboot를 이용한 MVC 2 패턴 디자인으로 작업하였으며 Spring Security를 이용한 http보안 구현을 하였습니다. 회원 로그인의 경우에는 Oauth2를 이용하였으며, Metadata를 이용하여 사용자별로 특정조건에 맞게 카드 및 카드사를 추천해주는 알고리즘을 구현하였고, 혜택별 카드 및 카드사 비교 서비스, 문의 게시판 등의 서비스로 이루어져있습니다.
AWS EC2를 통해 배포를 진행하였습니다. (RDS-MariaDB 사용)

당시 Java, jsp를 이용하여 몇가지 미니프로젝트를 만들어보고 바로 Springboot를 사용하였었는데 MVC 2 패턴을 처음배우고, 각종 어노테이션 사용 등의 개념을 이해를 못한 채 작업을 하자니 굉장히 힘들었습니다. 특히 협업하시는 분께 제 파트를 끝내고 인계를 해드려야하는데 압박감이 상당했습니다.
어려움을 극복하기 위해서, 개인시간에 따로 Java의 console만을 이용한 CRUD 게시판 / JavaFX를 이용한 키오스크 프로젝트 등을 MVC 패턴을 이용해 미니프로젝트를 진행해가며 연습하였고, 결국 잘 이해하여 CARD24 프로젝트를 무사히 마칠 수 있었습니다. 어렵기만 하던 프로그래밍에 진정으로 희열을 느낀 순간이었고, 앞으로도 개발 과정에서 어려움이 있을 시 좌절하지 않고 문제를 해결해나가야겠다는 확신을 가지게 되었습니다.

유튜브 시연영상 : https://www.youtube.com/watch?v=iGtQYibdWVs
깃허브 주소 : https://github.com/lkh599810/CARD24_Project

(기간: 2021.05 ~ 2021.06 / 인원: 2)