📝 TIL

    [TIL] 4주차 주특기 숙련ㅣ권한부여, 예외처리

    주특기 숙련 주간 개인 과제 개인 과제가 막바지에 이르렀다. CRUD API + JWT 로그인/회원가입 (Lv1) + 댓글 CRUD API, 회원 권한 부여, 예외처리 (Lv2) 어제 댓글 CRUD API까지 마무리했고, 오늘 회원 권한 부여와 예외처리를 작업하였다. 특히 예외처리 같은 부분은 강의에서도 따로 다루지 않아 굉장히 고생했는데 오늘의 TIL은 그 고생길을 담아보았다🙃 오늘의 궁금증 댓글을 작성 순으로 정렬하려면? 어제 댓글 CRUD를 작업하면서 빼먹은 요구사항이 있었다. 바로 댓글을 작성 순으로 정렬하는 것! 게시글 같은 경우는 Repository에서 Spring Data JPA 쿼리 메소드를 이용하여 정렬을 하였다. 이번엔 같은 조의 소영님이 알려주신 어노테이션을 이용해볼 것이다. @Ord..

    [TIL] 4주차 주특기 숙련ㅣ댓글 CRUD API

    주특기 숙련 주간 개인 과제 이번 주간 개인 과제는 저번 CRUD API에 다른 기능들을 추가하는 것이다. 사실 주말 내로 강의를 다 듣고 과제를 시작한 건 어제였지만, 어제의 나는 밤샘 이슈로 제정신이 아닌 상황이었기에..^^ 오늘에서야 제대로 정리해본다. 🚩 Goal: "회원가입, 로그인, 댓글 작성/조회/수정/삭제 기능이 추가된 나만의 항해 블로그 백엔드 서버 만들기" 간단히 말하면, 이렇다. CRUD API + JWT 로그인/회원가입 (Lv1) + 댓글 CRUD API, 회원 권한 부여, 예외처리 (Lv2) 어제 JWT를 이용한 회원가입과 로그인을 마무리했고, 오늘 댓글 CRUD API를 마무리했다. 큰 범주에서 보면 저번 주와 같은 CRUD인데 JPA를 이용해서 게시글과 댓글의 연관관계를 정의하..

    [TIL] 4주차 주특기 숙련ㅣ조각모음

    책 스터디를 시작하다 저번에 구매한 책이 집에 도착한 지 한참인데 며칠째 단 한 장도 넘겨보지 못했다. 이대로 가다간 저기 어디 침대 밑에 보관만 할 것 같아서 겁도 없이 스터디를 만들어버렸다! 책을 이미 구매했거나, 구매 의향이 있는 같은 반 분들에게 스터디 제안을 건넸는데 다행히 한 분도 빠짐없이 흔쾌히 수락해주셔서 재밌는 모임이 만들어졌다. 사실 지금도 해야 하는 일들이 많고, 앞으로도 넘쳐날 텐데 '나'라는 사람을 믿고 함께해 주시는 것 같아서 감개무량하고.. 너무 감사하고...😭😭 한 분 한 분의 시간이 소중하므로 중간에 흐지부지 되고 싶지는 않아서 나름 열심히 찾아보고 스터디 관련 계획을 세웠다. 1) 같은 목표 2) 간단한 규칙 3) 정해진 기간 4) 적당한 책임감과 동기부여 이런 기준들을 ..

    [TIL] 3주차 주특기 숙련ㅣ컨디션 난조

    주특기 숙련 강의 JPA 심화 부분을 지나 이번 강의는 계층 분리의 중요성을 깨닫기 위해 Controller에 모든 로직을 구현해보고, 계층을 나눠 리팩토링하는 방식으로 진행되었다. 전에 JDBC를 공부하면서 PreparedStatement 클래스를 이용하여 쿼리문을 날렸던.. 그런 기억들이 떠올라 아주 잠깐 반가웠다가, DI (의존성 주입), IoC (제어의 역전) 같은 개념들이 나오면서 혼란해졌다. 이럴 땐 다양한 자료를 참고하며 읽어보자. 의존관계 주입(Dependency Injection) 쉽게 이해하기 이번 글에서는 DI(의존성 주입, 의존관계 주입)의 개념을 설명한다. tecoble.techcourse.co.kr DI를 햄버거 가게 요리사에 비유하여 쉽게 설명하고 있다. 정확히 이해하기 위해 ..

    [TIL] 3주차 주특기 숙련ㅣ주간 시작

    주특기 숙련 주간 시작 스프링에 얻어맞았던 입문 주간이 지나고, 더욱 강력해진 숙련 주간이 시작되었다. 어제의 시험과 개인 과제를 기준으로 걷기/달리기 반이 편성되었는데 나는 달리기반으로 숙련 주간을 달리게 되었다. 저번 주간과 마찬가지로 시험과 개인 과제가 있고, 조금 다른 점은 개인 과제가 Lv1과 Lv2로 나뉘어 있다는 점이다. Lv1 만 제출해도 괜찮지만 개인적으로 Lv2까지 마무리하는 게 목표! 또 다른 이번 주간의 개인적인 목표는 '조원들과 코드 리뷰하기'이다. 아무래도 개인과제이다 보니 저번 주간에 리뷰를 할 시간이 많지 않았는데 이번엔 꼭 서로의 코드를 보며 어떻게 설계하고 구현했는지 이야기해볼 수 있으면 좋겠다. 다음은 이번 주간의 세부 일정이다. 12/03 (토) 13:00 ~ 14:0..

    [TIL] 3주차 주특기 입문ㅣSpring 시험

    주특기 입문 Spring 시험 회원 조회 API를 만드는 것이 시험 문제로 나왔다. 문제에는 회원 목록 DB와 API 설계도, 스켈레톤 코드가 적혀 있었다. 처음에 도대체 어디에 뭘 작성하라는건가 감이 안와서 문제를 여러번 읽다가🤣 인텔리제이를 켜고 Entity부터 차근차근 만들기 시작했다. 틀이 주어졌던 GET 요청 외에 POST 요청을 따로 만들어 Postman으로 테스트까지 한 후 제출했다. 사실 개인과제를 스스로 해결했다면 전혀 어려운 문제는 아니었다. 포인트는 1) Entity를 그대로 반환하지 않고 DTO로 변환 후 반환하는 것과, 2) 예외를 발생시키는 부분(NullPointerException)이었을 거라 생각한다. 이후 문제풀이 세션을 듣다 내가 전체 조회 부분에서 throw 처리를 하지..

    [TIL] 3주차 주특기 입문ㅣCRUD API 만들기 3편

    👇 [스프링 부트로 CRUD API 만들기 1편] 보러 가기 👇 부모 클래스 타입(변환 생략 가능) / 부모 클래스 타입 > 자식 클래스 타입(변환 반드시 명시) class Parent { ... } class Child extends Parent { ... } ... Parent pa = new Parent(); // 허용 Child ch = new Child(); // 허용 Parent pc = new Child(); // 허용 Child cp = new Parent(); // 오류 발생 게시글을 업데이트하는 메소드는 2가지의 리턴이 있을 수 있다. 1) 비밀번호가 일치했을 시, 성공 여부와 함께 변경된 객체 리턴 2) 비밀번호가 불일치했을 시, 성공 여부(=실패)만 리턴 그렇다면 Service 클래..

    [TIL] 3주차 주특기 입문ㅣCRUD API 만들기 2편

    👇 [스프링 부트로 CRUD API 만들기 1편] 보러 가기 👇 new IllegalArgumentException("아이디가 존재하지 않습니다.") ); board.update(requestDto); // 엥 이게 끝? return new BoardResponseDto(board); } 어제 기술 매니저님께서 주신 미션 아닌 미션. (CRUD API 만들기 1편의 내용 참고) Service단에서 업데이트쪽 메소드를 보면 별도로 Repository에 접근하지 않더라도 업데이트가 잘 된다. JPA가 수정 메소드를 제공하지 않는다는 건 저번 시간에 알게 되었는데, 트랜잭션과의 관계는 뭘까? 트랜잭션과 업데이트가 무슨 관련이 있는지부터 피부로 느끼기 위해 바로 @Transactional 어노테이션을 지워보았다..