본문 바로가기
반응형

전체 글1065

[코딩 스터디 2기] : 6주차 이번주 스터디 링크 6주차 오늘의 특이 사항 쌤 한 분이 개인 사정으로 참석을 못 하셨다. 요즘 공부하고 있는 CS 지식에 대해 발표하고 리뷰했다. CS 지식 외 프로젝트와 JPA에 대해 공부하였는데 간단하게 설명하기가 CS 지식이 더 좋기도 하고 유익할 것 같아 주제를 CS 지식으로 선택했다. 스터디 시작 후 공부 Hash table Collision에 대해 공부했다. JPA 강의를 하나 들었다. 어제 강의 커뮤니티에 질문한 내용에 답변이 달렸다. JPA를 공부할 때 연관관계가 중요하니 복습을 하면서 테이블과 관계가 어떻게 이루어지는지 체크해 보라고 했다. 오늘 이 부분을 체크했다. 더해서 추가로 강의 하나를 더 들었다. 개인 프로젝트를 진행했다. 막히는 점 개인 프로젝트에서 막혔다. 다른 쌤들은 무엇.. 2022. 4. 9.
[소경관] : 프로젝트에 적용하기 위해 JPA Builder, Entity 사용 공부 중 회원가입 로직을 짜려고 했는데 시작부터 바로 막혔다. JPA를 사용해 본 적이 없기도 하고 Entity를 사용해 본 적이 없기도 해서 막혔다. 오늘 스터디부터 쭉 찾아보면서 알아낸 것을 간단히 정리해 본다. 지금까지 캐치한 것 JPA를 처음 사용해 보면서 DTO대신 Entity를 사용했는데 Entity 사용법이 어렵다. 먼저, Entity는 일관성을 보장하기 위해 Setter를 사용하면 안 된다. 때문에 따로 생성자를 만들거나 Builder를 사용해야 한다. 또, Entity를 DTO로 매핑하여 사용하는 방법도 있는 것 같다. Builder를 만들 수 있지만 @Builder 어노테이션을 활용해 쉽게 만들 수도 있는 것 같다. 문제 캐치한 것에 대한 확신이 없다. 왜? → 구현을 해 본 적이 없어서. 나는.. 2022. 4. 9.
[JPA] : 연관관계 매핑 시작하기 // @Column(name = "MEMBER_ID") // private Long memberId; @ManyToOne @JoinColumn(name = "MEMBER_ID") private Member member; 주석 부분은 이제 사용하지 않는다. 다대일을 설정해 준다. MEMBER_ID에 조인을 걸어준다. 만약, 양방향 매핑을 하고 싶다면 member에서 매핑을 해주면 된다. 일단 지금은 하지 않는다. 가능하면 단방향 매핑이 좋다. 객체 입장에서 양방향은 양쪽 다 신경을 써야해서 별로 좋지 않다. 개발하다 필요할 때 양방향을 넣어준다. 실전에서 JPQL을 많이 쓰는데 이떄 양방향 연관관계가 필요하긴 하다. // @Column(name = "ORDER_ID") // private Long orde.. 2022. 4. 9.
[CS 노트] : Hash table에서 Collistion 해결하기 Hash table에서 Collision 해결 방법은? 대표적인 방법으로 2개가 있다. open addressing 충돌 발생 시 규칙에 따라 table의 비어있는 slot을 찾는다. slot를 찾는 방법은 3가지가 있다. Linear Probing Quadratic Probing Double Hashing separete chaining linked list를 사용한다. 충돌 발생 시 노드(slot)을 추가해 데이터를 저장한다. Open addressing 충돌이 발생하면 규칙에 따라 table의 비어있는 slot을 찾는다. linked List나 tree를 사용하지 않는다. 때문에 separate chaining에 비해 메모리를 적게 사용한다. Linear Probing, 선형 조사법 충돌이 발생한 .. 2022. 4. 9.
[TIL] : 164 일일 배움을 위한 Today I Learned ! 소경관 간단하게 프로젝트 중 DTO와 Entity를 분리하고 생성자를 하나 만들어줬다. 2022.04.08 - [Project/소경관] - [소경관] : 프로젝트 패키지 구조 고민 및 Entity와 DTO의 분리 인터뷰 간단한 인터뷰를 진행했다. 나는 발표를 진짜 너무 못 했다. 목소리도 너무 떨리고 긴장도 심하게 되었다. 그래도 스터디에서 간단한 발표를 매주 하면서 발전이 있었나, 온라인이라 힘이 생긴건가 그래도 엄청 떨거나..(목소리가 자동 바이브레이션 되는 경우..) 엄청 긴장(눈이 검해진다..피가 쏠린다..)하진 않았다. 중간에 숨이 빨라져 좀 떨리긴 했는데 그래도 애써 침착해 숨을 내쉬면서 떨림을 멈추려고 노력했다. 생각 정리 머릿속이 복잡해서 .. 2022. 4. 8.
[소경관] : 프로젝트 패키지 구조 고민 및 Entity와 DTO의 분리 프로젝트 패키지 구조 고민 학교에서 사용하던 패키지 구조 Controller Service IService Mapper IMapper DTO 프로젝트 패키지 구조를 저번에 공부했을 때(🔗 ← Click! 참고) 작은 단위에서 크게 확장할 수 있는 구조로 짜는 게 중요하다고 했는데 사실 내가 경험이 많지 않아서 어떻게 해야 할 지 감이 안 잡힌다. 다만 위와 같은 구조에서 Entity를 DTO와 나누어 새로 만들어 주었다. Entity와 DTO의 차이? Entity는 실제 테이블과 매핑이 된다. Setter를 사용하지 않는 게 좋다. 왜? 객체 값을 쉽게 변경할 수 있게 되면 일관성을 유지하기 어려워진다. 일관성을 잃으면 유지 보수가 어려워진다. 그럼 어떻게? Setter 대신에 생성자를 생성해 준다. 더.. 2022. 4. 8.
[JPA] : 양방향 연관관계와 연관관계의 주인(Owner)에 대한 주의점 양방향 매핑 시 가장 많이 하는 실수 //저장 Member member = new Member(); member.setUsername("member1"); em.persist(member); Team team = new Team(); team.setName("TeamA"); team.getMembers().add(member); em.persist(team); em.flush(); em.clear(); tx.commit(); 이렇게 코드를 바꾸고 실행을 해 본다. TEAM_ID가 null이 뜬다. //저장 Team team = new Team(); team.setName("TeamA"); //team.getMembers().add(member); // 2022. 4. 8.
[생각정리] : 떠올려보지 못한 것을 떠올리는 것 ! 떠올려보지 못한 것을 떠올리는 것 ! 오늘의 주제는 떠올려보지 못한 것을 떠올리는 것이다. 생각 정리는 따로 글을 계획하고 쓰는 것이 아니다. 머릿속이 복잡할 때 글로 자꾸 뱉어내면서 생각을 비워내기 위해 쓴다. 나는 평소에 머릿속에 생각이 많이 있다. 그게 아이디어가 될 수도 있고, 내가 배우고 싶은 것에 대해 생각을 하는 것 일 수도 있고, 지금 내가 공부하는 것을 어떻게 활용하면 좋을지에 대한 생각이 될 수도 있다. 오늘도 내 머릿속에서 복잡한 생각들이 마구마구 스쳐지나간다. 지금 당장 이렇게 글로 정리하지 않으면 공부가 머리에 안 들어올 것 같다. 사실 더 솔직하게 말 하면 아까 JPA에 대해 공부하면서 연관관계에 대해 열심히 탐구(?)를 했는데 머릿속에 뭐가 더 들어오지 않아 비워내는 중이다.(.. 2022. 4. 8.
[JPA] : 양방향 연관관계, 연관관계 주인(Owner) 양방향 매핑 지금까지 코딩한 부분은 Member에서 Team으로는 갈 수 있지만 반대로 Team에서 Member로는 갈 수 없다. 근데 사실, 양 쪽은 왔다갔다 할 수 있어야 한다. 그렇게 만들면 양방향 연관관계라고 한다. 테이블의 연관관계는 외래키 하나로 양방향이 다 있는 것이다. 사실, 테이블의 연관관계는 방향이랄 게 없다. 외래키를 넣으면 된다. 문제는 객체이다. Team에서 Member로 갈 수 없는 문제가 있다. 어떻게 해결하나? Team에 List members를 넣어주면 된다. @OneToMany(mappedBy = "team") private List members = new ArrayList(); @OneToMany일대다 mappedBy = "team"나는 team으로 매핑이 되어있다. .. 2022. 4. 8.
[CS 노트] : Hash table에 대해서 Hash table이란? 효율적인 탐색을 위한 자료구조로 key-value 쌍의 데이터를 입력받는다. Hash function h에 key값을 넣어 얻은 해시값h(k)를 위치로 지정해 키,벨류 데이터 쌍을 저장하고 저장,삭제,검색의 시간복잡도는 O(1)이다. Direct address table를 미리 알아보자 직접 주소화 테이블은 Key 값을 index에 저장하는 방식인데 문제는 메모리 공간이 낭비된다. 예를 들면 key 값이 1000부터 시작하면 1부터 999까지는 비어 있게 된다. 또, 다양한 자료형을 담을 수 없다는 문제도 있는데 String으로 들어온 경우 Key 값을 바로 index로 사용하는 특성상 활용이 불가능하다는 문제가 있다. 이런 단점을 보완하는 게 Hash table이다. Hash .. 2022. 4. 8.
[TIL] : 163 일일 배움을 위한 Today I Learned ! 소경관 AWS에 새로 인스턴스를 파서 다시 DB를 연동했다. 이번에는 GUI의 힘을 빌리지 않고 코드로 완성시켜봤다. 익숙해서 금방할 줄 알았지만 익숙한데 익숙하지 않은 새로운 오류를 만나는 신기한 경험을 했다. 그리고 오늘 처음으로 JPA를 사용해 봤다. 강의에서 적용한 것 외 내가 공부한 것을 스스로 프로젝트에 적용하고 성공했따. 간단한 성공이지만 앞으로 발전할 수 있기도 하고 아직 못 써본 기술들이 밀려 있는 게 기대가 된다. 2022.04.07 - [Project/소경관] - [소경관] : 다시 AWS EC2 Ubuntu에 MongoDB, MariaDB 세팅 후 연동 및 JPA 테이블 자동 생성 완성 오류 노트 오류를 하나 발견해서 해결하고 해결 .. 2022. 4. 7.
[소경관] : 다시 AWS EC2 Ubuntu에 MongoDB, MariaDB 세팅 후 연동 및 JPA 테이블 자동 생성 완성 오늘은 일단 AWS EC2 Ubuntu MongoDB, MariaDB를 셋팅하고 JPA에 DTO를 생성해 자동 테이블 생성까지 마쳤다. Server에 DB를 다시 만들어 볼까? MariaDB와 MongoDB를 Server에 안 올릴 수는 없으니 미리 만들어 봤다. 이미 충분한 테스트와 시도를 거쳤기 때문에 뚝딱 만들 수 있을 줄 알았다.. 익숙해도 색다른 오류가 터진다.. 이번에는 GUI의 도움을 받지 않고 전부 다 코드로 셋팅했다. MariaDB 셋팅 sudo apt-gat update $ sudo apt-get install software-properties-common $ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_sig.. 2022. 4. 7.
[오류 노트] : (code=exited, status=14) / mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb / mongod.service: failed with result 'exit-code'. 문제 MongoDB를 잘 못 종료했나.. 문제가 있어서 다시 실행하려고 했으나 아래와 같은 오류가 떴다. .lock 파일도 삭제하고 다시 실행하도 또 .lock파일이 생기고, 여러 방법으로 껐다 켜도 mongo가 실행되지 않았다. mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb (code=exited, status=14) mongod.service: failed with result 'exit-code'. ​ 해결 sudo chown -R mongodb:mongodb /var/lib/mongodb sudo chown mongodb:mongodb /tmp/mongodb-27017.sock sudo service mongod.. 2022. 4. 7.
[TIL] : 162 일일 배움을 위한 Today I Learned ! JPA 프로젝트에 사용을 위해 기본 매핑을 연습하고 연관관계 매핑을 연습했다. 조인을 간단하게 할 수 있어서 놀랐다. 2022.04.06 - [Data Base/JPA] - [JPA] : 기본 매핑하기 2022.04.06 - [Data Base/JPA] - [JPA] : 연관관계 매핑 기초 R 고수준 그래프 함수를 간단하게 사용해 봤다. 이 외에도 여러 함수를 사용할 수 있었는데 그래프 체크만 하고 넘어갔다. 2022.04.06 - [프로그래밍언어/R] - [R] : 고수준 그래프 함수 CS 노트 이진 탐색 트리에 대해서 알아봤다. 이진 탐색 트리의 worst case를 해결하는 방법은 다음에 다뤄주는 것 같다. 2022.04.06 - [노트/CS 노트].. 2022. 4. 6.
[R] : 고수준 그래프 함수 고수준 그래프 함수 DF 2022. 4. 6.
[CS 노트] : 이진 탐색 트리에 대해서 이진 탐색 트리 BST, 이진 탐색 트리 이진 탐색 트리는 정렬된 트리로 왼쪽 자식 노드는 부모 노드보다 작은 값을, 오른쪽 자식 노드는 부모 노드보다 큰 값을 가지고 있는 구조이다. 이진 탐색 트리의 시간 복잡도는 모두 O(logn)이고 worst case인 경우 즉, 한 쪽으로 치우친 트리가 되었을 경우에만 O(n)이 된다. 이진 탐색 트리로 조회를 할 경우엔? 조회하는 데이터를 루트 노드와 비교하고 작으면 왼쪽, 크면 오른쪽으로 보낸다. 이것을 반복해서 쭉 내리고 값이 같은 경우를 찾으면 된다. 이 과정이 O(logn)의 시간 복잡도가 걸리게 된다. 이진 트리는? 이진 트리는 모든 노드의 자식 노드의 수가 2 이하인 트리를 이진 트리라고 한다. 이진 탐색 트리의 worst case 이진 탐색 트리는.. 2022. 4. 6.
[JPA] : 연관관계 매핑 기초 좀 더 연관관계를 맺어서 객체지향적으로 설계를 할 지에 대해 공부한다. 기본 매핑 같이 1대1로 매핑하는 것은 쉽고 이것은 객체가 지향하는 패러다임과 관계형이 지향하는 패러다임 이 사이에서 무언가를 잘 찾아야 하는 어려움이 있다. 방향, 다중성, 연관관계의 주인 연관관계의 주인이 어렵다. 책 추천 (조영호) 객체지향의 사실과 오해 오브젝트 Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setUsername("member1"); member.setTeamId(team.getId()); em.persist(member); 외래키 식별자를 직접 다뤄 데이터를 넣을 수 있다. .. 2022. 4. 6.
[JPA] : 기본 매핑하기 @Id @GeneratedValue @Column(name = "ITEM_ID") private Long id; 컬럼명을 따로 정해줄 수 있다. @Entity @Table(name = "ORDERS") // order가 예약어로 걸려있는 경우가 있따. // order by 때문에 그래서 orders라고 쓴다. public class Order { @Id @GeneratedValue @Column(name = "ORDER_ID") private Long id; @Column(name = "MEMBER_ID") private Long memberId; 테이블 이름도 지정해 줄 수 있는데 ORDER가 ORDER BY 예약어로 걸려있는 경우가 있어서 ORDERS로 주로 사용한다. 다른 컬럼도 이름을 걸어줄 수 .. 2022. 4. 6.
[오류 노트] : Could not find any META-INF/persistence.xml file in the classpath 문제 H2 데이터베이스로 JPA실습을 하려고 했는데 아래와 같은 오류로 Main 메서드가 실행이 안 되었다. Could not find any META-INF/persistence.xml file in the classpath 해결 경로를 체크해 보면 되는데 실수로 META-INF를 META_INF로 만들었다. 경로를 잘 확인해 보자. 2022. 4. 6.
[TIL] : 161 일일 배움을 위한 Today I Learned ! JPA 프로젝트에서 JPA를 사용하려고 하기 때문에 미리 연습해 놓고 있다. 빨리 기초를 익히고 바로 프로젝트에 적용해야 한다. 2022.04.05 - [Data Base/JPA] - [JPA] : 데이터베이스 스키마 자동 생성하기 2022.04.05 - [Data Base/JPA] - [JPA] : 필드와 컬럼 매핑 2022.04.05 - [Data Base/JPA] - [JPA] : 기본 키 매핑 오류노트 오늘도 오류 하나 정리해 봤다. 2022.04.05 - [노트/오류 노트] - [오류 노트] : Command failed with error 48 (NamespaceExists): 'Collection already exists. Spring Bo.. 2022. 4. 5.
[JPA] : 기본 키 매핑 키본 키를 매핑하는 방법은 직접 할당과 자동 생성이 있다. 직접 할당은 @Id를 사용하면 된다. 자동 생성은 @GeneratedValue 를 사용하면 된다. 옵션 AUTO : 방언에 따라 자동 지정, 요즘엔 또 다를 수도 있어서 보고 사용해야 한다. IDENTITY : 데이터베이스 위임. MYSQL 기본키 생성을 데이터베이스에 위임한다. SEQUENCE : 데이터베이스 시퀸스 오브젝트 사용, ORACLE TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용한다. @SequenceGenerator @Entity //JPA가 관리하는 객체고 데이터베이스 테이블과 매핑해서 사용하는구나! 하고 알면 된다. //@Table(name = "MBR") //데이터베이스 MBR 테이블이랑 매핑된다. 즉, 매핑 할 .. 2022. 4. 5.
반응형