본문 바로가기

개발 일지

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

 

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서버 배포를 위한 과정(일지 안에 있어서 찾아보기가 힘들어서 글 작성 따로 함, 관련 에러 생기면 그 글에서 작성 및 해결하기)

https://k-sky.tistory.com/62

 

인텔리제이(IntelliJ) 프로젝트 빌드(build)하고 EC2서버 배포하기

⭐️ EC2서버 배포를 위한 과정 1. 배포 파일 빌드(build) 지금까지 만들어온 프로젝트를 배포하기 위해 하나의 파일로 묶는것 -> 배포 파일 빌드 인텔리제이 - 오른쪽 탭 Gradle 클릭 -> Tasks-build-build

k-sky.tistory.com

 

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 -> 포트 추가하기

 

80포트: HTTP접속을 위한 기본 포트 / 8080포트: 스프링 부트 기본 포트

접속 확인 후

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

 

스파르타코딩클럽 [웹개발의 봄, Spring]

스프링 기초를 누구보다 빠르게!

spartacodingclub.kr

https://blog.outsider.ne.kr/346

 

Ubuntu의 apt-get 명령어 정리 :: Outsider's Dev Story

apt-get(Advanced Packaging Tool)은 우분투(Ubuntu)를 포함안 데비안(Debian)계열의 리눅스에서 쓰이는 팩키지 관리 명령어 도구입니다. 우분투에는 GUI로 되어 있는시냅틱 꾸러미 관리자도 있기는 하지만 이

blog.outsider.ne.kr

5. 오늘 한 일 / 회고

- 4주차 과제 제출

 

6. TO-DO LIST

새로운 과제가 시작되겠지만..

토큰 관련 개념 제대로 잡고 가기..