<배경> - 어떤 현상을 발견했는가?
1. IntelliJ 내부에서 Database 를 작성하는 중에 오류 발생
2. 설정오류
2-1. interface expected here
2-2. cannot find symbol method
2-3. method does not override or implement
3. ERROR 49429
4. properties 오류
5. Internal Server Error
6. Not Found
<발단> 이런 장애가 생길 수 있다는 것을 인지
1. IntelliJ 내부에서 Database 를 작성하는 중에 오류 발생
-database 라는 것을 생각을 못하고 Long id 라고 적어서 오류 발생
2. 설정오류
2-1. interface expected here
2-2. cannot find symbol method
2-3. method does not override or implement
-scheduleRepository를 interface가 아닌 class로 설정해놔서 생긴 오류
3. ERROR 49429
-Spring 애플리케이션 시작 과정에서 발생한 문제
-특정 조건이 충족되지 않으면 애플리케이션이 정상적으로 실행되지 않는 경우
4. properties 오류
- Lv1, Lv2 controller 동시 실행
5. Internal Server Error
-필드 이름이 틀림
6. Not Found
-경로 설정 오류
-api 경로 설정을 해줘야함
<전개> 장애를 대응, 해결하던 와중에
1. IntelliJ 내부에서 Database 를 작성하는 중에 오류 발생 (해결)
-Java 의 Long 타입 = Database BIGINT 타입
-Database 는 SQL 데이터 타입을 사용하니까 long 타입은 없음
2. 설정오류 (해결)
2-1. interface expected here
2-2. cannot find symbol method
2-3. method does not override or implement
-세 오류 다 SceduleRepository를 interface 가 아닌 class로 지정해서 생긴 문제
-코드에서 저장소를 ScheduleRepository(Interface), JdbcTempScheduleRepository(Class) 두개로 나눈 이유는 데이터 접근을 용이하게 하기 위해서 나눴는데 설정을 잘못했다.
-이렇게 저장소를 두개로 나누게 되면 데이터베이스 없이 테스트할 수 있다는 장점도 있고, 코드의 가독성이 좋아진다.
3. ERROR 49429 (해결)
-application.properties에 datasource를 넣지 않아서 생긴 오류
spring.datasource.url=jdbc:mysql://localhost:3306/schedules
spring.datasource.username=root
spring.datasource.password=비밀번호
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
이렇게 설정을 해주니 해결
4. properties 오류
- Lv1, Lv2을 나눠서 구현했는데 그러다보니 controller가 2개가 되고 이름도 같아서 controller 동시 실행되면서 오류가 생겼다.
-controller 이름을 lv1controller, lv2controller로 바꾸면 됨 -> 복잡하고 뭔가 다른 오류가 생김
5. Internal Server Error (해결)
-코드에는 name으로 설정을 해놓고 postman으로 테스트를 할때는 user_name을 써서 오류 발생
-user_name을 name으로 바꿔주면 해결됨
6. Not Found (해결)
-api 경로 설정을 해줘야함
-json 형태로 주고받기 위해서 /api/schedules가 되야함
-Restful API 설계의 규칙으로 클라이언트가 서버의 특정 리소스에 접근할 수 있도록 경로를 설정
<위기> 또 다른 장애 발견 또는 간단하게 해결할 수 없다는 것을 알게 되어서
& <절정> 근본적인 해결을 위해 이런 방법으로 접근하였다.
1. 해결
2. 해결
3. 해결
4. properties 오류
-구글링을 해보니 controller 이름을 변경하면 된다고 하는데, 바꾸려니까 헷갈리기도 하고 뭔가 다 안바꿔졌는지 오류가 생겨서 다른 방법을 찾아봄
-다른 방법을 찾아보니 profile 을 설정하면 된다고 해서 적용해봄
-resources -> application.properties 들어가서 spring.profile.active = 원하는 프로파일지정
ex> spring.profiles.active = Lv2
-profile이 Lv2라고 설정된 것만 활성화됨
-이 방법을 사용하기 위해 Controller, Service, JdbcTemplateRepository 이렇게 세군데에 설정을 해놨더니 해결됨
5. 해결
6. 해결
<결말> 따라서 이런 방법을 통해 근본적으로 해결 및 앞으로 유지, 보수에 용이하게 개선하게 되었다.
-오류들을 해결하면서 profile 설정을 통한 controller 중복문제를 알게 되었고, 이를 통해 개발환경에서 시스템관리와 유지보수를 할 때 profile 사용의 중요성에 대해서 알게 되었다. 그리고 데이터베이스와 java 간의 호환성 등에 대해 다시 한번 생각하고 이해해보게 되었다. 추가로 튜터님께 여쭤본 것 중에 매개변수와 관련된 것이 있었는데 헷갈리던 부분을 찾아서 다시 공부해봤다.
-저장소(repository)를 인터페이스와 클래스 두개로 분리하면서 테스트가 쉬워지고 코드 가독성이 올라가는 것을 직접 깨닫게 되었다. 그리고 이렇게 저장소를 분리하게 되면 다양한 클래스를 만들 수 있어 코드 수정할때 interface만 바꾸면 된다는 유연성이 있다는 것도 알게 되었다.
-이번 과제를 하면서 패키지와 클래스를 나누면서 하다보니 헷갈리는 부분이 많아졌고, 오타도 생각보다 너무 많이 났다. 이를 통해 이름을 항상 직관적이고 규칙성 있게 적고, 경로 설정도 한번더 체크하고, 오류를 줄일 수 있는 방법에 대해서 생각하면서 코드를 짜야겠다고 다짐했다. 그리고 과제 순서대로 설계 후 코드를 짜니 어느 부분이 빠졌는지 확실하게 체크가 되서 좋았던 것 같다.
<매개변수> - 다시 공부
1. 기본 타입, 참조 타입
-기본 타입 : int, double
- 기본 타입은 값이 복사되어 전달된다.
- 매개변수로 받은 값을 변경해도 원래 변수는 영향을 받지 않는다.
-참조 타입 : String, List
- 객체의 주소가 전달된다.
- 메서드 내에서 객체의 속성 값을 변경하면 원래 객체에도 영향을 끼친다.
- null 값을 가질 수 있다.
- Optional 을 사용하여 null을 처리하거나 방지하는 방법 고려해야한다.
2. 변경 불가능한 객체
-대문자로 시작하는 String, Integer, Double 같은 애들은 값을 변경할 수 없다.
-새 값을 할당하면 새로운 객체가 생성된다.
3. 가변 매개변수
-가변적으로 인수를 전달 받을 수 있다.
-항상 마지막에 위치하며, 메서드 내에서 배열처럼 다룰 수 있다.
타입 ... 변수명
4. 메서드 오버로딩
-메서드 오버로딩을 통해 같은 이름의 메서드를 여러 개 정의할 수 있는데, 이때 매개변수의 타입과 개수가 달라야한다.
'내배캠 > 프로젝트, 개인과제 트러블슈팅' 카테고리의 다른 글
[내일배움캠프/백엔드] Spring 숙련. 뉴스 피드 프로젝트 트러블 슈팅 (1) | 2024.11.22 |
---|---|
[내일배움캠프/백엔드] Spring 숙련 개인과제 일정 관리 앱 develop 트러블 슈팅 (0) | 2024.11.15 |
[내일배움캠프/백엔드] Java 개인과제2. 숫자 야구 게임 만들기 트러블슈팅 (1) | 2024.10.25 |
[내일배움캠프/백엔드] Java 개인과제. 계산기 만들기 트러블슈팅 (0) | 2024.10.17 |
[VS Code] VS Code에서 한글이 깨지는 현상 (0) | 2024.10.05 |