Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Latest commit

 

History

1,632 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

1. IMFINE 아임파인 소개


1-1 IMFINE 의미

서비스를 사용하면서 이제 괜찮아졌다는 말을 할 수 있기를 바라는 회복의 뜻을 담아 아임파인이라는 서비스를 기획하였습니다.

서비스 기능
1. 질병을 보유한 사람, 수술을 마친 사람들이 이용한다.
2. 매일 컨디션을 기록하고, 증상 추이를 확인할 수 있다.
3. 일기를 쓰고, 서로 정보와 감정을 공유할 수 있다.

1-2 프로젝트 상세

프로젝트 진행 기간 : 2023년 1월 3일 ~ 2월 17일 (총 7주)

팀원소개

member.PNG

2. 개발 환경


2-1. 환경 설정


Front-End

- React 18.2.0
- Node 18.2.1
- React Router Dom 6.7.0
- Redux 8.0.5
- Styled-components 5.3.6

Back-End

- java 11  
- Spring boot 2.5.6
- Spring Security
- Spring boot Mail 
- Lombook
- Spring Data JPA
- Mariadb
- redis

Server

- AWS EC2
- AWS S3
- AWS comprehend
- NGINX 1.15-alpine
- letsencrypt certbot 0.40.0
- docker 20.10.12

2-2 사용 기술스택


member

2-3 서비스 아키텍처


architecture.PNG

3. 서비스 실행 방법


  1. git clone

git clone https://lab.ssafy.com/s08-webmobile2-sub2/S08P12A809.git
  1. nginx 설치 및 설정

sudo apt-get install nginx
sudo nginx -v #설치 확인
sudo systemctl stop nginx
cd /etc/nginx/sites-available # nginx 설정파일을 작성할 위치로 이동

2-1 nginx 서버 설정파일 작성


# deploy-test.conf
server {
        # 프론트 연결(포트 번호는 본인의 프론트 포트번호를 입력)
        location /{
                proxy_pass http://localhost:3000;
        }

        # 백엔드 연결(포트 번호는 본인의 백엔드 포트번호를 입력)
        location /api {
                proxy_pass http://localhost:8080/api;
        }
        location /images {
                alias /home/ubuntu/resource;
        }

        location /api/sse {
								proxy_pass http://localhost:8080/api/sse;
                proxy_http_version 1.1; 
                proxy_set_header Connection 'keep-alive';
                chunked_transfer_encoding off;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_read_timeout 35s;
                proxy_buffering off;

        }

    listen 443 ssl; # managed by Certbot
    # 도메인 이름을 써줘야함 i8a809.p.ssafy.io
    ssl_certificate /etc/letsencrypt/live/i8a809.p.ssafy.io/fullchain.pem; # managed by Certbot
    # 도메인 이름을 써줘야함
    ssl_certificate_key /etc/letsencrypt/live/i8a809.p.ssafy.io/privkey.pem; # managed by Certbot
    # include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    # ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    # 도메인 이름을 입력
    if ($host = [사용할 도메인]) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

        listen 80;
        server_name [사용할 도메인];
    return 404; # managed by Certbot
}

2-2 파일연동


# 설정파일이 작성된 폴더에서 실행할 명령어
sudo ln -s /etc/nginx/sites-available/[파일명].conf /etc/nginx/sites-enalable/[파일명].conf
sudo systemctl restart nginx
  1. 도커 설치 및 도커컴포즈 설치


  2. Dockerfile 및 docker-compose.yml 작성


[계정의 clone받은 위치 디렉토리]/S08P12A809/back/imfine/Dockerfile

Dockerfile

FROM openjdk:11-jdk-slim

ARG JAR_FILE=build/libs/*SNAPSHOT.jar

COPY ${JAR_FILE} app.jar

EXPOSE 8080

CMD ["java", "-jar", "-Duser.timezone=Asia/Seoul", "app.jar"]

어플리케이션, 도커 이미지 빌드

cd [계정의 clone받은 위치 디렉토리]/S08P12A809/back/imfine #빌드할 위치로 이동
./gradlew clean build # 빌드
docker build -t imfine-back # 이미지 생성

프론트 엔드 도커파일

# Use a base image with Node.js and npm installed
FROM node:18.12.1 as build

# Set the working directory
WORKDIR /app

# Copy the project files
COPY . .

# Install project dependencies
RUN npm install

# Build the project
RUN npm run build

# Use a base image with Nginx
FROM nginx

# Copy the build artifacts from the build stage
COPY --from=build /app/build /usr/share/nginx/html

# Set the Nginx default configuration
COPY nginx.conf /etc/nginx/conf.d/default.conf

# Expose the default Nginx port
EXPOSE 3000

# Start Nginx
CMD ["nginx", "-g", "daemon off;"]

리액트 프로젝트, 도커 이미지 빌드

cd [계정의 clone받은 위치 디렉토리]/dev-front/S08P12A809/front
docker build -t imfine-front .

docker-compose.yml

version: "3.2"
services:
  front:
    container_name: imfine-front # 프론트엔드 서버 컨테이너 이름
    image: imfine-front #프론트엔드 서버 이미지 이름
    volumes:
      - /etc/localtime:/etc/localtime
    ports:
      - [프론트앤드 서버 포트번호]:[도커 내의 포트번호]

  back:
    container_name: imfine-back # 백엔드 서버 컨테이너 이름
    image: imfine-back # 백엔드 서버 이미지 이름
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mariadb://[MariaDB 컨테이너 이름]:[도커에서 연동할 포트번호]/imfine
      - SPRING_DATASOURCE_USERNAME=[MariaDB 계정이름]
      - SPRING_DATASOURCE_PASSWORD=[계정의 비밀번호]
    ports:
      - [백엔드 서버 포트번호]:[도커 내의 포트번호]
    volumes:
      - [연동할 실제 위치]:/home/resource
      - /etc/localtime:/etc/localtime
    depends_on:
      - [MariaDB 컨테이너 이름]
      - [redis 컨테이너 이름]

  mariadb:
    container_name: [MariaDB 컨테이너 이름]
    image: mariadb
    volumes:
      - [연동할 실제 위치]:/var/lib/mysql
      - /etc/localtime:/etc/localtime
    environment:
      - MYSQL_DATABASE=[DB이름]
      - MYSQL_ROOT_PASSWORD=[계정의 비밀번호]
    ports:
      - [port]:3306

  redis:
    container_name: [redis 컨테이너 이름]
    image: redis
    volumes:
      - [연동할 실제 위치]:/data
      - /etc/localtime:/etc/localtime
    ports:
      - [port]:6379

도커 컴포즈 설정파일로 서버 올리기

cd [도커 컴포즈 파일이 위치한 경로]
docker-compose up # 해당 터미널 포그라운드에서 실행 이거 아니면
docker-compose up -d # 백그라운드로 실행

4. 주요기능

회원가입 및 로그인

  • JWT 토큰 기반 구현

  • 타이핑할 때마다 자동으로 중복 체크 가능

  • 이메일 유효여부 검사 및 인증을 통해 가입

  • 계정 공개 여부 및 관심 질병 선택이 가능

  • 간단한 온보딩 페이지를 거치면 가입 완료

하단 탭별 페이지 및 기능

  • 일기 메인 페이지

    • 팔로우한 유저, 구독한 일기장, 내가 쓴 일기 모아보기

    • 내가 쓴 일기나, 팔로우, 구독한 일기장들의 일기들이 최신순으로 정렬된다.

    • 무한 스크롤을 통해 피드 게시물을 끊김없이 볼 수 있다.

  • 일기장 피드

    • 일기장 목록을 최신순, 인기순으로 정렬하여 확인할 수 있다.

    • 개별 일기장에는 해당 일기장에 작성된 일기의 개수와 유저들이 해당 일기장을 구독한 수가 표시된다.

    • 공개된 일기장은 클릭하여 상세페이지를 확인할 수 있다.

    • 질병/수술 또는 증상으로 필터링할 수 있다.

    • 필터링 결과 또한 최신순, 인기순으로 정렬하여 확인할 수 있다.

  • 오늘의 컨디션 체크

    • 매일 그 날의 컨디션을 10가지 기준으로 기록할 수 있다.

    • 등록한 컨디션은 동기처리되어 내 프로필, 하단탭, 내가 오늘 쓴 일기에 반영된다.

    • 컨디션은 매일 자정 리셋된다.

    • 프로필 페이지 및 일기장 상세 페이지의 달력에서 일자별로 기록된 컨디션을 볼 수 있다.

  • 대나무숲 피드

    • 24시간이면 사라지는 대나무숲 기능으로, 익명성이 보장된다.

  • 프로필 페이지

    • 유저의 당일 컨디션과 닉네임, 공개 여부, 팔로잉과 팔로워 수를 확인할 수 있다.

    • 프로필 페이지 또는 팔로우 목록 페이지에서 유저를 팔로우할 수 있다.

    • 이때 비공개 유저에게 팔로우 신청을 하면 해당 유저가 수락했을 때 팔로우된다.

    • 내 팔로워가 더 이상 나를 팔로우하지 않도록 할 수 있다.

    • 유저의 한 달간의 컨디션 달력, 유저가 작성한 일기장, 유저가 구독한 일기장을 탭으로 확인할 수 있다.

    • 프로필 페이지에서는 달력의 선택한 날짜에 작성된 모든 일기가 하단에 표시된다.

  • 프로필 수정

    • 프로필 수정 페이지에서 닉네임, 관심 질병/증상 정보 또는 계정 공개 여부를 변경할 수 있다.

일기장

  • 일기장 생성 및 수정

    • 메인 피드, 일기장 피드 등에서 Floating 버튼을 클릭하여 새 일기장을 생성할 수 있다.

    • 일기장마다 한 가지 질병 또는 수술을 선택하고, 여러 개의 증상을 선택할 수 있다.

    • 유저가 보유한 질병 또는 수술에 따라 여러 개의 일기장을 생성할 수 있다.

    • 일기장 수정 페이지에서 일기장 제목, 설명, 공개 여부를 수정할 수 있다.

    • 해당 일기장의 증상을 추가 또는 삭제가 가능하다.

    • 일기장을 삭제할 수 있다.

  • 일기장 상세

    • 해당 일기장의 상세 정보가 표시된다.

    • 일기장을 구독하거나 신고할 수 있다.

    • 일기장을 구독하면 해당 일기장의 일기가 메인 피드에 표시된다.

    • 내 일기장이라면 일기장 수정이 가능하고, 해당 일기장의 특정 일자에 일기를 작성할 수 있다.

    • 일기장에 기록된 주간, 월간별 증상 추이 그래프를 확인할 수 있고, 일자별 일기를 확인할 수 있다.

  • 일기 상세

    • 일기 내용을 바탕으로 감정을 분석하고 그 결과를 통해 감정에 맞는 음악이 재생된다. (음악 자동재생 여부는 프로필에서 설정가능)

    • 일기에는 질병, 증상과 증상의 힘든 정도, 일기 내용, 관련 사진들이 게시된다.

    • 댓글을 통해 유저간에 소통이 가능하다.

    • 일기 및 댓글은 신고가 가능하다

  • 일기 작성

    • 일기를 작성할 때 일기장과 날짜를 선택할 수 있다.
    • 증상을 기록할 수 있고, 사진을 등록하여 게시할 수 있다.

  • 일기 수정

    • 일기가 생성된 이후, 일기 편집 버튼을 통해 일기 내용을 수정 할 수 있다.
    • 증상 점수 수정 및 사진 편집이 가능하다

검색: 일기, 일기장, 유저 검색

  • 검색을 통해 검색어와 관련된 일기, 일기장, 유저를 찾아볼 수 있다.
  • 최근 검색 기록을 확인하고 삭제할 수 있다.

알림

  • 나와 관련된 반응들을 SSE를 이용한 알림을 통해 알려준다.

  • 알림이 오면 상단 내비게이션 바 우측 아이콘의 색깔이 바뀌고, 알림을 확인하면 원복된다.

  • 알림을 선택하여 해당 일기/일기장/대나무 등 게시글로 이동할 수 있다.

계정 설정: 비밀번호 수정하기, 로그아웃, 회원 탈퇴

  • 유저의 프로필 페이지에서 ‘계정 설정하기’를 통해 비밀번호 수정, 로그아웃, 회원 탈퇴를 할 수 있다.

아이디 찾기, 비밀번호 찾기

  • 아이디 찾기는 가입시 사용한 이메일을 통해 로그인 페이지에서 가능하다.

  • 비밀번호 찾기는 로그인 페이지에서 진행할 경우 이메일과 아이디를 입력하여야 하고, 프로필 페이지에서 진행할 경우 기존 비밀번호를 확인하여야 가능하다.

404 페이지

5. 설계문서

erd

Untitled 1

api 명세서 링크

API 설계서 (최종)

와이어프레임, 스토리보드

https://www.figma.com/file/KllyQn87oUHHAm2XVmsPtx/와이어프레임?node-id=0%3A1&t=2fuLepxakIDnBkGB-0

Untitled 2 Untitled 3

About

환자들을 위한 증상 일기 공유 커뮤니티 서비스 - SSAFY 8기 우수 프로젝트🏆

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages