전체 글

카카오테크캠퍼스/2단계

Stub을 이용해 컨트롤러 단위 테스트 하기 (Stub 주의점!)

컨트롤러 단위 테스트 4주차 과제는 컨트롤러 단위 테스트였다! 과제의 상세 설명은 아래와 같다. 컨트롤러 단위테스트를 작성한뒤 소스코드를 업로드, stub을 구현하시오. Stub이란? 과제를 구현하기 위해서는 일단 Stub에 대해 이해하고 있었어야 했는데 Stub에 대해 이해하는 것에 시간이 조금 걸렸던 것 같다. 여러 서치와 강의 자료를 통해 내가 이해한 Stub을 간단하게 말하자면 어떤 함수를 실행할 때, 그 결과값을 임의로 설정하는 것이다. 컨트롤러 테스트에서는 보낸 요청에 대해 응답이 적절한가를 검증하기 때문에 결과값이 실제 데이터인지는 중요하지 않다. Stub 적용 예제를 통해 Stub을 적용해보자. 아래는 장바구니 전체 내역 보기에 대해 진행한 테스트이다. 일단, 테스트를 하기전에 Contro..

에코노베이션 💙/TEAM.팀쿠키

DTO 클래스에 레코드 객체 적용하기

DTO란 Data Transfer Object, 말 그대로 데이터를 전송하기 위한 객체이다. 왜 DTO를 사용해야 하는가 위와 같은 사용자의 정보를 저장하는 엔티티가 있다고 생각을 해보자. 우리는 해당 엔티티를 통해 DB에 사용자의 정보를 저장하게 된다. 만약 사용자들의 정보를 조회하는 요청을 왔다고 할 때, entity를 바로 전달하게 되면 password와 같은 불필요한 정보들이 노출될 수 있다. 또한 UI 계층에서 엔티티 내의 메서드를 호출하여 Model의 값이 변경될 수도 있다. 때문에 DTO 객체를 통해 필요한 데이터만 전달하고 Model을 보호 할 수 있다. 보일러 플레이트 코드 보일러 플레이트 코드는 반복적으로 재사용되는 코드를 말한다. 보통 데이터 무결성을 위해 개발을 하다 보면 gette..

CS 👩🏻‍💻

MIME 타입 알아보기

카카오 테크 캠퍼스 2주차 실강 중 MIME 타입이라는 용어가 등장하였다. 시간관계 상 강사님은 설명을 생략하셨지만 꼭 알아야 하는 개념이니 학습하라고 말씀해주셨고 MIME 타입에 대해 정리가 필요하였다. MIME 타입 MIME 미디어 타입이란 메시지 엔티티 부분의 콘텐츠를 설명하는 표준화된 이름이다. 브라우저들은 리소스를 내려받았을 때 해야 할 기본 동작이 무엇인지를 결정하기 위해 대게 MIME 타입을 사용한다. MIME 배경 MIME 타입은 본래 멀티미디어 이메일(MIME : Multipurpose Internet Mail Extensions) 을 위해 개발되었지만, 데이터 객체의 포맷과 목적 설명이 필요한 HTTP를 비롯해 여러 다른 프로토콜에서 재사용되어 왔다. MIME은 다섯 가지의 근본 자료로..

카카오테크캠퍼스/2단계

[1주차 과제] 추가 기능 도출 및 API요청 분석

1주차 과제는 아래의 내용들로 이루어져 있었다. 요구사항 분석/API요청 및 응답 시나리오 분석 요구사항 추가 반영 및 테이블 설계도 과제를 진행하면서 강사님의 말씀처럼 최대한 러프하게 생각하고자 했다. 첫 요구사항 분석부터 디테일하게 가면 오히려 힘들어질 것 같아서 러프하게 하는 것을 추천하신 것 같다. 1주차 과제는 총 4문항으로 이루어져 있다. 💡 과제 설명 요구사항 시나리오를 보고 부족해 보이는 기능을 하나 이상 체크하여 README에 내용을 작성하시오. 추가 기능 도출 요구사항에 있는 화면에서 도출하자 전체 상품 목록 조회 전체 상품 목록 조회 라벨링별 목록 조회(무료배송 등) 개별 상품 상세 조회 상품 내용 조회 상품의 옵션 목록 조회 회원가입 이메일 중복 체크 중복 검사 이메일 형식 유효성 ..

카카오테크캠퍼스/2단계

[카테캠 2단계] API 요청해보기

카테캠 2단계 과정 이수 중 실시간 강의를 수강하며 학습한 내용들을 정리한 내용입니다. 1. DTO 객체의 필요성 프론트가 편하게, 최대한 바로 사용할 수 있게 json을 제공하는 것이 좋은데, 때문에 DTO 객체가 탄생되게 되었다. Response의 Body가 통일되지 않는다면 프톤트에서 공통된 처리를 하기가 힘들 수 있다. 또한, dto에는 해당 화면에 뿌려줄 값들을 바로 뿌릴 수 있도록 구성해야 한다. 2. JWT 로그인 시에 JWT를 사용할 수 있는데 보통 JWT는 요청 시 Authorization 헤더에 포함하여 통신하게 된다. 하지만 사실 JWT는 쉽게 Decode가 바로 가능하며, 때문에 JWT는 보안을 위한 것이 아닌, 신뢰성을 위한 것이라고 생각해도 좋다. 3. 백엔드 개발자 원칙 클라이..

카카오테크캠퍼스/2단계

[카테캠 2단계] 1일차 2단계 클론코딩 과정 보기

강의 시작 전 테스트 코드를 짜야 하는 이유 프론트(React.js)는 3000번 포트 사용하고 백엔드(Spring Rest API)는 대게 8080번(또는 80번) 포트 사용하며, 배포를 하기전 프론트의 레퍼런스 코드를 실행할 수 있도록 주소요청 테스트를 연결하여 실행하게 된다. 더 자세히 말하자면, 아래의 클론코딩 전반적인 과정에 따라 우리는 도커 기술로 제작되어 있는 카카오 크램폴린의 가상화 컴퓨터를 사용한다. 그런 후 D2Hub를 통해 빌드하고 jar파일을 kargo에 배포하게 되는데, 우리가 배포한 jar 파일 속 코드들이 배포된 환경에서 잘 돌아간다고 확신할 수 없기에 테스트 코드를 작성해야 하는 것이다. 카카오 크램폴린이란? 도커 기술로 제작되어 있으며 카테캠 2단계 기간동안 우리는 카카오 ..

카카오테크캠퍼스

[카카오테크캠퍼스] 1단계 회고와 2단계 시작하기

1단계가 끝나고 어느덧 2단계에 접어들었다. 1단계는 학기 중이라 시간이 너무 빠르게 지나가기도 했고 학업과 병행해서 진행하다보니 온전히 카테캠에 집중하지 못했던 것 같다. 때문에 2단계를 시작하는 이 시점에서 1단계를 보내주는 회고 겸, 새로운 마음으로 2단계를 맞이하기 위해 글을 작성해본다. 1단계 카카오테크캠퍼스의 1단계 커리큘럼은 크게 '패스트캠퍼스를 통한 강의 제공 + 중간중간 특강 + 주간 학습일지 작성' 으로 이루어져 있었다. 좋았던 점 사실 학습일지는 혼자서 매일 써왔고 강의도 카테캠만을 위한 강의가 아닌 패스트캠퍼스(물론 공짜로 주는 건 좋다)이기 때문에 가장 특별했던 것은 특강이었다. 특강은 3차례 정도로 깃/깃헙 특강부터 남기웅 카카오 CHO, 백엔드 개발자 최범균님까지 쉽게 들을 수..

CS 👩🏻‍💻

시퀸스 다이어그램 시작하기

2차례의 프로젝트 기간동안 설계에 집중하기보다는 그냥 돌아가는 프로그램을 작성하는 것이 중요했다. 때문에 과정이 생략/뒤바뀐 개발들을 진행했고 어떤 기능을 개발했는지를 한눈에 파악하기에 어려웠고, 과연 효율적인 개발 방식이었을지에 대해 고민하였다. 그러다 설계의 중요성에 대해 깨달았고 그중에서도 시퀸스 다이어그램을 적극 활용하기로 했다. 갑자기 시퀸스 다이어그램? 내가 활동하는 개발 동아리인 에코노베이션에서는 매주 주간발표를 통해 프로젝트 관련 내용들을 공유하는 시간을 가진다. 어떤 점에 대해 공유를 해야한다! 라는 틀이 전혀 없긴 하지만, 대부분은 프로젝트 과정 중 겪은 트러블 슈팅 또는 개발 과정 등에 대해 공유를 한다. 이번에 다른 교외 대외활동으로 오랫동안 쉬시다가 활동을 다시 시작하신 분이 새로..

Spring 🟢

[Intellij] Cause: error: invalid source release: 16 해결하기

프로젝트 클론 후 실행을 하니 Cause: error: invalid source release: 16 오류가 발생하였다. 1차 시도 sourceCompatibility = '16' build.gradle에서 위의 source 버전을 11로 변경했다. 결과는? 클론한 프로젝트에 Record 클래스가 포함되어 있었다^_^... Record 클래스는 자바 14에서 추가되었기 때문에 컴파일 오류가 떴다ㅎ 고로 16이나 그 이상은 유지하며 오류를 해결해야 했다. 2차 시도 구글링을 통해 Project Structure에서 sdk를 16버전 설치 후에 변경, Modules → Lenguage level도 16으로 변경 결과는2 ? 여전히 안되었다. 똑같이 Cause: error: invalid source rel..

JAVA 🎻

[JAVA] Jsoup을 이용한 크롤링

방법 1. Jsoup의존성 추가 gradle에서는 아래와 같은 의존성을 추가해주면 된다. // jsoup HTML parser library @ implementation 'org.jsoup:jsoup:1.15.3' 2. 크롤링할 페이지의 url 등록 Document docs = Jsoup.connect("").get(); 3. 크롤링할 css 요소의 쿼리문 복사 제가 크롤링할 요소는 제목, 카테고리, 본문 url이므로 사진의 개발자 툴에서 해당 요소들이 있는 css 쿼리를 복사한다 각 요소가 속한 태그의 class = “샬라샬라” ← 이 부분을 작성하면 됨! //공지사항 제목 Elements titles = docs.select("a.tbl_title"); //공지사항 카테고리 Elements cate..

minl741
홀리몰리 개발로그