์ง๋ณ์ ์๋ฏธํ๋ Disease์์ ๋น์ทํ ๋ฐ์์ธ THISIS๋ก ํ๋ก์ ํธ ์ด๋ฆ์ ์ ํ์์ต๋๋ค. ํ์๋ค๋ผ๋ฆฌ ๋ถ์กฑํ ์ ๋ณด๋ค์ ์ป๊ธฐ ์ํ ๋ชฉ์ ์ ์๋ ์ง๋ณ SNS๋ก์จ ์ญํ ์ ํ๊ธฐ ์ํด ํ๋ก์ ํธ๋ฅผ ์งํํ๊ฒ ๋์์ต๋๋ค. ํ์๊ฐ์ , ๋ก๊ทธ์ธ, ์ ์ ํ๋ก์ฐ ๋ฑ ๋ช ์ธ์ ๊ธฐ๋ฐ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ๋ฐํ์ผ๋ก ํด ์ค์ง์ ์ผ๋ก ์ ์ฉํ ์ง๋ณ ๊ด๋ฆฌ SNS๋ฅผ ์ถ๊ตฌํฉ๋๋ค.
- Git Branch ์ ๋ต
-
master -> develop -> feature/(๊ธฐ๋ฅ ์ด๋ฆ)
- ๊ธฐ๋ฅ ๋จ์๋ก feature ์์ฑ ํ ์์ -> develop์ผ๋ก ๋ณํฉ
- ์์ฑ๋ ๊ธฐ๋ฅ์ ๋ํ feature ๋ธ๋์น๋ ์์ ์๋ฃ ํ ์ญ์
-
Commit Rule : [๋ธ๋์น๋ช ]์ปค๋ฐ ๋ด์ฉ | JIRA์ด์ ID ex)[develop] : [๋ธ๋์น๋ช ] ์ปค๋ฐ ๋ด์ฉ | JIRA์ด์ ID
-
JIRA๋ฒํธ ๋ง์ง๋ง์
-
๋ง์นจํ X
-
์์ด๋ง ์ฌ์ฉ
-
๋ธ๋์น๋ช : ๋ชจ๋ ์๋ฌธ์
-
์ปค๋ฐ๋ด์ฉ : ์ฒซ ๊ธ์๋ง ๋๋ฌธ์, ๋ช ๋ น๋ฌธ ํ์์ผ๋ก ์์ฑ
-
-
-
1์ผ 1 commit
-
1์ฃผ 1 merge request
-
merge ํ ๋ธ๋์น ์ง์ฐ๊ธฐ
Node.js ๋ ์คํ์์ค ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์ ์์ง(์ปดํ์ผ๋ฌ + ์ธํฐํ๋ฆฌํฐ ๋ฑ)
๋ธ๋ผ์ฐ์ ๊ฐ ์๋ ํ๊ฒฝ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
-
node.js ์ค์นํ๊ธฐ (LTS ๋ฒ์ ๊ถ์ฅ)
-
๋ช ๋ น ํ๋กฌํํธ ์ฐฝ์์
node -v
,npm -v
์ ๋ ฅํ์ฌ ์ค์น ํ์ธ
๋น๋ ์๋๊ฐ ๋ณด๋ค ๋น ๋ฅด๊ณ ์ต๊ทผ ํ์ฉ๋๊ฐ ๋๋ค.
-
๋ช ๋ น ํ๋กฌํํธ ์ฐฝ์์
yarn -v
์ ๋ ฅํ์ฌ ์ค์น ํ์ธ
Vue ํ๋ก์ ํธ์ Vue-cli ๋ฅผ ์ด์ฉํ ๊ฒฝ์ฐ Webpack, Eslint, ๊ฐ๋ฐ ์๋ฒ ๋ฑ์ ์ค์ ์ด ์๋์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ฝ๊ฒ ํ๋ก์ ํธ๋ฅผ ์์ํ ์ ์๋ ์ฅ์ ์ด ์๋ค.
-
๋ช ๋ น ํ๋กฌํํธ ์ฐฝ์์
yarn global add @vue/cli
์ ๋ ฅ -
vue --version
์ ๋ ฅํ์ฌ ์ค์น ํ์ธ
(์ฐธ๊ณ ) vue create example
๋ฅผ ์
๋ ฅํ์ฌ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํ ์ ์๋ค.
Webpack์์ Sass ๋ฅผ Css๋ก ์ปดํ์ผํ๊ธฐ ์ํด node-sass ์ sass-loader ๋ฅผ ์ค์นํ๋ค.
yarn add node-sass sass-loader
yarn add vue-router vuex
๊ฐ๋จํ ๊ตฌ์ฑ์ ์ํด Spriong Boot ๋ฅผ ์ด์ฉํ๋ค.
-
Spring ์ฌ์ฉ์ ์ํ JDK ์ค์น
OpenJDK ๊ณต์ ์น์ฌ์ดํธ์์ ์์ถ ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ๊ณ ์์ถ ํด์ ํ ํด๋น ๊ฒฝ๋ก๋ฅผ ๊ธฐ์ตํ๋ค.
-
ํ๊ฒฝ ๋ณ์ ์ค์
[๋ด ์ปดํจํฐ - ์์ฑ] -> [๊ณ ๊ธ ์์คํ ์ค์ ] -> [ํ๊ฒฝ ๋ณ์] -> [์๋ก ๋ง๋ค๊ธฐ]
- ๋ณ์ ์ด๋ฆ:
JAVA_HOME
- ๋ณ์ ๊ฐ:
{ํด๋น ๊ฒฝ๋ก}
Path ํธ์ง -> ๋ณ์ ๊ฐ์
%JAVA_HOME%\bin
์ถ๊ฐ - ๋ณ์ ์ด๋ฆ:
-
๋ช ๋ น ํ๋กฌํํธ ->
java -version
์ค์น ํ์ธ -
ํ๊ฒฝ ๋ณ์ ์ค์
- ๋ณ์ ์ด๋ฆ:
MAVEN_HOME
- ๋ณ์ ๊ฐ:
{ํด๋น ๊ฒฝ๋ก}
Path ํธ์ง -> ๋ณ์ ๊ฐ์
%MAVEN_HOME%\bin
์ถ๊ฐ - ๋ณ์ ์ด๋ฆ:
-
๋ช ๋ น ํ๋กฌํํธ ->
mvn -v
์ค์น ํ์ธ -
VScode ์ค์น
- Spring Boot Extension Pack ์ค์น
- ctrl + shift + P -> Spring Initializer:Generate Maven Project ์คํ
- Project Language: Java
- Spring Boot Version: 2.2.2
- Dependency: Lombok, Spring Web ์ ํ
-
Docker ์ค์น
-
๋ช ๋ น ํ๋กฌํํธ
Docker -v
์ค์น ํ์ธ -
์ธ์คํด์ค ์์ฑ:
docker run --name {db์ด๋ฆ} -p {port}:{port} -e MYSQL_ROOT_PASSWORD={password} -d mariadb
-
์ธ์คํด์ค ์คํ:
docker exec -it {db์ด๋ฆ} mysql -u root -p
-
docker exec -i {db์ด๋ฆ} mysql -uroot -p{password} --database={schema ์ด๋ฆ} < {OOO.sql}
-
MariaDB ์ฐ๊ฒฐ
-
pom.xml ์ ์๋ ๊ตฌ๋ฌธ ์ถ๊ฐ
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
-
application.properties ์ ์๋ ๊ตฌ๋ฌธ ์ถ๊ฐ
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/{DB๋ช }?autoReconnect=true&useUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password={๋น๋ฐ๋ฒํธ}
-
๋์ปค๋ฅผ ์ฌ์ฉํ์ฌ MariaDB ์ธ์คํด์ค ์์ฑ
Intellij๋ฅผ ์ฌ์ฉํด BackEnd ์์
VS CODE ์ฌ์ฉํ์ฌ FrontEnd ์์
๋ช ๋ น์ด | ๋ด์ฉ |
---|---|
๋ฒ์ ํ์ธ | Docker -v |
์ธ์คํด์ค ์์ฑ | docker run --name {db์ด๋ฆ} -p {port}:{port} -e MYSQL_ROOT_PASSWORD={password} -d mariadb |
์ธ์คํด์ค ์คํ | docker exec -it {db์ด๋ฆ} mysql -u root -p |
- ๋ช ๋ น์ด๋ Node.js์ Vue.js๊ฐ ์ค์น๋์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค
๋ช ๋ น์ด | ๋ด์ฉ |
---|---|
yarn install | Node Modules์ ์๋ ๋ด์ฉ๋ค install |
yarn serve --port 3000 | port๋ฒํธ 3000์์ ๋ก์ปฌ ์๋ฒ ์คํ |
๋ช ๋ น์ด | ๋ด์ฉ |
---|---|
ssh -i I3A301T.pem [email protected] | ํค I3A301T.pem์ ๊ฐ์ง๊ณ AWS ์๋ฒ์ ์ ์ |
sudo java -jar test/THISIS-0.0.3.jar | AWS ์๋ฒ ๋ด๋ถ์์ ์คํ๋ง ์๋ฒ ์คํ |
(backend ํด๋์์) mvn package | ๋ฐฑ์๋ ์คํ๋ง ์๋ฒ ๋น๋ |
pm2 restart War2 | ์๋ฒ์ ๋ฐฑ์๋ ๋น๋ ํ์ผ ๋ฐ์ |
(frontend ํด๋์์) npm run buile | ํ๋ก ํธ์๋ ๋ทฐ ๋ฐฐํฌ |
create table UserInfo(
user_id int primary key auto_increment,
username varchar(45),
nickname varchar(45) ,
email varchar(45) ,
password varchar(45),
introduction varchar(200)
);
drop table IF EXISTS `THISIS`.`auth`;
CREATE TABLE `THISIS`.`auth` (
`user_id` INT NOT NULL,
`refresh_token` VARCHAR(500) NULL,
`access_token` VARCHAR(500) NULL,
PRIMARY KEY (`user_id`))
ENGINE = InnoDB;
create table notification(
`id` int primary key auto_increment,
`follower_id` int,
`followee_id` int,
`newtofollower` int,
`newtofollowee` int,
`approval` int,
`time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS `THISIS`.`posts` (
`posts_id` INT NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL,
`posts_title` TEXT NULL,
`posts_main` TEXT NULL,
`health_count` INT NULL,
`notification_id` VARCHAR(45) NULL,
`post_date` DATETIME DEFAULT CURRENT_TIMESTAMP,
`nickname` VARCHAR(20) NULL,
PRIMARY KEY (`posts_id`))
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `THISIS`.`comment` (
`user_id` INT NOT NULL,
`posts_id` INT NOT NULL,
`user_nickname` VARCHAR(45) NULL,
`comment_main` TEXT NULL,
`hide` TINYINT(1) NULL,
`comment_id` INT NOT NULL AUTO_INCREMENT,
`comment_date` DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`comment_id`))
ENGINE = InnoDB
COMMENT = ' ';
drop table IF EXISTS `THISIS`.`followers_following` ;
CREATE TABLE IF NOT EXISTS `THISIS`.`followers_following` (
`follower` INT NOT NULL,
`followee` INT NOT NULL,
PRIMARY KEY (`follower`, `followee`))
ENGINE = InnoDB;
drop table IF EXISTS `THISIS`.`health` ;
CREATE TABLE IF NOT EXISTS `THISIS`.`health` (
`posts_id` INT NOT NULL,
`user_id` INT NOT NULL,
`nickname` VARCHAR(20) NULL,
PRIMARY KEY (`posts_id`, `user_id`))
ENGINE = InnoDB;
drop table IF EXISTS `THISIS`.`scrap` ;
CREATE TABLE IF NOT EXISTS `THISIS`.`scrap` (
`user_id` INT NOT NULL,
`posts_id` INT NOT NULL,
PRIMARY KEY (`user_id`, `posts_id`),
CONSTRAINT `fk_scrap_userinfo1`
FOREIGN KEY (`user_id`)
REFERENCES `THISIS`.`Userinfo` (`user_id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_scrap_posts`
FOREIGN KEY (`posts_id`)
REFERENCES `THISIS`.`posts` (`posts_id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;
Task | URL | Method | Action |
---|---|---|---|
ํ์์์ธ์ ๋ณด | /account/{user_id} | GET | ํด๋น user_id ํ์ ์ ๋ณด ์กฐํ |
ํ์๊ฐ์ | /account/signup | POST | ํ์ ๊ฐ์ |
๋ก๊ทธ์ธ | /account/login | POST | ๋ก๊ทธ์ธ |
ํ์์ ๋ณด ๋ณ๊ฒฝ | /account/{user_id} | PUT | ํ์์ ๋ณด ๋ณ๊ฒฝ |
ํ์ ํํด | /account/{user_id} | DELETE | ํด๋น user_id ํ์ ์ ๋ณด ์ญ์ |
์ด๋ฉ์ผ ์ค๋ณต ํ ์คํธ | /account/email | GET | ์ด๋ฉ์ผ ์ค๋ณต ์ฌ๋ถ๋ฅผ ํ ์คํธํจ |
๋๋ค์ ์ค๋ณต ํ ์คํธ | /account/nickname | GET | ๋๋ค์ ์ค๋ณต ์ฌ๋ถ๋ฅผ ํ ์คํธํจ |
ํ์ ๊ฒ์ | /account/search | GET | ๊ฒ์์ด์ ํด๋นํ๋ ํ์ ์ ๋ณด๋ฅผ ๊ฒ์ํจ |
๋น๋ฐ๋ฒํธ์ฐพ๊ธฐ | GET | ์ด๋ฉ์ผ๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ์ฐพ์์ค | |
์ ์ฒด ๊ฒ์๊ธ ๋ชฉ๋ก | /articles/ | GET | ์ ์ฒด ๊ฒ์๊ธ ์กฐํ |
๊ฒ์๊ธ ๋ชฉ๋ก | /articles/{user_id} | GET | ๊ทธ ์ ์ ์ ๋ํ ๋ชจ๋ ๊ฒ์๊ธ ๋ชฉ๋ก |
๊ฒ์๊ธ ์์ฑ | /articles | POST | ์๋ก์ด ๊ฒ์๊ธ ์์ฑ |
๊ฒ์๊ธ ์์ | /articles/{posts_id} | PUT | ๊ฒ์๊ธ ๋ด์ฉ ์์ (๊ฒ์๊ธ ์ ๋ชฉ, ๋ด์ฉ๋ง ์์ ๊ฐ๋ฅ) |
๊ฒ์๊ธ ์ญ์ | /articles/{posts_id} | DELETE | ์์ฑ์๊ฐ ์์ ์ ๊ฒ์๊ธ ์ญ์ |
๋๊ธ ๋ชฉ๋ก | /comment/{post_id} | GET | ๊ฒ์๊ธ์ ํด๋นํ๋ ๋๊ธ๋ค ๋ชฉ๋ก |
๋๊ธ ์์ฑ | /comment | POST | ๋๊ธ์ ์์ฑํจ |
๋๊ธ ์์ | /comment/{comment_id} | PUT | ํด๋น ๋๊ธ์ ์์ ํจ |
๋๊ธ ์ญ์ | /comment/{comment_id} | DELETE | ํด๋น ๋๊ธ์ ์ญ์ ํจ |
๋๊ธ ์จ๊น | /comment/hidden/{comment_id} | PUT | ๊ฒ์๊ธ ์์ฑ์๊ฐ ์์ฒญ ์ ๋๊ธ ์จ๊น |
ํ๋ก์ ๋ฆฌ์คํธ | /follow/followee/{user_id} | GET | ์ ์ ๊ฐ ํ๋ก์ํ๋ ๋ฆฌ์คํธ๋ฅผ ๋ ธ์ถ |
ํ๋ก์ ๋ฆฌ์คํธ | /follow/follower/{user_id} | GET | ์ ์ ๋ฅผ ํ๋ก์ํ๋ ๋ฆฌ์คํธ๋ฅผ ๋ ธ์ถ |
ํ๋ก์ ์ ์ง๊ณ | /follow/followee/sum/{user_id} | GET | ํด๋น user_id๊ฐ ํ๋ก์ฐํ๋ ์ด ํ๋ก์ ์ ์กฐํ |
ํ๋ก์ ์ ์ง๊ณ | /follow/follower/sum/{user_id} | GET | ํด๋น user_id๋ฅผ ํ๋ก์ฐํ๋ ์ด ํ๋ก์ ์ ์กฐํ |
ํ๋ก์/ํ๋ก์ ์ ์ฅ | /follow | POST | ํ๋ก์ฐ ํ๋ก์ ๊ด๊ณ ์ ์ฅ |
ํ๋ก์/ํ๋ก์ ์ญ์ (์ธํ) | /follow | DELETE | ํ๋ก์ฐ ํ๋ก์ ๊ด๊ณ ์ญ์ |
์ ์ ์ด ๊ฑด๊ฐํด์ ์ ์กฐํ | health/user/{user_id} | GET | ํ๋กํ์ ๋์ค๋ user ์ด ์ข์์ ์ ์ง๊ณ |
๊ฑด๊ฐํด์ ์ทจ์ | health/{posts_id}/{user_id} | DELETE | ์ ์ ๊ฐ ๊ฑด๊ฐํด์๋ฅผ ์ทจ์ํ์๋ record ์ญ์ |
์คํฌ๋ฉ ์กฐํ | scrap/{user_id} | GET | ์ ์ ์์ด๋์ ํด๋นํ๋ ์คํฌ๋ฉ ์กฐํ |
์คํฌ๋ฉ ์์ฑ | scrap | POST | ์คํฌ๋ฉ ์์ฑ |
์คํฌ๋ฉ ์ญ์ | scrap/{posts_id, user_id} | DELETE | ํด๋น ์คํฌ๋ฉ ์ญ์ |
latestโ | latestโ | latestโ |
๋ก๋ฉ ํ๋ฉด - ๋ก๊ทธ์ธ์ผ๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ์ฒ์์ผ๋ก ๋ณด์ฌ์ฃผ๋ ํ์ด์ง
๋ก๊ทธ์ธ ํ๋ฉด - ์ ์ฅ๋ ๊ณ์ ์ ๊ฐ์ง๊ณ ์ด๋ฉ์ผ๊ณผ ํจ์ค์๋๋ฅผ ์ ๋ ฅ๋ฐ๋ ํ์ด์ง
๊ฒ์ ํ๋ฉด - ์ฌ์ฉ์์ ์ง๋ณ์ ๊ฒ์ํ ์ ์๋ ํ๋ฉด์ผ๋ก ๋๋ฅผ ์ ์๋๋ฐฉ ํ๋กํ์ ๋ค์ด๊ฐ์ง
๋ฉ์ธ ํผ๋ - ๋ฉ์ธ ํ๋ฉด์ผ๋ก ๋ชจ๋ ๊ฒ์๊ธ๋ค์ ๋ณด์ฌ์ฃผ๋ ํ๋ฉด์ผ๋ก ๊ฑด๊ฐํด์, ๋๊ธ, ์คํฌ๋ฉ, (์์ ์ ๊ฒ์๊ธ์ผ ๊ฒฝ์ฐ) ์์ ๊ฐ๋ฅ
๊ฒ์๊ธ ์์ฑ - ๊ฒ์๊ธ์ ์์ฑํ ์ ์๋ ํ๋ฉด์ผ๋ก ์์ ์ ๊ณ์ ์ผ๋ก ์์ฑํ๋ค
์๋ฆผ ์์ฒญ - ํ๋ก์์ ํ์ ๊ฒฝ์ฐ & ํ๋ก์ ๊ฒฐ๊ณผ๋ฅผ ์๋ ค์ค ๋ ์๋์์ ํ๋ก์์ ๋ฐ์์ ๋๋ ์์ฒญํญ์ผ๋ก ์์ฒญ์ด ์์ ์น๋ ํน์ ๊ฑฐ์ ์ ๊ฒฐ์ ํ ์ ์๋ค
๋ฉ์ธ ํ๋กํ ํ๋ฉด - ๋ฉ์ธ ํ๋กํ ํ๋ฉด์ผ๋ก ๋ด ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ ํ๋ฉด์ผ๋ก ๋ด๊ฐ ์ด ๊ฒ์๊ธ, ๋์ ์คํฌ๋ฉ ๋ฑ๋ ๋ณผ ์ ์๋ค.
- ํ๋ก์ ํธ๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ ์ฌ๋๋ค์ ์์ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ฌธ์๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ์คํํด์ผํ๋ ์คํฌ๋ฆฝํธ ๋ ์ค์ ํด์ผ ํ ํ๊ฒฝ ๋ณ์๊ฐ ์์ ์ ์์ต๋๋ค.
- ์ด ๋จ๊ณ๋ฅผ ๋ช ์์ ์ผ๋ก ์์ฑํ์ญ์์ค.
- AWS ์๋ฒ์ ์๋ ์ ๋ฌด๋ฅผ ํ์ธํ์ญ์์ค.
- git pull origin develop๋ฅผ ํตํด develop์ ๋จผ์ merge ํ ์ํ๋ก ์งํํฉ๋๋ค.
- git status๋ฅผ ํตํด ๋ณ๊ฒฝ ๋ ์ ์ ํ์ธํฉ๋๋ค
- git add ๋ฅผ ํตํด์ ๋ณ๊ฒฝ์ ์ฃผ๊ณ ์ถ์ ์ ์ ์งํํฉ๋๋ค.
- git commit -m "์ง๋ผ๋ฒํธ" ๋ฅผ ํตํด์ ๊ฐ ์ง๋ผ์ ๋ฑ๋ก์ ํด์ ์ปค๋ฐํฉ๋๋ค.
- git push origin feature/"๊ฐ๋ฐ ๊ธฐ๋ฅ"๋ฅผ ํตํด์ ๊ธฐ๋ฅ๊ธฐ๋ฆฌ ๊ฒน์น์ง ์๊ฒ ์ํํฉ๋๋ค.
- git bash์์ merge request๋ฅผ ์ ์ฒญํฉ๋๋ค.
๋ณธ ๊ฐ์ด๋๋ MIT ๋ผ์ด์ ์ค ํ์ ๊ณต๊ฐํฉ๋๋ค
- ๊ณต์ - ๋ณต์ , ๋ฐฐํฌ, ํฌ๋งท ๋ณ๊ฒฝ, ์ ์ก, ์ ์, ๊ณต์ฐ, ๋ฐฉ์กํ ์ ์์ต๋๋ค.
- ๋ณ๊ฒฝ - ๋ฆฌ๋ฏน์ค, ๋ณํ, 2์ฐจ์ ์ ์๋ฌผ ์์ฑ ๋ฐ ์๋ฆฌ๋ชฉ์ ์ ์ด์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.