[그리디] 정명준 Spring Core(배포) 7~9단계 제출합니다. - #275
Conversation
…VC-auth # Conflicts: # src/main/java/roomescape/config/WebConfig.java # src/main/java/roomescape/member/MemberRequest.java # src/main/java/roomescape/member/repository/MemberDao.java # src/main/java/roomescape/reservation/ReservationService.java # src/main/java/roomescape/reservation/controller/ReservationController.java # src/test/java/roomescape/MissionStepTest.java
🌱<인사>안녕하세요 명준님 :) 제 마지막 리뷰이가 되셨네요 ㅎㅎㅎ 명준님은 어떠신가요? ❓<질문 사항>
-> 😃<전체적인 리뷰>전체적으로 코드를 정말 깔끔하게 잘 짜주셨다고 생각합니다. 다만 어노테이션을 조금 더 적극적으로 활용하시면 코드가 한층 더 간결해질 것 같습니다. @builder에 대해서도 한 번 공부해보세요! |
| public RefreshToken() { | ||
| } |
There was a problem hiding this comment.
@NoArgsConstructor어노테이션에 대해 알아볼까요?
There was a problem hiding this comment.
Lombok 라이브러리에서 제공하는 어노테이션으로, final 필드가 없을 때 파라미터가 없는 생성자를 만들어줍니다!
[반영 커밋] - 1be017e
|
|
||
| Optional<RefreshToken> findByToken(String token); | ||
|
|
||
| Optional<RefreshToken> findByMemberId(Long memberId); |
There was a problem hiding this comment.
There was a problem hiding this comment.
제가 잘못 파악한 것일 수도 있지만, RefreshTokenRepository에 사용되지 않는 메서드가 하나 있어 제거했습니다.
[반영 커밋] - 79b95a4
| @Table(uniqueConstraints = { | ||
| @UniqueConstraint( | ||
| name = "uk_reservation_date_time_theme", | ||
| columnNames = {"date", "time_id", "theme_id"} | ||
| ) | ||
| }) |
There was a problem hiding this comment.
먼저 저번 스터디를 통해 서비스 계층에서만 예약 중복 여부를 검증하는 것으로는 부족하다는 것을 배웠습니다. 그래서 DB에도 unique 제약 조건이 필요하다고 판단했는데, date, time_id, theme_id에 각각 unique를 걸면 각 컬럼 값 자체가 중복될 수 없게 되어 의도와 달라집니다. 그래서 @UniqueConstraint로 세 컬럼을 묶어 복합 유니크 제약을 걸었습니다.
| echo "[INFO] JDK 21 설치" | ||
| sudo apt install -y openjdk-21-jdk |
There was a problem hiding this comment.
현재 명준님의 프로젝트는 java17을 쓰고 있는 데 java 21을 설치하고 있네요!
버전을 맞춰주는 게 좋을 거 같습니다!
| #!/bin/bash | ||
|
|
||
| REPOSITORY=/home/ubuntu/app | ||
| REPO_URL="https://github.com/htdufhc-bit/spring-basic-roomescape-playground" | ||
| PID_FILE="$REPOSITORY/app.pid" | ||
|
|
||
| echo "[INFO] 시스템 패키지 업데이트" | ||
| sudo apt update | ||
|
|
||
| echo "[INFO] JDK 21 설치" | ||
| sudo apt install -y openjdk-21-jdk | ||
|
|
||
| echo "[INFO] 프로젝트 디렉토리 생성 및 이동" | ||
| mkdir -p $REPOSITORY | ||
| cd $REPOSITORY | ||
|
|
||
| echo "[INFO] Git Repository 클론 또는 최신화" | ||
| if [ -d ".git" ]; then | ||
| echo "이미 git repository가 존재합니다. 최신 코드를 받아옵니다." | ||
| git pull | ||
| else | ||
| git clone $REPO_URL . | ||
| fi | ||
|
|
||
| echo "[INFO] 초기 설정 완료" |
There was a problem hiding this comment.
빌드 실패 시 어떻게 할 지도 다뤄주면 좋을 거 같아요.
또, 스크립트에 테스트를 포함하면 버그를 운영 환경이 아닌 배포 단계에서 잡을 수 있어요. :)
There was a problem hiding this comment.
deploy.sh 파일에 빌드를 하고, 실패했을 때 에러 로그를 띄우도록 수정했습니다!!
[반영 커밋] - d67fb2a
htdufhc-bit
left a comment
There was a problem hiding this comment.
리뷰 감사합니다, 혜빈님!!
자바 공부를 시작한 게 엊그제 같은데, 벌써 스터디가 끝난다는 게 믿기지 않네요...
스터디 덕분에 스프링도 열심히 공부하고 개발에 대해 이렇게 오래 고민해 본 것도 처음이라, 확실히 성장했다는 게 느껴집니다!!
| public RefreshToken() { | ||
| } |
There was a problem hiding this comment.
Lombok 라이브러리에서 제공하는 어노테이션으로, final 필드가 없을 때 파라미터가 없는 생성자를 만들어줍니다!
[반영 커밋] - 1be017e
|
|
||
| Optional<RefreshToken> findByToken(String token); | ||
|
|
||
| Optional<RefreshToken> findByMemberId(Long memberId); |
There was a problem hiding this comment.
제가 잘못 파악한 것일 수도 있지만, RefreshTokenRepository에 사용되지 않는 메서드가 하나 있어 제거했습니다.
[반영 커밋] - 79b95a4
| echo "[INFO] JDK 21 설치" | ||
| sudo apt install -y openjdk-21-jdk |
| #!/bin/bash | ||
|
|
||
| REPOSITORY=/home/ubuntu/app | ||
| REPO_URL="https://github.com/htdufhc-bit/spring-basic-roomescape-playground" | ||
| PID_FILE="$REPOSITORY/app.pid" | ||
|
|
||
| echo "[INFO] 시스템 패키지 업데이트" | ||
| sudo apt update | ||
|
|
||
| echo "[INFO] JDK 21 설치" | ||
| sudo apt install -y openjdk-21-jdk | ||
|
|
||
| echo "[INFO] 프로젝트 디렉토리 생성 및 이동" | ||
| mkdir -p $REPOSITORY | ||
| cd $REPOSITORY | ||
|
|
||
| echo "[INFO] Git Repository 클론 또는 최신화" | ||
| if [ -d ".git" ]; then | ||
| echo "이미 git repository가 존재합니다. 최신 코드를 받아옵니다." | ||
| git pull | ||
| else | ||
| git clone $REPO_URL . | ||
| fi | ||
|
|
||
| echo "[INFO] 초기 설정 완료" |
There was a problem hiding this comment.
deploy.sh 파일에 빌드를 하고, 실패했을 때 에러 로그를 띄우도록 수정했습니다!!
[반영 커밋] - d67fb2a




안녕하세요, 혜빈님! 그리디 4기 정명준입니다.
이번 마지막 Spring 배포 미션도 잘 부탁드립니다. 그리고 시간 내서 리뷰해주셔서 항상 감사합니다!!
🚗 단계별 설명
🚀 7단계 -
@Configuration[반영 커밋] - 1ca564b
🚀 8단계 - Profile과 Resource
schema.sql대신 데이터베이스를 초기화 해주기 위해 실행하는 클래스[반영 커밋] - bd048d0
🚀 9단계 - 배포 스크립트
[반영 커밋] - 4076e21
💭 학습 내용
배포 스크립트 작성
초기 설정과 배포에 대한 스크립트를 setup.sh와 deploy.sh로 나누어 배포할 때마다 초기 설정을 반복하지 않도록 설계하였습니다. 스크립트 작성은 따로 학습 자료가 없어서 블로그와 AI를 참고해서 작성했습니다.
❓ 질문사항
Profile 사용 여부
이번 미션에서는 특수한 요구사항으로 인해
DataLoader를 구현하고, Profile을 통해 특정 환경에서만 적용되도록 구성했습니다.다만 실제 운영 환경에서는 서버가 실행될 때마다 데이터를 다시 삽입할 일이 많지 않고, 잘못하면 중복 데이터가 생성될 수도 있기 때문에
DataLoader를 활용하는 경우는 많지 않을 것 같다는 생각이 들었습니다. 개발이나 테스트 환경에서 초기 데이터를 구성할 때는 유용하게 활용할 수 있을 것 같습니다.혹시 혜빈님께서는 실제 프로젝트에서 Profile을 활용해 보신 경험이 있으신가요? 사용해 보셨다면 어떤 상황에서 활용하셨는지 궁금합니다!
🌱 원하는 피드백
이번 미션은 코드 구현보다는 개념을 이해하고 적용하는 데 초점이 맞춰져 있어, 크게 어려움을 느낀 부분이나 질문 사항은 없었습니다. 혜빈님이 남겨주시는 리뷰 내용으로 열심히 공부해보겠습니다!!
배포 스크립트는 아직 배포를 진행하지 못해, 실제로 작동되는지를 확인하지 못했습니다. 그래서 잘못된 부분이나 개선할 부분 있으면 말씀해주세요!!