본문 바로가기
반응형

분류 전체보기171

[OpenRoadmaps] 4. 테스트 환경 구성 및 테스트 항목 Intro 클라이언트 기능을 구현했으니 테스트코드를 작성해야 한다. Entity, DTO, Repository, Service, Controller 항목을 테스트했으며, 각 항목별 사용한 기술은 아래와 같다. 공통: JUnit5, AssertJ Entity / DTO: - RepositoryTest: DataJpaTest ServiceTest: Mockito ControllerTest: RestAssured 테스트 항목 별로 무엇을, 어떻게 테스트했는지 정리해보도록 하겠다. Entity JUnit5의 jupiter보다 더 직관적인 테스트코드를 작성하게 해주는 AssertJ를 사용했다. Entity 테스트코드에서 테스트한 항목은 다음과 같다. 정적 팩토리 메서드 연관관계 편의 메서드 정적 팩토리 메서드 테.. 2023. 1. 5.
[Docker] 도커 귀신 컨테이너 문제 해결하기 도커 귀신 컨테이너 문제 해결하기 테스트용 PC에 Docker를 설치하고 깃랩, 레지스트리를 사용해보던 중 해괴망측한 일이 발생했다. 분명히 도커 서비스도 실행중이고, 깃랩도 정상적으로 작동되고 있는데, 실행중인 컨테이너 목록에는 안뜨는 말도 안되는 상황이 벌어졌다. 목록에 안 뜰 뿐만 아니라, 컨테이너 시작, 중지, 삭제도 마음대로 할 수 없고, 심지어 설치된 이미지들도 전부 사라졌다. 해결방법 기나긴 삽질 끝에 Docker 패키지가 2개나 깔려있어서 그랬다는 사실을 알게 됐다. Ubuntu Server OS 설치 시 기본 프로그램으로 docker를 추가했는데, 이번에 snap으로 도커 패키지를 하나 더 추가해버려서 충돌이 난거였다. apt-get과 snap 중 비교적 나중에 설치된 snap 버전 do.. 2022. 12. 22.
[Typescript] Object를 URL 파라미터로 변환하기 Object를 URL 파라미터로 변환하기 아래와 같은 검색용 Interface를 만들었다고 가정하자. interface RoadmapSearch { client?: number; title?: string; official?: boolean; order?: TRoadmapOrder; page: number; } URLSearchParams를 사용하면 RoadmapSearch 타입의 Object를 URL 파라미터 문자열로 바꿀 수 있다. const query: RoadmapSearch = { client: 1, title: test, official: true, order: RoadmapOrder.LATEST, page: 1, }; const param = new URLSearchParams(query);.. 2022. 12. 22.
[Docker] server gave HTTP response to HTTPS client 에러 날 때 Intro 로컬 서버에 CI/CD를 위해 Docker Registry를 구성하고 이미지를 push 하려는데, 아래와 같은 에러가 발생했다. C:\Users\Administrator>docker push 192.168.0.2:5000/openroadmaps-backend Using default tag: latest The push refers to repository [192.168.0.2:5000/openroadmaps-backend] Get "https://192.165.100.2:5000/v2/": http: server gave HTTP response to HTTPS client 인터넷에 찾아보니 클라이언트 보안 설정 문제로 docker 폴더의 daemon.json 파일을 수정하라고 하는데, U.. 2022. 12. 21.
[NPM] npm build 이후 serve 시 PSSecurityException 뜰 때 npm build 이후 serve 시 PSSecurityException 뜰 때 NodeJS 환경에서 프로젝트를 빌드하면 serve -s build로 배포할 수 있다는 안내가 나오는데, 이 명령어를 따라 치면 아래와 같은 에러를 볼 수 있다. PS D:\workspace\Projects\OpenRoadmaps\frontend> serve -s build serve : 이 시스템에서 스크립트를 실행할 수 없으므로 C:\Users\AJW\AppData\Roaming\npm\serve.ps1 파일을 로드할 수 없습니다. 자세한 내용은 about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID=135170)를 참조하십시오. 위치 줄:1 문자:1 + ser.. 2022. 12. 2.
[비교] DTO Class vs Record Intro 기존에 Java 11만 쓰다가 이번 프로젝트에서 Java 17을 처음 써보는데, 클래스 생성 중 Record라는 메뉴가 생겨서 찾아보니 DTO로 쓰기 딱이라는 생각이 들었다. Record는 Java 16에서 정식 출시된 새 유형의 클래스로, 불변 객체를 생성할 때 사용한다. java.lang.Record를 상속받는다고 한다. 기존에 사용하던 Class 방식에 Record으로 변경했을 때의 장단점을 비교해보자. Record 특징 1. 보일러 플레이트 코드 제거 다양한 함수를 기본적으로 제공해주기 때문에 보일러 플레이트 코드가 많이 빠진다. 예를 들어 Class를 썼을 때 아래와 같이 선언된 코드가, public class TestClassDto { private final Long id; pri.. 2022. 11. 30.
[OpenRoadmaps] 3. 이메일 및 OAuth2 로그인 구현 Intro 사용자가 회원가입 및 로그인하는 방법으로 이메일 / OAuth2 두가지가 있다. 위 기능을 구현하며 중요했던 부분들을 정리해보자. 이메일 로그인 Frontend 입력값 검증 useForm Hook을 사용하여 입력값을 검증했다. regex 형식으로 검증하며, 패턴에 일치하지 않을 시 input 아래에 에러 메시지가 뜨도록 구현했다. 이메일 로그인 요청 API 세션으로 사용자를 인증하기 때문에 로그인 시 쿠키를 받고, 이후 요청마다 해당 쿠키를 전송해야 한다. 쿠키와 함께 요청하기 위해 withCredentials를 true로 설정해야 하는데, 모든 요청에 해당 속성을 넣는건 번거로우니 true로 설정되어있는 axiosInstance를 만들었다. import axios from "axios"; c.. 2022. 11. 28.
[OpenRoadmaps] 2. 프로젝트 구조 설계 및 환경 설정 Backend Spring Boot 다른 프레임워크들도 있지만 그동안 Spring을 공부해왔고, 시간이 별로 없기 때문에 가장 익숙한 프레임워크로 선택했다. 프로젝트는 Intellij에서 제공해주는 제너레이터를 통해 생성했다. Gradle 설정은 다음과 같다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' // Spring Data JPA implementation 'org.springframework.boot:spring-boot-starter-data-redis' // Redis implementation 'org.springframework.boot:spring-boot-starter-oaut.. 2022. 11. 28.
[OpenRoadmaps] 1. 프로젝트 시작 Intro 드디어 마지막 학기다. 그동안 공부한 지식들로 졸업작품을 만들어야 한다. 사실 졸업작품 주제로 미리 생각해둔게 있었는데, 한 줄로 정리하면 다음과 같다. 자신만의 로드맵을 만들고, 다른 사람이 만든 로드맵을 따라 공부할 수 있는 웹사이트 프로젝트 이름은 OpenTutorials.org 에서 따왔고, OpenRoadmaps.xxx 도메인으로 배포도 해볼 예정이다. 백엔드는 미리 공부해둔게 있어서 큰 걱정이 없지만, 프론트엔드 개발에 시간이 꽤나 들어갈 것 같다. 프로젝트 기능 회원가입 / 로그인 Email / Password 로그인 OAuth2 (Google / Github) 로그인 로드맵 로드맵 보기 로드맵 항목과 연결선으로 구성된 트리 구조 (최대 1개의 부모 항목을 가질 수 있음) 로그인된.. 2022. 11. 27.
반응형