3월24일 데일리 TIL

오늘의 느낀점

1) 팀플

  • 팀플 3일차인데, 같이하는 nas가 실력이 뛰어나서 그런지 너무 나만 배우는거같아 미안하고,
  • 빨리 나스의 진도인 미션4까지 진행해서 나스에게도 짝코딩의 즐거움을 알려드리고싶다 ㅠㅠ...

2) 미션3 마무리

  • 미션3가 마무리되어가는 단계인데, 뭔가 이제야 알꺼같다. 지금까지 엄청나게 에러가 떠서 잡느라고 한참 걸렸는데, 이게 html 머스태취에서는 브레이스가 두개인데, 자바 코드에서는 브레이스가 하나인걸 의식하지 못하고 엄청 해멨던거같다.
  • 내가 가장 부족한 부분이 웹개발도중 에러발생 >> 에러에 원인파악, 그러니까 트러블슈팅에서 가장 중요한 원인파악이 안된다. 당장 500에러가뜨면 이게 뭔지 구글링을 해야되니까, 너무 힘들었는데, 옆에서 에러와 원인을 말해주니까 트러블슈팅이 정말 잘되고 빨리된다. 예를들어
    • 이건 404에러니까, 리소스가 없다는거고 >> 해당하는 유알엘에 해당하는 컨트롤러가 없는지
      • 어디 컨트롤러의 경로가 꺠지거나 오타있는지 확인
    • 이건 500 에러니까 배드리쿼스트고 해당하는 매소드가 지원하지않는다는거
  • 이런것들이 되니까 정말 행복하다. 원래 개발이라는게, 컴퓨터가 가혹하다. 초보자들한테 한없이 깐깐한데, 고수들은 이렇게 당연할수가 없으니 말이다.
    • 초보자들에게는 조금은 가혹한게 컴퓨터이고 개발공부인거같지만, 지금 이 프로젝트에 집중할 수 있어서 너무너무 좋고 행복하다 굿굿!

3) 개인 할일

  • 백기선님 스터디 7,8주차 학습 및 정리 내용보완 (3H)
  • 금요일날 저녁약속!, 토요일 오전스터디, 일요일 10-5 스터디
  • 스프링부트 책 한권 읽고 끝내기 (??)
  • 영한님 강의 스프링입문 강의 끝내기 (3H)
  • 이번주 금요일까지 미션4 merge 받기

4) 지금당장 확보해야하는 역량이지만, 없는것

  • 식별자(메서드명, 함수명), 로직처리방식 등 항상 옳은건 없다. 계속 의심하고 또 생각해보면서 좀더 나은 코드를 만들기 위해 노력해라 by (디온, 나스)
  • 개발도중 에러발생시, 이게 어디에서 왜 발생한 문제인지
    • 원인분석하고
    • 문제해결하기
      : 멘붕이라고 그냥 부르트포쓰로 찍기 하나씩 이상한짓 해보지 말고 왜그런지 분석해서 하나씩 차근차큰 해결해나가자

스프링에서 서비스와 컨트롤러를 분리하는 이유

  • 왜 서비스와 컨트롤러 분리할까?? 컨트롤러에서 그냥 빨리 처리하지 뭐하로 컨트롤러까지 만들어야할까??에 대한 검색결과

  • 컨트롤러
    : 컨트롤러의 책임(역할)은 뷰에 맞는 리소스만 넘겨주는거야
    : 요청에 따라 어떤 처리를할지만을 결정
    : 실제로 처리하기 위한 로직(코드는) 서비스로 넘기는 게 맞다

    • 안그러면 비지니스로 로직에 부담 커짐
    • 간단한 게시판이야 문제가 없지만, 원칙은 서비스로 넘겨라
  • 서비스
    : 비지니스 로직은 서비스로 들어와야 하는데 주로 아래와 같은 역할

    • 권한검증
    • 빈데이터인지(널포인터 예외 검사..)
    • 로그인여부 확인 등등..
    • 위와같은 권한/검증/등등... "서비스에 관련된 할일"은 컨트롤러가 아닌 서비스에서 하자
    • 컨트롤러 복잡도를 떨어트리기 위해서도 필요
  • 참고링크 : https://hardlearner.tistory.com/315



커밋메시지 공부

@tmdgusya
feat : Post 검색시 조건 문 생성 …
4d1e7ea

@tmdgusya
feat : Post Pagenation …
3181bd2

---(중략)---

@tmdgusya
fix : 오류 수정 …
cfcd1a2

@tmdgusya
feat : Paging 추가
733943b

@tmdgusya
fix : 5 페이지로 보이도록 수정 …
  • 로치선생님처럼 커밋메시지 앞에 타입메시지를 붙이는데
    : 이런거를 추가해주면 뭔가 정갈/정리되는 느낌이다 앞으로는 이런 방식으로 쓰도록 노력

Commit Message의 7가지 규칙

  1. 제목과 본문을 빈 행으로 구분한다
  2. 제목을 50글자 내로 제한
  3. 제목 첫글자는 대문자로 작성
  4. 제목 끝에 마침표 넣지 않기
  5. 제목은 명령문으로 사용하며 과거형을 사용하지 않는다
  6. 본문의 각 행은 72글자 내로 제한
  7. 어떻게 보다는 무엇과 왜를 설명한다




인텔리제이 단축키 필수

  • CMD + ALT + L : 자동정렬
  • sfith + f6 : 변수명 한번에 바꾸기, 단 게터세터는 안바뀔수 있어서 조심
  • alt + <화살표 방향키 위> : html 태그 수준별 잡기 - 자바코드도 되고
  • CMD + N : 자동메서드생성



Optinal 베스트프랙티스

  • 결국 너로 정했다!
.orElseThrow(NotFoundException::new)
  • Optional은 null값을 안전하게 다루기 위해서 만들어지고 사용하는것이고
Question question = questionRepository.findById(id).orElseThrow(NotFoundException::new);
  • 옵셔널의 의도대로, null값 처리는 커스텀익셉션을 발생시켜 처리하는게 일반적이다
public class NotFoundException extends RuntimeException {
	public NotFoundException() {
		super("존재하지 않습니다");
	}
    
    public NotFoundException(String message) {
		super(message);
	}

위 코드에서는 NotFoudException이라는 사용자 정의 예외(커스텀 익셉션)를 따로 만들어서 null이 들어오면 View에서 커스텀된 예외를 던져줄 수 있다(예를들어 로그인실패, 등등..)

  • Optional
    • 메서드가 반환할 결과값이 ‘없음’을 명백하게 표현할 필요가 있고,
    • null을 반환하면 에러를 유발할 가능성이 높은 상황에서 메서드의 반환 타입으로 Optional을 사용하자는 것이 Optional을 만든 주된 목적이다.
    • Optional 타입의 변수의 값은 절대 null이어서는 안 되며, 항상 Optional 인스턴스를 가리켜야 한다.

출처 : Java-Optional-바르게-쓰기



HTML에서 a href="#"를 사용하면 안되는 이유

  • href="#"을 해 놓으면 무조건 페이지 최상단으로 이동한다

  • A테그로 감싸줄 경우 Anchor도 URL에 포함되기 때문에 저 버튼을 누르면 주소맨뒤에 #가 붙게 된다. 크게 문제가 있다고 할 수는 없지만 보기에 좋지 않은건 사실

  • 그리고 A테그로 이미지같은걸 감싸는건, 이미지 위에 커서를 올렸을 때 손가락 모양으로 커서형태가 바뀌는걸 의도하기 위한건데

    • 그럴꺼면 차라리 css 스타일로 처리하는게 깔끔하다
  • 작성자분께서 상당히 화나계시지만, 안티패턴까지는 아니고, "권장하지는 않는 옜날방식"인듯 하다.

  • 출처 : https://blog.outsider.ne.kr/223

  • 백엔드 개발 실력이 어느정도 늘면 http cs js 같은 프론트엔드도 배워보고 싶다.

좋은 웹페이지 즐겨찾기