본문 바로가기

전체 글251

LDD(Logic Driven Development)??[20221111-TIL] 최근에 설계부터 누가 시키지 않은 것들을 스스로 구현해나가며 개발을 하는 포폴을 하다보니 DDD(Domain Driven Development) , TDD(Test Driven Development),BDD(Behaviour-Driven Development) 등의 개발을 자연스럽게 많이 듣게되었다. 장난스럽게 홀맨님(메가테라 대표님)께 그럼 앞에 다 가져다 붙인 개발법은 없냐고 했는데 단호하게 '네 없어요' 라고 하셨다. 최근 코딩의 신 아샬님과 트레이너 님께 피드백을 계속 받으면서 느낀 것은 사실 개발 공부를 막연히 정보를 끌어다 쓰는 느낌보다는 내가 만들고자하는 법을 명확히하고 내가 가진 자원(시간 금전 등)에 기반하여 그것으로 향하는 가장 최적 최선은 무엇인지를 생각하고 중간에 수정도 거치면서 완.. 2022. 11. 11.
CKeditor 리액트에서 테스트 코드짜기[20221110-TIL] 외부 라이브러리는 어떻게 테스트 코드를 짤까? CKeditor라는 외부 라이브러리를 사용했는데 이걸 대체 어떻게 테스트 코드를 짜나... 고민했다. 트레이너 님에게 물어보니 외부 라이브러리는 그냥 그 자체에게 맡기고 테스트 코드를 따로 작성하지 않는다고 한다. 그럼 어떻게 mocking을 해 올 수 있을까?? 컴포넌트는 결국 함수다 컴포넌트는 결국 함수기 때문에 라이브러리를 불러온 위치를 써주고 jest.fn()으로 정의 내려 주었다. import { CKEditor } from '@ckeditor/ckeditor5-react'; import ClassicEditor from '@ckeditor/ckeditor5-build-classic'; jest.mock('@ckeditor/ckeditor5-reac.. 2022. 11. 10.
@ElementCollection , 모델(엔터티)에 List, 배열 넣는 법[20221109 TIL] 다시 코드를 리팩터링 하는 중. 어제 쓴 것에 기반으로 조금 리팩토링하는데 확실히 달라진게 있는 듯? 하다. 단점은 시간이 다소 걸린다는 점. 여태까지 모델(엔터티)에 배열 넣는 법을 글을 썼는데 다시 또 바꿔쓰려고 한다. 고민 https://onulmansanda.tistory.com/202 데이터베이스에 배열 넣기?[20221031-TIL] [관계형]데이터베이스에 배열을 넣을수 있나 데이터에 배열형태로 해쉬태그를 넣으려고 했는데 이런 오류코드가 뜬다. 테이블에 배열 넣을 수 없다는 뜻인듯. 이걸 해결하는 어노테이션이 있는 onulmansanda.tistory.com 1. @ManyToOne 쓰는 법 https://onulmansanda.tistory.com/204 ManyToOne, OneToMany.. 2022. 11. 9.
백엔드 Layered Architecture 구조와 모델 설정시 유의할 점[20221108-TIL] 레이어드 아키텍쳐를 구성할 때 유의할 점 사실 제목이 적절한지나 모르겠다. 아직 아키텍쳐의 이해도 많이 부족한데 그래도 잠시나마 오늘 코딩의 신 아샬님 특강을 보고 느낀점이 있어 적어보려고 적절한 제목을 정하다보니 저렇게 되었다. 설계시 고민 점 일단 백엔드를 구성하면 크게 1. Controller 2. Service 3. Repository + Model 라는 구조를 두었다. 컨트롤러는 인터페이스 측면에서 최소한의 코드만 가지고 프론트에서 들어오는 쿼리나 파람을 처리해주는 최소의 로직과 DTO 변환하는 코드정도만 있으려고 했다. 첫번째 문제. 컨트롤러가 지저분해짐 그러나 이는 컨트롤러에서 처리해야할 서비스가 매우 간략하고 복잡도가 적을 때 가능한 것이었고 모델과 엔터티가 많아지고 서비스가 서로 교류하는.. 2022. 11. 8.
효율적으로 학습을 하자[메가테라 19주차 주간회고] 학습이란? 배우는 느낌 저번주 였던가 아무튼 며칠 간 잠도 많이 자지 않고 의무적으로 일찍와서 가장 늦게가기를 실천하고 있었는데 정말 찝찝한 기분을 떨쳐버릴 수 가 없었다. 바로 학습이 크게 되지 않는 느낌. 지난 테스트할때 이사하느라 뭐하느라 새로운 장소에 적응하느라 학습을 잘 하지 않는 기분이었는데 그 기분 비슷한 것이 들었다. 원인? 구현 중심의 코드 일단 가장 큰 원인은 코드 구현을 워낙 잘 못해왔기에 '구현'에 급급해지고 그러다보니 학습을 하고싶지만 그러기보다 이전 코드를 '참조' 하는 느낌이 많이 들었다. 참조는 인출과 정말 정반대의 말이라서 정말 학습이 되는 느낌이 없다. 그리고 무언가 기능이 구현이 되면 굉장히 찝찝하고 재현할 때 무섭지만 또 인간은 간사해서 결과물을 보고는 저건 내가 했어.. 2022. 11. 7.
개발하기전 설계하는 법[20221107-TIL] 오늘은 코딩의 신 아샬님이 직접 오셔서 코드 리뷰 겸 특강을 해주셨다. 기획 설계 모든 걸 처음하는 터라 우리 동기 코드 모두가 난해하고 파악하기 어려웠는데 특히 구조 부분이 그랬다. 문제파악 - 복잡한 구조 코드를 구현하는 것도 애먹었던 우리라 일단 구현만 하자 라는 마음가짐으로 했던 것 같은데 그러다보니 코드를 구성하는 방식이 구현을 따라가고 마치 인간의 진화과정 처럼 허리가 약간 구조로 진화된 사람처럼 불완전성이 커졌다. 처음에는 데이터베이스를 어찌 구성하지라는 고민때문에 코드가 데이터 베이스를 따라가게 되었고 이번에는 복잡한 객체를 자꾸 물고 있다보니 상하관계를 가진 구조를 가지게 되었다. 따라서 자연스럽게 테스트 코드를 짜기 어려워지게 되었다. 설계를 잘하자 위의 해결법은 일단 설계에 대한 깊은.. 2022. 11. 7.
리액트에서 CK에디터 구현하기2 (리액트 html 태그 사용 법 dangerouslySetInnerHTML) [20221106-TIL] 어제는 다름이 아니라 리액트에서 CK에디터 라이브러리를 가져와 적용하는 법을 간단하게 소개했다. 어제 백엔드 테스트는 마쳤고 이제 그걸 프론트로 가져올때 어떻게 되는지를 알아야하는데 실제로 가져와보았다. CK에디터 텍스트 리액트에 그냥 가져왔을때 화면 결과 작성할때에는 위와 같이 보이다가 가져오면 아래와 같다. 리액트는 HTMl태그를 인식하지 않고 텍스트 그자체로 가져오는데 이는 스크립팅 공격을 방지하기 위해서 라고 한다. 크로스사이트 스크립팅 공격이란? 크로스 사이트 스크립팅은 웹사이트에 악성 스크립트를 주입하는 행위를 말합니다. 해커는 사람들이 친밀하고 안전하다고 생각하는 웹사이트에 악성 스크립트를 주입하고, 악성 스크립트가 포함된 게시글을 열람한 피해자들의 쿠키는 해커에게 전송됩니다. 이를 통해 해.. 2022. 11. 6.
리액트에서 CK에디터 구현하기 1.[20221105 TIL] 게시판기능을 만들다 그냥 너무 심심한 게시판 등록글은 별로라서 에디터를 검색하다 CK 에디터가 무난하게 맘에 들었다. 근데 공식문서를 읽어보니 꽤...복잡하다... CK에디터 구현 고민 포인트 1. 어떻게 적용하나?? 아래와 같이 구현했는데 CK 에디터 공식홈페이지를 가면 Class 로 구현을 해놓아서 어떻게 적용해야하나 고민을 했었다. 또 방법도 여러가지인데다 리액트에 적용하는 방법은 달라서 잠시 혼선이 왔지만 일단 손을 움직이자 하면서 적용한 결과 아래와 같이 나왔다. id 와 type name 그리고 label 을 따로 추가해주었다. 그리고 처음에는 리액트 훅 폼으로 폼을 처리해주다가 다시 변수를 하나씩 전달해되 리덕스 구조를 지키면서 해주려니 기억이 잘 안났다.(이전 코드를 참고하면 구현은 했지만.. 2022. 11. 5.
자바 스프링 부트 컨트롤러 406 Not Acceptable 에러[20221104-TIL] .HttpMediaTypeNotAcceptableException: Could not find acceptable representation .HttpMediaTypeNotAcceptableException: Could not find acceptable representation 에러 HTTP (HyperText Transfer Protocol) 406 Not Acceptable 클라이언트 오류 응답 코드는 서버가 요청의 사전 콘텐츠 협상 헤더에 정의 된 허용 가능한 값 목록과 일치하는 응답을 생성 할 수 없으며 서버가 기본 표현을 제공하지 않음을 나타낸다고 한다. 즉 헤더랑 일치하는 값이 없다는 건데... 에러 내용 찾아봤는데 다들 MappingJackson2HttpMessageConverter 문제.. 2022. 11. 4.
Jpa repository save 는 왜 null 일까? 1[20221103 TIL] 테스트를 잘 통과하고 서버에도 프론트에도 잘나오는 이아이는 테스트 할때 마다 골치다 아니 대체 왜 저장한 것을 반환하는 값이 항상 null 인가? 그래서 일단은 verify 로 이게 호출되었는지만 테스트를 하고 있긴 하다. JPA 기본 구현체에 구현되어있는 save() 구현 @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null."); if (entityInformation.isNew(entity)) { // (1) em.persist(entity); return entity; } else { return em.merge(entity); } } (1) isNew()의 반환 타입에 따라.. 2022. 11. 3.