프로젝트를 진행하며, 이때까지 jar 파일을 로컬에서 빌드하고 scp를 이용하여 jar 파일을 배포 서버에 올리고 nohup java -jar jar파일명.jar & 명령어로 배포를 진행하였다. 하지만.. 이렇게 해서는 안된다는 것을 알고 있었기에, 이번에는 CI/CD 까지는 아니더라도 (지식이 부족해서...........) 다음과 같은 목표를 가지게 되었다. 우분투에 깃 원격저장소를 연결하고 pull 받은 후 script를 사용하여 기존에 돌아가던 jar 파일을 멈추고 pull 받은 상태의 프로젝트를 새로 빌드 후 실행시키는 것! 크게 깃 설치 및 레포 연결, 쉘 스크립트 부분으로 나눌 수 있다. 01. Ubuntu에 Git 설치 1. 깃 설치 sudo apt install git 2. 레포를 저장할 ..
01. 페치 조인(fetch join) 이란? 페치 조인은 SQL의 조인 종류와는 무관하다. JPQL에서 성능 최적화를 위해 제공하는 기능으로, 연관된 엔티티나 컬렉션의 SQL을 한 번에 함께 조회하는 기능이다. 쿼리로 내가 원하는 대로 어떤 객체 그래프를 한 번에 조회할 것을 동적인 타이밍에 정할 수 있다. join fetch 명령어를 사용하면 된다. 페치 조인 ::= [LEFT [OUTER] | INNER] JOIN FETCH 조인경로 02. 엔티티 페치 조인 Member를 가져올 때 Team도 가져오고 싶은 경우, JPQL로 select m from Member m join fetch m.team 을 작성하고 실제 나가는 SQL 쿼리문을 보면 SELECT M.*, T.* FROM MEMBER M I..
01. 경로 표현식이란? 경로 표현식이란 .(점)을 찍어 객체 그래프를 탐색하는 것이다. 3가지 경로 표현식이 존재한다. 세 가지 중 어떤 것을 사용하느냐에 따라 내부 동작이 달라지기 때문에 반드시 이해하고 사용해야 한다. 02. 경로 표현식 용어 정리 상태 필드(state field) : 단순히 값을 저장하기 위한 필드이다. 예시로는 select m.username 이 있다. 연관 필드(association field) : 연관관계를 위한 필드이다. 단일 값 연관 필드와 컬렉션 값 연관 필드로 나뉜다. 단일 값 연관 필드 : @ManyToOne, @OneToOne 에 사용하며 대상이 엔티티이다. 예시로는 join m.team t 이 있다. 컬렉션 값 연관 필드 : @OneToMany, @ManyToMa..
문자열 묶기 https://school.programmers.co.kr/learn/courses/30/lessons/181855 문제 설명 문자열 배열 strArr이 주어집니다. strArr의 원소들을 길이가 같은 문자열들끼리 그룹으로 묶었을 때 가장 개수가 많은 그룹의 크기를 return 하는 solution 함수를 완성해 주세요. 제한 사항 1 ≤ strArr의 길이 ≤ 100,000 1 ≤ strArr의 원소의 길이 ≤ 30 strArr의 원소들은 알파벳 소문자로 이루어진 문자열입니다. 입출력 예 strArr result ["a","bc","d","efg","hi"] 2 풀이 1. 정답으로 리턴할 정수형 변수 answer를 0으로 초기화한다. 2. 100001개의 정수형 배열 변수 countArr을..
지난 글에 이어서 이번에는 엔티티를 Dto로 변환하여 응답을 내려주는 것을 할 것이다. 01. 코드 작성 다음과 ordersV2 를 작성한다. @GetMapping("/api/v2/simple-orders") public List ordersV2() { List orders = orderRepository.findAllByString(new OrderSearch()); List result = orders.stream() .map(o -> new SimpleOrderDto(o)) // order를 dto로 변환함 .collect(Collectors.toList()); return result; } @Data static class SimpleOrderDto { private Long orderId; pr..
API 개발 고급 에서는 주문 + 배송정보 + 회원을 조회하는 API를 만들 것이다. 지연 로딩 때문에 발생하는 성능 문제를 해결하는 것이 목표이다. Order - Member 는 ManyToOne, Order - Delivery 는 OneToOne 이다. 여기에서는 @XToOne에 대한 성능 최적화를 위한 과정을 진행한다. Order - OrderItem은 OneToMany이며 Collection 형태로, 나중에 진행한다. 00. 컨트롤러 작성 요청을 받아 처리할 컨트롤러를 작성하자. @RestController로 Json 형태로 객체 데이터를 반환함을 명시한다. @RequiredArgsConstructor 로 final 필드인 orderRepository를 주입받는다. @RestController @..
암호 설명 현수는 영희에게 알파벳 대문자로 구성된 비밀편지를 매일 컴퓨터를 이용해 보냅니다. 비밀편지는 현수와 영희가 서로 약속한 암호로 구성되어 있습니다. 비밀편지는 알파벳 한 문자마다 # 또는 *이 일곱 개로 구성되어 있습니다. 만약 현수가 "#*****#"으로 구성된 문자를 보냈다면 영희는 현수와 약속한 규칙대로 다음과 같이 해석합니다. 1. "#*****#"를 일곱자리의 이진수로 바꿉니다. #은 이진수의 1로, *이진수의 0으로 변환합니다. 결과는 "1000001"로 변환됩니다. 2. 바뀐 2진수를 10진수화 합니다. "1000001"을 10진수화 하면 65가 됩니다. 3. 아스키 번호가 65문자로 변환합니다. 즉 아스크번호 65는 대문자 'A'입니다. 참고로 대문자들의 아스키 번호는 'A'는 6..
00. 컨트롤러 작성 요청을 받아 처리할 컨트롤러를 작성하자. @RestController로 Json 형태로 객체 데이터를 반환함을 명시한다. @RequiredArgsConstructor 로 final 필드인 memberService를 주입받는다. @RestController @RequiredArgsConstructor public class MemberApiController { private final MemberService memberService; } 01. 회원 등록 API 가장 간단한 형태의 API를 만들어 보자. MemberApiController 클래스 내에 saveMemberV1를 다음과 같이 작성하였다. @PostMapping("/api/v1/members") public Member..