전체 글 474

쿠버네티스

쿠버네티스는 Iaas와 Paas 사이에 위치한다. 왼쪽으로 갈수록 low하다. 컨테이너가 뭔데? 예전에는 가상머신을 띄울 때 일일히 OS를 설치하고 그 위에 앱을 돌리는 구조였다. 이는메모리를 잡아먹는 등 성능을 낮춘다. 이미지는? 우분투를 띄울 때 OS를 위한 모든 설정값, 라이브러리 등을 모두 가지고 있는 것을 이미지라고 생각하자. 이미지를 실행한 상태가 컨테이너다. 컨테이너를 관리해주는 툴이 쿠버네티스이다. 코드를 업데이트하면 빌드를 하고, 빌드를 하면 이미지를 만든다. 그리고 원래 돌아가던 컨테이너를 내리고 새 이미지를 실행시켜 만든 컨테이너를 돌린다. 쿠버네티스는 마스터노드, 워커노드로 이루어져있고 가장 작은 단위는 pod이다. [ Pod : 쿠버네티스의 가장 작은 배포단위 ( 한개 이상의 컨테..

[spring][2022고대해커톤]SQL이 맞는데 안될때(ft. 여러개 조회 List)

시간이 급박한 해커톤에서 계~속 SQL이 분명이 맞는데 조회가 제대로 작동되지않았다. 그만하고 싶었지만 어쩔수없기에 계속 봤다. 그러다가 그냥 작은 것부터 돌려보자 싶어 select하는 필드중에 몇개만 골라 새로 res를 만들고 코드를 수정하기 시작했다. 예전에 작성해놓은 코드를 보며 갑자기 다른 점이 보였다. 그것은 바로 List였다. 여러개를 조회할 때는 List로 조회해야하는데 이걸 잊어버렸던 것이다!! 막상 생각이 떠오르니 과거에 이렇게 만들었었다는 것이 떠올랐다. 그래서 바로 @Getter @Setter @AllArgsConstructor public class GetReservationListRes { private List reservationList; } reservation의 List 형..

[spring]@Builder(생성자의 순서가 바뀐다면?), ObjectMapper(데이터를 json형태로 변경하는 법)

1. @Builder @Builder public PostCreate(String title, String content) { this.title = title; this.content = content; } 메서드에 builder어노테이션을 붙여준다. 작은 클래스라면 클래스 위에 붙여도 되지만 왠만하면 메서드 위에 붙이는 것이 좋다. 이것은 lombok의 어노테이션 중 하나이다. 이 어노테이션을 생성자에 붙이면 PostCreate request = PostCreate.builder() .title("제목입니다.") .content("내용입니다.") .build(); 이렇게 postCreate에 있는 변수에 각각 이름에 값을 넣어 build할 수 있다. 이로써 생성자에 순서가 변경이 되는 상황이 생겨도 ..

[spring]JPQL이 뭔가요?(파라미터와 select)

JPQL(Java Persistence Query Language) > 객체 지향 SQL SQL을 추상화한 객체 지향 쿼리 언어이다. 그렇기 때문에 특정 DB SQL에 의존하지 않는다. SQL는 DB 테이블을 대상으로 쿼리를 날리지만 JPQL은 엔티티 객체를 대상으로 검색한다. JPQL은 결국 SQL으로 변환된다. List resultList = em.createQuery("select m from Member m where m.name like '%kim%'", Member.class) .getResultList(); 여기서 "select m from Member m ~~" 에서 Member는 테이블을 의미하는 것이 아니고 entity를 의미한다. Member.class는 createQuery가 반환할..

[spring] 양방향 연관관계&연관관계의 주인

객체는 참조로 연관된 객체를 찾고 테이블은 외래키로 조인을 통해 연관된 테이블을 찾는다. 양방향 연관관계 -> 팀과 멤버를 생각할 때 멤버를 보고 팀을 찾는 것과 팀을 보고 멤버를 찾는 두가지가 모두 되는 관계를 말한다. 객체 객체를 양방향으로 참조하려면 단방향 연관관계가 2개를 만들어야한다. 이것을 양방향 연관관계라고 이름 붙였다 팀 -> 멤버 멤버 -> 팀 테이블 테이블은 하나의 FK를 이용해 두 테이블이 연관관계를 관리한다. (양쪽으로 join가능) -> 연관관계가 1개 있다. 회원 팀 @OneToMany(mappedBy = "team") List members = new ArrayList(); 팀 입장에서 보면 Team이 1이고 Member가 N이므로 @OneToMany 어노테이션을 붙여준다. m..

[spring]단방향 연관관계

한 팀(TEAM)에 여러 Member가 있는 1:N관계를 가정하자. 그러면 TEAM의 ID가 FK로 Member 테이블에 들어있어야 한다. 이를 연관관계를 이용하면 좀 더 객체지향적으로 만들 수 있다. 테이블은 외래 키로 조인하여 연관된 테이블을 찾고 객체는 참조를 사용해 연관된 객체를 찾는다는 차이가 있다. @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; Member에서 Team 자체를 갖고있다. (Team의 id를 갖고있는 것이 아니라) 위 코드처럼 작성하면 Member의 team과 TEAM_ID가 연관관계 매핑이 된다. @ManyToOne 과 같은 어노테이션을 통해 매핑을 하여 이 관계가 1:N인지 N:M인지 N:1인지 알려줘야한다. Membe..

[매핑 어노테이션]@Entity, @Table, @Enumerated, @Id, @GeneratedValue, @Temporal,@Lob

1. @Entity @Entity가 붙은 클래스는 JPA가 관리하는 엔티티이다. 꼭 기본 생성자가 있어야한다. ( 파라미터X) 2. @Table 엔티티와 매핑할 테이블을 지정하는 어노테이션이다. 속성으로 name = "" 으로 매핑할 테이블 이름을 변경할 수 있다. 3. @Enumerated enum을 설정하고 싶을 때 사용한다. (EnumType.STRING)으로 설정해주어야 안전하다. ORDINAL도 있는데 (default)이는 순서를 DB에 저장하는 것으로 안전하지않다. 예시 ) @Enumerated(EnumType.STRING) private OrderStatus status; 4. @Id 해당 변수를 pk로 설정해준다. 5. @GeneratedValue 따로 값을 넣지 않아도 자동적으로 숫자가 ..

플러쉬(flush)란?

1. 플러쉬란 ? 플러쉬 : 영속성 컨텍스트의 변경 내용을 DB에 동기화 쓰기 지연 SQL 저장소에 있는 것들이 DB에 반영되는 것이다! 2. 플러쉬가 발생하면 ? 1. 변경감지 2. 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 3. 쓰기지연 SQL 저장소의 쿼리를 DB에 전송 3. Flush는 언제 발생하나요? 1. em.flush() 2. JPQL을 실행할 경우 3. 트랜잭션 커밋

[2주차]구글클라우드_배포와 재배포&깃헙 클론 후 배포(ft.패키징)

가상화 기술 : 각각 용도가 다른 3개의 물리 서버 (30%만 사용중) -> 한개의 서버를 아끼고 한개의 서버에 2개를 올린다. 앱 엔진의 장점 1. 관리가 용이하다. (오토 스케일링, 로드 밸런싱 ) 2. 확장이 용이하다. 3. 무중단 서비스 4. 장비사용 비용청구가 사용한 만큼만 과금이 된다. 1. yaml 파일 추가 App Engine 표준 환경에 앱을 배포하려면 설명자 파일을 만들어야한다. app.yaml 파일에서 를 입력해준다. DemoApplication.java에 들어가서 import를 한줄 추가해준다. import org.springframework.web.bind.annotation.*; 다시 만든 프로젝트 위치로 이동하여 위 같은 명령어를 입력하면 로컬에서 실행된다. 표시한 픽토그램을 ..