Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: TestContainer 적용 #27

Merged
merged 3 commits into from
Dec 18, 2023
Merged

Conversation

Choi-JJunho
Copy link
Collaborator

@Choi-JJunho Choi-JJunho commented Dec 12, 2023

🔥 연관 이슈

🚀 작업 내용

  1. testContainer를 적용했습니다.
  2. 인수테스트를 위한 설정을 abstract class AcceptanceTest 로 분리했습니다.
    1. 이후 추가로 생성될 인수테스트들은 해당 클래스를 상속받으면 됩니다.
  3. DirtiesContext를 사용하던 방식에서 DBInitializer를 사용하는 방식으로 변경했습니다.
    1. 평균 500ms의 테스트 속도를 240ms정도로 줄일 수 있었습니다.
  4. application-test.yml 파일을 추가했습니다.
    1. SpringBoot에서는 application-filename 형태로 profile을 정의할 수 있습니다. 예를 들어 applicaiton-dev.yml의 경우 @ActiveProfiles("dev")로 해당 속성을 사용할 수 있습니다.
    2. 참고자료 - Properties with Spring and Spring Boot

💬 리뷰 중점사항

코드레벨에서 큰 변화는 없습니다.
외부 라이브러리를 가져오면서 생소한 내용이 다소 있을 수 있어 최대한 설명을 작성해봤습니다.
관련하여 블로그로도 정리해봤으니 왜 도입하는지, 어떤 방식을 적용했는지 등 자세한 내용은 블로그를 참고해주세요
블로그 - TestContainer 적용하기

@Choi-JJunho Choi-JJunho added the 테스트 테스트와 관련된 이슈입니다. label Dec 12, 2023
@Choi-JJunho Choi-JJunho self-assigned this Dec 12, 2023
Copy link

github-actions bot commented Dec 12, 2023

Unit Test Results

4 tests   4 ✔️  3s ⏱️
2 suites  0 💤
2 files    0

Results for commit 9dfd948.

♻️ This comment has been updated with latest results.

Copy link
Collaborator

@Invidam Invidam left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아직 모르는 부분들, 공부 필요한 부분들이 있는 것 같아 목요일 좀 더 확인해볼게요 !

}

static {
container = new MySQLContainer("mysql:8")
Copy link
Collaborator

@Invidam Invidam Dec 13, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
container = new MySQLContainer("mysql:8")
container = (MySQLContainer) new MySQLContainer("mysql:5.7.34")
.withDatabaseName("test")
.withUsername(ROOT)
.withPassword(ROOT_PASSWORD)
.withCommand("--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci")
;
container.start();
  • Production에서는 5.7.33 버전을 사용중이어서 비슷한 버전으로 다운그레이드 하였구 5.7 버전대는 8.0과 Character Set이 달라, 한글 입력 관련 에러가 터져 수정하는 코드까지 추가해봤습니당
    • (SQLException: Incorrect string value: '\xED\x95\x9C\xEC\x9A\xB0...' for column 'name' at row 1에러가 떴었음.)
  • .withCommand() 이용해서 char set 수정했고, 해당 빌더 메서드 이용시 GenericContainer로 반환타입이 변환되어 다시 (MysqlContainer)로 변환했습니다

추가로

  • charset 수정을 해당 부분에서 하는 게 맞는지 (schema.sql 에서도 될 것 같고 application.yml에서도 가능할 것 같아요)
  • mysql 5.7은 arm(맥기반)이 제공되지 않아 amd 환경의 도커 컨테이너를 이용해야 했는데 괜찮은지 (속도 측면)
  • 윈도우는 도커 사용하기 힘든 환경이라고 알고 있는데 사용할 수 있을지 (도커 사용시 메모리 누수가 되었던 경험이 있음)

고민해봐야할 것 같아요 (윈도우인 분들의 테스트가 필요할 것 같네요!!)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Production MySQL 버전을 미처 신경쓰지 못했네요!!
좋은 지적 감사합니다 👍

추가로 말씀해주신 내용에 대한 저의 의견을 말씀드려봅니다.

charset 수정을 해당 부분에서 하는 게 맞는지 (schema.sql 에서도 될 것 같고 application.yml에서도 가능할 것 같아요)

해당 MySQL 컨테이너를 띄우는 부분은 오로지 testContainer에서 static하게 단 한번만 사용하므로 전역적으로 yml 파일로 선언하기보다는 작성해주신 대로 해당 코드에서만 사용하는게 어떨까 생각이 듭니다.

별도의 config 파일로 분리할 정도로 중요한 내용이 아니라고 생각되고, 반복되지 않는 작업을 불필요하게 분리하여 관리 요소가 늘어나는 것 같다 라는 의견입니다.

mysql 5.7은 arm(맥기반)이 제공되지 않아 amd 환경의 도커 컨테이너를 이용해야 했는데 괜찮은지 (속도 측면)

속도 측면에서 어떤 부분이 걱정인것인지 정확이 알기 어렵습니다.

5.7을 사용함에 따라 테스트 속도가 느려지는것을 걱정하시는 걸까요? 아니면 컨테이너 로드하는 시간에 대한 걱정일까요?
정확히 얼마나 유의미한 속도차이가 있을지 잘 모르겠네요.

정말 크리티컬하게 속도차이가 나는것이 아니라면 production 환경과 맞춰야하므로 5.7 버전을 사용해야한다 라는 이유가 더 중요하다고 판단되어 트레이드오프 해야하는 부분이라고 생각됩니다.

윈도우는 도커 사용하기 힘든 환경이라고 알고 있는데 사용할 수 있을지 (도커 사용시 메모리 누수가 되었던 경험이 있음)

window docker 환경에서의 메모리 누수에 대한 이슈가 있기도 하군요

실제 운영 환경은 Linux 환경이라 해당 부분에 대한 이슈는 없을 것이라고 예상됩니다.

개발자의 로컬 환경에 대한 별도의 처리를 코드레벨에서 고려해야할지는 고민인 부분입니다.
Mac 환경으로 개발하고 있는 상황에서 실제로 경험해보지 못한 부분이기도 하고 정확한 원인을 파악하지 못해 윈도우 사용자의 코멘트가 필요할 것 같네요

해당 의견에 대해서는 직접 사용해본 후 문제가 발생하면 그때 다시 논의해보면 좋을 것 같습니다.
cc. @daheeParkk

Copy link
Collaborator

@Invidam Invidam Dec 17, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. charset은 말씀했던대로 TestContainer 레벨에서 처리하는 게 맞을 것 같아요!
    • 실제 프로덕션 환경에 이미 적용이 되어있고, 테스트 환경에서만 적용하면 되기 때문에
  2. 5.7에 맞추는 게 더 중요할 것 같고, "칩셋(arm, amd) 차이로 인해 맥 이용시 실행 속도가 느려지거나 동작이 미세하기 다를 수 있다"는 점만 다같이 인지하고 있음 될 것 같아요
  3. 테스트 컨테이너가 짧은 시간동안만 실행되고 종료된다는 점을 생각하면 메모리 문제도 그리 심각하지 않을 수 있을 것 같아요!

직접 사용해본 후 문제가 발생하면 그때 다시 논의해보면 좋을 것 같습니다.

👍👍

Copy link
Collaborator

@Invidam Invidam Dec 14, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/ejoongseok/product-order-service/blob/master/src/test/java/com/example/productorderservice/DatabaseCleanup.java
(케이포타운 개발자분의 강의에서 가져온 코드)
비슷하게 DB를 초기화(클린업)하는 코드인데

  1. JPA Entity로 사용중인 테이블들만 Truncate
  2. 참조 무결성 옵션을 껐다 켜줘서 FK도 제거 가능하도록 설정

의 차이가 있더라구요. (1) 같은 경우는 모든 테이블을 제거하는 것보다 JPA에서 사용한 테이블만 제거하는 것이 성능에 있어 뛰어날 것 같은데 어떻게 생각하세요? (테스트가 필요할까요?)

참고로 강의는 링크

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

좋은 의견이네요!
몇가지 의문점이 있어 코멘트 남겨봅니다.

1. 현재 설계상으로 JPA Entity로 사용중이지 않은 테이블이 있을까요?

사례가 잘 와닿지 않아 해당 방식으로 코드를 구성하는 방향에 대한 의문이 듭니다.

2. 엔티티 이름과 실제 테이블명이 다른 경우

final List<String> entityNames = entities.stream()
        .filter(e -> isEntity(e) && !hasTableAnnotation(e))
        .map(e -> CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, e.getName()))
        .toList();

위 코드를 보면 특정 @Entity, @Table 어노테이션이 붙어있는 객체를 가져와 그 객체의 이름을 snake_case로 변환하는 것을 확인 할 수 있습니다.

하지만 해당 방식의 경우 객체 명과 실제 테이블명이 다른 상황에 대한 대처가 어렵다고 생각합니다.

// 예시
@Entity
@Table(name = "students")
public class Student {
// ...
}

3. 성능 개선이 필요할만큼 느린가?

현재 얼마만큼의 속도가 책정되고 저 방식을 적용한다면 얼마만큼의 성능이 개선될지 의문인 상황입니다.

현재로서는 성능 개선이 필요할만큼 속도가 느리다고 생각되지 않는 시점이라 다소 고려를 많이 해보고있다는 부분 양해부탁드립니다. 😅

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. 지금이나 앞으로나 설계상 JPA Entity로 사용하지 않는 테이블이 떠오르진 않네요
    • 테스트 환경에 대한 이해가 부족해서 실제 서버 환경과 헷갈렸던 것 같아요
    • 따라서 크게 변경할 필요는 없어보이네요!
      • 적용하기 위해선 2번 문제[테이블 명이 다른 경우]도 해결해주어야 하고..
  2. 불필요하게 Truncate되었던 테이블의 수만큼 성능이 향상될 것 같은데, 그런 테이블이 없다면 성능 향상은 미미할 것 같네요

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

추가로 링크에서 외래키 참조 무결성을 해제했던 쿼리 SET REFERENTIAL_INTEGRITY FALSE은 h2, oracle에서만 가능한 것 같네용..

참고 링크

@BeforeEach
void delete() {
dataInitializer.clear();
RestAssured.port = port;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
RestAssured.port = port;
if (RestAssured.port == RestAssured.UNDEFINED_PORT) {
RestAssured.port = port;
}

로 UNDEFINED인 경우에만 넣어주는 건 어떨까요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오! 좋습니다~!

@Invidam
Copy link
Collaborator

Invidam commented Dec 14, 2023

https://tecoble.techcourse.co.kr/post/2020-09-15-test-isolation/ 의 댓글이나
https://yeon-kr.tistory.com/212 글을 봤는데,

병렬 테스팅하여 멀티쓰레드로 테스트를 실행해보는 건 어떨까요?

@Choi-JJunho
Copy link
Collaborator Author

https://tecoble.techcourse.co.kr/post/2020-09-15-test-isolation/ 의 댓글이나 https://yeon-kr.tistory.com/212 글을 봤는데,

병렬 테스팅하여 멀티쓰레드로 테스트를 실행해보는 건 어떨까요?

Junit5에 병렬테스팅 기능이 있군요!
해당 기능에 대한 추가학습을 진행한 뒤 적용해보겠습니다~! (화요일까지 적용해보겠습니다)

Copy link
Collaborator

@songsunkook songsunkook left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

블로그 잘 읽었습니다.

TestContainer를 도입하는 과정에서 컨테이너 생성을 직접 제어하니 실행 속도가 훨씬 빨라지는 점이 인상깊습니다. TestContainer를 도입할 때는 해당 과정이 거의 필수로 보이네요..!

새로운 기술 스택 도입인 만큼 낯설었을 텐데 고생하셨습니다! 👍

Comment on lines +23 to +24
private static final String ROOT = "test";
private static final String ROOT_PASSWORD = "1234";
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 부분은 application-test.yml과 같은 설정 파일에 분리할 수 있을 것 같은데, 따로 분리하지 않은 이유가 있을까요??

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

위에서 한수에게 답변한 내용과 동일합니다~

charset 수정을 해당 부분에서 하는 게 맞는지 (schema.sql 에서도 될 것 같고 application.yml에서도 가능할 것 같아요)

해당 MySQL 컨테이너를 띄우는 부분은 오로지 testContainer에서 static하게 단 한번만 사용하므로 전역적으로 yml 파일로 선언하기보다는 작성해주신 대로 해당 코드에서만 사용하는게 어떨까 생각이 듭니다.

별도의 config 파일로 분리할 정도로 중요한 내용이 아니라고 생각되고, 반복되지 않는 작업을 불필요하게 분리하여 관리 요소가 늘어나는 것 같다 라는 의견입니다.

@Choi-JJunho
Copy link
Collaborator Author

Choi-JJunho commented Dec 18, 2023

@Invidam

https://tecoble.techcourse.co.kr/post/2020-09-15-test-isolation/ 의 댓글이나 https://yeon-kr.tistory.com/212 글을 봤는데,

병렬 테스팅하여 멀티쓰레드로 테스트를 실행해보는 건 어떨까요?

공유해주신 https://yeon-kr.tistory.com/212 글을 적용해봤습니다.
properties 파일을 이용한 설정으로 아주 간단한 설정이였으나 현재 테스트 개수가 너무 적어 유의미한 결과가 나오질 않습니다.
제 로컬 기준 빌드 타임이 24s에서 23s로 개선되는 아주 미비한 효과를 보이네요..

테스트 병렬처리는 테스트가 조금 더 쌓이고 추후에 도입해보는건 어떨까요? 지금으로서 적용해도 좋은 방법인지는 의문이 듭니다.

Copy link
Collaborator

@Invidam Invidam left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

동의합니다~ 여러 테스트로 인해 시간소요가 많아질 때 고민하는 게 효과적일 것 같네요

Copy link
Collaborator

@daheeParkk daheeParkk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TestContainer에 대해 새롭게 알게되었습니다!
작성해주신 블로그를 보면서 코드를 봐서 이해하기 편했습니다. (동작 원리에 대해서는 좀 더 공부해봐야 할 것 같습니다..!)

@SpringBootTest(webEnvironment = RANDOM_PORT)
@Import(DBInitializer.class)
@ActiveProfiles("test")
public abstract class AcceptanceTest {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

설정을 클래스로 따로 분리해서, 인수 테스트를 생성할 때는 해당 클래스를 상속만 받으면 되니까 편리하고 보기 좋은 것 같습니다!

이름은 왜 Acceptance인가요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

인수테스트에 해당 클래스를 상속받게 만들고자했습니다~!
용어는 인수 검사(acceptance testing)에서 따왔습니다

참고: https://ko.wikipedia.org/wiki/%EC%9D%B8%EC%88%98_%EA%B2%80%EC%82%AC

Comment on lines +23 to +24
private static final String ROOT = "test";
private static final String ROOT_PASSWORD = "1234";
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

설정이 test, 1234로 되어 있는데 아무거나 넣어도 되는 건가요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넹 아무거나 넣어도 됩니다~!
테스트용이라 아무거나 넣었어요

@daheeParkk daheeParkk merged commit e491214 into develop Dec 18, 2023
3 checks passed
@Choi-JJunho Choi-JJunho deleted the test/26-add_test_container branch December 18, 2023 07:50
Choi-JJunho added a commit that referenced this pull request Apr 30, 2024
* test: TestContainer 적용 (#27)

* test: TestContainer 적용

* test: TestContainer MySQL 버전 5.7로 변경

* test: RestAssured port 선언조건 추가

* feat: POST /user/login API 구현 (#50)

* feat: User Entity 추가

* test: /user/login 인수테스트 작성

* feat: 로그인 뼈대코드 구성

* feat: testcontainer 도입

* test: TestContainer 적용

* test: TestContainer MySQL 버전 5.7로 변경

* test: RestAssured port 선언조건 추가

* feat: 사용자 로그인 구현

* feat: 사용자 마지막 로그인한 날짜 추가

* test: ActiveProfiles 설정 추가

* build: 토큰 값 minute 주석 추가

* refactor: refreshToken 만료일자 14일로 수정

* build: 불필요한 설정파일 제거

* refactor: 예외처리부 추가

* test: 학교 메일로 테스트케이스 수정

* refactor: 반환값 accessToken임을 명시

* feat: 상점 메뉴 조회 API 구현 (#112)

* refactor: 전체 패키지 구조 변경 (#114)

* refactor: 패키지 구조 변경

* refactor: DTO 레코드로 변경

* refactor: 상점 도메인 패키지 구조 변경

* refactor: 패키지 표현 변경

* feat: GET /lands API 구현  (#148)

* feat : 도메인 생성

* faet : controller 구현

* feat : response DTO 생성

* feat : 전체 조회 service 구현

* feat : 전체 조회 repository 생성

* feat : Domain 생성

* test : 인수 테스트 작성

* refactor : 하위 패키지 중 domain을 model로 수정

* refactor : DTO 클래스에 JsonNaming 어노테이션 사용

* refactor : Column 어노테이션 안에 필요없는 내용 제거

* refactor : 복덕방 리스트 조회 메서드에 Transaction(readOnly=true)가 적용되도록 수정

* refactor : 리스트 원소로 사용하던 LandResponse의 이름을 LandListItemResponse로 수정

* feat: 사용자 인증 구현 (#149)

* feat: 사용자 인증 구현

* refactor: ArgumentResolver 이름 변경

* refactor: CustomException 적용

* refactor: 예외상황 명시하도록 순서 변경

* refactor: 상수추출

* refactor: 미사용 생성자 제거

* chore: 패키지 변경

* refactor: 미사용 어노테이션 제거

* refactor: 오타수정

* refactor: 오류메시지 구체화

* refactor: 미사용 메서드 제거

* �feat: GET /dept, GET /depts 구현 (#147)

* refactor: 패키지 구조 변경

* refactor: DTO 레코드로 변경

* refactor: 상점 도메인 패키지 구조 변경

* feat: 학과 조회 관련 틀 작성

* feat: 학과명 열거형 추가

* feat: 학과 조회 초안 작성

* feat: 학과 조회 정상 동작

* refactor: 열거형 제거

최대한 도입해보려 시도했으나 `@Enumerated(EnumType.STRING)`으로는 불가능한 구조인 것으로 판단하여 제거
(DB에 한글로 저장되어 있어서 enum과 매핑하려면 한글 열거형이 필요해보임)

ERROR DETAIL: "No enum constant in.koreatech.koin.domain.dept.domain.DeptType.기계공학부"

* rename: 정적 팩토리 메서드 네이밍 수정

* test: 인수 테스트 추가

* fix: 정상 동작하도록 수정 (복합키 매핑 이전)

* refactor: 복합키 매핑

* remove: 미사용 코드 제거

* feat: GET /depts 구현

* test: GET /depts 테스트 작성

* rename: 도메인명 수정

Dept -> DeptInfo

* fix: DeptInfoRepository Key 수정

* refactor: service 코드 간소화

* fix: GET /dept 응답 메시지 자료형 수정

* refactor: 트랜잭션 적용

* rename: 변수명 수정

* refactor: 응답 객체 자료형 수정

* refactor: 개행 컨벤션 준수

* rename: DTO 네이밍 수정

* refactor: 개행 컨벤션 준수

* refactor: 메서드 네이밍 수정

* test: 테스트 인자 상수화

* test: 코드 간소화

* fix: Repository ID 제네릭 수정

* refactor: Static Import로 변경

Response 클래스들에 붙은 SnakeCaseStrategy.class를 static import하여 가독성 향상

* test: GET /depts 테스트 코드 수정

1. 기존에 연관관계를 테스트하지 않던 코드 수정
2. 반복문을 제거하고 일일이 매핑하도록 수정

* refactor: DB에서 enum으로 구조 변경

cc. #152

* rename: 메서드명 컨벤션 준수

* rename: 컨트롤러 메서드명 컨벤션 준수

* refactor: 존재하지 않을 시 응답 코드 변경

* style: enum 개행 조정

* remove: DB 미사용으로 인한 불필요 코드 제거

---------

Co-authored-by: Invidam <hansupark0208@gmail.com>

* feat: logout 구현 (#154)

* feat: accessToken 재발급 (#155)

* feat: logout 구현

* feat: accessToken 재발급 구현

* fix: 응답 수정 및 테스트 수정

* refactor: 사용자 인증 요구사항 제거

* refactor: 리프레시토큰 userId 구분

* �feat: 게시글 목록 조회 구현 (#158)

* feat: 골격 작성

* feat: 엔티티 작성

* feat: repository 작성

* feat: service 작성

* feat: response 작성

* feat: DB 조회 로직 작성

* feat: Jsoup 의존성 추가

* feat: 응답 내용 추가

1. article.is_notice
2. article.contentSummary
3. board.is_notice
4. board.children (must null)

* feat: 예외처리 작성

* refactor: 페이징 관련 정보 클래스 분리

* fix: soft delete된 게시판 or 게시글은 조회 안되도록 수정

* fix: 1페이지 조회 안되는 버그 수정

* fix: 누락된 응답 추가 (summary)

* fix: 최신글부터 조회하도록 수정

* test: 테스트 코드 작성

* move: ErrorResponseWrapper 위치 변경

* refactor: 코딩 컨벤션 준수

* refactor: 문자열 파싱 메서드 리팩토링

* test: 예외상황 테스트 추가

* feat: 메뉴 카테고리 목록 조회 (#153)

* feat: 메뉴 카테고리 조회 기능 구현

* refactor: 응답 DTO 생성 로직 수정

* refactor: cascade 처리 방식 변경

refactor: cascade 처리 방식 변경

* test: 테스트 문맥 변경

* feat: 복덕방 단일 조회 (#156)

* feat : controller 구현

* feat : repository에 id로 조회 기능 생성

* feat : service에 조회 기능 구현

* feat : 응답 DTO 구현

* refactor : domain 필드 자료형 변경

* refactor : stream 라인 변경

* refactor : 코드 축약

* test : 단일 조회 테스트 작성

* refactor : 에러 메시지 구체적으로 수정

* refactor : 기존 응답 구조와 동일하도록 수정

* test : 테스트에 이미지 추가

* refactor:� findByXXX -> getByXXX (#164)

* refactor: default method 활용한 getByXXX 메소드 추가

* style: 공벡 제거

* refactor: 복덕방에도 적용

* refactor: DataNotFoundException으로 묶어서 관리

* feat: 게시글 단일 조회 (#173)

* feat: 골격 작성

* feat: Repository 메서드 추가

* feat: 응답 객체 작성

* feat: Comment 도메인 엔티티 작성

* feat: 초안 완성

* fix: 로그인된 사용자 정보 습득 절차 수정

1. 비로그인 유저의 요청도 받도록 수정
2. 올바르지 않은 토큰 입력 시 권한 없음으로 진행되도록 수정

* rename: 응답 객체 변수명 수정

* refactor: 내용 요약 정보 최신화 시기 변경

기존: getter 호출 시마다 로직 수행하여 추출
변경: jpa 엔티티 로드 후 1회 로직 수행

* refactor: 유저 인증 정보 전달 방식 수정

기존: 컨트롤러단에서 @RequestHeader로 받아 전달
변경: 서비스단에서 RequestContextHolder로 습득

* feat: 게시글 조회 기록 저장 및 조회수 변동 구현

유저의 게시글 조회가 조회수 증가로 이어지는 간격을 1시간으로 설정

* fix: 게시글 조회 관련 버그 수정

기존에 게시글 조회 이력이 남아있는데 만료 시간이 지난 경우, 기존 내역을 업데이트해줘야 하나 새로 저장을 시도하여 구문 에러가 발생함.
위 상황에는 기존 내역을 업데이트하는 로직을 추가함으로써 문제 해결

* fix: 게시글 목록 조회 버그 수정

문제: 최대 페이지 초과 시 404 에러가 발생하지 않음.
원인: 예외처리 로직을 별도 함수로 분리했으나 기존 함수를 사용중이었음
해결: 예외처리가 적용된 함수로 호출문 변경

* fix: 조회 기록 Builder에 만료시간 기입

* test: 신규 테스트 추가 및 기존 테스트 수정

* other: 학과 조회 자료형 수정

학과 코드: Long -> String

* refactor: 코드스타일 개선

* rename: 메서드 네이밍 수정

* refactor: 빈 게시글 목록 조회 예외처리 제거

* refactor: IP 주소 습득 로직 분리

* test: 예외 제거에 따른 테스트 수정

* refactor: 연관관계 방식으로 로직 및 테스트 수정

* refactor: ArticleViewLog의 FK를 연관관계로 매핑

* refactor: Auth 어노테이션 활용하도록 변경 (#175)

* refactor: Auth 어노테이션 활용하도록 변경

* refactor: IPAddress Interceptor 추가

* chore: auth global 패키지로 이동

* style: 로깅 디테일

* refactor: 불필요한 UserType 제거

* docs: add swagger config (#176)

* refactor: Auth 어노테이션 활용하도록 변경

* refactor: IPAddress Interceptor 추가

* docs: swagger 추가

* chore: auth global 패키지로 이동

* style: 로깅 디테일

* refactor: 불필요한 UserType 제거

* refactor: Parameter Path 수정

* feat: 버전 단일 조회 (#168)

* feat: request dto 작성

* feat: 엔티티 작성

* feat: response dto 작성

* feat: 서비스 작성

* feat: 컨트롤러 작성

* feature: 기존 코드 제거 및 테스트 코드 추가

* feat: 리뷰 적용

* feat: VersionType 피드백 적용 및 Exception Test Case 추가

* feat: 공백 컨벤션 수정 & No newline at end of file 적용

* feat: 회원 탈퇴 구현 (#178)

* feat: 회원 탈퇴 구현

* refactor: 줄바꿈

* feat: 인기 게시글 목록 조회 (#181)

* feat: API 골격 작성

* feat: Redis 접근 기능 구

* feat: 만료 체크 로직 자동화

* feat: 인기 많은 게시글 출력 로직 작성

1. 모든 로그 조회
2. 조회수 내림차순 정렬
3. Limit로 자르기
4. 결과 반환

* refactor: 스케줄러 관심사 분리

* feat: 최근 조회된 게시글 수가 10개 미만이면 최신 게시글과 병합

* fix: 응답 객체 필드명 수정

* test: 테스트 작성

* refactor: 조회수 검증 로직 개선

* docs: 응답 객체 설명 추가

* test: 불필요한 콘솔 출력 제거

* refactor: redis 대신 mysql을 사용하도록 수정

* test: 테스트 수정

* feat: 사장님 정보 조회 (#182)

* feat: 도메인 엔티티 생성

* feat: 응답 객체 초안 작성

* feat: 도메인 클래스 작성

* feat: API 작성

1. 경로 수정(다른 API로 착각하고 작업중이었어서 수정)
2. 연관관계 매핑
3. API 로직 작성

* test: 테스트 작성

* refactor: 접근제어자 수정

* docs: 응답 객체 문서 주석 추가

* refactor: 트랜잭션 추가

* refactor: 예외처리 보완

* refactor: 양방향 연관관계 제거

* refactor: 잘못 기입된 Setter 제거

* refactor: 기본생성자 접근제어 추가

* refactor: 소프트딜리트된 대상은 제외

* refactor: 기본생성자 접근제어 추가

* style: 컨벤션 준수

* rename: 메서드명 변경

* feat: 사장님 자신의 모든 상점 조회 (#183)

* feat: 도메인 엔티티 생성

* feat: 응답 객체 초안 작성

* feat: 도메인 클래스 작성

* feat: API 작성

1. 경로 수정(다른 API로 착각하고 작업중이었어서 수정)
2. 연관관계 매핑
3. API 로직 작성

* test: 테스트 작성

* feat: API 작성

* test: 테스트 작성

* refactor: 트랜잭션 적용

* docs: 응답 객체 문서 주석 추가

* fix: 버그 수정

* refactor: 읽기 전용 트랜잭션으로 수정

* refactor: 개행 컨벤션 준수

* feat: 사장님 회원가입 인증번호 전송 요청 (#184)

* feat : owner controller 구현

* refactor: 기존 url에 맞게 수정

* feat: 이메일 관련 도메인 생성 & 검증 기능 구현

* feat: 중복 이메일인지 검증하는 기능 구현

* feat : AwsSesConfig 작성

* feat : SesMailSender 작성

* feat: 메일폼 작성 & 템플릿 가져오는 기능 구현

* feat: 메일 보내는 기능 구현

* feat: 메일 보낼 수 있는지 검사

* feat: OwnerInVerification 작성

* feat: redis에 저장

* fix: 타임리프 가져오는 에러 해결

* fix: 메일 전송 에러 해결

* refactor: mail form loader 설정 코드 메서드로 분리

* fix: 중복 이메일 검증 오류 해결

* feat: slack에 알림 보내는 기능 구현

* feat: 스웨거 작성

* refactor: 예외처리 수정

* feat: 슬랙 test url 작성

* feat: 레디스에 있는 사장님 정보 조회 구현

* test: 회원가입 인증번호 전송 요청 테스트 작성

* style: 클래스&메서드명 수정

* style: global의 commaon 패키지를 domain 패키지로 수정

* test: 테스트 메서드명 수정

* refactor: 인증번호 랜덤 생성을 따로 구현

* refactor: Aws SES 서울 리전으로 수정

* refactor: 이메일 검증 로직 수정

* fix: AWS SES 기존 Region으로 수정

* refactor: 스프링 이벤트 적용해서 슬랙 알림 전송하도록 수정

* refactor: 메일폼 가져오는 라이브러리 thymeleaf로 변경

* test: 슬래 전송 실패해도 200으로 응답하는 테스트로 수정

* test: 사장님 회원가입 인증번호 전송 요청 이벤트 발생 시 슬랙 전송 이벤트가 발생하는지 확인하는 테스트

* refactor: EmailAddress 객체 정적 팩토리 메서드를 사용하도록 수정

* refactor: OwnerInVerification 팩토리 메서드명 수정

* refactor: noticeEmailVerification()에서 코드 줄임

* refactor: 사용하지 않는 코드 제거

* test: MockBean을 SpyBean으로 수정

* test: MockBean 위치 변경

* test: application test yml에 thymeleaf 경로 설정 추가

* test: test/resources/mail/owner메일폼 추가

* test: test/resources/owner메일폼 제거

* test: MockBean 위치 AcceptanceTest로 변경

* style: record 변수 선언 세로로 위치 변경

* style: OwnerInVerification의 AccessLevel static import로 수정

* style: User 생성자 인수 일정하게 나열

* refactor: User 생성자 private으로 수정

* style: 모든 AccessLevel을 static import로 수정

* style: Owner, OwnerAttachment Doamin 위치 domain 패키지에서 model패키지로 수정

* refactor: aws ses 최신 버전으로 수정

* fix: 버전 매핑 에러 수정 (#191)

* fix: 버그 수정

* refactor: 예외 수정

* test: 테스트 분리

* feat: 버전 최신화 메서드 작성

* refactor: 응답 간결화 및 버그 수정

* feat: 이메일 중복 체크 (#194)

* feat: 이메일 중복 체크 구현

* feat: 이메일 중복 테스트 구현

* chore: application-test.yml 수정

- datasource 추가

* chore: application-test.yml 수정
- datasource 삭제

* refactor: ModelAttribute 적용

- @RequestParam -> @ModelAttribute

* feat: 이메일 중복 테스트 추가

- 이메일을 보내지 않으면 400
- 잘못된 이메일 형식이면 400

* style: 라인 포맷팅

* feat : 강의 목록 조회(학기별) (#192)

* feat : Lecture 클래스 생성

* feat : LectureApi 클래스 생성

* feat : LectureController 클래스 생성

* feat : LectureRepository 클래스 생성

* feat : LectureResponse DTO 생성

* feat : LectureService 클래스 생성

* feat : LectureApiTest 테스트 생성 후 통과

* refactor : 리뷰 반영

* refactor : classTime 반환타입 Integer[]로 변경

* refactor : 리뷰 반영

* refactor : Integer[]배열 List<Long>으로 변경

* refactor : TimeTable로 네이밍 변경

* refactor : 리뷰 반영

* feat: 버스 남은 시간 조회 - 셔틀버스, 등하교 버스 (#185)

* feat: API 골격 작성

* feat: mongoDB 의존성 추가

* feat: 응답 객체 작성

* feat: 예외 추가

* feat: 엔티티 작성

* feat: 미운행인 버스 필터링

* feat: enum 추가

* feat: 남은 시간 계산 로직 작성

* feat: 가장 최근 버스까지 남은 시간 응답 구현

* feat: 미운행 요일 제외 로직 추가

* feat: 버스 정거장 검증로직 적용 및 중복되는 시간 제외

* refactor: enum 객체를 사용하도록 수정

* refactor: 등하교 방향 기준 탐색에서 정류장 탐색으로 로직 변경

* remove: 미사용 코드 제거

BusCourse.isRunning()

* refactor: 테스트 mocking 위해 Clock 사용하도록 수정

* test: 테스트컨테이너 mongoDB 추가

* test: 셔틀 버스 조회 테스트 추가

* docs: API 문서에 파라미터 정보 명시

* remove: 불필요 주석 제거

* refactor: 누락된 Transactional 추가

* fix: mocking 변수 선언부 이동

* remove: 불필요 주석 제거

* refactor: 도착 시각 패턴 불일치 시 예외처리

* refactor: 반복문을 stream으로 변환

* refactor: 엔티티 필드로 List 사용 시 미리 초기화

* refactor: String 비교 시 NPE 예방

* refactor: 불필요한 매핑 메서드 제거

* refactor: 변수 분리

* rename: 변수명 수정

* refactor: Builder 생성자 접근제어자 수정

* refactor: enum 필드 간소화

* fix: 미사용 예외 사용하도록 수정

* feat: 출발지와 도착지가 일치할 경우 예외 처리

* refactor: IllegalArgumentException 예외 응답 수정

* feat : 학기 조회(전학기) (#196)

* feat : Semester get API 구현 완료

* chore : 리뷰 반영 코드 위치 수정 / 패키지 이름 변경

* style : 라인 포매팅 및 클래스 삭제

* test : 테스트 코드 수정

* feat : 사장님 식당 생성, 특정 상점 조회 API구현 (#199)

* feat: 상점 생성 기능 추가

* feat: 상점등록을 하기 위해 연관된 model정의

* feat: shop과 관련된 repository, exception작성

* feat: 1차 테스트 완료

* feat: 사장님 상점 생성 기능 구현

* feat: 특정상점조회 API구현

* refactor: 특정상점조회 테스트코드 수정

* chore: import경로 오류 수정

* chore: pull충돌 해결

* refactor: saveAll제거

* feat: 스웨거 설명 추가

* refactor: Builder생성자 접근제어 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* feat: 닉네임 중복 체크 (#189)

* refactor: 회원 탈퇴 반환타입 수정

* feat: 중복 데이터 예외 처리 추가

* feat: 닉네임 중복 예외 처리 추가

* feat: 닉네임 중복 체크 구현

* feat: 닉네임 중복 테스트

* refactor: 예외 처리 수정

* refactor: 닉네임 중복 로직 수정

* feat: 닉네임 중복 중복아닐때, 제약조건위반시 테스트 추가

* refactor: 파라미터 valid 적용

* refactor: 전역 데이터 중복 예외 제거(이미 전에 누가 만들었음)

* feat: 충돌 해결

* refactor: 코멘트 반영 수정

* feat : 식단 Api 구현 (#193)

* feat : 충돌 해결

* chore : VersionException 제거

* chore : SnakeCaseStrategy import static 수정

* refactor : 엔티티 id int -> Long 수정

* feat : 사장님 식당 생성, 특정 상점 조회 API구현 (#199)

* feat: 상점 생성 기능 추가

* feat: 상점등록을 하기 위해 연관된 model정의

* feat: shop과 관련된 repository, exception작성

* feat: 1차 테스트 완료

* feat: 사장님 상점 생성 기능 구현

* feat: 특정상점조회 API구현

* refactor: 특정상점조회 테스트코드 수정

* chore: import경로 오류 수정

* chore: pull충돌 해결

* refactor: saveAll제거

* feat: 스웨거 설명 추가

* refactor: Builder생성자 접근제어 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* feat : 커스텀 예외처리 추가

* chore : 충돌 해결

* chore : 테스트 정보 수정

* chore : 파라미터 설명 추가

* refactor : menu String -> List 수정

* fix : 테이블명 수정

* refactor : 현재시간에 대한 테스트를 위해 clock 모킹 추가

* remove : 사용하지 않는 예외 삭제

* chore : 테스트코드 public 제외, 불필요한 공백 삭제

---------

Co-authored-by: Hyeonsu Lee <127578418+20HyeonsuLee@users.noreply.github.com>

* feat : 특정상점 전체메뉴조회 api작성 (#208)

* feat: 특정 상점 모든 메뉴조회 api 작성

* feat: 특정 상점 모든 메뉴조회 api 테스트코드 작성

* feat: 코드리뷰사항 반영 1 차

* feat: 코드 리뷰사항 반영 2차

* feat : BCSD Lab 활동 api구현 (#207)

* feat: bcsd lab 활동 가져오기 1차 테스트 통과

* refactor: 반환 값을 리스트에서 맵으로 변경

* refactor: activitiy api 반환값 맵으로 변경

* refactor: controller가 ActivityApi를 구현하게 변경

* chore: 불필요한 문자 제거

* style: 서비스 로직 최적화

* chore: 불필요한 코드 삭제

* chore: 충돌 해결

* chore: 불필요한 문자 제거

* chore: 1차 코드 리뷰 피드백 적용

* chore: 테스트 정보 주정

* style: 테스트에 param 적용

* chore: 줄 바꿈 수정

* style: 반환 타입 을 dto로 변경

* style: 컨트롤러 변수의 반환타입을 명시적으로 변경

* chore: 피드백 반영

* chore: 테스트 코드 내용 추가

* chore: ActivitiesResponseList Dto이름 변경

* feat: Presigned URL 구현 (#210)

* feat: Enum Converter 추가

* style: 변수명 변경

* style: 불필요한 주석 제거

* refactor: Controller 테스트 제거

* refactor: 예외 수정

* chore: 패키지 구분

* refactor: 외부 API로 구분

* style: 공백제거

* test: 테스트 수정

* refactor: 변수명 변경

* refactor: fileName 포함하도록 수정

* refactor: request dto swagger 설명 추가

* refactor: passwordEncoder 활용하도록 수정 (#211)

* fix: 특정 상점 전체메뉴조회 응답 객체 미스매치 수정 (#214)

* feat: 특정 상점 모든 메뉴조회 api 작성

* feat: 특정 상점 모든 메뉴조회 api 테스트코드 작성

* feat: 코드리뷰사항 반영 1 차

* feat: 코드 리뷰사항 반영 2차

* fix: menus응답 수정

* chore: 충돌 해결

* chore: 충돌 해결

* chore: 응답 필드 이름 수정

* chore: 응답 필드 이름 수정

* feat: 시간표 기능 구현 (#212)

* feat: 시간표 조회 기능 추가

* feat: 시간표 생성 기능 추가

* feat: 시간표 수정/삭제 기능 추가

* fix: 시간표 수정 변경

* refactor: 리뷰 반영 1차

* refactor: 리뷰 반영 2차

* refactor: 리뷰 반영 3차

* refactor: UpdateTimeTableRequest 이름 수정

UpdateTimeTableRequest -> TimeTableUpdateRequest

* refactor: 리뷰 반영 5차

* refactor: 리뷰 반영 6차

* feat: 파일 단건 업로드 구현 (#227)

* feat: 파일 단건 업로드 구현

* refactor: swagger 문서 추가

* refactor: swagger 설명 추가

* refactor: 미사용 변수 제거

* refactor: 파일 최대크기 설정 변경

* refactor: 필드주입방싱을 생성자주입 방식으로 변경

* feat: 파일 다중 업로드 구현 (#229)

* feat: 파일 다중 업로드 구현

* docs: swagger 수정

* feat: 영양사 권한 추가 (#231)

* feat: 영양사 권한 추가

* fix: 후행쉼표 추가

* fix: 복덕방 전제 조회 응답 객체 미스매치 수정 (#215)

* chore: LandListItemResponse dto이름 LandsResponse로 변경

* fix: 반환값 list에서 key value형태로 변경

* fix: UploadServiceTest 수정

* style: 라인 포맷팅

* chore: ActivityResponse 예시 수정

* style: dto를 일반 클래스에서 record클래스로 수정

* style: ActivitiesResponse dto를 일반 클래스에서 record클래스로 수정

* feat: FCM 설정 (#232)

* refactor: 상점 Entity 연관관계 설정 (#237)

* feat: shop연관관계 수정

* refactor: 서비스레이어 dto변환 로직 제거

* feat: 상점사장님이 특정 상점을 조회하는 api작성 (#240)

* feat: 상점조회 api작성

* chore: 라인포맷팅

* chore: 권한이 없는 사장님이 특정 상점 조회 테스트 코드 분리

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* feat : 영양사 품절 정보 입력 (#238)

* feat : Dining 클래스에 soldOut 컬럼 추가

* feat : DiningResponse DTO에 soldOut 컬럼 추가

* feat : flyway DB에 sold_out 컬럼 추가

* feat : SoldOutRequest DTO 클래스 추가(메뉴아이디, 품절여부)

* feat : CoopDiningController, CoopDiningApi 클래스 추

* feat : CoopDiningService 클래스 추가

* feat : DiningRepository 품절여부 변경 메서드 추가, 테스트용 메서드 추

* feat : 영양사 품절 요청 테스트, 권한 확인 테스트 추

* feat : 기존 테스트 동작하도록 수정

* feat : 리뷰 반

* feat : 리뷰 반영, 테스트 방식 변

* feat : coop 패키지 분

* feat : setSoldOut() 메서드 추

* feat : update 방식을 조회 후 set해주는 방식으로 변

* feat : 사용하지 않는 메서드 삭

* feat : 패키지 변경으로 인한 테스트 변경

* feat : 인가 테스트로 변경

* feat : getById()로 수정

* feat : 개행 추가

* feat : 메뉴가 없는 경우 예외 추가

* refactor: 컨벤션 반영

* refactor: snakecase로 변경

* feat : 영양사 코너별 식단 사진 업로드  (#241)

* feat : 충돌 해결

* chore : VersionException 제거

* chore : SnakeCaseStrategy import static 수정

* refactor : 엔티티 id int -> Long 수정

* feat : 사장님 식당 생성, 특정 상점 조회 API구현 (#199)

* feat: 상점 생성 기능 추가

* feat: 상점등록을 하기 위해 연관된 model정의

* feat: shop과 관련된 repository, exception작성

* feat: 1차 테스트 완료

* feat: 사장님 상점 생성 기능 구현

* feat: 특정상점조회 API구현

* refactor: 특정상점조회 테스트코드 수정

* chore: import경로 오류 수정

* chore: pull충돌 해결

* refactor: saveAll제거

* feat: 스웨거 설명 추가

* refactor: Builder생성자 접근제어 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* feat : 커스텀 예외처리 추가

* chore : 충돌 해결

* chore : 테스트 정보 수정

* chore : 파라미터 설명 추가

* refactor : menu String -> List 수정

* fix : 테이블명 수정

* refactor : 현재시간에 대한 테스트를 위해 clock 모킹 추가

* remove : 사용하지 않는 예외 삭제

* chore : 테스트코드 public 제외, 불필요한 공백 삭제

* feat : 영양사 컨트롤러, 서비스 구현

* feat : 식단 이미지 변수 추가

* feat : 영양사 권한 및 영양사 도메인 enum 추가

* feat : image 컬럼 추가

* feat : Image 업로드 요청 DTO 생성

* feat : 영양사님의 사진 업로드 테스트 추가

* feat : 특정 식단의 이미지 업데이트 쿼리 추가

* feat : 쿼리문 수정

* chore : log 제거

* refactor : coop Api 분리

* refactor : image_url로 변수명 수정

* refactor : image_url로 변수명 수정

* chore : menuId로 변수명 구체화

* chore : V$ -> V3 버전 수정

* remove : repository 계층 트랜잭션 제거(service 계층 처리)

* feat : 허용되지 않은 권한에 대한 테스트 추가

* refactor : update 수정(setter 이용)

* refactor : 테스트 - 허용되지않은 권한 수정

* refactor : getById() 추가

* chore : Optional 검증을 위해 findById() -> getById() 수정

* remove() : DynamicUpdate 제거

* chore : 충돌 해결

* chore : 파일 위치 수정

---------

Co-authored-by: Hyeonsu Lee <127578418+20HyeonsuLee@users.noreply.github.com>

* feat: 사장님 회원가입 (#244)

* feat: 사장님 회원가입 및 슬랙 알림발송 구현

* refactor: slack 알림발송 로직 수정

* refactor: 사장님 회원가입 로직 구성

* test: 미사용 테스트 제거

* style: 코드 포맷팅

* test: 테스트 수정

* refactor: update flyway

* feature: 상점 사장님 관련 모든 GET API를 작성했습니다. (#245)

* feat: 상점조회 api작성

* chore: 라인포맷팅

* feat: 점주전용 상점관련 조회 api작성

* feat: 사장님 상점 조회 api get 모두 작성

* chore: 리뷰사항 반영

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* fix: 게시판 공지사항 판단 로직 수정 (#246)

* fix: 공지사항 판단 로직 수정

* fix: 공지사항 판단 로직 재수정

* refactor: 게시판 태그 enum으로 분리

* feat: 사장님 인증코드 검증 (#248)

* feat: 사장님 인증번호 인증 구현

* refactor: 로직 수정 및 인증이 완료된 값에 대해 레디스 제거

* test: 테스트 추가

* build: 테이블 복원

* refactor: 인증방식 수정, 사용자 인증없이 사용자 id만 필요한 경우 `@UserId`를 사용하도록 수정

* test: MySQL 테스트 컨테이너 버전 8.0.29로 수정

* refactor: ArgumentResolver Webconfig 등록

* refactor: 파일업로드 임시 토큰에 대한 허용

* test: 테스트 수정

* refactor: 변수 사용

* fix: 전공별 커리큘럼 링크 수정, 새로운 과 추가 (#251)

* fix: 전공별 커리큘럼 링크 수정, 새로운 과 추가

* fix: 전공별 커리큘럼 링크 다시 수정

* chore: DeptListItemResponse이름을 DeptsResponse로 변경

* style: 와일드 카드 사용하지 않는 것으로 다시 원래대로 복구

* chore: 주석 설명 변경

* style: 열거형 사용해서 필터 하게 변경

* feat: 사장님 비밀번호 재발급 구현 (#253)

* feat: 사장님 인증번호 인증 구현

* refactor: 로직 수정 및 인증이 완료된 값에 대해 레디스 제거

* test: 테스트 추가

* build: 테이블 복원

* refactor: 인증방식 수정, 사용자 인증없이 사용자 id만 필요한 경우 `@UserId`를 사용하도록 수정

* test: MySQL 테스트 컨테이너 버전 8.0.29로 수정

* refactor: ArgumentResolver Webconfig 등록

* refactor: 파일업로드 임시 토큰에 대한 허용

* test: 테스트 수정

* feat: 사장님 비밀번호 찾기 API 구현

* refactor: 이메일 형식 수정

* refactor: 인증 제거

* feat : 회원 정보 수정 (#236)

* feat : DTO 추가

* feat : 유저 수정 추가

* test : log.all() 삭제 및 422번 오류 삭제

* chore : update 수정 및 사용하지 않는 Request 객체 삭제

* refactor : update 이름 수정

* refactor : DTO major 라인 포맷팅

* chore : bulider() 미사용 및 update 로직 수

* chore : 리뷰 반영 및 학부/학번 404 -> 400번 오류로 수정

* chore : ApiResponse 수정

* chore : 리뷰 반영

* chore : withDetail 수정

* chore : 리뷰 반영(코드 스타일 및 메소드 분리)

* chore : Local 내 회원 정보 조회 오류 확인 추가

* chore : 삼항 연산자 제거

* chore : Response department null 처리 추가

* chore : 변수 수정 및 Gender null 처리 추가

* chore : 변수 수정 및 department null 처리 추가

* chore : DB 학과 한글 저장

* chore : DB 저장 체크(Enumerated 삭제)

* chore : DB 저장 체크(Enumerated 삭제 및 model 이름 수정)

* chore : ENUM 사용하도록 재수정

* fix : ENUM -> STRING 사용

* chore : 검증 ENUM으로 이동

* chore : ENUM 영어 변수로 수정

* chore : ENUM 후행 쉼표 추가

* fix: 학기 최신 순으로 반환 (#268)

* feat : 알림 구독 Api 구현 (#269)

* feat : 충돌 해결

* chore : VersionException 제거

* chore : SnakeCaseStrategy import static 수정

* refactor : 엔티티 id int -> Long 수정

* feat : 사장님 식당 생성, 특정 상점 조회 API구현 (#199)

* feat: 상점 생성 기능 추가

* feat: 상점등록을 하기 위해 연관된 model정의

* feat: shop과 관련된 repository, exception작성

* feat: 1차 테스트 완료

* feat: 사장님 상점 생성 기능 구현

* feat: 특정상점조회 API구현

* refactor: 특정상점조회 테스트코드 수정

* chore: import경로 오류 수정

* chore: pull충돌 해결

* refactor: saveAll제거

* feat: 스웨거 설명 추가

* refactor: Builder생성자 접근제어 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* refactor: ShopResponse 적팩메이름 of로 변경

* feat : 커스텀 예외처리 추가

* chore : 충돌 해결

* chore : 테스트 정보 수정

* chore : 파라미터 설명 추가

* refactor : menu String -> List 수정

* fix : 테이블명 수정

* refactor : 현재시간에 대한 테스트를 위해 clock 모킹 추가

* remove : 사용하지 않는 예외 삭제

* chore : 테스트코드 public 제외, 불필요한 공백 삭제

* feat : 영양사 컨트롤러, 서비스 구현

* feat : 식단 이미지 변수 추가

* feat : 영양사 권한 및 영양사 도메인 enum 추가

* feat : image 컬럼 추가

* feat : Image 업로드 요청 DTO 생성

* feat : 영양사님의 사진 업로드 테스트 추가

* feat : 특정 식단의 이미지 업데이트 쿼리 추가

* feat : 쿼리문 수정

* chore : log 제거

* refactor : coop Api 분리

* refactor : image_url로 변수명 수정

* refactor : image_url로 변수명 수정

* chore : menuId로 변수명 구체화

* chore : V$ -> V3 버전 수정

* remove : repository 계층 트랜잭션 제거(service 계층 처리)

* feat : 허용되지 않은 권한에 대한 테스트 추가

* refactor : update 수정(setter 이용)

* refactor : 테스트 - 허용되지않은 권한 수정

* refactor : getById() 추가

* chore : Optional 검증을 위해 findById() -> getById() 수정

* remove() : DynamicUpdate 제거

* chore : 충돌 해결

* chore : 파일 위치 수정

* feat : 알림 구독 엔티티 생성

* feat: flyway 테이블 추가

* feat: API 형태 추가

* feat: 알림구독 추가, 삭제 컨트롤러 작성

* feat: 레포지토리 추가중..

* feat : delete api 수정

* feat: post 수정 중 ..

* feat: GET 요청 반환값 만들기

* feat: 안정화

* feat: notification 팩토리 추가

* feat: getNotification 테스트코드 작성중

* test: 테스트 작성 중..

* feat: getNotification 테스트코드 작성완료

* feat: 스네이크케이스로 변경 후 디바이스토큰 추가 테스트코드 작성

* feat: post반환값 수정

* feat : deleteNotification 테스트 코드 추가

* feat : NotificationApiTest 완성

* remove : 알림 구독 관련 테스트 제거

* fix: 상속 받는 예외 클래스 수정

* fix: BIGINT -> UNSIGNED INT 수정

* test: koinAppUrl 추가

* style: 라인포맷팅

* test: .log().all() 제거

---------

Co-authored-by: Hyeonsu Lee <127578418+20HyeonsuLee@users.noreply.github.com>
Co-authored-by: songsunkook <songsunkook@gmail.com>
Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>
Co-authored-by: 최준호 <junho5336@gmail.com>

* feat: 메뉴 변경 여부 추가 (#250)

* feat: 메뉴 변경 확인 추가

* refactor: 테스트 수정

* feat: flyway 컬럼 추가

* refactor: V4에서 V5로 변경

* rename: V5에서 V6으로 변경

* Revert "feat: 메뉴 변경 여부 추가 (#250)" (#273)

This reverts commit f8458cce0f1b7fdbb05089d15d59619c39b0c6f5.

* refactor: 메뉴 변경 여부 컬럼명 통일 (#274)

* feat: 메뉴 변경 확인 추가

* refactor: 테스트 수정

* feat: flyway 컬럼 추가

* refactor: V4에서 V5로 변경

* rename: V5에서 V6으로 변경

* refactor: 필드명 변경

* refactor: 필드명 변경

* feat: 버스 남은 시간 조회 - 시내버스 (#239)

* feat: API 골격 작성

* feat: mongoDB 의존성 추가

* feat: 응답 객체 작성

* feat: 예외 추가

* feat: 엔티티 작성

* feat: 미운행인 버스 필터링

* feat: enum 추가

* feat: 남은 시간 계산 로직 작성

* feat: 가장 최근 버스까지 남은 시간 응답 구현

* feat: 미운행 요일 제외 로직 추가

* feat: 버스 정거장 검증로직 적용 및 중복되는 시간 제외

* refactor: enum 객체를 사용하도록 수정

* refactor: 등하교 방향 기준 탐색에서 정류장 탐색으로 로직 변경

* remove: 미사용 코드 제거

BusCourse.isRunning()

* refactor: 테스트 mocking 위해 Clock 사용하도록 수정

* test: 테스트컨테이너 mongoDB 추가

* test: 셔틀 버스 조회 테스트 추가

* feat: 시내버스 Open API 호출 로직 작성

* feat: 방향 판단 로직 추가

* fix: 호출 예외 수정

* feat: json 파싱 로직 작성

1. json 파싱 로직 작성
2. 결과 코드 검증
3. 예외 추가 (500 반환)

* feat: API 골격 작성

* feat: mongoDB 의존성 추가

* feat: 응답 객체 작성

* feat: 예외 추가

* feat: 엔티티 작성

* feat: 미운행인 버스 필터링

* feat: enum 추가

* feat: 남은 시간 계산 로직 작성

* feat: 가장 최근 버스까지 남은 시간 응답 구현

* feat: 미운행 요일 제외 로직 추가

* feat: 버스 정거장 검증로직 적용 및 중복되는 시간 제외

* refactor: enum 객체를 사용하도록 수정

* refactor: 등하교 방향 기준 탐색에서 정류장 탐색으로 로직 변경

* remove: 미사용 코드 제거

BusCourse.isRunning()

* refactor: 테스트 mocking 위해 Clock 사용하도록 수정

* test: 테스트컨테이너 mongoDB 추가

* test: 셔틀 버스 조회 테스트 추가

* docs: API 문서에 파라미터 정보 명시

* remove: 불필요 주석 제거

* refactor: 누락된 Transactional 추가

* fix: mocking 변수 선언부 이동

* remove: 불필요 주석 제거

* refactor: 도착 시각 패턴 불일치 시 예외처리

* refactor: 반복문을 stream으로 변환

* refactor: 엔티티 필드로 List 사용 시 미리 초기화

* refactor: String 비교 시 NPE 예방

* refactor: 불필요한 매핑 메서드 제거

* refactor: 변수 분리

* rename: 변수명 수정

* fix: 충돌 해결

* refactor: Builder 생성자 접근제어자 수정

* refactor: enum 필드 간소화

* fix: 충돌 해결

* feat: 버스번호 필터링

* feat: 시내버스 조회 정보를 레디스 캐시로 저장

* feat: 버전 최신화 메서드 작성

* refactor: Pair를 사용하지 않도록 수정

* feat: ApiType 추가

- BusType과 BusOpenApiRequester 타입 맵핑을 위함

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 주석 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: record로 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 시내버스 캐시 저장 정보 변경

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* feat: 시내버스 버스 번호 반환 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* feat: 버스 타입별 로직 분기 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 캐싱 정보 추가

- 남은 시간만 캐싱 -> 버스 도착 정보 통째로 캐싱
- api url 수정
- 버전 정보 저장
- forEach -> for

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 시내버스 남은 시간 계산 로직 추가

- 버스 캐싱 정보 수정
- 시내버스 남은 시간 계산 로직 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 응답 객체 수정

- 기존: "now_bus": {"bus_number": null, ...}
- 수정: "now_bus": null

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 주석 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 응답 객체 null 체크 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* feat: test 작성

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 빈 배열 반환하도록 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 도착시간순 정렬 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 시간 차 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: null 필터링 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: updated_at 변경 로직 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: .log().all() 삭제

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: switch문 if문으로 변경

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 복붙 문제 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* style: 컨벤션 적용

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* rename: BusInfoCache -> BusCache 이름 변경

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 주석 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* style: 컨벤션 적용

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: .log().all() 삭제

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 패키지 분리

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 상수, 검증 로직 분리

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 파일 이름 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: Bus.java 삭제와 구조 변경

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 시내버스 남은 시간 - Redis 테스트 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 시내버스 남은 시간 - OpenApi 테스트 중간 작성

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 변수명 변경

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* feat: 시내버스 남은 시간 - OpenApi 테스트 추

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 시내버스 테스트 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: Constant 클래스 enum으로 변경

* refactor: 캐시 만료 시간 분리

* Revert "refactor: Constant 클래스 enum으로 변"

This reverts commit 5dcbf975cccbbd276dfa5e8dbbb52864eca6c209.

* Revert "Revert "refactor: Constant 클래스 enum으로 변""

This reverts commit f321b7eb60f0d5426a1fef4d839c4861a08198a2.

* refactor: Constant 클래스 네이밍 변경

* feat: 버스 번호 필터링 추가

- 400, 402, 405

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* chore: 충돌 해결

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* style: 줄바꿈

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 중괄호 제거

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* test: OPEN_API_KEY 추가

* refactor: 리뷰 반영

* refactor: 디버그 코드 삭제

---------

Co-authored-by: songsunkook <songsunkook@gmail.com>
Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* feature: 상점 사장님 관련 추가, 수정, 삭제 / 일반유저 모든 상점 조회 api작성 (#270)

* feat: delete Api 구현

* feat: 테스트코드 작성

* feat: 메뉴생성요청 dto작성

* feat: 상점 사장님 추가, 수정 / 일반 유저 모든상점조회 api 작성

* feat: 라인 포맷팅

* feat: 테스트코드 로그 제거

* feat: 피드백 반영 1차

* chore: 디버깅용 출력 제거

* chore: 리뷰반영 2

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* feat: spring actuator 추가 (#276)

Co-authored-by: Jang Jun Young <police0022@naver.com>

* fix: 상점 생성 서버에러(@Valid 추가) (#281)

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* refactor: 조회 방식 수정 (#284)

* feat: 상점 모든 카테고리 조회 api작성 (#282)

* feat: delete Api 구현

* feat: 테스트코드 작성

* feat: 메뉴생성요청 dto작성

* feat: 상점 사장님 추가, 수정 / 일반 유저 모든상점조회 api 작성

* feat: 라인 포맷팅

* feat: 테스트코드 로그 제거

* feat: 피드백 반영 1차

* chore: 디버깅용 출력 제거

* chore: 리뷰반영 2

* feat: 모든 상점 카테고리 조회 api작성

* chore: 충돌해결

* chore: 충돌해결

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* �fix: student Entity 필드 수정 (#286)

* refactor: #283 작업 revert

* refactor: UserIdentity Ordinal로 수정

* refactor: 로그아웃, 탈퇴에 대한 권한 수정 (#288)

* refactor: 이메일 인증 요청 dto 값 수정 (#290)

* refactor: dto 네이밍 수정

* refactor: 사용자 성별 반환값 ordinal로 수정

* feat: lecture blank error (#293)

* fix: 공백 문자 처리

* chore: log 제거

* style: 코드 효율적으로 전환

* fix: timetables 반환값 수정 (#294)

* refactor: 반환값 형태 수정

* test: 테스트 값 수정

* test: 주석 제거

* refactor: trim -> strip 으로 변경

* test: 로그 제거

* fix/291 get lecture blank error reopen (#296)

* fix: 공백 문자 처리

* chore: log 제거

* style: 코드 효율적으로 전환

* fix: 완전 비어 있는 리스트 처리

* chore: 우선 복구

* feat: 가게 이벤트 정보 조회 (#298)

* feat: stage logback 적용 (#300)

* feat: 로깅 추가

* feat: dev profile에만 추가되도록 구성

* feat: slack 알림발송 로직 추가

* refactor: 테스트용 코드 제거

* feat: slack 알림 메시지 수정 (#306)

* feat: slack 알림 메시지 수정

* feat: 피드백 반영

* feat: 피드백 반영2

---------

Co-authored-by: Jang Jun Young <police0022@naver.com>

* fix : userGender null 값 처리 추가 (#304)

* feat: get member (#311)

* feat: Get /members 구현

* feat: 사용자 단건조회 구현

* test: 테스트 구성

* fix: 없는 상점 조회 시 예외 발생 (#313)

* fix: 없는 상점 조회시 예외 던지기

* chore: 개행 삭제

* chore: 라인포맷팅

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* fix: 연관관계 수정 (#315)

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* fix: 상점 사장님 회원가입 에러 수정 (#316)

* fix: 연관관계 수정

* fix: 연관관계 수정

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* Fix: bearerToken 추출 오류 수정 (#309)

* refactor: 강의시간 문자열 분리 수정

* refactor: BEARER_TYPE 수정

* refactor: 수정

* feat: is_event값 추가 (#302)

* test: add JsonAssertions

* feat: isEvent 값 추가

* test: 인자 변수로 수정

* test: 테스트 수정

* feat: 시외버스 API 구현 (#317)

* feat: API 골격 작성

* feat: mongoDB 의존성 추가

* feat: 응답 객체 작성

* feat: 예외 추가

* feat: 엔티티 작성

* feat: 미운행인 버스 필터링

* feat: enum 추가

* feat: 남은 시간 계산 로직 작성

* feat: 가장 최근 버스까지 남은 시간 응답 구현

* feat: 미운행 요일 제외 로직 추가

* feat: 버스 정거장 검증로직 적용 및 중복되는 시간 제외

* refactor: enum 객체를 사용하도록 수정

* refactor: 등하교 방향 기준 탐색에서 정류장 탐색으로 로직 변경

* remove: 미사용 코드 제거

BusCourse.isRunning()

* refactor: 테스트 mocking 위해 Clock 사용하도록 수정

* test: 테스트컨테이너 mongoDB 추가

* test: 셔틀 버스 조회 테스트 추가

* feat: 시내버스 Open API 호출 로직 작성

* feat: 방향 판단 로직 추가

* fix: 호출 예외 수정

* feat: json 파싱 로직 작성

1. json 파싱 로직 작성
2. 결과 코드 검증
3. 예외 추가 (500 반환)

* feat: API 골격 작성

* feat: mongoDB 의존성 추가

* feat: 응답 객체 작성

* feat: 예외 추가

* feat: 엔티티 작성

* feat: 미운행인 버스 필터링

* feat: enum 추가

* feat: 남은 시간 계산 로직 작성

* feat: 가장 최근 버스까지 남은 시간 응답 구현

* feat: 미운행 요일 제외 로직 추가

* feat: 버스 정거장 검증로직 적용 및 중복되는 시간 제외

* refactor: enum 객체를 사용하도록 수정

* refactor: 등하교 방향 기준 탐색에서 정류장 탐색으로 로직 변경

* remove: 미사용 코드 제거

BusCourse.isRunning()

* refactor: 테스트 mocking 위해 Clock 사용하도록 수정

* test: 테스트컨테이너 mongoDB 추가

* test: 셔틀 버스 조회 테스트 추가

* docs: API 문서에 파라미터 정보 명시

* remove: 불필요 주석 제거

* refactor: 누락된 Transactional 추가

* fix: mocking 변수 선언부 이동

* remove: 불필요 주석 제거

* refactor: 도착 시각 패턴 불일치 시 예외처리

* refactor: 반복문을 stream으로 변환

* refactor: 엔티티 필드로 List 사용 시 미리 초기화

* refactor: String 비교 시 NPE 예방

* refactor: 불필요한 매핑 메서드 제거

* refactor: 변수 분리

* rename: 변수명 수정

* fix: 충돌 해결

* refactor: Builder 생성자 접근제어자 수정

* refactor: enum 필드 간소화

* fix: 충돌 해결

* feat: 버스번호 필터링

* feat: 시내버스 조회 정보를 레디스 캐시로 저장

* feat: 버전 최신화 메서드 작성

* refactor: Pair를 사용하지 않도록 수정

* feat: ApiType 추가

- BusType과 BusOpenApiRequester 타입 맵핑을 위함

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 주석 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: record로 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 시내버스 캐시 저장 정보 변경

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* feat: 시내버스 버스 번호 반환 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* feat: 버스 타입별 로직 분기 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 캐싱 정보 추가

- 남은 시간만 캐싱 -> 버스 도착 정보 통째로 캐싱
- api url 수정
- 버전 정보 저장
- forEach -> for

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 시내버스 남은 시간 계산 로직 추가

- 버스 캐싱 정보 수정
- 시내버스 남은 시간 계산 로직 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 응답 객체 수정

- 기존: "now_bus": {"bus_number": null, ...}
- 수정: "now_bus": null

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 주석 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 응답 객체 null 체크 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* feat: test 작성

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 빈 배열 반환하도록 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 도착시간순 정렬 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 시간 차 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: null 필터링 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: updated_at 변경 로직 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: .log().all() 삭제

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: switch문 if문으로 변경

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 복붙 문제 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* style: 컨벤션 적용

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* rename: BusInfoCache -> BusCache 이름 변경

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: 주석 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* style: 컨벤션 적용

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: .log().all() 삭제

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 패키지 분리

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 상수, 검증 로직 분리

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 파일 이름 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: Bus.java 삭제와 구조 변경

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 시내버스 남은 시간 - Redis 테스트 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 시내버스 남은 시간 - OpenApi 테스트 중간 작성

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 변수명 변경

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* feat: 시내버스 남은 시간 - OpenApi 테스트 추

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 시내버스 테스트 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* refactor: Constant 클래스 enum으로 변경

* refactor: 캐시 만료 시간 분리

* Revert "refactor: Constant 클래스 enum으로 변"

This reverts commit 5dcbf975cccbbd276dfa5e8dbbb52864eca6c209.

* Revert "Revert "refactor: Constant 클래스 enum으로 변""

This reverts commit f321b7eb60f0d5426a1fef4d839c4861a08198a2.

* refactor: Constant 클래스 네이밍 변경

* feat: 버스 번호 필터링 추가

- 400, 402, 405

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* chore: 충돌 해결

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* style: 줄바꿈

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 중괄호 제거

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* test: OPEN_API_KEY 추가

* refactor: 리뷰 반영

* feat : 인수인계용 커밋

* feat: 시외버스기능구현

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>, Choon0414 <hyunn815@naver.com>

* feat: 시외버스 리팩터링

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>, Choon0414 <hyunn815@naver.com>

* test: 테스트 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>, Choon0414 <hyunn815@naver.com>

* test: 테스트 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>, Choon0414 <hyunn815@naver.com>

* test: 테스트 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>, Choon0414 <hyunn815@naver.com>

* test: 테스트 제거

* refactor: 미사용 메소드 제거

* refactor: 네이밍 수정

* refactor: 네이밍 수정

* refactor: 네이밍 수정

* refactor: ttl 선언방식 수정

* refactor: 불필요한 추상화 제거

* refactor: 네이밍 수정

* style: 공백제거

* style: 코드 포맷팅

* style: 미사용 메소드 제거

* style: 미사용 클래스 제거

* refactor: API 사용 수정

* refactor: 클래스명 수정

---------

Co-authored-by: songsunkook <songsunkook@gmail.com>
Co-authored-by: 박성빈 <psb106305@gmail.com>
Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>

* fix: 사장님 가게정보 수정 오류 (#319)

* refactor: cascade 옵션 수정

* refactor: flush 추가

* fix: menu 정보 수정 시에도 flush 추가 (#320)

* refactor: cascade 옵션 수정

* refactor: flush 추가

* refactor: flush 추가

* refactor: 식단 품절, 변경 여부 (Boolean -> 시간)으로 변경 (#310)

* refactor: flyway 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: Boolean에서 LocalDateTime으로 변경

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* test: Boolean에서 LocalDateTime으로 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* test: DisplayName 수정

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: 품절 취소로직 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* refactor: DTO NotNull Valid 추가

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

---------

Co-authored-by: dradnats1012 <herjebi1012@gmail.com>

* feat: 유저 권한 조회 API 작성 (#322)

* feat: 유저 권한 조회 API 작성

* test: 테스트 작성

* refactor: 식단 조회 API DTO 필드명 변경 (#324)

* fix: @Param추가 (#327)

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* feat: 학생 회원가입 (#271)

* feat: 에외 추가

* feat: 이메일 폼 추가

* feat: 골격 추가

* feat: 서비스 로직 구현

* feat: 인증 완료 폼

* feat: 회원 등록 폼 타임리프 설정

* feat: 이메일 인증 실패 폼

* feat: Controller 추가

* feat: 인증 완료시 isAuthed true 변경

* feat: 학번 학부 인증 및 UserIdentity->ordinal로 변경

* feat: 학생 회원가입 dto

* feat: Service 구현

* feat: 토큰으로 부터 찾는 메서드 Repository에 추가

* feat: authToken 암호화 Util

* feat: koreatehc.ac.kr 도메인 검증

* feat: 학번과 학부 검증

* feat: 슬랙 알림

* feat: 학생 이메일 요청, 가입 이벤트

* feat: 토큰 유효기간 설정 DateUtil

* feat: 잘못된 학번 형식 예외

* feat: 이메일 인증 검증 dto

* feat: 회원가입 이메일 인증 폼 데이터

* refactor: contorller 메서드 수정

* feat: 테스트 작성

* refactor: 컨벤션 맞게 수정

* refactor: log().all() 제거

* refactor: 컨벤션에 맞게 수정

* refactor: authToken passwordEncoder를 통해 암호화

* refactor: 학번 검증 수정

* refactor: 학번 검증 수정

* refactor: 메서드 네이밍수정

* refactor: 필드 controller->service 이동

* refactor: 유효하지 않은 데이터 400으로 반환

* refactor: 라인포맷팅

* refactor: 라인포맷팅

* feat: 에러코드반환수정 및 학번검증 테스트 추가

* refactor: 오류 해결

* refactor: 폼 반환 로직 수정

* refactor: 라인포맷팅

* refactor: 날짜 관련 로직 수정

* refactor: 호스트주소 추출 어노테이션으로 변경

* refactor: 학부,학번 검증 로직 변경

* refactor: 비밀번호 example 중복 제거

* refactor: 폼 반환 service 로직 수정

* refactor: 호스트 주소 어노테이션 적용

* refactor: 머지 형식에 맞게 수정

* refactor: 최신 전공 형식에 맞게 수정

* refactor: InvalidDataException -> IllegalException 변경

* refactor: 개행 수정

* refactor: camelCase로 수정

* refactor: 테스트명 수정

* refactor: expiredAt clock인자 받게 수정

* refactor: authToken UUID로 수정

* refactor: LocalTimeStringConverter 이름을 LocalTimeToHHmmStringConverter로 변경

* refactor: User객체 날짜 관련 속성LocalTimeToHHmmStringConverter 이용

* refactor: 학번 검증 수정

* refactor: host어노테이션 이름 변경

* refactor: LocalDate관련 수정

* refactor: 라인포맷팅

* refactor: LocalDate관련 클래스이름 수정

* refactor: URL얻어오는 코드 수정

* refactor: AuthResult orElse -> orElseGet

* refactor: LocalTimeAttributeConverter 원래대로 수정

* refactor: 라인포맷팅

* refactor: orElseGet 수정

* feat: 신규상점 생성시 기본 카테고리 추가 (#331)

* fix: @Param추가

* feat: 신규 상점 생성 시 기본 메뉴 카테고리 추가

* chore: 라인포맷팅

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* fix: AttributeConverter 오류 수정 (#335)

* feat: FCM 발송방식 수정 (#333)

* docs: github workflow 설정 추가

* refactor: 알림 발송형태 수정

* refactor: 컬럼명 수정

* feat: isEvent 추가 (#337)

* fix: shopId null일때 처리하기 (#341)

* feat: 비밀번호 변경 로직 구현 (#342)

* feat : 수정을 위한 1차 커밋

* feat : mailForm 생성 및 DTO, mail html 추가

* feat: controller 작성

* feat: webConfig 추가

* feat: resetToken전달하도록 수정

* feat: 이메일 전송

* feat: 버튼 누를 때 기능

* chore : 권한 static import

* chore : LocalDateTime 형식으로 수정 및 미사용 파일 삭제

* feat: 비밀번호 초기화 구현

* docs: hidden 추가

* style: 개행제거

---------

Co-authored-by: duehee <149302959+duehee@users.noreply.github.com>
Co-authored-by: daheeParkk <qkrekgml7414@naver.com>

* fix : JsonProperty 삭제 (#345)

* fix : Mixed Content 헤더 추가 (#347)

* fix: attributeConverter milli second 길이가 두개인 경우도 반영 (#348)

* fix: mili second 길이가 두개인 경우도 반영

* fix: authExpiredAt 시간 변경

* chore: datetimeformatter 변수명 변경

* Fix: attribute converter 오류 수정 (#349)

* refactor: 회원가입 인증 토큰 만료기간 수정

* fix: AttributeConverter 오류 수정

* fix : 삭제된 userGender null 로직 추가 (#357)

* feat: 이벤트 추가, 수정, 삭제, 베너조회 api 작성 (#350)

* fix: @Param추가

* feat: 신규 상점 생성 시 기본 메뉴 카테고리 추가

* chore: 라인포맷팅

* feat: 이벤트 추가 api 자것ㅇ

* feat: 이벤트 수정 컨트롤러 생성

* feat: 이벤트 수정, 삭제 api작성

* feat: 이벤트 추가 테스트코드 작성중

* feat: 이벤트 수정, 삭제, 베너 조회 테스트 코드 작성

* fix: 특정 상점 이벤트 조회 테스트코드 수정

* refactor: log().all()삭제

* refactor: 진행중인 이벤트 검색 repository메소드명 변겅

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* fix: isAuthed 검증 추가 (#355)

* fix: isAuthed 검증 추가

* refactor: 권한별 인증 세부 구분 추가

* refactor: 문구수정

* refactor: 문구수정

* test: 테스트 수정

* test: 테스트 수정

* Fix: 회원탈퇴 Hard Delete & 슬랙 알림 발송 (#352)

* fix: Hard Delete로 수정

* feat: 회원탈퇴시 슬랙 알람 발송

* refactor: 변수명 수정

* refactor: 유저 삭제시 fk 엔티티 삭제

* refactor: 탈퇴 로직 수정

* refactor: 테스트 수정

* refactor: 테스트 수정

* refactor: 로직 수정

* refactor: 로직 수정

* feat: 회원 탈퇴시 유저타입 추가 (#360)

* fix: soft delete메뉴 조회시 서버에러 해결 (#366)

* fix: @Param추가

* refactor: 연관관계 수정

* fix: menu를 통해 조회

* fix: lastUpdatedAt을 정적메소드를 통해 min선언

* chore: 라인 포맷팅

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* feat : 버스 코스 조회 구현 (#358)

* test : 버스 course 조회 controller 추가

* feat : 버스 course 조회 service 추가

* test : 버스 course 조회 test 추가

* chore : 줄바꿈 수정

* chore : 버스 course 조회 테스트 수정

* chore : 버스 course 조회 테스트 수정

* chore : 버스 course 조회 테스트 수정

* fix : snake case 수정

* feat: 버스 검색 구현 (#353)

* feat: 버스 검색 구현

* feat: 포맷 추가

* refactor: 메서드 위 변경

* feat: 버스 검색 테스트 작성

* refactor: 탑승까지 남은시간 반환 수정

- 기존: 하차까지 남은 시간 반환

* refactor: departure -> depart

* refactor: 리뷰 반영

* refactor: /bus 수정

* test: 버스 테스트 수정

* fix: 버스 노드 도착 시간이 시간이 아닌 경우 처리 (#328)

* refactor: 예외형태 수정 (#374)

* refactor: 예외형태 수정

* refactor: time 제거

* refactor: handleExceptionInternal 반환값 수정

* fix: 메뉴 삭제 시 연관 데이터 삭제 수정 (#368)

* fix: @Param추가

* refactor: 연관관계 수정

* fix: menu를 통해 조회

* fix: lastUpdatedAt을 정적메소드를 통해 min선언

* chore: 라인 포맷팅

* fix: orphanRemoval설정 끄기

* fix: list.clear시 entityManager에 반영 안되는 현상 수정

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* fix: jpa, schema 정합성 (#367)

* refactor: activity id Integer로 변경

* refactor: timestamp 명시

* refactor: LocalDateTimeAttributeConverter 개선

* refactor: id bigint로 변경

* Revert "refactor: activity id Integer로 변경"

This reverts commit bea44bb4c28c7e26b7494fcface5f8e95269f9cb.

* refactor: LocalDateTime 컬럼에 대해 columnDefinition 추가

* refactor: id 수정 flyway 제거

* refactor: Activity id Long -> Integer 수정

* refactor: Article id Long -> Integer 수정

* refactor: User id Long -> Integer 수정

* refactor: Article content, hit 수정

* refactor: Board id Long -> Integer 수정

* refactor: Board articleCount Long -> Integer 수정

* refactor: Board parentId, seq Long -> Integer 수정

* refactor: Comment id, content 수정

* refactor: Dining id, date 수정

* refactor: Dining soldOut, isChanged 수정

* refactor: EventArticle id, content 수정

* refactor: Shop, Menu Entity validate 맞게 수정

* refactor: Land validate 맞게 수정

* refactor: Lecture id Long -> Integer 수정

* refactor: Member, Track, Board Notification validate 조건에 맞게 수정

* refactor: Notification 수정

* refactor: OwnerAttachment 수정

* refactor: Owner boolean 처리

* refactor: Semester id Long -> Integer 수정

* refactor: ShopCategory id Long -> Integer 수정

* refactor: ShopCategoryMap id Long -> Integer 수정

* refactor: ShopImage id Long -> Integer 수정

* refactor: MenuOption id Long -> Integer 수정

* refactor: MenuImage, ShopOpen id Long -> Integer 수정

* refactor: Boolean 값 primitive로 수정

* refactor: Shop 필드값 수정

* refactor: Student identity 수정

* refactor: TechStack imageUrl 수정

* refactor: User 정보 수정

* refactor: Repository 정보 수정

* test: 테스트 수정

* fix: Repository 수정 (#377)

* fix: 매개변수 자료형 fix (#381)

* feat: CORS 설정 추가 (#382)

* refactor: 비밀번호가 틀렸을 때 반환하는 메시지 간략화 (#383)

* refactor: 스웨거에 400에러 표시 (#385)

* feat: 버스 시간표 불러오기 (#369)

* feat : 인수인계용 커밋

* feat : ExpressBusTimeTable record 삭제

* feat : ExpressBusTimetable 클래스 생성

* feat : ExpressBusOpenApiClient 클래스 완성

* feat : ExpressBusCache busInfos 생성자 다시 추가

* feat : busType.Lowercase 추가

* feat : 미사용 쿼리 제거, getBy로 변경

* feat : 테스트 추가

* feat : 리뷰 반영

* fix: flush 추가 및 unique 설정 (#386)

* fix: flush 추가

* feat: 연관관계 Unique 제약 추가

* refactor: flyway 구문 수정

* refactor: unique 제약조건 구성

* test: 테스트 수정

* �feat: 상점 이벤트 생성, 조회 기능 구현 (#387)

* refactor: 이벤트 get shop_id추가 및 이미지리스트 반환으로 dto변경

* refactor: 이벤트 조회관련 dto에 shopName, eventId 추가

* refactor: softdelete관련 이슈로 인한 shop -> eventArticle조회

* feat: 테스트코드 작성 중...

* refactor: 테스트 통과하도록 수정

* refactor: 메소드명 수정

* refactor: clock 주입

* refactor: flush 추가

* refactor: 코드 포맷팅

* test: 시간 조정

* refactor: api path 복수로 수정

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* feat: 사장님 가게 생성 시 알림 발송하도록 추가 (#389)

* feat: 사장님 가게 생성 시 알림 발송하도록 추가

* refactor: notification nullable

* fix: 자료형 수정 (#393)

* fix: 사장님 이벤트 날짜조건 제거한 DTO 추가 (#395)

* fix: 로그인에 권한 확인 로직 추가 (#397)

* Fix: 사장님 회원탈퇴 오류 (#380)

* fix: Column 'owner_id' cannot be null 해결

* refactor: 라인포맷팅

* refactor: 머지충돌

* refactor: 머지충돌

* refactor: 사장님 회원 탈퇴 수정

* refactor: shop 삭제 삭제

* feat : PUT user/student/me 현재 사용 닉네임 처리 로직 추가 (#391)

* feat : 사용 중인 본인 닉네임 검증 로직 추가

* chore : 오타 수정

* chore : nickname null 누락 사항 추가

* chore : 리뷰 반영 완료

* feat : depart json 네이밍 변경 (#402)

* feat : json 네이밍 변경

* feat : json 네이밍 변경

* fix: POST/user/refresh 반환코드 수정 (#399)

* fix: 반환코드 수정

* fix: 테스트 수정

* fix: 건축, 기계, 메카 커리큘럼 링크 수정 (#404)

* feat: 영양사 정보 조회 (#407)

* feat: 영양사 정보 조회 기능 구현

* test: 올바른 영양사 계정인지 확인하는 테스트 작성

* refactor: 메뉴, 메뉴카테고리 Soft Delete로 변경 (#417)

* feat: flyway is_delete컬럼 삭제 쿼리 작성

* feat: flyway is_delete컬럼 삭제 쿼리 작성

* feat: flyway is_delete컬럼 삭제 쿼리 롤백

* refactor: 메서드 이름 변경

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* docs: 스웨거 DTO 예시 수정 (#415)

* fix: 코인 인증 메일 폼 만료 시간 수정 (#414)

* chore: dto 예시 및 설명 추가 (#419)

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* feat : 품절 알림 발송 구현 (#372)

* feat : FCM 일괄 push 구현

* feat : Factory 품절 메시지 추가

* feat : repository 타입으로 찾기 추가

* feat : coop 품절 알림 관련 수정

* refactor : 서비스 호출 -> 이벤트 발생 수정

* feat : coop 이벤트 리스너 추가

* refactor : 멀티캐스팅 -> 반복 발송 수정

* test : coop 품절 이벤트 발송 테스트

* chore : 사용하지 않는 의존성 제거

* test : @MockBean 주입 AcceptanceTest로 이동

* refactor : push 메서드 분리

* chore : 충돌 해결

* chore : 생성자 -> builder 수정

* chore : builder 수정

* chore : 주석 제거

* refactor : 클래스 별 기능 재분류

* chore : 생성자 -> builder 수정

* chore : soldOutRequest 빌더 -> 생성자 선언으로 수정

* refactor: 특정 알림 구독 인자 수정 및 예외처리 (#416)

* refactor: 입력 파라미터 수정 및 알림 미구독 예외처리

* fix: 인자명 복구 및 테스트 수정

* feat: 이벤트메뉴 -> 추천메뉴, 대표메뉴 -> 메인 메뉴 update flyway 추가 (#424)

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* docs: Swagger 필수인자 명시 (#425)

* dosc: swagger 3.1 로 설정

* dosc: Activity 필수 여부 추가

* dosc: bus 응답 추가

* dosc: article 응답 추가

* docs: Dept, Dining Dto 설명 추가

* docs: land

* docs: land dto 보완

* docs: Member Dto 구체화

* docs: Owner DTO 구체화

* docs: OwnerShop DTO 구체화

* chore: record 명 변경

* chore: shop record 수정

* chore: timetable record 수정

* chore: user dto 개선

* chore: version dto 개선

* chore: bus dto 개선

* test: 테스트 설정파일 위치 변경

* fix : 품절 알림 문구 수정 (#427)

* fix : 품절 알림 문구 수정

* fix : 품절 알림 문구 수정

* feat: ClientAbortException handle (#430)

* feature: 리프레시 토큰 만료 기한을 14일에서 20초로 변경 (#431)

* feature: 리프레시 토큰 만료 기한 14일로 원상 복구 (#432)

* fix: 사장님 이메일 중복요청시 재요청 시간제한 (#434)

* refactor: 사장님 이메일 인증번호 만료시간 2시간

* feat: 사장님 이메일 발송 시 제한시간 추가

* test: stage 환경과 DB 버전 맞춤

* test: redis, mongo 초기화 로직 추가

* refactor: 만료시간 final 제거 및 로직 수정

* test: 이메일 중복가입요청 테스트

* refactor: 이름 변경

* test: 버스 테스트 수정

* fix: 상점 이벤트 알림을 구독한 유저에게만 알림을 보내도록 코드 변경 (#443)

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* chore: 상점 설명 NotBlank에서 NotNull로 변경 (#436)

* chore: 상점 설명 NotBlank에서 NotNul로 변견

* chore: 상점 조회할 때 설명이 Blank일 시 "-"를 기본값으로 반환하게 변경(안드로이드 대응 이슈)

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* feat: GET /admin/lands 기능 구현 (#438)

* feat: GET /admin/lands 기능 구현

* chore: /admin/lands Response 수정

* chore: AdminLandRepository 개행 추가

* chore: Criteria 및 관련 코드 자료형 변경

* chore: count() 반환형 Integer로 변경

* chore: @Transactional(readOnly = true)를 전역으로 선언하도록 수정

* fix: 상점 이미지, 카테고리id중복되는 요소 입력 시 발생하는 에러 핸들링 (#448)

* feat: imageUrl과 카테고리id에 중복된 요소가 있는지 하는 어노테이션 작성

* feat: 중복 데이터 검즘 stream사용

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* feat: 시간표 총 학점 조회 (#440)

* feat: 시간표 총 학점 조회

* refactor: 용어 변경

* refactor: 학점조회 테스트 코드 추가

* refactor: 용어 변경

* Fix : 버스 남은시간 수정, 캐시만료로직 수정 (#454)

* feat : UnSupportedOperation ExceptionHandler 추

* feat : 남은시간 반환형식 변경

* feat : 레디스키 존재여부 메서드 추가

* feat : 캐시만료확인 로직 변경

* feat : 외부API가 빈배열이 아닐경우에만 저장

* refactor : 중괄호 추가

* feat : 버스 버저닝 V2 updated_at 추가 (#446)

* feat : 버스 timetable v2 추가

* feat : 버스 버저닝 timetable/v2 서비스 구현

* test : 버스 시간표 조회 v2 테스트 추가

* chore : 버스 v2 테스트 수정

* chore : 사용하지 않는 import 제거

* chore : log() 제거

* chore : 스웨거 설명 추가

* fix: 시외버스 시간표 캐시확인로직 변경 (#457)

* feat: 도커파일 추가 (#445)

* feat: 도커파일 추가

* feat: 도커파일 리뷰반영

* feat: 도커파일 리뷰반영2

* feat: 도커파일 테스트

* feat: 도커파일 테스트2

* feat: 도커파일 arm호환성 추가

* feat: 도커파일 arm호환성 추가2

* feat: 피드백 수정

---------

Co-authored-by: Jang Jun Young <police0022@naver.com>

* test: 테스트 리팩터링 (#458)

* test: 시간 제어 구성 및 Activity Fixture 추가

* test: 로그인 테스트 최적화

* test: bus API 테스트 수정

* test: community 테스트 수정

* test: dept 테스트 수정

* test: dining test 수정

* test: land test 수정

* test: member test 수정

* test: notification test 수정

* test: owner test 수정

* test: ownerShop test 수정

* test: shop test 수정

* test: lecture test 수정

* test: track test 수정

* test: version test 수정

* test: log 제거

* test: SuppressWarnings 추가

* test: 라인 포맷팅

* test: ExtractableResponse var로 대체

* test: objectMapper static으로 변경

* chore: admin 패키지 위치 수정

* test: log 제거

* test: 불필요한 설정 제거

* feat: 네이버 문자인증 구성 (#463)

* feat: 불필요한 설정 제거

* feat: 문자인증 api작성

* feat: 문자인증 API 구체화

* test: 테스트 수정

---------

Co-authored-by: 최준호 <junho5336@gmail.com>
Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* refactor: dto 수정 (#464)

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* fix: String -> Double (#466)

* refactor: 사용자에게는 기본 메시지만 보이도록 예외 수정 (#460)

* refactor: 사용자에게는 기본 메시지만 보이도록 예외 수정

* refactor: 예외 메시지와 global exception handler 구조 변경

* chore: withDetail에 static 적용 누락 수정

* feat: 상점 사장님 문자인증 발송 시 slack알림 발송 (#473)

* fix: DB의 상점 설명이 null인 경우 예외처리 (#476)

* fix: shop description null일 경우 예외처리

* chore: 사장님 회원가입 의미 없는 코드 삭제

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* feat : 회원 정보 수정에 비밀번호 수정 추가 (#477)

* feat : 회원 정보 수정에 비밀번호 수정 추가

* chore : 라인 포맷팅

* fix : kcal, menu nullable 여부 수정 (#480)

* fix : kcal -> NOT_REQUIRED, menu -> REQUIRED 수정

* fix : 식단 response, price와 kcal이 null이면 0 반환

* fix: 천안역에서 출발할 경우 Exception 발생 버그 수정 (#475)

* feat: 상점 운영중 기준으로 정렬 및 is_event 필드 추가 (#479)

* fix: shop description null일 경우 예외처리

* chore: 사장님 회원가입 의미 없는 코드 삭제

* feat: 응답에 영업중 여부 포함 및 영업중으로 정렬

* feat: 테스트코드 수정

* chore: 테스트코드 로깅용 출력 제거

* chore: now에 clock주입

* chore: 리뷰 반영

* chore: getShops에서 일시 한번만 호출

* feat: 정렬 방식 변경

* chore: 변수명 변경

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* fix: 상점 수정시 배달금액 언더플로우 해결 (#482)

* fix: shop description null일 경우 예외처리

* chore: 사장님 회원가입 의미 없는 코드 삭제

* feat: 응답에 영업중 여부 포함 및 영업중으로 정렬

* feat: 테스트코드 수정

* chore: 테스트코드 로깅용 출력 제거

* fix: 상점, 메뉴 수정 추가 dto의 금액 필드에 0원 이상 오도록 설정

* feat: 리뷰 반영

* chore: now에 clock주입

* chore: 리뷰 반영

* chore: getShops에서 일시 한번만 호출

* feat: 정렬 방식 변경

* chore: 변수명 변경

* chore: Entity금액 관련 필드 @PositiveOrZero추가

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* feat: 비밀번호 검증 api 작성 (#478)

* feature: 패스워드 체크 controller, service dto 추가

* chore: 컨트롤러 반환값 수정

* chore: 반환값 정확하게 수정

* fix: 영양사님도 허용 되게 swagger 변경

* test: 테스트 코드 작성

* chore: swagger에 표시되는 문구 변경

* style: boolean이 아닌 상태를 반환하는 것으로 변경

* test: 테스트 코드 변경 및 추가 작성

* chore: 오타 수정

* chore: 피드백 반영

* fix: 조건문 수정

* chore: 함수에 넣은 값 수정

* feat: 카카오 챗봇 API 구현 (#485)

* feat: 카카오 챗봇 식단 API 구성

* refactor: adapter 형태로 수정

* feat: bus 남은시간 API 구현

* feat: bus 경로 API 구현

* refactor: 로깅용 코드 제거

* refactor: KoinException 구체화

* refactor: Exception 정리 구체화

* refactor: getFullMessage로 변경

* refactor: slack 알림 dev 이외에도 포함되도록 수정

* test: 테스트 수정

* refactor: 미사용 변수 제거

* refactor: 메뉴 검증 추가

* fix: 오타수정

* refactor: magicNumber 상수 추출

* refactor: 페이코로 변경

* refactor: 표준예외, 커스텀예외 구분

* style: 라인 포맷팅

* fix: 결과 joiner 참조 수정

* style: 순서 변경

* refactor: from 활용

* refactor: Enum 활용하도록 수정

* refactor: 변수명 수정

* refactor: 자바 기본 예외 래핑

* refactor: 제약조건 수정

* fix: handler 추가 및 IAE 변경 (#489)

* refactor: 모든 상점 조회 api 성능개선 (#487)

* feat: is_open여부를 결정 할 때 쿼리문에서 로직으로 변경

* refactor: ShopOpen Boolean -> boolean

* refactor: 시간 처리 로직 개선

* style: 라인 포맷팅

---------

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>
Co-authored-by: 최준호 <junho5336@gmail.com>

* fix: 17~2시인경우 확인 안되는문제 해결 (#490)

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

* refactor: 라인포맷팅 (#492)

Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>

---------

Co-authored-by: Hansu Park <hansupark0208@gmail.com>
Co-authored-by: daheeParkk <106418303+daheeParkk@users.noreply.github.com>
Co-authored-by: 송선권 <songsunkook@gmail.com>
Co-authored-by: tongil <xhdtn8070@koreatech.ac.kr>
Co-authored-by: Park Sungbin <46699595+ImTotem@users.noreply.github.com>
Co-authored-by: 허준기 <112807640+dradnats1012@users.noreply.github.com>
Co-authored-by: duehee <149302959+duehee@users.noreply.github.com>
Co-authored-by: Hyeonsu Lee <127578418+20hyeonsulee@users.noreply.github.com>
Co-authored-by: 김원경 <148550522+kwoo28@users.noreply.github.com>
Co-authored-by: 황현식 <142300831+Choon0414@users.noreply.github.com>
Co-authored-by: 김성재 <103095432+seongjae6751@users.noreply.github.com>
Co-authored-by: HyeonsuLee <leehyeonsu4888@naver.com>
Co-authored-by: dradnats1012 <herjebi1012@gmail.com>
Co-authored-by: Choon0414 <hyunn815@naver.com>
Co-authored-by: Jang-JunYoung <79901434+johnny19991006@users.noreply.github.com>
Co-authored-by: Jang Jun Young <police0022@naver.com>
Co-authored-by: 박성빈 <psb106305@gmail.com>
Co-authored-by: daheeParkk <qkrekgml7414@naver.com>
Co-authored-by: YunYongWoon <46861704+YunYongWoon@users.noreply.github.com>
Choi-JJunho added a commit that referenced this pull request May 9, 2024
* test: TestContainer 적용

* test: TestContainer MySQL 버전 5.7로 변경

* test: RestAssured port 선언조건 추가

(cherry picked from commit e491214)
Choi-JJunho added a commit that referenced this pull request May 9, 2024
* test: TestContainer 적용

* test: TestContainer MySQL 버전 5.7로 변경

* test: RestAssured port 선언조건 추가
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
테스트 테스트와 관련된 이슈입니다.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

TestContainer를 적용한다
4 participants