GYUNG JIN KIM
수강평 작성수
2
평균평점
5.0
블로그
전체 3#카테고리
- 백엔드
#태그
- 인프런워밍업클럽-백엔드스터디
![인프런 워밍업 클럽 - 백엔드 스터디 [3주차]](https://cdn.inflearn.com/public/main/blog/default_thumbnail.png?w=260)
2024. 03. 08.
0
인프런 워밍업 클럽 - 백엔드 스터디 [3주차]
미니프로젝트를 하다보니, 강의 마지막 부분에 대한 이해가 부족하다고 느꼈다.그래서, 이번엔 강의 마지막에 나온 연결 관계에 대해 한번 정리하고자 한다. User entity에 UserLoanHistory를 추가해 주었다.User와 UserLoanHistory는 1:N 관계이다. @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true) private List userLoanHistories = new ArrayList();cascade 설정은 CascadeType.ALL 로 user에서 변경이 발생할 경우 UserLoanHistory에도 반영한다.강의시간에도 이야기하였지만, CasCade옵션의 경우 원하는 로직에 따라 신중하게 사용해야한다. 예컨대, 어떤 사용자가 책을 빌린 다음에 반납하지 않고 회원 탈퇴를 할 경우를 가정해 보자. Cascade 옵션으로 user데이터가 사라질때 대출 기록까지 삭제할 경우 사라진 책을 찾기 어렵게 된다.그래서, 만약 포스팅 글에 달린 댓글 처럼 완벽한 종속 관계가 아닐 경우엔 cascade 옵션을 사용할 때 고민을 많이 해야한다.(참고한 사이트 : https://tecoble.techcourse.co.kr/post/2023-08-14-JPA-Cascade/) orphanremoval은 연결 관계를 끊으면 참고하고 있는 자식 객체를 삭제하는 기능이다.이 경우는 User 객체에서 대출히스토리와의 관계를 끊으면 대출히스토리가 삭제된다.User는 그대로 있고, 히스토리와의 관계를 끊음으로서 자식을 삭제하는 옵션이다.이거는 아래 사이트를 보면서 이해를 했다고는 생각했는데, 직접 실습을 해보면서 좀더 해봐야 겠다.(참고한 사이트 : https://tecoble.techcourse.co.kr/post/2021-08-15-jpa-cascadetype-remove-vs-orphanremoval-true/) UserLoanHistory에 연결관계를 설정한 코드이다.@JoinColumn(nullable = false) @ManyToOne private User user;many to one으로 한명이 여러개의 대출 기록을 가질수 있다고 이해하면 될 것 같다. nullable = false 옵션을 하면 UserLoanHistory이 User를 보고 있는데, 대출 기록은 모든 user에 매핑이 된다는 의미다.즉 inner join이 가능하다.강의 들을때도 그랬고 지금도이지만, 이렇게 연결했을 때 자동으로 Primary key를 FK로 설정을 하는게 맞는지헷갈린다.인터넷에서 찾아봤을 때는, 아래와 같이 명시적으로 외래키를 지정해 줄수 있는 것 같다.강의 시간에 관련해서 나왔었는지 다시 복습할 계획이다.그리고, 그 다음에 헷갈리는 부분은public void loanBook(String bookName){ this.userLoanHistories.add(new UserLoanHistory(this, bookName)); }this.userLoanHistories 를 할 때.User 객체가 정해지면 (사용자가 정해지면) 사용자의 PK (따로 외래키를 설정했을 경우엔 FK)를 가지고 대출 이력을 쭉 가져와서 객체 리스트를 만들고 거기에 새로운 대출 이력 객체를 넣어주는 것이 맞는지 정확하게 이해가 되지 않았다.강의 중에는 암묵적? 묵시적으로 진행되는 부분이라 하셨는데, 연관 관계에 대해 좀 더 개념을 이해해야 활용을 잘 할 수 있을 것 같다. 오늘은 객체의 연관 관계에 대해 고민하였다. 아직 모든게 명확한 상태는 좀만 더 공부하면 마저 이해할 수 있을 것 같다.
![인프런 워밍업 클럽 - 백엔드 스터디 [2주차]](https://cdn.inflearn.com/public/main/blog/default_thumbnail.png?w=260)
2024. 03. 03.
0
인프런 워밍업 클럽 - 백엔드 스터디 [2주차]
이번주 발자국은 수업 시간에 다루지 않았거나, 놓친 사항들 정리하고자 한다. MySQL에서 column name 룰MySQL은 Column name 이 camel case 로 작성되어 있으면, “_” 로 인식한다.예컨대, warehousingDate 라고 컬럼명을 작성하였는데, 인텔리제이에서 컴파일을 하면 계속warehousing_date 필드가 없다고 오류가 발생하였다.찾아봤더니, camel case로 작성될 경우 제대로 인식하지 못하는 문제가 있었다.인텔리제이 무료 버전을 사용하고 있어서, MySQL은 workbench를 다운받아 사용하고 있는데,거기서는 컬럼명이 정상적으로 나왔다. 그리고, 쿼리도 잘 실행이 되었었는데 JPA를 통해서 하려니 문제가 발생하였다.이런 오류를 방지하기 위해서는 MySQL column 명을 지정할때는 camel case가 아닌 _ 로 만들면 된다.JAVA : warehousingDateMySQL : warehousing_date MySQL DATE 변수 형태 이건 무엇이 잘못되었는지 모르겠다. MySQL 에서 날짜를 지정하면 2023-03-03 이렇게 정상적으로 입력이되는데 이번 주에 과제를 하면서, 20230303 이런 포맷으로 입력된 적이 있었다.JAVA 에서는 2023-03-03 이렇게 SQL로 입력하려고 하고, SQL은 20230303 총 8 글자 자리만 있다보니 Data truncated ~~~~~ at row 1 이런 오류가 계속 발생하였다. 테이블을 삭제하고 YYYY-MM-DD 타입으로 입력해 주자 그 다음부터는 정상적으로 입력을 받았다. 이번엔 DATE타입에서 문제가 발생했었지만, column 내용 길이를 초과하는 경우도 이와 같은 문제가 발생 할 것 같다.비슷한 오류가 발생할때를 대비하여 정리하였다. Intelli J 무료 버전에서 profile 설정하는 방법강의에서는 유료 버전을 사용해서, run configuration 에서 profile 설정을 할 수 있었다.하지만 무료버전에서는 같은 기능을 사용할 수 없어서 다른 방법으로 설정해야한다.똑같이 Edit Configurations 에 들어간다. Add Run Options 에 가서, Add VM options 을 선택한다.-Dspring.profiles.active=dev 새로 생긴 옵션 입력 필드에 위와 같이 입력한다. dev 위치에는 Local, dev, product 등 설정한 profile 명을 입력하면 된다.
![인프런 워밍업 클럽 - 백엔드 스터디 [1주차]](https://cdn.inflearn.com/public/main/blog/default_thumbnail.png?w=260)
2024. 02. 24.
0
인프런 워밍업 클럽 - 백엔드 스터디 [1주차]
그동안 백엔드 공부를 하고 싶었었는데, 어디부터 시작해야할지 막막하였다.큰맘 먹고 인터넷 강의를 신청해도, 퇴근하면 피곤하다는 핑계로 진도를 못 나가곤 했다.그러던 차에 인프런에서 온라인 스터디 과정을 모집하였고, 스터디에 참가하면 좀 더 열심히 할 수 있지 않을까 하는 기대에 스터디에 참가하고 강의를 수강하였다. 첫 일주일 동안 학습한 내용은, 기본적인 환경 셋팅 방법과 스프링을 이용해서 입력, 출력, DB 입출력 기능을 구현하는 방법이다. 회사에서 늦게 오는 날은 과제를 제출하기가 빠듯하긴 했지만, 그래도 꾸준히 한 덕분에 첫 일주일은 무사히 진도를 따라갈 수 있었다. 하지만 진도를 따라가기가 급급하다 보니깐 스스로 복습하고 체득하는 것이 부족했던 것 같다. 이번주엔 주말에 최대한 강의와 과제를 많이 해결하고, 주중에는 반복하고 체화하는 시간을 갖도록 해야겠다. 이번주에 제시된 과제들은 퐁당퐁당 같은 느낌이었다. 과제2과 과제4는 강의 시간에 배운 것을 바탕으로 API를 만들어 보는 과제였고,나머지 과제는 코딩보다는 강좌 시간에 활용한 개념에 대해 찾아보고 정리하는 시간이었다. 과제1https://chzhql6.notion.site/0-BE-1-Java-Annotation-b0cc528baa984c30989b8783330b6de8?pvs=4과제2https://chzhql6.notion.site/0-BE-2-GET-POST-API-a4de4a71b22d4c3ca1cdada2f930ec9a?pvs=4과제3https://chzhql6.notion.site/0-BE-3-ec2c739d7e554e979c8e6bf993c0d064?pvs=4과제4https://chzhql6.notion.site/0-BE-4-API-94ff931e7dca41bf8f555a6ba78ad30b?pvs=4과제5https://chzhql6.notion.site/0-BE-5-e5517e4a91294be08754a5281bd56383?pvs=4 과제2, 과제4는 배운 내용을 정리하는데 많은 도움이되었다.수업 시간에 따라치느라 어느 순간 이해를 못하는 부분도 있었는데, 과제를 통해서 개념을 정리하는데 좋았다.특히 과제4를 할 때는 입출력 객체를 어떻게 만들면 될지 고민해야해서 그부분이 재밌었다. 단순히 수업시간에 했던 것을 그대로 베껴도 되는 과제였다면 했을때 성취감이 덜했을 텐데, 과제 시간에 이해한 것과 고민한 것을 같이 적용해야해서 과제를 푸는게 재밌었다. 이번에 강의를 들으면서 부족하다고 느낀 것은, 자바 공부를 어서 마무리를 해야겠다는 생각이다.자바도 항상 앞 부분만 계속 공부하게 되고 뒷 부분은 체득을 잘 못하고 항상 지나가는 것 같다는 생각이 들었다.또, 문법도 옛날에 많이 하던 c++스타일로 계속 하려고 하다 보니 람다식이나 그외 자바 스타일의 문법을 사용하지 못하고 있는것을 깨달았다. 마침, 다른 수강생 분들의 과제 결과도 공유가 되고 있기 때문에 참고하면서 발전 시켜야겠다. 이번 주말엔 강의도 먼저 듣고 과제도 먼저 해결하면서 좀 더 내것으로 소화시켜야겠다.너무 유익한 스터디이다. 이 강의를 바탕으로 백엔드 공부를 계속 해나가고 싶다.
백엔드
・
인프런워밍업클럽-백엔드스터디




