게시글
질문&답변
2024.04.29
마지막 단에서 공통 처리할 때의 catch 부모 예외
안녕하세요. kyk님 지금의 경우에는 RuntimeException으로 잡아도 괜찮은데요. 이후에 코드가 계속 증가하게 되면 체크 예외, 언체크 예외 등등 다양한 예외가 올라올 수 있습니다. Exception은 RuntimeException의 부모이면서 동시에 애플리케이션에서 실제 사용하는 모든 예외의 부모이기 때문에 모든 예외를 여기서 다 잡는다는 의미도 있습니다. 감사합니다.
- 0
- 1
- 46
질문&답변
2024.04.29
DI 적용해보기
안녕하세요. rjf1138님 전체적으로 보았을 때 잘 구현하셨습니다 🙂 지금 정도면 더 개선하지 않아도 될 정도로 충분히 잘 구현한 코드라 생각합니다. 그리고 지금과 같은 코드 개선 질문의 경우 강의 학습 내용이 주가 아니어서 저도 참 어렵고 죄송하지만 질문 안내에서 말씀드린 것처럼 강의 학습에 관련된 질문을 올려주시길 부탁드립니다. 저도 마음으로는 도움을 드리고 싶지만, 하루에도 수많은 분들이 질문을 올려주십니다. 그래서 강의 학습과 관련된 질문에 초점을 맞추는 것이 맞다 생각합니다. 다시한번 이해를 부탁드립니다.
- 0
- 1
- 61
질문&답변
2024.04.29
스프링JdbcTemplete강의 내용 1:38초부분에서 의존성주입 질문이 있습니다
안녕하세요. 담이님 JdbcTemplate은 인터페이스가 아니라 구현체입니다. 따라서 JdbcTemplate을 의존성 주입하더라도 구현체를 변경할 수 없습니다. DataSource의 경우 인터페이스이고, 다양한 구현체들을 변경하며 주입할 수 있습니다. 추가로 이 부분을 이해하려면 스프링이 DB 접근 기술들을 사용할 때 어떤 관례를 주로 사용하는지를 이해해야 합니다. 관련해서 자세한 내용은 스프링 DB 접근 기술 을 참고해주세요. 감사합니다.
- 0
- 3
- 71
질문&답변
2024.04.28
섹션6. 문제와 풀이
안녕하세요. 권정익님 1번째 질문에 대한 답변 "%2d"는 printf 포맷 문자열에서 사용되는 형식 지정자입니다. 여기서 %는 형식 지정자의 시작을 나타내고, 2는 출력할 정수의 최소 너비를 지정합니다. d는 정수(decimal)를 의미합니다. 따라서 "%2d"는 정수를 최소 2자리로 출력하되, 값이 2자리보다 작으면 앞에 공백을 추가하여 너비를 맞춥니다. 이를 통해 달력의 날짜를 정렬할 수 있습니다. 예를 들어, 1일은 " 1" (앞에 공백이 있습니다.) 로 출력되고, 10일은 "10"으로 출력됩니다. 이렇게 하면 날짜 간의 간격이 일정하게 유지됩니다. 2번째 질문에 대한 답변 : int offsetWeekDays = first.getDayOfWeek().getValue() % 7; 에서 % 7 을 사용하는 이유는 자바의 DayOfWeek 열거형에서 월요일이 1, 화요일이 2, ..., 일요일이 7로 표현되기 때문입니다. 하지만 달력에서는 일요일을 0, 월요일을 1, ..., 토요일을 6으로 표현하는 것이 일반적입니다. 따라서 % 7 을 사용하여 DayOfWeek 값을 달력에서 사용하는 값으로 변환합니다. 예를 들어, 월요일(1)은 1 % 7 = 1 이 되고, 화요일(2)은 2 % 7 = 2 가 됩니다. 그리고 일요일(7)은 7 % 7 = 0 이 되어 달력에서의 표현과 일치하게 됩니다. 만약 % 7 을 뺀다면, offsetWeekDays 값은 월요일이 1, 화요일이 2, ..., 일요일이 7이 될 것입니다. 이 경우에도 first의 날짜를 2024년 1월 10일로 바꾸면 정상 작동할 수 있습니다. 그 이유는 2024년 1월 10일이 수요일이고, 수요일의 getValue() 값은 3이기 때문입니다. 하지만 이렇게 하면 일요일이 0이 아닌 7로 표현되어 달력의 일반적인 표현과는 다를 수 있습니다. 따라서 % 7 을 사용하는 것은 DayOfWeek 값을 달력에서 사용하는 값으로 변환하여 일관성을 유지하기 위한 것입니다. 감사합니다.
- 1
- 1
- 53
질문&답변
2024.04.28
특정 리소스가 없을때에 예외페이지 처리 방법 질문드립니다
안녕하세요. blackjack_96님 웹 애플리케이션에서 리소스가 없는 경우에 적절한 HTTP 상태 코드를 반환하는 것은 중요합니다. 404 에러와 500 에러의 사용 상황 404 에러( NotFound )는 요청된 자원이 서버에 존재하지 않을 때 사용하는 것이 일반적입니다. 예를 들어, 사용자가 /post/158 URL을 요청했을 때 id=158인 게시글이 데이터베이스에서 찾을 수 없으면 404 에러를 반환하는 것이 적절합니다. 500 에러( InternalServerError )는 서버에서 처리할 수 없는 에러가 발생했을 때 사용합니다. 이는 대체로 프로그래밍 오류나 서버 내부의 문제로 발생하는 경우에 해당합니다. 여러분의 경우, id에 해당하는 게시글이 없을 때 404 에러를 반환하는 것이 맞습니다. 이는 사용자가 요청한 리소스가 서버에 존재하지 않음을 명확히 알려주기 때문입니다. 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 복습해주세요 🙂 Spring에서 404 상태 코드를 반환하는 방법 Spring Framework에서는 예외 처리를 위해 @ExceptionHandler 어노테이션을 사용할 수 있습니다. 이를 사용하여 특정 예외에 대해 특정 HTTP 상태 코드를 반환하도록 설정할 수 있습니다. 예를 들어, NoSuchPostException 이 발생했을 때 404 상태 코드를 반환하도록 컨트롤러 내에서 다음과 같이 처리할 수 있습니다: @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(NoSuchPostException.class) public ResponseEntity handleNoSuchPostException(NoSuchPostException ex) { return ResponseEntity.status(HttpStatus.NOT_FOUND).body("The requested post does not exist."); } } @ControllerAdvice 는 전역 예외 처리기로, 애플리케이션의 모든 컨트롤러에서 발생할 수 있는 예외를 처리할 수 있게 합니다. @ExceptionHandler 는 특정 예외를 처리합니다. Spring에서는 BasicErrorController 를 확장하거나 대체하여 사용자 정의 에러 처리 방법을 구현할 수도 있습니다. 그러나 특정 예외 타입에 대해 직접 핸들러를 작성하는 것이 더 직관적이고 간단할 수 있습니다. 위와 같이 @ControllerAdvice 와 @ExceptionHandler 를 사용하는 방법이 일반적으로 권장되는 방식입니다. 감사합니다.
- 0
- 1
- 46
질문&답변
2024.04.28
상속에 따른 객체와 메모리 구조에 대해 질문드립니다.
안녕하세요. vitagi님 생각하는자님께서 잘 답변해주셨는데요. 상속관계의 경우에도 본인 클래스를 알 수 있기 때문에 본인 클래스에 있는 메서드를 사용합니다 🙂 따라서 메서드는 동일하게 1개만 만들어집니다. 감사합니다.
- 0
- 2
- 55
질문&답변
2024.04.28
정적 중첩 클래스 관련 질문
안녕하세요. jung님 중첩 클래스를 사용하는 이유는 강의 내용에서 설명드린 다음 내용과 같습니다 🙂 중첩 클래스는 언제 사용해야 하나? 내부 클래스를 포함한 모든 중첩 클래스는 특정 클래스가 다른 하나의 클래스 안에서만 사용되거나, 둘이 아주 긴밀하게 연결되어 있는 특별한 경우에만 사용해야 한다. 외부의 여러 클래스가 특정 중첩 클래스를 사용한다면 중첩 클래스로 만들면 안된다. 중첩 클래스를 사용하는 이유 *논리적 그룹화* : 특정 클래스가 다른 하나의 클래스 안에서만 사용되는 경우 해당 클래스 안에 포함하는 것이 논리적으로 더 그룹화 된다. 패키지를 열었을 때 다른 곳에서 사용될 필요가 없는 중첩 클래스가 외부에 노출되지 않는 장점도 있다. *캡슐화* : 중첩 클래스는 바깥 클래스의 private 멤버에 접근할 수 있다. 이렇게 해서 둘을 긴밀하게 연결하고 불필요한 public 메서드를 제거할 수 있다. 감사합니다.
- 0
- 1
- 40
질문&답변
2024.04.25
Model 추가 - v3 질문입니다.
안녕하세요. zzzzz님 질문1. 자식 controller를 부모 ModelView에 저장하는 다형성을 뜻하는건가요?ModelView에 .process함수가 없는데 왜 저장하는거에요? controller의 process() 메서드를 호출하면 ModelView라는 객체 인스턴스를 반환합니다. 이 인스턴스를 ModelView mv에 저장합니다. 이 부분에 대한 이해가 어렵다면 자바 로드맵을 통해 자바 기본기를 먼저 다지고 이후에 학습을 이어가는 것을 권장드립니다. 질문2. 아래부분에서 for문(반복문)이 없고 한개의 뷰네임을 저장하면 나머지 2개의 뷰 처리는 어떻게 하는건가요? 아니면 원래 반복문은 없고 요청이 있는 get(requestURI)만 viewName에 저장하는건가요? 요청이 있는 viewName만 저장하게 됩니다. 질문3. 이 부분이 강의에서 각각 파라미터 네임을 계속 꺼내서 저장한다고 하셨는데 반복을 의미하는건가요? 네 맞습니다. 반복을 의미합니다. for-each문으로 이해하시면 충분합니다. 감사합니다.
- 0
- 2
- 62
질문&답변
2024.04.25
itemValidation, @Validation
안녕하세요. jh06_04jh님 강의 내용중에 다음 내용을 참고해주세요 🙂 **코드 제거** **기존에 등록한 ItemValidator를 제거해두자! 오류 검증기가 중복 적용된다.** private final ItemValidator itemValidator; @InitBinder public void init(WebDataBinder dataBinder) { log.info("init binder {}", dataBinder); dataBinder.addValidators(itemValidator); } 감사합니다.
- 0
- 1
- 47
질문&답변
2024.04.25
POST
안녕하세요. 간다간다뿅간다님 프로세스 상태 변경을 위한 POST 사용 POST는 리소스의 생성 외에도 다양한 목적으로 사용될 수 있습니다. 특히, 단순히 데이터 값을 변경하거나, 더 복잡한 프로세스 상태를 변경할 때 사용됩니다. 예를 들어, POST /orders/{orderId}/start-delivery 같은 경우, 주문의 상태를 '배달 시작'으로 변경하는 프로세스를 수행합니다. 이때 새로운 리소스가 생성되는 것이 아니라 기존 리소스(주문)의 상태가 변경됩니다. 컨트롤 URI와 POST POST /orders/{orderId}/start-delivery 같은 URI는 "컨트롤 URI"라고도 불립니다. 이는 리소스 자체에 대한 표준 CRUD(Create, Read, Update, Delete) 작업 외에 리소스의 상태를 변경하거나 특정 동작을 제어하기 위해 사용됩니다. 여기서 클라이언트는 특정 주문의 상태를 변경하도록 서버에 명령합니다. 마지막에 이야기하신 것 처럼 이것은 특정 주문의 상태를 변경하게 됩니다. 따라서 생각하신 것 처럼 필드 값(속성)을 변경할 수 있습니다. 감사합니다.
- 0
- 3
- 94