Java

주특기가 끝나고 처음 프론트와 협업을 시작했다. 아리송했던 프론트와의 연동 방식에서 우린 하던대로 JSON으로 변수명과 형식만 잘 맞춰서 데이터를 잘 넘겨주기만 하면 되고, CORS 설정과 추후에 EC2의 IP 주소만 잘 알려주면 문제없을 것이란 답변을 듣고 생각보다 복잡하진 않은 것 같아서 다행이란 생각을 했었다. 프로젝트 설계 단계에서 영화를 검색하면 그것을 서비스해주는 OTT를 알려주는 사이트로 정했었는데, 구현 가능할지 애매해서 좀 더 스코프를 좁게 잡아 SA를 진행했다. 이후 혼자 방법을 찾은 끝에 원하던 것을 구현에 성공해서 큰 뿌듯함을 느끼기도 했다. (TMDB 만세!) CORS (Cross-Origin Resource Sharing) 추가 HTTP 헤더를 사용하여, 한 서버에서 실행중인 웹..
팀과제를 잘 마무리하고 배포까지 기분좋게 끝냈다. 다음 주차부터는 또 새로운 사람들과 프론트까지 묶여서 협업하게 될텐데, 기대반 걱정반인 것 같다. 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. 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 -..
1. 환경 세팅 h2 database 사용 maven 설정 hibernate 버전은 사용하고자 하는 스프링 버전에 맞는 것으로 설정하면 좋다 spring.io -> projects -> spring boot -> Learn -> 스프링 버전에 맞는 doc -> 'org.hibernate'로 검색해 버전 확인 h2는 설치한 버전과 같아야 한다 JPA 설정: /META-INF/persistence.xml persistance-unit에 name속성으로 이름 지정 javax.persistence.~~ : JPA 표준 속성 hibernate.~~ : hibernate 전용 속성 DB 방언: DB마다 구문에 차이가 있기 때문에 어떤 방언을 사용할 것인지 알려주어야 한다 hibernate는 40가지 이상의 DB 방..
1. Spring 스프링 info level log 달기 @Slf4j log.info("게시물 이 삭제되었습니다.", post.getTitle()); 저번주 JPA 연관관계 정리 @Column에 name 속성을 따로 지정하지 않으면 그 필드명으로 자동 지정 @JoinColumn 외래키 매핑할 때 사용하는 어노테이션 1:N 관계인 경우 보통 N쪽에 외래키를 두므로 연관관계의 주인이 되며 해당 어노테이션을 붙힌다 연관관계의 주인 = 외래키 관리(등록, 수정, 삭제) 양방향인 경우 주인이 아닌 1쪽에 mappedBy를 사용하여 주인이 아님을 알려준다 // 댓글이 연관관계의 주인 // 게시글에서 댓글 객체를 불러와 사용 가능 @OneToMany(mappedBy = "article") private List co..
JAVA 진영에서의 ORM 표준 기술인 JPA의 필요성은 여러 자료를 통해 머리로는 대충 알고 있었지만, 영한님 설명을 통해 좀 더 와닿게 되었다 1. 상속 Item 객체를 상속받은 Album 객체를 RDB에 저장할 때 앨범을 필드단위로 분해하여 우측의 ITEM, ALBUM 테이블에 각각 적절하게 저장해주기 위해 INSERT SQL문도 각각 작성하여 두번 날려야 한다 DB에서 ALBUM 객체를 조회할 때는 우측의 ITEM, ALBUM 테이블을 JOIN SQL문으로 묶어주고 그것을 다시 객체로 매핑해준 후 반환한다 이렇게 SQL 의존적이고 복잡한 과정을 피하기 위해 DB에 저장할 객체에는 상속관계를 사용하지 않게 된다고 한다 2. 연관관계 객체 지향적으로 모델링하는 경우에 저장할 때는 크게 문제가 없다 대..
가장 에러를 많이 만났던 주차였다. 스스로의 힘으로 리팩토링에 성공해서 원하는 결과물을 만들어냈고, 금요일부터는 새로운 팀원들과 팀플 및 개인공부를 진행중이다. 다음 주차부터는 지금까지 배운 것들을 토대로 실제 서비스와 같은 것들을 만들어 나갈텐데, 지금 내 수준 정도로 괜찮은건가? 싶기는 하지만 앞으로 계속 배워나가면 된다라며 스스로를 다독이고 있는 것 같다. 1. ORM(Object Relational Mapping) 애플리케이션의 객체와 RDB(relational database)를 연결(mapping)하는 것이다 자바는 객체로 구성하여 프로그래밍하고, RDB는 테이블로 이루어져 있으며, 애초에 이 둘은 호환을 염두에 두고 만들어진 것이 아니기 때문에 객체와 테이블을 매핑하는 것에 문제가 생길 수 ..
언젠가부터 너무 적당히만 공부하는 것 같다. Git 공부, TDD, 코테 문제 등 할게 많은데도 사리면서 하는게 많이 느껴지는데, 좀 반전시키고자 오늘은 코테문제 하나 풀고 마무리하려고한다 ㅎ.. 또 다른 분위기 반전으로 김영한님의 JPA 기본 강의를 구매해서 다음주부터 들을 예정이기 때문에 또 열심히 달리게 되는 계기가 되지 않을까 싶다. 1. Spring 과제에 스케줄러를 구현해보았다 매일 오전 1시에 댓글 갯수가 0개인 게시글을 모두 삭제해주는 로직을 만들어야 했다 먼저 애플리케이션에 @EnableScheduling으로 인식하게 해주고 @EnableScheduling @EnableJpaAuditing @SpringBootApplication public class IntermediateApplica..
hjkim0502
'Java' 태그의 글 목록 (2 Page)