본문 바로가기

Til28

TIL 230808 : 코드 디테일 조금씩 살려보기 (Transactional, NoArgsConstructor(AccessLevel = PROTECTED)) 오늘은 팀과제를 하며 기본 틀이 되는 코드를 짜며 오갔던 내용 중 이유가 궁금한 것들을 두가지 정리해보았다. @Transactional (readOnly = true) DB에서 불러온 객체를 수정 하면 더티체킹으로 자동으로 수정사항을 반영해줄 수 있다. 물론, 트랜잭션을 열어줘야한다. 그정도로 알고 있었고, 추가적으로 조회시에도 (readOnly = true)를 넣어줘서 해도 좋다고 들었다. 근데 오늘 팀원이 상세하게 이유를 덧붙여서 수정 뿐만 아니라, 생성, 삭제시에도 @Transactional을 달아서 트랜잭션 환경을 열어주는 게 좋다고 했다. 이유는 롤백기능이다. @Transactional의 rollbackFor 기능 트랜잭션을 열어두면 스프링에서는 디폴트값으로 UnCheckedException과 .. 2023. 8. 8.
TIL 230710 : 다중 JSON 다루기 (JSONObject, JSONArray) 예전에 Post 안에 Reply를 그냥 리턴해서 오류가 난 적이 있다. JSON안에 값이 JSON의 배열인 형태였는데, 오늘 강의를 보며 이를 다루는 걸 다시봤다. String타입으로 받아온 JSON데이터. ResponseEntity에서 getBody를 통해 가져왔다. Body의 내용을 보면 키-값으로 이루어진 맵의 형태이지만, "items"키의 값은 배열 안에 또다른 JSON형태의 데이터들이다. 이렇게 값이 배열인 경우, 배열의 하나하나의 값이 JSON인 배열인 경우 JSONArray를 통해 배열형태로 가져올 수 있다. - 키값을 직접 명시해서 해당 키의 값에 해당하는 배열을 가져오는 형태. 그런 뒤 items라는 배열을 반복하며 Object인 item을 JSONObject로 형변환해서 ItemDto로.. 2023. 7. 10.
TIL 230707 : 다른 팀의 발표를 보고 오늘 뉴스피드 팀과제 발표가 있었다. 다양한 기능을 구현한 팀부터 이러저러한 사정으로 팀원의 부재로 백엔드에 집중한 팀 등 다양했다. 모든 팀으로부터 배울점들이 있었다. 간략히 아래에 정리해본다. 폴더를 도메인별로 나눴다 강의를 듣고서 작업을 하다보면 보통 왼쪽처럼 폴더를 나누게 되는데, 이제 도메인이 다양해지면 저 폴더를 각 도메인에 (Reply, Post, User, Info 등) 나누어서 해당 패키지 내에서 독립적으로 의존하게 작업하기도 했다. 이를 튜터님도 칭찬해주셨고, 나도 시도해봐야겠다라고 생각했다. github의 issue, pull request 활용 매번 느끼지만 결국 협업이다. 내가 빠르게 10중에 10을 내 작업에 투자해서 진행하고 싶지만, 나의 시간 2를 투자해 팀에 10의 이득을 .. 2023. 7. 7.
TIL 230703 : JPA Buddy라는 것이 이 세상에 있었다 JPA Buddy를 알고 계셨나요? 저는 오늘 JPA Buddy라는 발음 자체를 처음으로 들었습니다. 문제 다른 프로젝트에서 쓰여진 코드를 가져오다 쿼리메소드에서 오류가 났다. 해당 Repository를 다루는 Entity인 Post에는 modifiedAt이라는 멤버가 없었다. 다행히 오류 자체는 발견하고 해결도 쉬웠다. 다만, 메소드의 이름자체만으로도 작동이 가능한 JpaRepository이지만 위와 같이 단순한 오탈자에 의해 오류를 범할 수도 있다는 생각이 들었다. 관련해서 매니져님께서는 JPA Buddy라는 플러그인을 알려주셨고, 이러한 플러그인의 존재 자체에 놀랐다. JPA Buddy 세팅 - 플러그인 - 마켓플레이스에서 검색으로 쉽게 찾을 수 있었다. 설치이후 ~~repository하고 도트 연.. 2023. 7. 3.
TIL 230630 : (이어서) Entity반환시 문제. (Dto의 중요성) https://thiswooin.tistory.com/39 TIL 230629 : List to JSON 객체 반환시 오류 (jackson) 오늘도 어김없이 이해할 수 없는 타이밍에 찾아오는 오류. 단순히 GET메소드로 포스트ResponseDto를 객체로 리턴받는 건데, 하나하나 할때는 되는데 전체를 하면 안 된다. 유독 13번 Post만 GET이 안된 thiswooin.tistory.com 처음으로, 해결 못 하고 TIL을 마쳤던 어제의 오류, 아침부터 다른 방법들로 시도해보고 했는데 겨우 해결했다.... 문제 Post에는 Reply가 OneToMany로 List의 형태로 담겨있다. PostResponseDto에도 List를 추가했다. 결과적으로, Reply가 있는 Post를 Client에 반환하면 오.. 2023. 6. 30.
TIL 230628 : mappedBy 적응해보기 양방향 관계의 1:1 의 두 Entity 양방향일때, mappedBy 옵션으로 외래키의 주인을 지정해줘야한다. 위 예에서는 Food에서 외래키를 갖는 것으로 설정되어있다. Food에다가 외래키를 테이블 칼럼으로 설정하고 싶은곳에 @JoinColumn하고 Column이름을 설정해준다. 그리고 그 밑에 외래키로 받아올 객체를 선언해준다. 양방향의 경우 반대 Entity에는, 다시 말해 외래키가 없는 Entity에는 mappedBy를 써주고 외래키의 주인에 있는 변수명을 뒤에 적어준다. 본인 클래스의 이름이 아닌 외래키의 주인의 변수명을 따르는 것. User를 통해 Food 조회해보기 외래키의 주인은 Food. User를 통해서도 조회가 가능한지 확인해보자. 유저Repository에서 그냥 한번 가져와보자. .. 2023. 6. 28.