전체 글

· Rust/Docs
속도와 안정성을 중시하는 언어, Rust를 학습하고자 합니다. OS는 MAC(ARM), 개발 환경은 Visual Studio Code 에디터로 구축하고, Rust 설치부터 시작합니다. Rust 설치 우선 Rust를 설치합니다. $ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh Rust 프로젝트마다 이처럼 환경 변수를 초기화하는 것이 부담스럽기 때문에, source "$HOME/.cargo/env" 환경변수를 자체적으로 등록하겠습니다. # ~/.zshrc export PATH="$HOME/.cargo/bin:$PATH" cargo cargo라는 개념이 등장합니다. cargo는 Rust의 패키지 매니저 및 빌드 도구입니다. cargo를 통해 ..
1. QUIC 프로토콜이란? Quick UDP Internet Connections로, 지연 시간이 적은 인터넷 전송 프로토콜. 게임, 스트리밍 미디어, VoIP 서비스에 자주 사용 신뢰할 수 없고, 비연결성 프로토콜인 UDP를 왜 사용했을까? 2. 특징 1) 전송 속도 향상 QUIC은 TCP의 지연 시간을 줄이기 위해 등장했다. TCP에서는 연결 설정을 위해 수행하는 3-way handshake 과정과 암호화 통신ㅇ츨 위해 거치는 ClientHello, ServerHello, Sertificate 등등의 과정을 생략하였기 때문에 Connection을 위한 속도 지연을 획기적으로 줄일 수 있다. UDP 프로토콜을 사용하기 때문에 연결 설정하는데 1개의 패킷만이 필요하다. (RTT 0) 또한 QUIC는 6..
BoB 12기 프로젝트에서의 User Management를 위한 1차 Web-WAS / DB에 대한 기능 요구사항입니다. # 1 Spring ㅣ User Entity, Controller, Repository, Service 구현 # 2 Node_Database, Node_Table, Node_Testdata를 생성하는 sql 파일 구현 # 3 Spring + JPA + MySQL 연동 # 4 Spring Dockerfile 작성 및 docker hub push # 5 MySQL docker-compose.yml 파일 작성 및 최종 연동 테스트 수행 # 6 hostname과 ip 주소를 추출 후 Database에 넣는 Bash 스크립트 개발 # 7 각 프로세스에 대한 Command 정리 및 윈도우 환경..
API도 Request와 Response로 데이터가 이동하기 때문에 Controller를 정의한다. 일반적으로 @Controller가 아닌 @RestController 어노테이션을 사용하는데, @RestController 는 @Controller에 @ResponseBody가 추가된 것으로 Json 형태로 객체 데이터를 반환할 수 있다. @RestController @RequiredArgsConstructor public class MemberApiController { ... } 1. Entity를 파라미터로 처리하지 않기(feat. 회원 생성) 하단의 코드는 회원을 추가하는 두 가지 방식이다. 첫 번째 방식은 Member Entity를 인자로 받아서 처리하고 있고, 두 번째 방식은 CreateMembe..
1. "준영속 엔티티"란? 데이터베이스에 식별자가 정확하게 있는 상태의 엔티티를 준영속 상태의 객체로, Persistence Context가 더이상 관리하지 않는 엔티티이다. Book 객체는 이미 DB에 한번 저장되어서 식별자가 존재한다. 이렇게 임의로 만들어낸 Entity도 기존 식별자(Id)를 갖고 있으면 준영속 엔티티로 볼 수 있다. // getId()로 꺼내온 book Book book = new Book(); book.setId(form.getId()); book.setName(form.getName()); ... 아래 Order Entity의 cancel 로직에서 OrderStatus를 변경하면 JPA가 관리하기 때문에 "변경 감지"를 통해 자동으로 반영된다. (굳이 orderRepositor..
Controller를 정의할 차례이다. 우선 HomeController를 작성하고, "/"의 URI에 해당하는 html을 정의한다. home.html에서는 Thymeleaf를 사용한다. @Controller @Slf4j public class HomeController { // Logger log = LoggerFactory.getLogger(getClass()); -> @Slf4j @RequestMapping("/") public String home() { log.info("home controller"); return "home"; } } # th:replace 렌더링 될 때 fragments/header, bodyHeader, footer로 대체하는 코드이다. 1. Member 등록 회원 등록을 ..
1. 주문 Entity와 도메인 모델 패턴 다음 패턴은 OrderService에서 정의되어야 할 여러 로직들을 Entity에서 정의하는 도메인 모델 패턴의 코드이다. 주문 생성, 취소, 조회를 담당하는 코드를 작성하였다. 1) @NoArgsConstructor(access = AccessLevel.PROTECTED) 앞서 설명하였듯 도메인 모델 패턴의 코드에서는 Entity에서 비즈니스 로직을 정의하고, Service에서는 이를 호출하여 기능을 구현하는 것이다. 그렇다면 이전 방법처럼 new를 통해 객체를 생성하고 값을 주입하는 방법은 사용할 수 없을까? // 도메인 모델 패턴 OrderItem orderItem = OrderItem.createOrderItem(item, item.getPrice(), ..
1. 상품 Entity 개발 1) 도메인 주도 설계(DDD) 지향 비즈니스 로직 추가 도메인 안에서 해결할 수 있는 비즈니스 로직은 최대한 도메인 내에서 정의하는 것이 바람직하다. @Setter로 외부에서 값을 강제로 주입하는 것은 오히려 객체 지향적이지 못한 개발이다. 이에 앞서 개발한 Item Entity 내에서 stockQuantity의 증가/감소 비즈니스 로직을 구현하고자 한다. 다른 Entity에 정의한 프로퍼티를 인자로 받는 것이 아닌 stockQuantity만으로 처리할 수 있으므로 Entity 내에서 정의할 수 있다. @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @Getter @Setter public abstract cla..
1. 단위 테스트 환경 설정 1) Junit4 @RunWith(SpringRunner.class), @SpringBootTest Service Class에서 [cmd + Shift + T]를 통해 테스트 코드를 생성할 수 있다.(Junit4) 이때 단위 테스트를 정의하는 클래스에 @RunWith(SpringRunner.class)와 @SpringBootTest 어노테이션 함께 추가하는데 왜 그럴까? @RunWith 어노테이션은 테스트 실행방법을 확장할 때 사용하는 어노테이션으로, 만약 @SpringBootTest만 사용하면 application context를 전부 로딩해서 자칫 잘못하면 무거운 프로젝트로서의 역할을 할 수 있다. 하지만 Junit4에서 지원하는 @RunWith(SpringRunner.c..
1. 회원 Repository 개발 @Repository public class MemberRepository { // EntityManager를 주입할 수 있다. @PersistenceContext private EntityManager em; private void save(Member member) { em.persist(member); } // 조회 - id private Member findOne(Long id) { return em.find(Member.class, id); } // 전체 조회 private List findAll() { // JPQL(Entity를 대상으로 Query) return em.createQuery("select m from Member m", Member.class..
Younngjun
오늘의 공부