전체 글

개발 일지
프록시 em.find(): DB에서 실제 엔티티 객체 조회 em.getReference(): DB 조회를 미루는 프록시 엔티티 객체 조회 Member member = new Member(); member.setUsername("a"); em.persist(member); em.flush(); // insert 문 실행 em.clear(); Member findMember = em.getReference(Member.class, member.getId()); // 프록시 Member class, select문 실행 X 프록시 특징 실제 엔티티를 상속받아 겉 모양이 같음 실제 객체의 참조를 보관 이론상 사용하는 입장에서 실제인지 프록시인지 구분 없이 사용하면 됨 프록시 객체 초기화 최초로 프록시 객체의 어떤..
소셜 로그인을 제외하고 백엔드에서 맡은 API는 모두 구현하고, CORS 설정까지 마친 후 배포했다. 오늘의 관건은 엑셀파일에 저장한 데이터를 MySql로 코드를 통해 저장하는 것과 CORS 연결이었다. 1. 엑셀 MySql RDB에 저장 코드로 xslx 파일을 열어 첫번째 시트의 각 행에 대해 for문으로 돌면서 각 열의 데이터를 추출해 미리 만들어논 엔티티에 넣고, 그 엔티티들을 리스트에 넣어 최종적으로 saveAll을 통해 저장했다 https://shinsunyoung.tistory.com/71 SpringBoot의 POI을 이용해서 엑셀 파일 읽기 안녕하세요! 이번 포스팅에서는 SpringBoot의 POI를 이용해서 엑셀 데이터를 읽고 뷰에 뿌리는 코드를 작성해보겠습니다. 👩🏻‍💻 전체 코드는 G..
상속관계 매핑: 객체의 상속 관계와 DB의 슈퍼타입, 서브타입 관계 매핑 객체는 상속관계 존재 RDB는 상속관계 X 슈퍼타입, 서브타입 관계라는 유사한 논리 모델링 기법 존재 이 논리 모델을 물리 모델로 구현하는 방법 1. 조인 전략 2. 단일 테이블 전략 3. 구현 클래스마다 테이블 전략 객체 입장에서는 아무 변화가 없고, DB설계를 어떻게 할 것이냐 결정하는 것 JPA는 세가지 방법 모두 지원 (기본 설정: 단일 테이블 전략) // Item class @Entity public class Item { @Id @GeneratedValue private Long id; private String name; private int price; // Album class @Entity public class ..
주특기가 끝나고 처음 프론트와 협업을 시작했다. 아리송했던 프론트와의 연동 방식에서 우린 하던대로 JSON으로 변수명과 형식만 잘 맞춰서 데이터를 잘 넘겨주기만 하면 되고, CORS 설정과 추후에 EC2의 IP 주소만 잘 알려주면 문제없을 것이란 답변을 듣고 생각보다 복잡하진 않은 것 같아서 다행이란 생각을 했었다. 프로젝트 설계 단계에서 영화를 검색하면 그것을 서비스해주는 OTT를 알려주는 사이트로 정했었는데, 구현 가능할지 애매해서 좀 더 스코프를 좁게 잡아 SA를 진행했다. 이후 혼자 방법을 찾은 끝에 원하던 것을 구현에 성공해서 큰 뿌듯함을 느끼기도 했다. (TMDB 만세!) CORS (Cross-Origin Resource Sharing) 추가 HTTP 헤더를 사용하여, 한 서버에서 실행중인 웹..
다대일 (복습, 제일 중요!)단방향양방향일대다 (권장하지 않음)DB는 설계상 다 쪽에 외래키가 설정될 수 밖에 없다Member 객체에서 Team 객체를 탐색하는 것이 적어도 Member 쪽에 외래키 매핑하는 것을 권장(다대일 양방향 권장)@JoinColumn 사용하지 않으면 조인 테이블을 생성함 단방향// Team class@OneToMany@JoinColumn(name = "TEAM_ID")private List members = new ArrayList(); Member member = new Member();member.setUsername("member1");em.persist(member); // -> insert SQLTeam team = new Team();team.setName("TeamA..
팀과제를 잘 마무리하고 배포까지 기분좋게 끝냈다. 다음 주차부터는 또 새로운 사람들과 프론트까지 묶여서 협업하게 될텐데, 기대반 걱정반인 것 같다. 1. JAVA InputStream Stream: 외부의 데이터가 입력/출력되는 통로 InputStream(입력 통로), OutputStream(출력 통로) 둘은 추상 클래스로서 추상 메소드를 오버라이딩해서 다양한 역할을 수행한다 과제에서 요청으로 multipartfile을 받아서 InputStream 객체로 변환한 것을 AwsS3Client 객체가 S3에 저장해주었었다 https://bamdule.tistory.com/179 2. Github Actions 이 기능을 이용해 자동 배포하라는 요구사항이 있었어서 공부해보았다 CI(Continous Integr..
객체를 테이블에 맞춰 데이터 중심으로 모델링하면 협력 관계를 만들 수 없다 - 테이블은 외래 키로 조인을 사용해 연관된 테이블을 찾는다 - 객체는 참조를 사용해 연관된 객체를 찾는다 단방향 연관관계 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; private int age; // @Column(name = "TEAM_ID") // private Long teamId; @ManyToOne // JPA에 다대일 연관관계가 있음을 알려줌 @JoinColumn(name = "TEAM_ID") // 외래키 매핑 private Team team; // 객체 ..
1. API(Application Programming Interface) 애플리케이션: 고유한 기능을 가진 모든 소프트웨어 프로그래밍: 프로그래밍 방식으로 인터페이스: 애플리케이션 간의 통신 규약 즉, 클라이언트 요청과 서버 응답의 구성 방법을 약속해 놓은 것이다 https://aws.amazon.com/ko/what-is/api/ 2. Client / Server 클라이언트 서버 모델: 서비스 요청자인 클라이언트와 서비스 자원의 제공자인 서버 간에 작업을 분리해주는 분산 애플리케이션 구조이자 네트워크 아키텍처 https://ko.wikipedia.org/wiki/%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8_%EC%84%9C%EB%B2%84_%EB%AA%A8%EB%..
1. Spring @Transactional public ResponseDto togglePostLike(Long postId, HttpServletRequest request) { //... LikePost checkLike = likePostRepository.findByPostIdAndMemberId(post.getId(), member.getId()); if (checkLike == null) { // like 등록 LikePost likePost = LikePost.builder() .member(member) .post(post) .build(); likePostRepository.save(likePost); } else { // like 취소 likePostRepository.deleteBy..
객체와 테이블 매핑 @Entity // JPA가 관리하는 엔티티, 동명의 클래스 없다면 이름 설정 X //@Table(name = "USER") // 클래스명이 DB 테이블명과 불일치 한다면 매핑 가능 public class Member { 기본 생성자 필수 final 클래스, enum 클래스, 중첩 클래스, 인터페이스 사용 X 저장할 필드에 final 사용 X DB 스키마 자동 생성: 애플리케이션 실행 시점에 DDL 자동 생성 (테이블 만들어 놓고 시작) 객체 중심적으로 매핑해놓으면 JPA가 알아서 테이블은 만들어 줌 DB 방언 설정으로 적절한 DDL 생성 -> 개발 장비에서만 사용 운영 서버에서는 사용하지 않거나, 잘 다듬어서 사용 옵션 설명 create 기존 테이블 삭제 후 다시 생성 (DROP -..
hjkim0502
CODELOG