본문 바로가기

개발 일지

[TIL]이노베이션 캠프 22일차

Spring 입문 주차 8.19(금) ~ 8.25(목)

1. 개인 과제: 회원가입, 로그인, 댓글 작성/수정/삭제 기능이 추가된 백엔드 서버 만들기 - 로그인 JWT 활용
2. 팀 과제: Spring 핵심 키워드 정리

 

진행 계획

- 19일(금) Spring 핵심 키워드 정리

- 20일(토) Spring 핵심 키워드 정리

- 21일(일) 개인과제에 필요한 강의 수강 및 공부

- 22일(월) API 명세서 작성, ERD 만들기

- 23일(화) 회원가입 기능 코드 작성

- 24일(수) 로그인 기능 코드 작성

- 25일(목) 댓글 작성/수정/삭제 기능 코드 작성 및 AWS 배포

 

 

1. 개인 과제 진행 상황

1) 요구사항 파악

기존 요구사항(추가된 부분 하이라이트)

  1. 전체 게시글 목록 조회 API
    • 제목, 작성자명, 작성 날짜를 조회하기
    • 작성 날짜 기준으로 내림차순 정렬하기
    • AccessToken이 없어도 조회 가능하게 하기
  2. 게시글 작성 API
    • AccessToken이 있고, 유효한 Token일 때(== 로그인 상태일 때)만 작성 가능하게 하기
    • 제목 작성 내용을 입력하기
  3. 게시글 조회 API
    • 제목, 작성자명, 작성 날짜, 작성 내용을 조회하기
    • AccessToken이 없어도 조회 가능하게 하기
  4. 게시글 수정 API
    • AccessToken이 있고, 유효한 Token이면서 해당 게시글 작성자만 수정 가능하게 하기
    • 제목, 작성자명, 작성 내용을 수정되게 하기
  5. 게시글 삭제 API
    • AccessToken이 있고, 유효한 Token이면서 해당 게시글 작성자만 삭제 가능하게 하기
    • 글과 댓글이 함께 삭제되게 하기

 

새로운 요구사항

  1. 회원 가입 API
    • 닉네임, 비밀번호, 비밀번호 확인을 request에서 전달받기
    • 닉네임은 최소 4자 이상, 12자 이하 알파벳 대소문자(a~z, A~Z), 숫자(0~9)로 구성하기
    • 비밀번호는 최소 4자 이상이며, 32자 이하 알파벳 소문자(a~z), 숫자(0~9) 로 구성하기
    • 비밀번호 확인은 비밀번호와 정확하게 일치하기
  2. 로그인 API
  3. 로그인 검사
    • 아래 API를 제외하고 모두 AccessToken, RefreshToken을 전달한 경우만 정상 response를 전달받을 수 있도록 하기
      • 회원가입 API
      • 로그인 API
      • 게시글 목록 조회 API
      • 게시글 조회 API
      • 댓글 목록 조회 API
    • cf. Authorization에 담긴 AccessToken으로 사용자 판단
  4. 댓글 목록 조회 API
    • AccessToken이 없어도 댓글 목록 조회가 가능하도록 하기
    • 조회하는 게시글에 작성된 모든 댓글을 response에 포함하기
  5. 댓글 작성 API
    • AccessToken이 있고, 유효한 Token일 때만 댓글 작성이 가능하도록 하기
  6. 댓글 수정 API
    • AccessToken이 있고, 유효한 Token이면서 해당 사용자가 작성한 댓글만 수정 가능하도록 하기
  7. 댓글 삭제 API
    • AccessToken이 있고, 유효한 Token이면서 해당 사용자가 작성한 댓글만 삭제 가능하도록 하기
  8. 예외 처리
    • Refresh Token을 전달하지 않거나 정상 토큰이 아닐 때는 "Token이 유효하지 않습니다." 라는 에러 메세지를 response에 포함하기
    • 데이터베이스에 존재하는 닉네임을 입력한 채 회원가입 버튼을 누른 경우 "중복된 닉네임입니다." 라는 에러메세지를 response에 포함하기
    • 비밀번호와 비밀번호 확인 값이 일치하지 않을 때 “비밀번호와 비밀번호 확인이 일치하지 않습니다.” 라는 에러 메세지를 resonse에 포함하기
    • 로그인 시, 전달된 닉네임과 비밀번호 중 맞지 않는 정보가 있다면 "사용자를 찾을 수 없습니다."라는 에러 메세지를 response에 포함하기
    • AccessToken이 있고, 유효한 Token이면서 해당 사용자가 작성한 게시글/댓글이 아닌 경우에는 “작성자만 삭제할 수 있습니다.”라는 에러 메세지를 response에 포함하기

 

2) ERD 만들기

 

3) DB SQL (ERDCloud -> 내보내기 -> sql 미리보기)

CREATE TABLE `users` (
	`id`	NOT NULL	NOT NULL,
	`nickname`	NOT NULL	NULL,
	`password`	NOT NULL	NULL,
	`createdAt`	NOT NULL	NULL,
	`modifiedAt`	NOT NULL	NULL
);

CREATE TABLE `post` (
	`id`	NOT NULL	NOT NULL,
	`userId`	NOT NULL	NOT NULL,
	`title`	NOT NULL	NULL,
	`content`	NOT NULL	NULL,
	`createdAt`	NOT NULL	NULL,
	`modifiedAt`	NOT NULL	NULL
);

CREATE TABLE `comment` (
	`id`	NOT NULL	NOT NULL,
	`postId`	NOT NULL	NOT NULL,
	`userId`	NOT NULL	NOT NULL,
	`content`	NOT NULL	NULL,
	`createdAt`	NOT NULL	NULL,
	`modifiedAt`	NOT NULL	NULL
);

ALTER TABLE `users` ADD CONSTRAINT `PK_USERS` PRIMARY KEY (
	`id`
);

ALTER TABLE `post` ADD CONSTRAINT `PK_POST` PRIMARY KEY (
	`id`
);

ALTER TABLE `comment` ADD CONSTRAINT `PK_COMMENT` PRIMARY KEY (
	`id`
);

ALTER TABLE `post` ADD CONSTRAINT `FK_users_TO_post_1` FOREIGN KEY (
	`userId`
)
REFERENCES `users` (
	`id`
);

ALTER TABLE `comment` ADD CONSTRAINT `FK_post_TO_comment_1` FOREIGN KEY (
	`postId`
)
REFERENCES `post` (
	`id`
);

ALTER TABLE `comment` ADD CONSTRAINT `FK_users_TO_comment_1` FOREIGN KEY (
	`userId`
)
REFERENCES `users` (
	`id`
);

 

 

4) API 작성

기능 API URL Method request response
회원가입 /api/member/signup POST {
"nickname" : "닉네임",
"password" : "비번",
"passwordConfirm" : "비번" 
}
{
"success" : "true",
"data" : {
"id" : 1,
"nickname" : "닉네임",
"createdAt" : "생성시간",
"modifiedAt" : "수정시간"
},
"error" : "null"
}
로그인 /api/member/login POST {
"nickname" : "닉네임",
"password" : "비번"
}
{
"success" : "true",
"data" : {
"id" : 1,
"nickname" : "닉네임",
"createdAt" : "생성시간",
"modifiedAt" : "수정시간"
},
"error" : "null"
}
게시글 작성 /api/auth/post POST {
"title" : "제목",
"content": "내용"
}
{
"success" : "true",
"data" : {
"id" : 1,
"title" : "제목",
"content": "내용"
"nickname" : "닉네임",
"createdAt" : "생성시간",
"modifiedAt" : "수정시간"
},
"error" : "null"
}
게시글 전체 조회 /api/post GET   {
"success" : "true",
"data" : [{
"id" : 1,
"title" : "제목",
"content": "내용"
"nickname" : "닉네임",
"createdAt" : "생성시간",
"modifiedAt" : "수정시간"
},
{
"id" : 2,
"title" : "제목",
"content": "내용"
"nickname" : "닉네임",
"createdAt" : "생성시간",
"modifiedAt" : "수정시간"
}],
"error" : "null"
}
게시글 상세 조회 /api/post/{id} GET   {
"success" : "true",
"data" : {
"id" : 1,
"title" : "제목",
"content": "내용"
"nickname" : "닉네임",
"createdAt" : "생성시간",
"modifiedAt" : "수정시간"
},
"error" : "null"
}
게시글 수정 /api/auth/post/{id} PUT {
"title" : "제목",
"content": "내용"
}
{
"success" : "true",
"data" : {
"id" : 1,
"title" : "수정제목",
"content": "수정내용"
"nickname" : "닉네임",
"createdAt" : "생성시간",
"modifiedAt" : "수정시간"
},
"error" : "null"
}
게시글 삭제 /api/auth/post/{id} DELETE   {
"success" : "true",
"data" : "success",
"error" : "null"
}
댓글 생성 /api/auth/comment POST {
"postId" : 1,
"comment" : "댓글 내용"
}
{
"success" : "true",
"data" : {
"id" : 1,
"nickname" : "닉네임",
"comment" : "댓글내용",
"createdAt" : "생성시간",
"modfiedAt" : "수정시간"
},
"error" : "null"
}
댓글 목록 조회 /api/comment/{id} GET   {
"success" : "true",
"data" : [{
"id" : 1,
"nickname" : "닉네임",
"comment" : "댓글 내용",
"createdAt" : "생성시간",
"modfiedAt" : "수정시간"
},
{
"id" : 2,
"nickname" : "닉네임",
"comment" : "댓글 내용",
"createdAt" : "생성시간",
"modfiedAt" : "수정시간"
}],
"error" : "null"
}
댓글 수정 /api/auth/comment/{id} PUT {
"postId" : 1,
"comment" : "댓글 내용"
}
{
"success" : "true",
"data" : {
"id" : 1,
"nickname" : "닉네임",
"comment" : "수정 댓글 ",
"createdAt" : "생성시간",
"modfiedAt" : "수정시간"
},
"error" : "null"
}
댓글 삭제 /api/auth/comment/{id} DELETE   {
"success" : "true",
"data" : "success",
"error" : "null"
}

 

 

2. 오늘 한 일 / 회고

- 개인 과제: ERD 작성, API 작성

- 스프링 강의 듣기

 

3. TO-DO LIST

- 스프링 강의

- 개인 과제: 회원가입 코드 작성하기