엘리스AI 트랙에서 배운 내용으로 진행한 두번째 데이터분석 웹서비스 프로젝트
주요 기능 (주된 활용성) 및 서브 기능
주요기능:
1. 구 단위 별로 수용시설 분포 지도 제공
2. 시설 정보 제공(시설명, 위치, 수용인원, 시설구분, 전화번호)
서브기능:
1. 이재민 관련 추가 사이트 제공
2. 지역별 안전도 표시
3. 이재민 소통을 위한 익명 게시판 제공
프로젝트만의 차별점, 기대 효과
1. 기존 국민 재난 안전 포털 사이트 대비 사용자를 위한 시각화 자료를 통해 이해가 쉽도록 도와줌
2. 이재민 관련 정보 한번에 찾을 수 있도록 함
3. 재난에 대한 지역 안전도 표시
// models/Fire.js
const { DataTypes } = require('sequelize');
const sequelize = require('../databases/sequelize');
const Fire = sequelize.define("Fire", {
union_district: {
type: DataTypes.TEXT,
primaryKey: true,
allowNull: false,
},
year_total: {
// '2년치 합계'
type: DataTypes.INTEGER,
allowNull: false,
},
year_avg: {
// '2년치 평균'
type: DataTypes.DOUBLE,
allowNull: false,
},
}, {
timestamps: false // timestamps 비활성화
});
module.exports = Fire;
const PORT = process.env.PORT || 8000;
app.listen(PORT, async () => {
try {
await sequelize.authenticate();
console.log("데이터베이스 연결 성공");
await sequelize.sync(); //모델 구조 동기화
} catch (error) {
console.error("데이터베이스 연결 실패");
}
console.log(`Server is running at ${PORT}`);
});
-- 데이터 테이블 정의 및 입력입니다. 총합과 평균의 경우 데이터를가지고계산가능하므로 제외했습니다.
CREATE TABLE district_summary(
distict_name VARCHAR(10),
year_2020_value INT,
year_2021_value INT
);
INSERT INTO district_summary values
('금천구',108,108 )
,('동대문구',120,131)
,('동작구',136,121)
,('도봉구',136,125)
,('양천구',137,138)
,('구로구',142,147)
,('성북구',147,153)
,('노원구',152,154)
,('성동구',155,163)
,('강북구',165,130)
,('은평구',169,145)
,('광진구',169,187)
,('중구',170,136)
,('용산구',176,160)
,('종로구',179,169)
,('강서구',193,197)
,('서대문구',194,236)
,('관악구',195,224)
,('영등포구',203,176)
,('강동구',203,188)
,('중랑구',204,191)
,('서초구',205,215)
,('마포구',213,212)
,('송파구',292,237)
,('강남구',360,356);
-- 통합 구를 이용해 뽑기위해, 통합 구를 정의하는 인라인뷰를 만들고, 이를 통해 결과값을구했습니다.
SELECT
union_district,
SUM(year_2020_value + year_2021_value) as 2_year_total,
AVG(year_2020_value + year_2021_value/2) as 2_year_avg
FROM
(
SELECT CASE
WHEN distict_name IN ('은평구', '서대문구','마포구') THEN '서북생활권'
WHEN distict_name IN ('종로구', '중구','용산구') THEN '도심권'
WHEN distict_name IN ('성북구', '강북구','도봉구','노원구') THEN '동북2생활권'
WHEN distict_name IN ('동대문구', '성동구','중랑구','광진구') THEN '동북1생활권'
WHEN distict_name IN ('강서구','양천구') THEN '서남1생활권'
WHEN distict_name IN ('영등포구', '금천구','구로구') THEN '서남2생활권'
WHEN distict_name IN ('관악구','동작구') THEN '서남3생활권'
WHEN distict_name IN ('강남구', '서초구') THEN '동남1생활권'
WHEN distict_name IN ('송파구','강동구') THEN '동남2생활권'
END as union_district, distict_name, year_2020_value, year_2021_value FROM district_summary
) as a
GROUP BY union_district;
처음해보는 백엔드 파트라 정말 많은 어려움을 느꼈고, 어쩌다보니 백엔드 리더가 되서 더더욱 부담이 되었다.
하지만, 백엔드 팀원중에 수정님께서 너무나도 감사하게 설명해주시고 틈틈히 공유를 해주셔서 많이 배우면서 할 수 있었다.
이번 프로젝트를 진행하면서, 데이터 분석과 기획이 너무나도 어렵게 느껴졌고, 나같은 경우에는 백엔드의 흐름을 이해하는데에도 어려움이 있었지만,
팀원의 끊임없는 공유와 설명들이 금방 익숙하게 만들어줬고, 코치님께서 기획을 보시고난뒤 AWS와 Sequelize를 사용하면 생기는 장단점을 설명해주시고, 해당 내용을 팀원들과 공유하고 모여서 열심히 찾아보고 공부하다보니 금방 적응할 수 있었다.
중간에 기능이 추가되면서, 프론트엔드분들이 기능구현을 해야하는게 늘었는데, 포기하지않고 배포 마지막날 한시간전까지 최대한 구현하는 모습에 너무나도 감사했다.
이번 프로젝트를 진행하면서, 내가 백엔드 분야의 취업하기에 필요한 것들이 무엇인지, 혼자서 어떠한 기능을 프로젝트처럼 만들어볼지를 정하게 되었고, 현재 이 회고록을 쓰는 시점에도 열심히 백엔드를 공부하고 있다.
데이터분석 프로젝트는 경험이 없어서 어려웠지만, 팀원들로인해 긍정적인 부분을 배우고, 모두가 공통적인 뜻을 바탕으로 프로젝트를 진행하며 서로가 소통을 잘하다보니, 만족스러운 프로젝트였다고 생각한다.
7팀 정말 너무나 감사하고 수고하셨습니다!