1주 간의 수업과 과제를 진행하면서 새로 알게 된 개념이나 잘못 알았던 개념에 대해 이야기 해봅시다.
정윤오
- log.error가 아닌 다른 로그들은 언제 찍는게 좋을까?
- 일반적으로 log.info를 찍는 위치는 비즈니스 로직의 진행상황을 체크하거나 데이터베이스의 상태가 변하는 등 로직의 상태를 알고자 할 때 사용
- log.debug의 경우는 모듈의 테스팅 수행시 값이 제대로 들어있는지를 확인할 때 사용
- 예를들어 VoucherRepository에서 VoucherDto를 DB로부터 반환한다고 하면, 반환시에 제대로된 값이 넘어왔는지 확인하는 등
- logback.xml에서 root에 지정하는 appender-ref에 따른 level 기능의 무시 현상
- ROLLING_FILE appender를 root에 지정, warn 레벨로 설정하고
- STDOUT에 대한 appender를 별도의 logger에 info 레벨로 적용할 경우
- FILE에 STDOUT으로만 기록되어야하는 log.info에 대한 정보들이 전부 파일에 같이 기록되는 현상이 있다.
- 이를 해결하기 위해서 logger나 root의 레벨에 의존하지 않고 appender 에서 filter 기능을 이용해 특정 레벨의 로그만 수용할 수 있도록 해결한다.
- switch-case문을 사용하기 이전에 error 케이스를 걸러내는게 좋을까?
- 로직의 분기만 늘리는 형태이므로 하나의 switch-case 문에서 처리할 수 있도록 로직을 변경하는 것이 좋다.
- InputValidator의 개선방안
- 입력 값의 검증 과정에서 반환되는 에러값들은 추후 API로 제작시
@ControllerAdvice
Annotation을 활용하여 리팩토링 하여 사용하는 것이 좋겠다.
이용훈
- 스프링 1주차 과제를 하면서 겪은 문제점
- enum 타입을 작성할때 enum 에서 enum 과 관련된 메서드와 예외처리를 람다 표현식으로 해결해 보자
- 상태관리는 메서드를 통해 관리하자(상수 X, 정확한 의미를 가진 메서드명 사용)
- enum 을 통한 예외처리는 좋은 방법이 아니다. 예외를 날려라
- 무작정 기능 구현이 아니라 디자인 패턴을 고려하여 상황에 맞는 적절한 패턴을 적용시키는 것을 고려한 후 구현에 들어가자
- 로그에 대한
얕은
고찰 - db 에 있는 정보를 활용할때 회원 관련 데이터는 블록 처리를 해야 한다. 보통 db 에서 블록처리 된 데이터가 날아온다.
- 외부 db 와의 데이터 송수신이나 연결등을 로그 처리로 해보자
- 개발 습관과 관련된 고민
- 클래스에 책임을 얼마나 담을 건지 항상 고민하고, 항상 설계를 우선시하는 습관을 가지자
- 고민을 많이 하자 고민을 많이한 흔적이 코드에 남아있을 수 있도록 무지성 개발이 아닌 생각하는 개발을 하자
김성현
스프링 1주차 과제를 통해 배운점
- 커맨드 입력을 받을 때 if else 문으로 처리하여 코드가 좋지 않았는데 Map으로 해결을 하였고, enum을 사용하여 더 개선을 할 수 있었다.
- 로그백 설정을 통해 로그를 설정하고 로그 레벨에 맞게 관리를 관리할 수 있다.
- 생성자 주입을 할 때 Autowired 애노테이션을 굳이 적용하지 않아도 의존관계 주입이 된다.
- 프로파일 설정을 통해 상황에 맞게 필요한 코드만을 실행시킬 수 있다.
- 로그에 대한
깊은
고찰 - db 에 있는 정보를 활용할때 회원 관련 데이터는 블록 처리를 해야 한다. 보통 db 에서 블록처리 된 데이터가 날아온다.
- 자바 reflect로 private 메서드도 테스트 코드를 작성할 수 있다.
- enum 활용을 잘하자.
- 메서드나 변수에 좋은 이름을 지어주는 것은 항상 어렵다.
이예림
< Spring 강의 >
- spring 환경설정
- properties / yaml / profile / resource → 설정에 대한 이유와 진행단계에 대한 공부가 더 필요함
- logging
- 어떠한 케이스에 어느 레벨의 로그를 남겨야하는지에 대한 고민과 기준이 필요함
- 로그를 남기는 방법과 대상 선택 방법 습득(콘솔, 파일)
< Spring 1주차 과제 >
- Enum을 활용하여 상태와 행위를 한 곳에서 관리
- Enum에 대한 공부가 더 필요하다고 느낌
- ex) Enum에서는 왜 static이 아닌 private method를 선언 할 수 없는지?
< 별도 공부 내용>
- equals, toString 재정의
- 책 혹은 자료를 보고 공부한 것을 실제 코드에 적용해보는 과정을 꼭 거쳐야 겠다고 느낌.
이인후
- 필드에 Optional을 되도록 쓰지 말자
- 필드에 쓰라고 만든 목적이 아니고 Serialize 할 때 Optional 있으면 에러 발생
- Profile에 따른 log 분리방법
- SpringProfileName 태그 사용하기
- 프로파일을 바로 쓸 수 있고, 아닌 경우 분리해서 기능별로 구성 가능
- MessageSource로 문자열 분리하기
- kr, en 등 언어에 따라 파일을 분리하면 자동으로 Locale에 따라 언어 출력
- Exception 출력 같은 경우에 주로 사용