Spring 입문 주차 8.19(금) ~ 8.25(목)
1. 개인 과제: 회원가입, 로그인, 댓글 작성/수정/삭제 기능이 추가된 백엔드 서버 만들기 - 로그인 JWT 활용 2. 팀 과제: Spring 핵심 키워드 정리 |
진행 계획
- 19일(금) Spring 핵심 키워드 정리
- 20일(토) Spring 핵심 키워드 정리
- 21일(일) 개인과제에 필요한 강의 수강 및 공부
- 22일(월) API 명세서 작성, ERD 만들기
- 23일(화) 회원가입 기능 코드 작성
- 24일(수) 로그인 기능 코드 작성
- 25일(목) 댓글 작성/수정/삭제 기능 코드 작성 및 AWS 배포
1. 개발 진행 상황
과제 요구사항 충족 못시키고 제출..ㅠㅠ
2. 개발 중 발생한 이슈와 해결
토큰 문제.. 아직 개념 정리가 안되서 공부 좀 더하고 정리해야할 듯
3. 오늘의 공부(새로 배운것은 아니고..계속 까먹어서 오늘 과제 제출하는 김에 정리)
⭐️ EC2서버 배포를 위한 과정(일지 안에 있어서 찾아보기가 힘들어서 글 작성 따로 함, 관련 에러 생기면 그 글에서 작성 및 해결하기)
1) 배포 파일 빌드(build)
지금까지 만들어온 프로젝트를 배포하기 위해 하나의 파일로 묶는것 -> 배포 파일 빌드
인텔리제이 - 오른쪽 탭 Gradle 클릭 -> Tasks-build-build 더블 클릭
=> 좌측에 build폴더 -> libs- .jar확장자로 끝나는 파일이 생성되면 빌드 완료
2) OpenJDK설치(나는 설치했으니까 앞으로는 생략해도 되겠지..?)
// apt-get은 인덱스를 가지고있음(위치: etc/apt/sources.list)
// 이곳에 저장된 저장소에서 사용할 패키지의 정보를 얻는 것(?) 저장소에 openjdk 받기전에 확인하는 것
sudo apt-update
// 프로젝트 생성할 때 설정했던 자바 버전에 맞춰서 설치(설치되어있으면 안해도됨)
sudo apt-get install openjdk-8-jdk
sudo apt-get install openjdk-11jdk
// java 버전 확인
java -version
• apt-get(Advanced Packaging Tool): 우분투(Ubuntu)를 포함안 데비안(Debian)계열의 리눅스에서 쓰이는 패키지 관리 명령어 도구 • sudo: superuser 권한으로 실행하기 위해서 씀 |
3) AWS EC2 접속하기
keypair 접근 권한 변경
sudo chmod 400 받은키페어를끌어다놓기
chmod: 권한 변경(change mod) 나/그룹/전체 순으로 권한을 나타내고 Read(4) Write(2) execute(1) 숫자들의 합으로 권한을 표시함 👉🏻 400의 의미는 나만 읽을 수있다는 것 |
SSH로 접속하기
ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
// ssh -i /Users/sky/Desktop/sky_key.pem ubuntu@111.111.111.220 이런식으로 나옴
SSH(Secure Shell Protocol) 다른 컴퓨터에 접속할 때 쓰는 프로그램으로 보안이 상대적으로 뛰어남 |
4) Filezilla(파일질라)를 이용해서 배포 파일 업로드
프로토콜: SFTP / HOST: 내 EC2서버 IP / USER: ubuntu / key file: 키파일 위치 |
마우스로 드래그해서 파일을 업로드/다운로드 👉🏻 프로젝트 빌드한 .jar파일을 오른쪽으로 드래그하기 |
⭐️⭐️⭐️⭐️ 매 주마다 스프링부트로 새로운 프로젝트를 올리고있어서 포트는 열려있고, 포트가 이미 사용중이라는 에러를 저번주에 이어 이번주도 본다.. 미리 사용하고있는 포트 죽이고 스프링 부트를 작동시키자 |
1. 8080포트를 누가 쓰고있는지 찾기
lsof -i :8080
// 다른 포트번호 사용이 궁금하면 lsof -i :포트번호 입력하면 됨
2. 위 명령으로 8080포트 사용하고있는 PID를 확인할 수 있음. PID를 써서 포트 죽이기
kill -9 PID입력
// 내 8080포트 사용중인 PID를 넣으면 이런 형식
// kill -9 101681
5) 스프링 부트 작동시키기
java -jar 파일명.jar
// java -jar 입력하고 파일명 몇개 글자만 입력하고 Tap키 누르면 내가 만든 파일이 자동으로 들어옴
6) 웹브라우저에서 IP입력해서 접속해보기
http://내AWS아이피:8080
⭐️ 웹브라우저에서 안열리면 확인하기!
(첫 주에 파이참으로 프로젝트 했을 때는 포트가 8000이였었음)
기본적으로 22번 포트만 열려져있음
AWS에 E2C에서 자체적으로 포트를 열기/닫기를 관리함
-> AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 함
EC2 관리 콘솔 -> 보안그룹(영문: Security Group) -> 보안 그룹-> Edit inbound rules -> 포트 추가하기
접속 확인 후
7) nohup 적용하기
내가 터미널을 꺼도(SSH접속을 꺼도) 계속 서버가 돌아가게끔 하기위해서
// 원격 접속 종료해도 계속 서버가 돌아가게 하기
nohup java -jar JAR파일명.jar &
//서버 종료하기 - 강제종료
// 1. pid 값(프로세스 번호)을 본다
ps -ef | grep java
// 아래 명령어로 특정 프로세스를 죽인다
kill -9 [pid값]
8) 도메인 붙이기
이건 지금 가비아에 설정해놔서 따로 안해도 됨(필요 시 추후에 추가할 것)
n) 개인 과제 코드 관련 질문과 답변
FormLogin을 활용할 때와 활용하지 않을 때 어떤 차이점이 있었나요?
👉🏻 수정의 게시글 id값은 @PathVariable, 수정 할 내용은 @RequestBody를 이용해서 받음
👉🏻 삭제 할 게시글 id를 @PathVariable를 이용해서 받음
처음 설계한 API와 ERD에 변경사항이 있었나요? 변경되었다면 어떤 점 때문일까요? 첫 설계의 중요성에 대해 생각해보세요.
👉🏻 param: id값을 받아서 id값에 관한 기능을 구현하기 위해서 사용
👉🏻 query: 검색, 정렬을 해야 하는 경우 사용
👉🏻 body: 데이터가 많거나, 인수가 길 때, urI에 노출하면 안되는 정보일 경우 사용
Refresh Token을 사용하는 이유가 뭘까요?
👉🏻 요청하는 URI를 보면 직관적으로 어떤 기능에 대한 로직을 처리 할 지 예상 가능하고, 같은 URI이지만 메소드(GET, POST, PUT, DELETE)에 따라 어떤 다른 기능을 함
3번의 이유로 사용한다면, 왜 매번 Access Token과 Refresh Token을 모두 재발급 할까요? 만료 시간과 관련하여 고민/검색 해보세요!
👉🏻 컨트롤러에서 처리할 수 있는 로직은 바로 컨트롤러에서 처리하고, 수정이나 조회가 필요한 부분은 서비스에서 기능이 구현되도록 하였음, 데이터는 리포지토리에서 관리되도록 함, 하지만 컨트롤러는 창구 역할을 하기 때문에 서비스에 구현했어도 좋았을 것 같다.
4. 참고 레퍼런스
https://spartacodingclub.kr/online/spring
https://blog.outsider.ne.kr/346
5. 오늘 한 일 / 회고
- 4주차 과제 제출
6. TO-DO LIST
새로운 과제가 시작되겠지만..
토큰 관련 개념 제대로 잡고 가기..
'개발 일지' 카테고리의 다른 글
[TIL]이노베이션 캠프 27일차 (0) | 2022.08.28 |
---|---|
[TIL]이노베이션 캠프 26일차 (0) | 2022.08.27 |
[TIL]이노베이션 캠프 24일차 (0) | 2022.08.24 |
[TIL]이노베이션 캠프 23일차 (0) | 2022.08.23 |
[TIL]이노베이션 캠프 22일차 (0) | 2022.08.22 |